diff options
388 files changed, 18884 insertions, 13373 deletions
@@ -1,3 +1,117 @@ +Hubzilla 3.0 (????-??-??) + - Don't zidify all permalinks, only zot permalinks + - Make remote homelink link to the home host and not to the home channel + - Auto promote beginner (techlevel 0) accounts to level 1 after they show signs of active participation. + - Go back to including the photo thumbnail data in the export file. + - Improvements to file import/export + - Default value for xlink_rating_text + - Implement IMoveTarget and recursive file/directory move/rename - github issue #680 + - Synchronise an attach_move operation to clones + - Provide a themed page with an error notification on errors instead of an obtuse XML error structure in mod cloud + - Disallow backslashes in wiki and wiki-page names + - We only require one update module. The rest are superfluous. + - Render installable elements as buttons instead of links + - Implement chunked uploads for photos page + - Remove warning for large files on cloud upload + - Add a filter for notification to show new posts only + - Implement chunked uploads for cloud + - Use httpsig auth for getfile + - Load the profile images in the custom acl selector only if we actually need them + - Rework liveUpdate() and notificationsUpdate() (aka ping) to first do the liveUpdate and when this is done only do the ping once. + - Don't include invisible "update activities" in category widget + - Default profile assign + - Provide system config option for minimum registration age. + - Remove deprecated $a argument from advanced_profile() + - Change to bbcode calling parameters + - Extra checking of server headers in upload functions + - Provide a handler for chunked uploads in mod file_upload + - Optional divider between item header and body + - Allow toggle to SMBC scaling mode. + - Add thumbnail hook + - Implement SVG thumbnails and expose security setting + - Implement video thumbnail generator + - Implement pdf thumbnails + - Implement thumbnail generator for epubs + - Make browser history buttons work with ajax calls in mod display and hq + - Implement tile view for mod cloud (read only) + - Add mp3 audio thumbnail generator + - Set display_path for photo_upload from the DAV File interface + - Provide a generalised interface for thumbnail generators to support various content types + - Add ID3Parser library. + - Text thumbnails in cloud tile mode + - Revisit media breakpoints - do not switch to mobile view to early. + - Add French to help pages language dropdown selector + - Inroduce the HQ module - an alternative landing page for hubzilla + - Strip author name from notify messages in notifications - github issue #911 + - Remove column item.diaspora_meta + - Provide ability to pin apps to navbar from mod apps + - Add private forums to forum widget + - Move notifications style to widgets.css + - Sort out a few more large image upload issues + - Move notifications full-screen handling to notifications widget + - Move mailhost settings from plugin to core + - Sort combined private mail conversations by latest updated conversation instead of created parent + - Filter atokens on acl search + - Allow a site to block (public) the directory separately from other resources. + - Improve removed_channel final cleanup - github issue #386 + - Cleanup of upload_to_comments( + - Dedicate the first click to slideup the cover again but make sure the nav buttons remain functional + - Set os_syspath in DAV file put operation so that photos will scale correctly. + - Unit tests for Zotlabs\Access classes + - Bring back tabindex to submit comments + - attach.php minor cleanup and doc + - Allow cloud filenames to include ampersands without messing up auth tokens (zid, owt, and zat, and the constant placeholder 'f=') + - Provide short localised summary for likes that will end up in displayed notifications + - Improving Doxygen documentation. + - Update item_normal() to not include ACTIVITY_OBJ_FILE obj_type + - Sort out issues with pubstream item interactions + - Don't perform zot_refresh on dead sites unless $force is set + - Do not send message_list responses to dead sites (this delivery method bypassed the notifier) + - Support for netselect query + - Add another delivery control parameter (queue threshold) + - Add some documentation about shareable widgets + - Allow plugin class widgets + - Some more work on unit tests + - Encrypt the owa token + - Bring back the markdown post feature + - We call Theme:url() statically, make it also static. + - Table structure for pseudo or proxy channels (pchan) + + Bugfixes + - Fix issue with long filenames in mod cloud + - Fix misc. issues with new 'insert photo from photo album' github issue #475 + - Fix regression in channel sources delivery + - Fix loading of theme-specific widgets + - Fix unable to add wiki pages with spaces + - Fix mod display and others that require a non-zero profile_uid for updates + - Fix various PHP 7.2 issues + - Fix typo in HTTPSig + - Fix pagetitle lost importing a pdl element from conversation + - Fix js warning - getelementbyid (id doesn't exist) + - Fix some pubstream on/off weirdness + - Fix default addressbook has no name - github issue #921 + - Fix double html ids in caldav widget if more than one sharee + - Fix regression in cdav calendar widget + - Fix sync packet not generated when deleting a file using the web browser interface + - Fix album cover thumb generator + - Fix like-button for images - github issue #826 + - Fix typo - github issue #910 + - Fix issue with group_rmv() + - Fix php warnings on photo delete + - Fix some conflicts between private tags and forum tags + - Fix some schema issues + - Fix wiki pages not updating after creating new page + - Fix a PHP warning in Permissions::FilledPerms() + - Fix unicode characters in urls tripping up url regexes - github issue #901 + - Fix second half of github issue #893 + - Fix common connections on suggestion page showing wildly different results than remote profile, and is consistently off by one + - Fix cloud redirects with owt tokens + - Fix issues with diaspora xchans + - Fix memory overflow trying to delete a connection with a very high noise to signal ratio + - Fix sql error in page module + - Fix unstar + + Hubzilla 2.8.1 (2017-11-11) - Rename channel app events to calendar and add nav_set_selected() to /cal - Load notifications links to /display via ajax if we are already in /display diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php index 073b67b92..1e46a6353 100644 --- a/Zotlabs/Module/Hq.php +++ b/Zotlabs/Module/Hq.php @@ -98,6 +98,8 @@ class Hq extends \Zotlabs\Web\Controller { $sys = get_sys_channel(); $sql_extra = item_permissions_sql($sys['channel_id']); + $sys_item = false; + } if(! $update) { @@ -215,6 +217,8 @@ class Hq extends \Zotlabs\Web\Controller { } if(!$r) { + $sys_item = true; + $r = q("SELECT item.id AS item_id FROM item LEFT JOIN abook ON item.author_xchan = abook.abook_xchan WHERE mid = '%s' AND item.uid = %d $item_normal @@ -243,6 +247,8 @@ class Hq extends \Zotlabs\Web\Controller { } if(!$r) { + $sys_item = true; + $r = q("SELECT item.parent AS item_id FROM item LEFT JOIN abook ON item.author_xchan = abook.abook_xchan WHERE mid = '%s' AND item.uid = %d $item_normal_update $simple_update @@ -268,7 +274,7 @@ class Hq extends \Zotlabs\Web\Controller { dbesc($parents_str) ); - xchan_query($items,true,local_channel()); + xchan_query($items,true,(($sys_item) ? local_channel() : 0)); $items = fetch_post_tags($items,true); $items = conv_sort($items,'created'); } diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 37a3a3a85..6365230f8 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -156,7 +156,7 @@ class Item extends \Zotlabs\Web\Controller { if(! x($_REQUEST,'type')) $_REQUEST['type'] = 'net-comment'; - if($obj_type == ACTIVITY_OBJ_POST) + if($obj_type == ACTIVITY_OBJ_NOTE) $obj_type = ACTIVITY_OBJ_COMMENT; if($parent) { diff --git a/Zotlabs/Module/Ping.php b/Zotlabs/Module/Ping.php index c1bce0d51..a3f6cdfec 100644 --- a/Zotlabs/Module/Ping.php +++ b/Zotlabs/Module/Ping.php @@ -279,8 +279,8 @@ class Ping extends \Zotlabs\Web\Controller { 'photo' => $tt['photo'], 'when' => relative_date($tt['created']), 'hclass' => (($tt['seen']) ? 'notify-seen' : 'notify-unseen'), - 'b64mid' => $b64mid, - 'notify_id' => (($tt['otype'] == 'item') ? $tt['id'] : ''), + 'b64mid' => (($tt['otype'] == 'item') ? $b64mid : 'undefined'), + 'notify_id' => (($tt['otype'] == 'item') ? $tt['id'] : 'undefined'), 'message' => $message ); } diff --git a/Zotlabs/Render/SmartyInterface.php b/Zotlabs/Render/SmartyInterface.php index 0e3a47c2f..9c9a501c0 100755 --- a/Zotlabs/Render/SmartyInterface.php +++ b/Zotlabs/Render/SmartyInterface.php @@ -2,8 +2,6 @@ namespace Zotlabs\Render; -require_once('library/Smarty/libs/Smarty.class.php'); - class SmartyInterface extends \Smarty { public $filename; diff --git a/composer.json b/composer.json index d35548f94..f89fb15b2 100644 --- a/composer.json +++ b/composer.json @@ -36,15 +36,17 @@ "league/html-to-markdown": "^4.4", "pear/text_languagedetect": "^1.0", "commerceguys/intl": "~0.7", - "lukasreschke/id3parser": "^0.0.1" + "lukasreschke/id3parser": "^0.0.1", + "smarty/smarty": "~3.1" }, "require-dev" : { "php" : ">=7.0", - "phpunit/phpunit" : "^6.1", + "phpunit/phpunit" : "~6.4.4", "behat/behat" : "@stable", "behat/mink-extension": "@stable", "behat/mink-goutte-driver": "@stable", - "php-mock/php-mock-phpunit": "^2.0" + "php-mock/php-mock-phpunit": "^2.0", + "phpunit/dbunit": "^3.0" }, "autoload" : { "psr-4" : { diff --git a/composer.lock b/composer.lock index bcf6b41b4..ea76e9d6e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "9c45792f04ea3e30f312f5eef0bdad86", + "content-hash": "73ca170baa6ded94a989b8a1066e6a98", "packages": [ { "name": "bshaffer/oauth2-server-php", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/bshaffer/oauth2-server-php.git", - "reference": "8856aed1a98d6da596ae3f9b8095b5c7a1581697" + "reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/8856aed1a98d6da596ae3f9b8095b5c7a1581697", - "reference": "8856aed1a98d6da596ae3f9b8095b5c7a1581697", + "url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/d158878425392fe5a0cc34f15dbaf46315ae0ed9", + "reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9", "shasum": "" }, "require": { @@ -27,12 +27,14 @@ "aws/aws-sdk-php": "~2.8", "firebase/php-jwt": "~2.2", "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^4.0", "predis/predis": "dev-master", "thobbs/phpcassa": "dev-master" }, "suggest": { "aws/aws-sdk-php": "~2.8 is required to use DynamoDB storage", - "firebase/php-jwt": "~1.1 is required to use MondoDB storage", + "firebase/php-jwt": "~2.2 is required to use JWT features", + "mongodb/mongodb": "^1.1 is required to use MongoDB storage", "predis/predis": "Required to use Redis storage", "thobbs/phpcassa": "Required to use Cassandra storage" }, @@ -60,7 +62,7 @@ "oauth", "oauth2" ], - "time": "2017-01-06T23:20:00+00:00" + "time": "2017-11-15T01:41:02+00:00" }, { "name": "commerceguys/intl", @@ -155,16 +157,16 @@ }, { "name": "league/html-to-markdown", - "version": "4.4.1", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "82ea375b5b2b1da1da222644c0565c695bf88186" + "reference": "9022e648bc40e44cb3b18438d97ed8715ecbc49b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/82ea375b5b2b1da1da222644c0565c695bf88186", - "reference": "82ea375b5b2b1da1da222644c0565c695bf88186", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/9022e648bc40e44cb3b18438d97ed8715ecbc49b", + "reference": "9022e648bc40e44cb3b18438d97ed8715ecbc49b", "shasum": "" }, "require": { @@ -183,7 +185,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.5-dev" + "dev-master": "4.7-dev" } }, "autoload": { @@ -215,7 +217,7 @@ "html", "markdown" ], - "time": "2017-03-16T00:45:59+00:00" + "time": "2017-10-24T02:45:05+00:00" }, { "name": "lukasreschke/id3parser", @@ -643,16 +645,16 @@ }, { "name": "sabre/vobject", - "version": "4.1.2", + "version": "4.1.3", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "d0fde2fafa2a3dad1f559c2d1c2591d4fd75ae3c" + "reference": "df9916813d1d83e4f761c4cba13361ee74196fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d0fde2fafa2a3dad1f559c2d1c2591d4fd75ae3c", - "reference": "d0fde2fafa2a3dad1f559c2d1c2591d4fd75ae3c", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/df9916813d1d83e4f761c4cba13361ee74196fac", + "reference": "df9916813d1d83e4f761c4cba13361ee74196fac", "shasum": "" }, "require": { @@ -661,7 +663,7 @@ "sabre/xml": ">=1.5 <3.0" }, "require-dev": { - "phpunit/phpunit": "*", + "phpunit/phpunit": "> 4.8, <6.0.0", "sabre/cs": "^1.0.0" }, "suggest": { @@ -736,7 +738,7 @@ "xCal", "xCard" ], - "time": "2016-12-06T04:14:09+00:00" + "time": "2017-10-18T08:29:40+00:00" }, { "name": "sabre/xml", @@ -803,16 +805,16 @@ }, { "name": "simplepie/simplepie", - "version": "1.5", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab" + "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/5de5551953f95feef12cf355a7a26a70f94aa3ab", - "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", + "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", "shasum": "" }, "require": { @@ -859,25 +861,78 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/1.5", + "source": "https://github.com/simplepie/simplepie/tree/1.5.1", "issues": "https://github.com/simplepie/simplepie/issues" }, - "time": "2017-04-17T07:29:31+00:00" + "time": "2017-11-12T02:03:34+00:00" + }, + { + "name": "smarty/smarty", + "version": "v3.1.31", + "source": { + "type": "git", + "url": "https://github.com/smarty-php/smarty.git", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "files": [ + "libs/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Monte Ohrt", + "email": "monte@ohrt.com" + }, + { + "name": "Uwe Tews", + "email": "uwe.tews@googlemail.com" + }, + { + "name": "Rodney Rehm", + "email": "rodney.rehm@medialize.de" + } + ], + "description": "Smarty - the compiling PHP template engine", + "homepage": "http://www.smarty.net", + "keywords": [ + "templating" + ], + "time": "2016-12-14T21:57:25+00:00" } ], "packages-dev": [ { "name": "behat/behat", - "version": "v3.4.1", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "cb51d4b0b11ea6d3897f3589a871a63a33632692" + "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/cb51d4b0b11ea6d3897f3589a871a63a33632692", - "reference": "cb51d4b0b11ea6d3897f3589a871a63a33632692", + "url": "https://api.github.com/repos/Behat/Behat/zipball/d60b161bff1b95ec4bb80bb8cb210ccf890314c2", + "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2", "shasum": "" }, "require": { @@ -887,18 +942,18 @@ "ext-mbstring": "*", "php": ">=5.3.3", "psr/container": "^1.0", - "symfony/class-loader": "~2.1||~3.0", - "symfony/config": "~2.3||~3.0", - "symfony/console": "~2.5||~3.0", - "symfony/dependency-injection": "~2.1||~3.0", - "symfony/event-dispatcher": "~2.1||~3.0", - "symfony/translation": "~2.3||~3.0", - "symfony/yaml": "~2.1||~3.0" + "symfony/class-loader": "~2.1||~3.0||~4.0", + "symfony/config": "~2.3||~3.0||~4.0", + "symfony/console": "~2.5||~3.0||~4.0", + "symfony/dependency-injection": "~2.1||~3.0||~4.0", + "symfony/event-dispatcher": "~2.1||~3.0||~4.0", + "symfony/translation": "~2.3||~3.0||~4.0", + "symfony/yaml": "~2.1||~3.0||~4.0" }, "require-dev": { "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "~4.5", - "symfony/process": "~2.5|~3.0" + "phpunit/phpunit": "^4.8.36|^6.3", + "symfony/process": "~2.5|~3.0|~4.0" }, "suggest": { "behat/mink-extension": "for integration with Mink testing framework", @@ -947,7 +1002,7 @@ "symfony", "testing" ], - "time": "2017-09-18T11:10:28+00:00" + "time": "2017-11-27T10:37:56+00:00" }, { "name": "behat/gherkin", @@ -1124,27 +1179,27 @@ }, { "name": "behat/mink-extension", - "version": "v2.2", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/Behat/MinkExtension.git", - "reference": "5b4bda64ff456104564317e212c823e45cad9d59" + "reference": "badc565b7a1d05c4a4bf49c789045bcf7af6c6de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/MinkExtension/zipball/5b4bda64ff456104564317e212c823e45cad9d59", - "reference": "5b4bda64ff456104564317e212c823e45cad9d59", + "url": "https://api.github.com/repos/Behat/MinkExtension/zipball/badc565b7a1d05c4a4bf49c789045bcf7af6c6de", + "reference": "badc565b7a1d05c4a4bf49c789045bcf7af6c6de", "shasum": "" }, "require": { - "behat/behat": "~3.0,>=3.0.5", - "behat/mink": "~1.5", + "behat/behat": "^3.0.5", + "behat/mink": "^1.5", "php": ">=5.3.2", - "symfony/config": "~2.2|~3.0" + "symfony/config": "^2.7|^3.0|^4.0" }, "require-dev": { - "behat/mink-goutte-driver": "~1.1", - "phpspec/phpspec": "~2.0" + "behat/mink-goutte-driver": "^1.1", + "phpspec/phpspec": "^2.0" }, "type": "behat-extension", "extra": { @@ -1179,7 +1234,7 @@ "test", "web" ], - "time": "2016-02-15T07:55:18+00:00" + "time": "2017-11-24T19:30:49+00:00" }, { "name": "behat/mink-goutte-driver", @@ -1367,24 +1422,27 @@ }, { "name": "fabpot/goutte", - "version": "v3.2.1", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/Goutte.git", - "reference": "db5c28f4a010b4161d507d5304e28a7ebf211638" + "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/db5c28f4a010b4161d507d5304e28a7ebf211638", - "reference": "db5c28f4a010b4161d507d5304e28a7ebf211638", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/395f61d7c2e15a813839769553a4de16fa3b3c96", + "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^6.0", "php": ">=5.5.0", - "symfony/browser-kit": "~2.1|~3.0", - "symfony/css-selector": "~2.1|~3.0", - "symfony/dom-crawler": "~2.1|~3.0" + "symfony/browser-kit": "~2.1|~3.0|~4.0", + "symfony/css-selector": "~2.1|~3.0|~4.0", + "symfony/dom-crawler": "~2.1|~3.0|~4.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.3 || ^4" }, "type": "application", "extra": { @@ -1395,7 +1453,10 @@ "autoload": { "psr-4": { "Goutte\\": "Goutte" - } + }, + "exclude-from-classmap": [ + "Goutte/Tests" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1412,7 +1473,7 @@ "keywords": [ "scraper" ], - "time": "2017-01-03T13:21:43+00:00" + "time": "2017-11-19T08:45:40+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1858,22 +1919,22 @@ }, { "name": "php-mock/php-mock-phpunit", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/php-mock/php-mock-phpunit.git", - "reference": "173781abdc632c59200253e12e2b991ae6a4574f" + "reference": "b42fc41ecb7538564067527f6c30b8854f149d32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/173781abdc632c59200253e12e2b991ae6a4574f", - "reference": "173781abdc632c59200253e12e2b991ae6a4574f", + "url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/b42fc41ecb7538564067527f6c30b8854f149d32", + "reference": "b42fc41ecb7538564067527f6c30b8854f149d32", "shasum": "" }, "require": { "php": ">=7", "php-mock/php-mock-integration": "^2", - "phpunit/phpunit": "^6" + "phpunit/phpunit": "^6 <6.5" }, "type": "library", "autoload": { @@ -1905,20 +1966,20 @@ "test", "test double" ], - "time": "2017-02-17T22:44:38+00:00" + "time": "2017-12-02T09:49:02+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { @@ -1959,33 +2020,39 @@ "reflection", "static analysis" ], - "time": "2015-12-27T11:43:31+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -2004,24 +2071,24 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30T07:12:33+00:00" + "time": "2017-11-27T17:38:31+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.2.1", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.5", + "php": "^5.5 || ^7.0", "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { @@ -2051,37 +2118,37 @@ "email": "me@mikevanriel.com" } ], - "time": "2016-11-25T06:54:22+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.7.0", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", - "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", "sebastian/comparator": "^1.1|^2.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -2114,20 +2181,72 @@ "spy", "stub" ], - "time": "2017-03-02T20:05:34+00:00" + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/dbunit", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/dbunit.git", + "reference": "403350339b6aca748ee0067d027d85621992e21f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/403350339b6aca748ee0067d027d85621992e21f", + "reference": "403350339b6aca748ee0067d027d85621992e21f", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "ext-simplexml": "*", + "php": "^7.0", + "phpunit/phpunit": "^6.0", + "symfony/yaml": "^3.0 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "PHPUnit extension for database interaction testing", + "homepage": "https://github.com/sebastianbergmann/dbunit/", + "keywords": [ + "database", + "testing", + "xunit" + ], + "time": "2017-11-18T17:40:34+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b" + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8ed1902a57849e117b5651fc1a5c48110946c06b", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "shasum": "" }, "require": { @@ -2136,14 +2255,13 @@ "php": "^7.0", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^1.4.11 || ^2.0", + "phpunit/php-token-stream": "^2.0.1", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^3.0", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": "^2.5", "phpunit/phpunit": "^6.0" }, "suggest": { @@ -2152,7 +2270,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.2.x-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -2167,7 +2285,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2178,20 +2296,20 @@ "testing", "xunit" ], - "time": "2017-08-03T12:40:43+00:00" + "time": "2017-12-06T09:29:45+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.2", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -2225,7 +2343,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -2319,16 +2437,16 @@ }, { "name": "phpunit/php-token-stream", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9a02332089ac48e704c70f6cefed30c224e3c0b0", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { @@ -2364,20 +2482,20 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20T05:47:52+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", - "version": "6.4.3", + "version": "6.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "06b28548fd2b4a20c3cd6e247dc86331a7d4db13" + "reference": "562f7dc75d46510a4ed5d16189ae57fbe45a9932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/06b28548fd2b4a20c3cd6e247dc86331a7d4db13", - "reference": "06b28548fd2b4a20c3cd6e247dc86331a7d4db13", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/562f7dc75d46510a4ed5d16189ae57fbe45a9932", + "reference": "562f7dc75d46510a4ed5d16189ae57fbe45a9932", "shasum": "" }, "require": { @@ -2448,7 +2566,7 @@ "testing", "xunit" ], - "time": "2017-10-16T13:18:59+00:00" + "time": "2017-11-08T11:26:09+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -2655,30 +2773,30 @@ }, { "name": "sebastian/comparator", - "version": "2.0.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ae068fede81d06e7bb9bb46a367210a3d3e1fe6a" + "reference": "1174d9018191e93cb9d719edec01257fc05f8158" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ae068fede81d06e7bb9bb46a367210a3d3e1fe6a", - "reference": "ae068fede81d06e7bb9bb46a367210a3d3e1fe6a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1174d9018191e93cb9d719edec01257fc05f8158", + "reference": "1174d9018191e93cb9d719edec01257fc05f8158", "shasum": "" }, "require": { "php": "^7.0", "sebastian/diff": "^2.0", - "sebastian/exporter": "^3.0" + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -2709,13 +2827,13 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2017-08-03T07:14:59+00:00" + "time": "2017-11-03T07:16:52+00:00" }, { "name": "sebastian/diff", @@ -3169,25 +3287,25 @@ }, { "name": "symfony/browser-kit", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "317d5bdf0127f06db7ea294186132b4f5b036839" + "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/317d5bdf0127f06db7ea294186132b4f5b036839", - "reference": "317d5bdf0127f06db7ea294186132b4f5b036839", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f761b4ecdd23a451c2cae6fba704d8b207cbb045", + "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/dom-crawler": "~2.8|~3.0" + "symfony/dom-crawler": "~2.8|~3.0|~4.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/process": "" @@ -3195,7 +3313,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3222,27 +3340,27 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-11T22:06:16+00:00" }, { "name": "symfony/class-loader", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "7572c904b209fa9907c69a6a9a68243c265a4d01" + "reference": "e8d36a7b5568d232f5c3f8ef92665836b9f1e038" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/7572c904b209fa9907c69a6a9a68243c265a4d01", - "reference": "7572c904b209fa9907c69a6a9a68243c265a4d01", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e8d36a7b5568d232f5c3f8ef92665836b9f1e038", + "reference": "e8d36a7b5568d232f5c3f8ef92665836b9f1e038", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, "require-dev": { - "symfony/finder": "~2.8|~3.0", + "symfony/finder": "~2.8|~3.0|~4.0", "symfony/polyfill-apcu": "~1.1" }, "suggest": { @@ -3251,7 +3369,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3278,34 +3396,34 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/config", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd" + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/4ab62407bff9cd97c410a7feaef04c375aaa5cfd", - "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd", + "url": "https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0" + "symfony/filesystem": "~2.8|~3.0|~4.0" }, "conflict": { "symfony/dependency-injection": "<3.3", "symfony/finder": "<3.3" }, "require-dev": { - "symfony/dependency-injection": "~3.3", - "symfony/finder": "~3.3", - "symfony/yaml": "~3.0" + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3313,7 +3431,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3340,48 +3458,49 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-10-04T18:56:58+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/console", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c" + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/116bc56e45a8e5572e51eb43ab58c769a352366c", - "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c", + "url": "https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3", - "symfony/dependency-injection": "~3.3", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/filesystem": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", - "symfony/filesystem": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3408,20 +3527,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/css-selector", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "07447650225ca9223bd5c97180fe7c8267f7d332" + "reference": "eac760b414cf1f64362c3dd047b989e4db121332" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/07447650225ca9223bd5c97180fe7c8267f7d332", - "reference": "07447650225ca9223bd5c97180fe7c8267f7d332", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/eac760b414cf1f64362c3dd047b989e4db121332", + "reference": "eac760b414cf1f64362c3dd047b989e4db121332", "shasum": "" }, "require": { @@ -3430,7 +3549,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3461,20 +3580,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/debug", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd" + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd", - "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd", + "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", "shasum": "" }, "require": { @@ -3485,12 +3604,12 @@ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3517,20 +3636,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-12T08:27:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1" + "reference": "5f81907ea43bfa971ac2c7fbac593ebe7cd7d333" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8ebad929aee3ca185b05f55d9cc5521670821ad1", - "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5f81907ea43bfa971ac2c7fbac593ebe7cd7d333", + "reference": "5f81907ea43bfa971ac2c7fbac593ebe7cd7d333", "shasum": "" }, "require": { @@ -3538,17 +3657,18 @@ "psr/container": "^1.0" }, "conflict": { - "symfony/config": "<3.3.1", + "symfony/config": "<3.3.7", "symfony/finder": "<3.3", - "symfony/yaml": "<3.3" + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" }, "provide": { "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/yaml": "~3.3" + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/config": "", @@ -3560,7 +3680,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3587,20 +3707,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-10-04T17:15:30+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "40dafd42d5dad7fe5ad4e958413d92a207522ac1" + "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/40dafd42d5dad7fe5ad4e958413d92a207522ac1", - "reference": "40dafd42d5dad7fe5ad4e958413d92a207522ac1", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", + "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", "shasum": "" }, "require": { @@ -3608,7 +3728,7 @@ "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/css-selector": "" @@ -3616,7 +3736,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3643,20 +3763,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423" + "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d7ba037e4b8221956ab1e221c73c9e27e05dd423", - "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b869cbf8a15ca6261689de2c28a7d7f2d0706835", + "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835", "shasum": "" }, "require": { @@ -3667,10 +3787,10 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3679,7 +3799,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3706,20 +3826,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1" + "reference": "25b135bea251829e3db6a77d773643408b575ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/90bc45abf02ae6b7deb43895c1052cb0038506f1", - "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4", + "reference": "25b135bea251829e3db6a77d773643408b575ed4", "shasum": "" }, "require": { @@ -3728,7 +3848,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3755,7 +3875,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-10-03T13:33:10+00:00" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -3818,16 +3938,16 @@ }, { "name": "symfony/translation", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "409bf229cd552bf7e3faa8ab7e3980b07672073f" + "reference": "4c5d5582baf2829751a5207659329c1f52eedeb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/409bf229cd552bf7e3faa8ab7e3980b07672073f", - "reference": "409bf229cd552bf7e3faa8ab7e3980b07672073f", + "url": "https://api.github.com/repos/symfony/translation/zipball/4c5d5582baf2829751a5207659329c1f52eedeb6", + "reference": "4c5d5582baf2829751a5207659329c1f52eedeb6", "shasum": "" }, "require": { @@ -3836,13 +3956,16 @@ }, "conflict": { "symfony/config": "<2.8", - "symfony/yaml": "<3.3" + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/intl": "^2.8.18|^3.2.5", - "symfony/yaml": "~3.3" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -3852,7 +3975,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3879,27 +4002,30 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-12-12T08:27:14+00:00" }, { "name": "symfony/yaml", - "version": "v3.3.10", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46" + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46", - "reference": "8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, + "conflict": { + "symfony/console": "<3.4" + }, "require-dev": { - "symfony/console": "~2.8|~3.0" + "symfony/console": "~3.4|~4.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -3907,7 +4033,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3934,7 +4060,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-10-05T14:43:42+00:00" + "time": "2017-12-11T20:38:23+00:00" }, { "name": "theseer/tokenizer", diff --git a/doc/developer/api_zot.bb b/doc/developer/api_zot.bb index b2c19d7a1..ff937bfa5 100644 --- a/doc/developer/api_zot.bb +++ b/doc/developer/api_zot.bb @@ -1,5 +1,9 @@ [h3]Zot API[/h3] +Many existing social applications and tools can interface directly using the Twitter/StatusNet API, which is available using the 'twitter_api' addon. + +This document describes the native API; which allows direct programmatic access to several internal data structures and libraries extending beyond the basic social interface. + The API endpoints detailed below are relative to [code]api/z/1.0[/code], meaning that if an API is listed as [code]channel/stream[/code] the full API URL is [code][baseurl]/api/z/1.0/channel/stream[/code]. [h3]channel/export/basic[/h3] diff --git a/include/bbcode.php b/include/bbcode.php index ed34bc5d6..775a91f9a 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -941,27 +941,34 @@ function bbcode($Text, $options = []) { // Check for h1 if (strpos($Text,'[h1]') !== false) { $Text = preg_replace("(\[h1\](.*?)\[\/h1\])ism",'<h1>$1</h1>',$Text); + $Text = str_replace('</h1><br />', '</h1>', $Text); } // Check for h2 if (strpos($Text,'[h2]') !== false) { $Text = preg_replace("(\[h2\](.*?)\[\/h2\])ism",'<h2>$1</h2>',$Text); + $Text = str_replace('</h2><br />', '</h2>', $Text); } // Check for h3 if (strpos($Text,'[h3]') !== false) { $Text = preg_replace("(\[h3\](.*?)\[\/h3\])ism",'<h3>$1</h3>',$Text); + $Text = str_replace('</h3><br />', '</h3>', $Text); } // Check for h4 if (strpos($Text,'[h4]') !== false) { $Text = preg_replace("(\[h4\](.*?)\[\/h4\])ism",'<h4>$1</h4>',$Text); + $Text = str_replace('</h4><br />', '</h4>', $Text); } // Check for h5 if (strpos($Text,'[h5]') !== false) { $Text = preg_replace("(\[h5\](.*?)\[\/h5\])ism",'<h5>$1</h5>',$Text); + $Text = str_replace('</h5><br />', '</h5>', $Text); } // Check for h6 if (strpos($Text,'[h6]') !== false) { $Text = preg_replace("(\[h6\](.*?)\[\/h6\])ism",'<h6>$1</h6>',$Text); + $Text = str_replace('</h6><br />', '</h6>', $Text); } + // Check for table of content without params while(strpos($Text,'[toc]') !== false) { $toc_id = 'toc-' . random_string(10); diff --git a/include/feedutils.php b/include/feedutils.php index 8f2c5d988..4638ef66a 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -1305,7 +1305,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { // allow likes of comments - if($item_parent_mid && activity_match($datarray['verb'],ACTVITY_LIKE)) { + if($item_parent_mid && activity_match($datarray['verb'],ACTIVITY_LIKE)) { $datarray['thr_parent'] = $item_parent_mid[0]['parent_mid']; } diff --git a/include/html2bbcode.php b/include/html2bbcode.php index d7fbd8660..f67231847 100644 --- a/include/html2bbcode.php +++ b/include/html2bbcode.php @@ -196,12 +196,12 @@ function html2bbcode($message) //node2bbcode($doc, 'tr', array(), "[tr]", "[/tr]"); //node2bbcode($doc, 'td', array(), "[td]", "[/td]"); - node2bbcode($doc, 'h1', array(), "\n\n[size=xx-large][b]", "[/b][/size]\n"); - node2bbcode($doc, 'h2', array(), "\n\n[size=x-large][b]", "[/b][/size]\n"); - node2bbcode($doc, 'h3', array(), "\n\n[size=large][b]", "[/b][/size]\n"); - node2bbcode($doc, 'h4', array(), "\n\n[size=medium][b]", "[/b][/size]\n"); - node2bbcode($doc, 'h5', array(), "\n\n[size=small][b]", "[/b][/size]\n"); - node2bbcode($doc, 'h6', array(), "\n\n[size=x-small][b]", "[/b][/size]\n"); + node2bbcode($doc, 'h1', array(), "\n\n[h1]", "[/h1]\n"); + node2bbcode($doc, 'h2', array(), "\n\n[h2]", "[/h2]\n"); + node2bbcode($doc, 'h3', array(), "\n\n[h3]", "[/h3]\n"); + node2bbcode($doc, 'h4', array(), "\n\n[h4]", "[/h4]\n"); + node2bbcode($doc, 'h5', array(), "\n\n[h5]", "[/h5]\n"); + node2bbcode($doc, 'h6', array(), "\n\n[h6]", "[/h6]\n"); node2bbcode($doc, 'a', array('href'=>'/(.+)/'), '[url=$1]', '[/url]'); diff --git a/include/message.php b/include/message.php index b57d2e068..4a673b961 100644 --- a/include/message.php +++ b/include/message.php @@ -215,7 +215,7 @@ function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $rep return $ret; } - if(count($images)) { + if($images) { foreach($images as $image) { if(! stristr($image,z_root() . '/photo/')) continue; diff --git a/include/text.php b/include/text.php index f3d522e04..107efe0cb 100644 --- a/include/text.php +++ b/include/text.php @@ -1754,9 +1754,14 @@ function get_plink($item,$conversation_mode = true) { else $key = 'llink'; + $zidify = true; + + if(array_key_exists('author',$item) && $item['author']['xchan_network'] !== 'zot') + $zidify = false; + if(x($item,$key)) { return array( - 'href' => zid($item[$key]), + 'href' => (($zidify) ? zid($item[$key]) : $item[$key]), 'title' => t('Link to Source'), ); } diff --git a/library/Smarty/libs/plugins/function.counter.php b/library/Smarty/libs/plugins/function.counter.php deleted file mode 100644 index 4da85a14e..000000000 --- a/library/Smarty/libs/plugins/function.counter.php +++ /dev/null @@ -1,78 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {counter} function plugin - * Type: function<br> - * Name: counter<br> - * Purpose: print out a counter value - * - * @author Monte Ohrt <monte at ohrt dot com> - * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * - * @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/library/Smarty/libs/plugins/function.math.php b/library/Smarty/libs/plugins/function.math.php deleted file mode 100644 index aba76e825..000000000 --- a/library/Smarty/libs/plugins/function.math.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** - * Smarty plugin - * This plugin is only for Smarty2 BC - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {math} function plugin - * Type: function<br> - * Name: math<br> - * Purpose: handle math computations in template - * - * @link http://www.smarty.net/manual/en/language.function.math.php {math} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_math($params, $template) -{ - static $_allowed_funcs = array( - 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true, - 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true, - 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true - ); - // be sure equation parameter is present - if (empty($params['equation'])) { - trigger_error("math: missing equation parameter", E_USER_WARNING); - - return; - } - - $equation = $params['equation']; - - // make sure parenthesis are balanced - if (substr_count($equation, "(") != substr_count($equation, ")")) { - trigger_error("math: unbalanced parenthesis", E_USER_WARNING); - - return; - } - - // match all vars in equation, make sure all are passed - preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match); - - foreach ($match[1] as $curr_var) { - if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) { - trigger_error("math: function call $curr_var not allowed", E_USER_WARNING); - - 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; - } - $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/library/Smarty/libs/plugins/modifiercompiler.unescape.php b/library/Smarty/libs/plugins/modifiercompiler.unescape.php deleted file mode 100644 index 3b17ea2e1..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.unescape.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty unescape modifier plugin - * Type: modifier<br> - * Name: unescape<br> - * Purpose: unescape html entities - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_unescape($params) -{ - if (!isset($params[1])) { - $params[1] = 'html'; - } - if (!isset($params[2])) { - $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; - } else { - $params[2] = "'" . $params[2] . "'"; - } - - switch (trim($params[1], '"\'')) { - case 'entity': - case 'htmlall': - if (Smarty::$_MBSTRING) { - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')'; - } - - return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')'; - - case 'html': - return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)'; - - case 'url': - return 'rawurldecode(' . $params[0] . ')'; - - default: - return $params[0]; - } -} diff --git a/library/Smarty/libs/plugins/shared.escape_special_chars.php b/library/Smarty/libs/plugins/shared.escape_special_chars.php deleted file mode 100644 index d3bd756b1..000000000 --- a/library/Smarty/libs/plugins/shared.escape_special_chars.php +++ /dev/null @@ -1,53 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -if (version_compare(PHP_VERSION, '5.2.3', '>=')) { - /** - * escape_special_chars common function - * Function: smarty_function_escape_special_chars<br> - * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) - { - if (!is_array($string)) { - $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); - } - - return $string; - } -} else { - /** - * escape_special_chars common function - * Function: smarty_function_escape_special_chars<br> - * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) - { - if (!is_array($string)) { - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlspecialchars($string); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - } - - return $string; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php deleted file mode 100644 index 5e3fce3cc..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php +++ /dev/null @@ -1,98 +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 -{ - /** - * Valid scope names - * - * @var array - */ - public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true, - 'smarty' => true, 'tpl_root' => true); - - /** - * Compiles code for the {assign} tag - * - * @param array $args array with attributes from parser - * @param \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', 'bubble_up'); - $_nocache = 'null'; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // nocache ? - if ($compiler->tag_nocache || $compiler->nocache) { - $_nocache = 'true'; - // create nocache var to make it know for further compiling - if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) { - $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true; - } else { - $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_Variable(null, true); - } - } - // scope setup - $_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (!isset($this->valid_scopes[$_attr['scope']])) { - $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); - } - if ($_attr['scope'] != 'local') { - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } elseif ($_attr['scope'] == 'smarty') { - $_scope = Smarty::SCOPE_SMARTY; - } elseif ($_attr['scope'] == 'tpl_root') { - $_scope = Smarty::SCOPE_TPL_ROOT; - } - $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP; - } - } - // compiled output - if (isset($parameter['smarty_internal_index'])) { - $output = - "<?php \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, $_attr[var], $_nocache);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];"; - } else { - // implement Smarty2's behaviour of variables assigned by reference - if ($compiler->template->smarty instanceof SmartyBC) { - $output = - "<?php if (isset(\$_smarty_tpl->tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache;"; - $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);"; - } else { - $output = "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);"; - } - } - $output .= "\n\$_smarty_tpl->ext->_updateScope->updateScope(\$_smarty_tpl, $_attr[var], $_scope);"; - $output .= '?>'; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php deleted file mode 100644 index ab1fc6e00..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php +++ /dev/null @@ -1,292 +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'); - - /** - * nesting level of block tags - * - * @var int - */ - public static $blockTagNestingLevel = 0; - - /** - * Saved compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * 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) - { - 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'] ++; - $compiler->_cache['blockName'][$compiler->_cache['blockNesting']] = $_attr['name']; - $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][0] = 'block_' . preg_replace('![^\w]+!', '_', uniqid(rand(), true)); - $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = false; - $this->openTag($compiler, 'block', array($_attr, $compiler->nocache, $compiler->parser->current_buffer, - $compiler->template->compiled->has_nocache_code, - $compiler->template->caching)); - // must whole block be nocache ? - if ($compiler->tag_nocache) { - $i = 0; - } - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // $compiler->suppressNocacheProcessing = true; - if ($_attr['nocache'] === true) { - //$compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->taglineno); - } - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); - $compiler->template->compiled->has_nocache_code = false; - $compiler->suppressNocacheProcessing = true; - } - - /** - * Compile saved child block source - * - * @param \Smarty_Internal_TemplateCompilerBase compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileChildBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null) - { - if (!isset($compiler->_cache['blockNesting'])) { - $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', - $compiler->parser->lex->taglineno); - } - $compiler->has_code = true; - $compiler->suppressNocacheProcessing = true; - $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = true; - $output = "<?php \n\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 2, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n"; - return $output; - } - - /** - * Compile $smarty.block.parent - * - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileParentBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null) - { - if (!isset($compiler->_cache['blockNesting'])) { - $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', - $compiler->parser->lex->taglineno); - } - $compiler->suppressNocacheProcessing = true; - $compiler->has_code = true; - $output = "<?php \n\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 4, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n"; - return $output; - } -} - -/** - * Smarty Internal Plugin Compile BlockClose Class - * - */ -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']]); - $_block[2] = $_block[3] = 0; - $_name = trim($_attr['name'], "'\""); - $_assign = isset($_attr['assign']) ? $_attr['assign'] : null; - unset($_attr['assign'], $_attr['name']); - foreach ($_attr as $name => $stat) { - if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat != 'false')) { - $_block[$name] = is_string($stat) ? trim($stat, "'\"") : $stat; - } - } - $_funcName = $_block[0]; - // get compiled block code - $_functionCode = $compiler->parser->current_buffer; - // setup buffer for template function code - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); - - if ($compiler->template->compiled->has_nocache_code) { - // $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching; - $_block[6] = $_funcNameCaching = $_funcName . '_nocache'; - $output = "<?php\n"; - $output .= "/* {block '{$_name}'} {$compiler->template->source->type}:{$compiler->template->source->name} */\n"; - $output .= "function {$_funcNameCaching} (\$_smarty_tpl, \$_blockParentStack) {\n"; - $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; - $output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n"; - if (isset($_assign)) { - $output .= "ob_start();\n"; - } - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, - new Smarty_Internal_ParseTree_Tag($compiler->parser, - $output)); - $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); - $output = "<?php\n"; - if (isset($_assign)) { - $output .= "\$_smarty_tpl->tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n"; - } - $output .= "/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; - $output .= "}\n"; - $output .= "/* {/block '{$_name}'} */\n\n"; - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, - new Smarty_Internal_ParseTree_Tag($compiler->parser, - $output)); - $compiler->blockOrFunctionCode .= $f = $compiler->parser->current_buffer->to_smarty_php($compiler->parser); - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); - $this->compiler = $compiler; - $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, - preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", - array($this, 'removeNocache'), - $_functionCode->to_smarty_php($compiler->parser))); - $this->compiler = null; - } - $output = "<?php\n"; - $output .= "/* {block '{$_name}'} {$compiler->template->source->type}:{$compiler->template->source->name} */\n"; - $output .= "function {$_funcName}(\$_smarty_tpl, \$_blockParentStack) {\n"; - if (isset($_assign)) { - $output .= "ob_start();\n"; - } - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, - new Smarty_Internal_ParseTree_Tag($compiler->parser, - $output)); - $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); - $output = "<?php\n"; - if (isset($_assign)) { - $output .= "\$_smarty_tpl->tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n"; - } - $output .= "}\n"; - $output .= "/* {/block '{$_name}'} */\n\n"; - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, - new Smarty_Internal_ParseTree_Tag($compiler->parser, - $output)); - $compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser); - // nocache plugins must be copied - if (!empty($compiler->template->compiled->required_plugins['nocache'])) { - foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) { - foreach ($tmp as $type => $data) { - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = - $data; - } - } - } - - - // restore old status - $compiler->template->compiled->has_nocache_code = $_has_nocache_code; - $compiler->tag_nocache = $compiler->nocache; - $compiler->nocache = $_nocache; - $compiler->parser->current_buffer = $_buffer; - $output = "<?php \n"; - if ($compiler->_cache['blockNesting'] == 1) { - $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " . - var_export($_block, true) . ");\n"; - } else { - $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " . - var_export($_block, true) . ", \$_blockParentStack);\n"; - - } - $output .= "?>\n"; - $compiler->_cache['blockNesting'] --; - if ($compiler->_cache['blockNesting'] == 0) { - unset($compiler->_cache['blockNesting']); - } - $compiler->has_code = true; - $compiler->suppressNocacheProcessing = true; - return $output; - } - - /** - * @param $match - * - * @return mixed - */ - function removeNocache($match) - { - $code = - preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", - '', $match[0]); - $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code); - return $code; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php deleted file mode 100644 index cbc73d36a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php +++ /dev/null @@ -1,77 +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'); - - /** - * Compiles code for the {break} 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) - { - 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; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count --; - } - $stack_count --; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot break {$_levels} level(s)", null, true); - } - - return "<?php break {$_levels};?>"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php deleted file mode 100644 index 2ee04c94e..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php +++ /dev/null @@ -1,77 +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_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'); - - /** - * Compiles code for the {continue} 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) - { - 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; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count --; - } - $stack_count --; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot continue {$_levels} level(s)", null, true); - } - - return "<?php continue {$_levels};?>"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php deleted file mode 100644 index 541e21816..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php +++ /dev/null @@ -1,252 +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 (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing if condition", null, true); - } - - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . - "$_nocache);\n"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - - 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 - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); - $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); - - return "<?php } else { ?>"; - } -} - -/** - * 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 (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing elseif condition", null, true); - } - - if (is_array($parameter['if condition'])) { - $condition_by_assign = true; - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } else { - $_nocache = ''; - } - } else { - $condition_by_assign = false; - } - - if (empty($compiler->prefix_code)) { - if ($condition_by_assign) { - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . - $parameter['if condition']['var']['var'] . "$_nocache);\n"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache)); - - return "<?php } elseif ({$parameter['if condition']}) {?>"; - } - } else { - $tmp = ''; - foreach ($compiler->prefix_code as $code) { - $tmp = $compiler->appendCode($tmp, $code); - } - $compiler->prefix_code = array(); - $tmp = $compiler->appendCode("<?php } else {?>", $tmp); - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if ($condition_by_assign) { - if (is_array($parameter['if condition']['var'])) { - $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . - "]) || !is_array(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . - $parameter['if condition']['var']['var'] . "$_nocache);\n"); - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . - "])) \$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . - "] = new Smarty_Variable(null{$_nocache});"); - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return $compiler->appendCode($tmp, "<?php if ({$parameter['if condition']}) {?>"); - } - } - } -} - -/** - * Smarty Internal Plugin Compile Ifclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/if} tag - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // must endblock be nocache? - if ($compiler->nocache) { - $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/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php deleted file mode 100644 index 9e2eea233..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php +++ /dev/null @@ -1,89 +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'); - - /** - * 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 - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function) - { - if (!isset($tag[5]) || substr($tag, - 5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // 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) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5)); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . - $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], - 'value' => 'ob_get_clean()')) . ';'; - } - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . - " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php deleted file mode 100644 index d2bc5d60c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php +++ /dev/null @@ -1,91 +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_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * 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 object - * @param string $method name of method to call - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method) - { - if (!isset($tag[5]) || substr($tag, - 5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // 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) . ')'; - - $this->openTag($compiler, $tag . '->' . $method, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = - "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $base_tag = substr($tag, 0, - 5); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag . '->' . $method); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), - array('modifierlist' => $parameter['modifier_list'], - 'value' => 'ob_get_clean()')) . ';'; - } - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . - $mod_post . " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php deleted file mode 100644 index 78d95f720..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php +++ /dev/null @@ -1,119 +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_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of a block function - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block function - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag) - { - if (!isset($tag[5]) || substr($tag, - 5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } - // 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) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache; - $function = $tag_info[0]; - // compile code - if (!is_array($function)) { - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } elseif (is_object($function[0])) { - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $base_tag = substr($tag, 0, - 5); - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); - // This tag does create output - $compiler->has_output = true; - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } else { - $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . - $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], - 'value' => 'ob_get_clean()')) . ';'; - } - if (!is_array($function)) { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . - " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } elseif (is_object($function[0])) { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . - $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } else { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . - $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php deleted file mode 100644 index bd31f6671..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php +++ /dev/null @@ -1,108 +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; - $_output = "<?php\n"; - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . - "$_nocache);\n"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - } else { - $_output .= "while ({$parameter['if condition']}) {?>"; - } - return $_output; - } -} - -/** - * 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/library/Smarty/libs/sysplugins/smarty_internal_extension_handler.php b/library/Smarty/libs/sysplugins/smarty_internal_extension_handler.php deleted file mode 100644 index 68012d86f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_extension_handler.php +++ /dev/null @@ -1,157 +0,0 @@ -<?php - -/** - * Smarty Extension handler - * - * Load extensions dynamically - * - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - * @property Smarty_Internal_Runtime_Inheritance $_inheritance - * @property Smarty_Internal_Runtime_SubTemplate $_subTemplate - * @property Smarty_Internal_Runtime_TplFunction $_tplFunction - * @property Smarty_Internal_Runtime_Var $_var - * @property Smarty_Internal_Runtime_Config $_config - * @property Smarty_Internal_Runtime_Foreach $_foreach - * @property Smarty_Internal_Runtime_Hhvm $_hhvm - * @property Smarty_Internal_Runtime_WriteFile $_writeFile - * @property Smarty_Internal_Runtime_ValidateCompiled $_validateCompiled - * @property Smarty_Internal_Runtime_CodeFrame $_codeFrame - * @property Smarty_Internal_Runtime_FilterHandler $_filterHandler - * @property Smarty_Internal_Runtime_GetIncludePath $_getIncludePath - * @property Smarty_Internal_Runtime_UpdateScope $_updateScope - * @property Smarty_Internal_Runtime_IsCached $_isCached - * @property Smarty_Internal_Runtime_CacheModify $_cacheModify - * @property Smarty_Internal_Runtime_UpdateCache $_updateCache - * @property Smarty_Internal_Method_GetTemplateVars $getTemplateVars - * @property Smarty_Internal_Method_Append $append - * @property Smarty_Internal_Method_AppendByRef $appendByRef - * @property Smarty_Internal_Method_AssignGlobal $assignGlobal - * @property Smarty_Internal_Method_AssignByRef $assignByRef - * @property Smarty_Internal_Method_LoadFilter $loadFilter - * @property Smarty_Internal_Method_LoadPlugin $loadPlugin - * @property Smarty_Internal_Method_RegisterFilter $registerFilter - * @property Smarty_Internal_Method_RegisterObject $registerObject - * @property Smarty_Internal_Method_RegisterPlugin $registerPlugin - */ -class Smarty_Internal_Extension_Handler -{ - - public $objType = null; - - /** - * Cache for property information from generic getter/setter - * Preloaded with names which should not use with generic getter/setter - * - * @var array - */ - private $_property_info = array('AutoloadFilters' => 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0, - 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0, - 'TemplateVars' => 0,);# - - private $resolvedProperties = array(); - - /** - * Call external Method - * - * @param \Smarty_Internal_Data $data - * @param string $name external method names - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args) - { - /* @var Smarty $data ->smarty */ - $smarty = isset($data->smarty) ? $data->smarty : $data; - if (!isset($smarty->ext->$name)) { - $class = 'Smarty_Internal_Method_' . ucfirst($name); - if (preg_match('/^(set|get)([A-Z].*)$/', $name, $match)) { - if (!isset($this->_property_info[$prop = $match[2]])) { - // convert camel case to underscored name - $this->resolvedProperties[$prop] = $pn = strtolower(join('_', - preg_split('/([A-Z][^A-Z]*)/', $prop, - 1, - PREG_SPLIT_NO_EMPTY | - PREG_SPLIT_DELIM_CAPTURE))); - $this->_property_info[$prop] = property_exists($data, $pn) ? 1 : - ($data->_objType == 2 && property_exists($smarty, $pn) ? 2 : 0); - } - if ($this->_property_info[$prop]) { - $pn = $this->resolvedProperties[$prop]; - if ($match[1] == 'get') { - return $this->_property_info[$prop] == 1 ? $data->$pn : $data->smarty->$pn; - } else { - return $this->_property_info[$prop] == 1 ? $data->$pn = $args[0] : - $data->smarty->$pn = $args[0]; - } - } elseif (!class_exists($class)) { - throw new SmartyException("property '$pn' does not exist."); - } - } - if (class_exists($class)) { - $callback = array($smarty->ext->$name = new $class(), $name); - } - } else { - $callback = array($smarty->ext->$name, $name); - } - array_unshift($args, $data); - if (isset($callback) && $callback[0]->objMap | $data->_objType) { - return call_user_func_array($callback, $args); - } - return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args); - } - - /** - * set extension property - * - * @param string $property_name property name - * @param mixed $value value - * - * @throws SmartyException - */ - public function __set($property_name, $value) - { - $this->$property_name = $value; - } - - /** - * get extension object - * - * @param string $property_name property name - * - * @return mixed|Smarty_Template_Cached - * @throws SmartyException - */ - public function __get($property_name) - { - // object properties of runtime template extensions will start with '_' - if ($property_name[0] == '_') { - $class = 'Smarty_Internal_Runtime_' . ucfirst(substr($property_name, 1)); - } else { - $class = 'Smarty_Internal_Method_' . ucfirst($property_name); - } - if (class_exists($class)) { - return $this->$property_name = new $class(); - } - return $this; - } - - /** - * Call error handler for undefined method - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - public function __call($name, $args) - { - return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args); - } - -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_foreach.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_foreach.php deleted file mode 100644 index 689636adb..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_foreach.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/** - * Foreach Runtime Methods count - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_Foreach -{ - /** - * [util function] counts an array, arrayAccess/traversable or PDOStatement object - * - * @param mixed $value - * - * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 - * for empty elements - */ - public function count($value) - { - if (is_array($value) === true || $value instanceof Countable) { - return count($value); - } elseif ($value instanceof IteratorAggregate) { - // Note: getIterator() returns a Traversable, not an Iterator - // thus rewind() and valid() methods may not be present - return iterator_count($value->getIterator()); - } elseif ($value instanceof Iterator) { - if ($value instanceof Generator) { - return 1; - } - return iterator_count($value); - } elseif ($value instanceof PDOStatement) { - return $value->rowCount(); - } elseif ($value instanceof Traversable) { - return iterator_count($value); - } elseif ($value instanceof ArrayAccess) { - if ($value->offsetExists(0)) { - return 1; - } - } elseif (is_object($value)) { - return count($value); - } - return 0; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php deleted file mode 100644 index 117cd8166..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php - -/** - * Runtime Extension Hhvm - * - * include patch for modified compiled or cached templates - * HHVM does not check if file was modified when including same file multiple times - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Runtime_Hhvm -{ - /** - * @param \Smarty_Internal_Template $_template - * @param string $file file name - * - * @return mixed - */ - static function includeHhvm(Smarty_Internal_Template $_template, $file) - { - $_smarty_tpl = $_template; - $tmp_file = $file . preg_replace('![^\w]+!', '_', uniqid(rand(), true)) . '.php'; - file_put_contents($tmp_file, file_get_contents($file)); - $result = @include $tmp_file; - @unlink($tmp_file); - return $result; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php deleted file mode 100644 index 08a560606..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php +++ /dev/null @@ -1,233 +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 block parameter of known {block} tags - * - * @var array - */ - public $blockParameter = array(); - - /** - * inheritance template nesting level - * - * @var int - */ - public $inheritanceLevel = 0; - - /** - * inheritance template index - * - * @var int - */ - public $tplIndex = - 1; - - /** - * Array of compiled template file path - * - key template index - * only used when caching is enabled - * - * @var []string - */ - public $compiledFilePath = array(); - - /** - * Current {block} nesting level - * - * @var int - */ - public $blockNesting = 0; - - /** - * Initialize inheritance - * - * @param \Smarty_Internal_Template $tpl template object of caller - * @param bool $initChild if true init for child template - * @param array $blockNames outer level block name - * - */ - public function init(Smarty_Internal_Template $tpl, $initChild, $blockNames = array()) - { - // if template was from an inner block or template is a parent template create new inheritance root - if ($initChild && ($this->blockNesting || $this->state == 3)) { - $tpl->ext->_inheritance = new Smarty_Internal_Runtime_Inheritance(); - $tpl->ext->_inheritance->init($tpl, $initChild, $blockNames); - return; - } - // start of child sub template(s) - if ($initChild) { - $this->state = 1; - if (!$this->inheritanceLevel) { - //grab any output of child templates - ob_start(); - } - $this->inheritanceLevel ++; - } - // in parent state {include} will not increment template index - if ($this->state != 3) { - $this->tplIndex ++; - } - // if state was waiting for parent change state to parent - if ($this->state == 2) { - $this->state = 3; - } - } - - /** - * End of child template(s) - * - if outer level is reached flush output buffer and switch to wait for parent template state - * - * @param \Smarty_Internal_Template $tpl template object of caller - */ - public function endChild(Smarty_Internal_Template $tpl) - { - $this->inheritanceLevel --; - if (!$this->inheritanceLevel) { - ob_end_clean(); - $this->state = 2; - } - } - - /** - * Process inheritance {block} tag - * - * $type 0 = {block}: - * - search in inheritance template hierarchy for child blocks - * if found call it, otherwise call current block - * - ignored for outer level blocks in child templates - * - * $type 1 = {block}: - * - nested {block} - * - search in inheritance template hierarchy for child blocks - * if found call it, otherwise call current block - * - * $type 2 = {$smarty.block.child}: - * - search in inheritance template hierarchy for child blocks - * if found call it, otherwise ignore - * - * $type 3 = {block append} {block prepend}: - * - call parent block - * - * $type 4 = {$smarty.block.parent}: - * - call parent block - * - * @param \Smarty_Internal_Template $tpl template object of caller - * @param int $type call type see above - * @param string $name block name - * @param array $block block parameter - * @param array $callStack call stack with block parameters - * - * @throws \SmartyException - */ - public function processBlock(Smarty_Internal_Template $tpl, $type = 0, $name, $block, $callStack = array()) - { - if (!isset($this->blockParameter[ $name ])) { - $this->blockParameter[ $name ] = array(); - } - if ($this->state == 1) { - $block[ 2 ] = count($this->blockParameter[ $name ]); - $block[ 3 ] = $this->tplIndex; - $this->blockParameter[ $name ][] = $block; - return; - } - if ($type == 3) { - if (!empty($callStack)) { - $block = array_shift($callStack); - } else { - return; - } - } elseif ($type == 4) { - if (!empty($callStack)) { - array_shift($callStack); - if (empty($callStack)) { - throw new SmartyException("inheritance: tag {\$smarty.block.parent} used in parent template block '{$name}'"); - } - $block = array_shift($callStack); - } else { - return; - } - } else { - $index = 0; - $blockParameter = &$this->blockParameter[ $name ]; - if ($type == 0) { - $index = $block[ 2 ] = count($blockParameter); - $block[ 3 ] = $this->tplIndex; - $callStack = array(&$block); - } elseif ($type == 1) { - $block[ 3 ] = $callStack[ 0 ][ 3 ]; - for ($i = 0; $i < count($blockParameter); $i ++) { - if ($blockParameter[ $i ][ 3 ] <= $block[ 3 ]) { - $index = $blockParameter[ $i ][ 2 ]; - } - } - $block[ 2 ] = $index; - $callStack = array(&$block); - } elseif ($type == 2) { - $index = $callStack[ 0 ][ 2 ]; - if ($index == 0) { - return; - } - $callStack = $block = array(1 => false); - } - $index --; - // find lowest level child block - while ($index >= 0 && ($type || !$block[ 1 ])) { - $block = &$blockParameter[ $index ]; - array_unshift($callStack, $block); - if ($block[ 1 ]) { - break; - } - $index --; - } - if (isset($block[ 'hide' ]) && $index <= 0) { - return; - } - } - $this->blockNesting ++; - // {block append} ? - if (isset($block[ 'append' ])) { - $appendStack = $callStack; - if ($type == 0) { - array_shift($appendStack); - } - $this->processBlock($tpl, 3, $name, null, $appendStack); - } - // call block of current stack level - if (isset($block[6])) { - $block[6]($tpl, $callStack); - } else { - $block[0]($tpl, $callStack); - } - // {block prepend} ? - if (isset($block[ 'prepend' ])) { - $prependStack = $callStack; - if ($type == 0) { - array_shift($prependStack); - } - $this->processBlock($tpl, 3, $name, null, $prependStack); - } - $this->blockNesting --; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php deleted file mode 100644 index 2c7623f93..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php +++ /dev/null @@ -1,203 +0,0 @@ -<?php - -/** - * Sub Template Runtime Methods render, setupSubTemplate - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_SubTemplate -{ - - /** - * Subtemplate template object cache - * - * @var Smarty_Internal_Template[] - */ - public $tplObjects = array(); - - /** - * Subtemplate call count - * - * @var int[] - */ - public $subTplInfo = array(); - - /** - * Runtime function to render subtemplate - * - * @param \Smarty_Internal_Template $parent - * @param string $template template name - * @param mixed $cache_id cache id - * @param mixed $compile_id compile id - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param array $data passed parameter template variables - * @param int $scope scope in which {include} should execute - * @param bool $forceTplCache cache template object - * @param string $uid file dependency uid - * @param string $content_func function name - * - */ - public function render(Smarty_Internal_Template $parent, $template, $cache_id, $compile_id, $caching, - $cache_lifetime, $data, $scope, $forceTplCache, $uid = null, $content_func = null) - { - // if there are cached template objects calculate $templateID - $_templateId = - !empty($this->tplObjects) ? $parent->smarty->_getTemplateId($template, $cache_id, $compile_id, $caching) : - null; - // already in template cache? - /* @var Smarty_Internal_Template $tpl */ - if (isset($_templateId) && isset($this->tplObjects[$_templateId])) { - // clone cached template object because of possible recursive call - $tpl = clone $this->tplObjects[$_templateId]; - $tpl->parent = $parent; - // if $caching mode changed the compiled resource is invalid - if ((bool) $tpl->caching !== (bool) $caching) { - unset($tpl->compiled); - } - // get variables from calling scope - $tpl->tpl_vars = $parent->tpl_vars; - $tpl->config_vars = $parent->config_vars; - // get template functions - $tpl->tpl_function = $parent->tpl_function; - // copy inheritance object? - if (isset($parent->ext->_inheritance)) { - $tpl->ext->_inheritance = $parent->ext->_inheritance; - } else { - unset($tpl->ext->_inheritance); - } - } else { - $tpl = clone $parent; - $tpl->parent = $parent; - if (!isset($tpl->templateId) || $tpl->templateId !== $_templateId) { - $tpl->templateId = $_templateId; - $tpl->template_resource = $template; - $tpl->cache_id = $cache_id; - $tpl->compile_id = $compile_id; - if (isset($uid)) { - // for inline templates we can get all resource information from file dependency - if (isset($tpl->compiled->file_dependency[$uid])) { - list($filepath, $timestamp, $resource) = $tpl->compiled->file_dependency[$uid]; - $tpl->source = - new Smarty_Template_Source(isset($tpl->smarty->_cache['resource_handlers'][$resource]) ? - $tpl->smarty->_cache['resource_handlers'][$resource] : - Smarty_Resource::load($tpl->smarty, $resource), $tpl->smarty, - $filepath, $resource, $filepath); - $tpl->source->filepath = $filepath; - $tpl->source->timestamp = $timestamp; - $tpl->source->exists = true; - $tpl->source->uid = $uid; - } else { - $tpl->source = null; - } - } else { - $tpl->source = null; - } - if (!isset($tpl->source)) { - $tpl->source = Smarty_Template_Source::load($tpl); - unset($tpl->compiled); - } - unset($tpl->cached); - } - } - $tpl->caching = $caching; - $tpl->cache_lifetime = $cache_lifetime; - if ($caching == 9999) { - $tpl->cached = $parent->cached; - } - // set template scope - $tpl->scope = $scope; - $scopePtr = false; - if ($scope & ~Smarty::SCOPE_BUBBLE_UP) { - if ($scope == Smarty::SCOPE_GLOBAL) { - $tpl->tpl_vars = Smarty::$global_tpl_vars; - $tpl->config_vars = $tpl->smarty->config_vars; - $scopePtr = true; - } else { - if ($scope == Smarty::SCOPE_PARENT) { - $scopePtr = $parent; - } elseif ($scope == Smarty::SCOPE_SMARTY) { - $scopePtr = $tpl->smarty; - } else { - $scopePtr = $tpl; - while (isset($scopePtr->parent)) { - if ($scopePtr->parent->_objType != 2 && $scope & Smarty::SCOPE_TPL_ROOT) { - break; - } - $scopePtr = $scopePtr->parent; - } - } - $tpl->tpl_vars = $scopePtr->tpl_vars; - $tpl->config_vars = $scopePtr->config_vars; - } - } - - if (!isset($this->tplObjects[$tpl->_getTemplateId()]) && !$tpl->source->handler->recompiled) { - // if template is called multiple times set flag to to cache template objects - $forceTplCache = $forceTplCache || - (isset($this->subTplInfo[$tpl->template_resource]) && $this->subTplInfo[$tpl->template_resource] > 1); - // check if template object should be cached - if ($tpl->parent->_objType == 2 && isset($this->tplObjects[$tpl->parent->templateId]) || - ($forceTplCache && $tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_AUTOMATIC) || - ($tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) - ) { - $this->tplObjects[$tpl->_getTemplateId()] = $tpl; - } - } - - if (!empty($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_Variable($_val); - } - } - if (isset($uid)) { - if ($parent->smarty->debugging) { - $parent->smarty->_debug->start_template($tpl); - $parent->smarty->_debug->start_render($tpl); - } - $tpl->compiled->getRenderedTemplateCode($tpl, $content_func); - if ($parent->smarty->debugging) { - $parent->smarty->_debug->end_template($tpl); - $parent->smarty->_debug->end_render($tpl); - } - if ($tpl->caching == 9999 && $tpl->compiled->has_nocache_code) { - $parent->cached->hashes[$tpl->compiled->nocache_hash] = true; - } - } else { - if (isset($tpl->compiled)) { - $tpl->compiled->render($tpl); - } else { - $tpl->render(); - } - } - if ($scopePtr) { - if ($scope == Smarty::SCOPE_GLOBAL) { - Smarty::$global_tpl_vars = $tpl->tpl_vars; - $tpl->smarty->config_vars = $tpl->config_vars; - } else { - $scopePtr->tpl_vars = $tpl->tpl_vars; - $scopePtr->config_vars = $tpl->config_vars; - } - } - } - - /** - * Get called subtemplates from compiled template and save call count - * - * @param \Smarty_Internal_Template $tpl - */ - public function registerSubTemplates(Smarty_Internal_Template $tpl) - { - foreach ($tpl->compiled->includes as $name => $count) { - if (isset($this->subTplInfo[$name])) { - $this->subTplInfo[$name] += $count; - } else { - $this->subTplInfo[$name] = $count; - } - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php deleted file mode 100644 index 634ed5dc6..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php +++ /dev/null @@ -1,97 +0,0 @@ -<?php - -/** - * Tplfunc Runtime Methods callTemplateFunction - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_TplFunction -{ - /** - * Call template function - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $name template function name - * @param array $params parameter array - * @param bool $nocache true if called nocache - * - * @throws \SmartyException - */ - public function callTemplateFunction(Smarty_Internal_Template $tpl, $name, $params, $nocache) - { - if (isset($tpl->tpl_function[$name])) { - if (!$tpl->caching || ($tpl->caching && $nocache)) { - $function = $tpl->tpl_function[$name]['call_name']; - } else { - if (isset($tpl->tpl_function[$name]['call_name_caching'])) { - $function = $tpl->tpl_function[$name]['call_name_caching']; - } else { - $function = $tpl->tpl_function[$name]['call_name']; - } - } - if (function_exists($function)) { - $function ($tpl, $params); - return; - } - // try to load template function dynamically - if ($this->addTplFuncToCache($tpl, $name, $function)) { - $function ($tpl, $params); - return; - } - } - throw new SmartyException("Unable to find template function '{$name}'"); - } - - /** - * - * Add template function to cache file for nocache calls - * - * @param Smarty_Internal_Template $tpl - * @param string $_name template function name - * @param string $_function PHP function name - * - * @return bool - */ - public function addTplFuncToCache(Smarty_Internal_Template $tpl, $_name, $_function) - { - $funcParam = $tpl->tpl_function[$_name]; - if (is_file($funcParam['compiled_filepath'])) { - // read compiled file - $code = file_get_contents($funcParam['compiled_filepath']); - // grab template function - if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) { - // grab source info from file dependency - preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1); - unset($code); - // make PHP function known - eval($match[0]); - if (function_exists($_function)) { - // search cache file template - $tplPtr = $tpl; - while (!isset($tplPtr->cached) && isset($tplPtr->parent)) { - $tplPtr = $tplPtr->parent; - } - // add template function code to cache file - if (isset($tplPtr->cached)) { - $cache = $tplPtr->cached; - $content = $cache->read($tplPtr); - if ($content) { - // check if we must update file dependency - if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) { - $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content); - } - $tplPtr->smarty->ext->_updateCache->write($cache, $tplPtr, preg_replace('/\s*\?>\s*$/', "\n", $content) . "\n" . - preg_replace(array('/^\s*<\?php\s+/', '/\s*\?>\s*$/'), "\n", - $match[0])); - } - } - return true; - } - } - } - return false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php deleted file mode 100644 index 5a125a4a7..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -/** - * Runtime Methods updateScope - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_UpdateScope -{ - /** - * Update new assigned template variable in other effected scopes - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $varName variable name - * @param int $scope scope to which bubble up variable value - */ - public function updateScope(Smarty_Internal_Template $tpl, $varName, $scope = Smarty::SCOPE_LOCAL) - { - if (!$scope && !$tpl->scope) { - return; - } - foreach (array($scope, $tpl->scope) as $s) { - $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s; - if ($bubble_up && $s) { - $ptr = $tpl->parent; - if (isset($ptr)) { - $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_PARENT) { - continue; - } - while (isset($ptr) && $ptr->_objType == 2) { - $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_TPL_ROOT) { - continue; - } elseif ($s == Smarty::SCOPE_SMARTY) { - $tpl->smarty->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - } elseif ($s == Smarty::SCOPE_GLOBAL) { - Smarty::$global_tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - } elseif ($s == Smarty::SCOPE_ROOT) { - while (isset($ptr->parent)) { - $ptr = $ptr->parent; - } - $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - } - } - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php deleted file mode 100644 index 7defd6c92..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/** - * Runtime Methods decodeProperties - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_ValidateCompiled -{ - /** - * This function is executed automatically when a compiled or cached template file is included - * - Decode saved properties from compiled template and cache files - * - Check if compiled or cache file is valid - * - * @param array $properties special template properties - * @param bool $cache flag if called from cache file - * - * @return bool flag if compiled or cache file is valid - */ - public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false) - { - $is_valid = true; - if (Smarty::SMARTY_VERSION != $properties['version']) { - // new version must rebuild - $is_valid = false; - } elseif ($is_valid && !empty($properties['file_dependency']) && - ((!$cache && $tpl->smarty->compile_check) || $tpl->smarty->compile_check == 1) - ) { - // check file dependencies at compiled code - foreach ($properties['file_dependency'] as $_file_to_check) { - if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'extends' || $_file_to_check[2] == 'php') { - if ($tpl->source->filepath == $_file_to_check[0]) { - // do not recheck current template - continue; - //$mtime = $tpl->source->getTimeStamp(); - } else { - // file and php types can be checked without loading the respective resource handlers - $mtime = is_file($_file_to_check[0]) ? filemtime($_file_to_check[0]) : false; - } - } elseif ($_file_to_check[2] == 'string') { - continue; - } else { - $handler = Smarty_Resource::load($tpl->smarty, $_file_to_check[2]); - if ($handler->checkTimestamps()) { - $source = Smarty_Template_Source::load($tpl, $tpl->smarty, $_file_to_check[ 0 ]); - $mtime = $source->getTimeStamp(); - } else { - continue; - } - } - if (!$mtime || $mtime > $_file_to_check[1]) { - $is_valid = false; - break; - } - } - } - if ($cache) { - // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc - if ($tpl->caching === Smarty::CACHING_LIFETIME_SAVED && $properties['cache_lifetime'] >= 0 && - (time() > ($tpl->cached->timestamp + $properties['cache_lifetime'])) - ) { - $is_valid = false; - } - $tpl->cached->cache_lifetime = $properties['cache_lifetime']; - $tpl->cached->valid = $is_valid; - $resource = $tpl->cached; - } else { - $tpl->mustCompile = !$is_valid; - $resource = $tpl->compiled; - $resource->includes = isset($properties['includes']) ? $properties['includes'] : array(); - } - if ($is_valid) { - $resource->unifunc = $properties['unifunc']; - $resource->has_nocache_code = $properties['has_nocache_code']; - // $tpl->compiled->nocache_hash = $properties['nocache_hash']; - $resource->file_dependency = $properties['file_dependency']; - if (isset($properties['tpl_function'])) { - $tpl->tpl_function = $properties['tpl_function']; - } - } - return $is_valid && !function_exists($properties['unifunc']); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_var.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_var.php deleted file mode 100644 index 8e09108fe..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_var.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/** - * Runtime Methods createLocalArrayVariable - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_Var -{ - /** - * Template code runtime function to create a local Smarty variable for array assignments - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $varName template variable name - * @param bool $nocache cache mode of variable - */ - public function createLocalArrayVariable(Smarty_Internal_Template $tpl, $varName, $nocache = false) - { - if (!isset($tpl->tpl_vars[$varName])) { - $tpl->tpl_vars[$varName] = new Smarty_Variable(array(), $nocache); - } else { - $tpl->tpl_vars[$varName] = clone $tpl->tpl_vars[$varName]; - if (!(is_array($tpl->tpl_vars[$varName]->value) || - $tpl->tpl_vars[$varName]->value instanceof ArrayAccess) - ) { - settype($tpl->tpl_vars[$varName]->value, 'array'); - } - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_template.php b/library/Smarty/libs/sysplugins/smarty_internal_template.php deleted file mode 100644 index 7c16a53db..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_template.php +++ /dev/null @@ -1,376 +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_Source|Smarty_Template_Config $source - * @property Smarty_Template_Compiled $compiled - * @property Smarty_Template_Cached $cached - * @method bool mustCompile() - */ -class Smarty_Internal_Template extends Smarty_Internal_TemplateBase -{ - /** - * 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; - - /** - * 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; - - /** - * Known template functions - * - * @var array - */ - public $tpl_function = array(); - - /** - * Scope in which template is rendered - * - * @var int - */ - public $scope = 0; - - /** - * 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_Internal_Template|\Smarty|\Smarty_Internal_Data $_parent back pointer to parent object - * with variables or null - * @param mixed $_cache_id cache id or null - * @param mixed $_compile_id compile id or null - * @param bool $_caching use caching? - * @param int $_cache_lifetime cache life-time in seconds - * - * @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) - { - $this->smarty = &$smarty; - // Smarty parameter - $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; - $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; - $this->caching = $_caching === null ? $this->smarty->caching : $_caching; - if ($this->caching === true) { - $this->caching = Smarty::CACHING_LIFETIME_CURRENT; - } - $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime; - $this->parent = $_parent; - // Template resource - $this->template_resource = $template_resource; - $this->source = Smarty_Template_Source::load($this); - parent::__construct(); - } - - /** - * render template - * - * @param bool $merge_tpl_vars if true parent template variables merged in to local scope - * @param bool $no_output_filter if true do not run output filter - * @param bool $display true: display, false: fetch null: subtemplate - * - * @throws Exception - * @throws SmartyException - * @return string rendered template output - */ - public function render($no_output_filter = true, $display = null) - { - $parentIsTpl = isset($this->parent) && $this->parent->_objType == 2; - if ($this->smarty->debugging) { - $this->smarty->_debug->start_template($this, $display); - } - // checks if template exists - if (!$this->source->exists) { - if ($parentIsTpl) { - $parent_resource = " in '{$this->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); - } - // disable caching for evaluated code - if ($this->source->handler->recompiled) { - $this->caching = false; - } - // read from cache or render - $isCacheTpl = - $this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED; - if ($isCacheTpl) { - if (!isset($this->cached)) { - $this->loadCached(); - } - $this->cached->render($this, $no_output_filter); - } elseif ($this->source->handler->uncompiled) { - $this->source->render($this); - } else { - if (!isset($this->compiled)) { - $this->loadCompiled(); - } - $this->compiled->render($this); - } - - // 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 { - ob_end_flush(); - flush(); - } - } - 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 ($parentIsTpl) { - if (!empty($this->tpl_function)) { - $this->parent->tpl_function = array_merge($this->parent->tpl_function, $this->tpl_function); - } - foreach ($this->compiled->required_plugins as $code => $tmp1) { - foreach ($tmp1 as $name => $tmp) { - foreach ($tmp as $type => $data) { - $this->parent->compiled->required_plugins[$code][$name][$type] = $data; - } - } - } - } - if (!$no_output_filter && - (!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) && - (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output'])) - ) { - return $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this); - } - // return cache content - return null; - } - } - - /** - * Compiles the template - * If the template is not evaluated the compiled template is saved on disk - */ - 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->cached, $this, $content); - } - - /** - * Get unique template id - * - * @return string - */ - 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 - */ - public function capture_error() - { - throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\""); - } - - /** - * Load compiled object - * - */ - public function loadCompiled() - { - if (!isset($this->compiled)) { - $this->compiled = Smarty_Template_Compiled::load($this); - } - } - - /** - * Load cached object - * - */ - public function loadCached() - { - if (!isset($this->cached)) { - $this->cached = Smarty_Template_Cached::load($this); - } - } - - /** - * Load compiler object - * - * @throws \SmartyException - */ - public function loadCompiler() - { - if (!class_exists($this->source->handler->compiler_class)) { - $this->smarty->loadPlugin($this->source->handler->compiler_class); - } - $this->compiler = new $this->source->handler->compiler_class($this->source->handler->template_lexer_class, - $this->source->handler->template_parser_class, - $this->smarty); - } - - /** - * Handle unknown class methods - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - 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); - } - - /** - * 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'."); - } - - /** - * 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."); - } - - /** - * 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/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php b/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php deleted file mode 100644 index a745d1dc2..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php +++ /dev/null @@ -1,2833 +0,0 @@ -<?php - -class TP_yyToken implements ArrayAccess -{ - public $string = ''; - - public $metadata = array(); - - public function __construct($s, $m = array()) - { - if ($s instanceof TP_yyToken) { - $this->string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string) $s; - if ($m instanceof TP_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - public function __toString() - { - return $this->string; - } - - public function offsetExists($offset) - { - return isset($this->metadata[ $offset ]); - } - - public function offsetGet($offset) - { - return $this->metadata[ $offset ]; - } - - public function offsetSet($offset, $value) - { - if ($offset === null) { - if (isset($value[ 0 ])) { - $x = ($value instanceof TP_yyToken) ? $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof TP_yyToken) { - if ($value->metadata) { - $this->metadata[ $offset ] = $value->metadata; - } - } elseif ($value) { - $this->metadata[ $offset ] = $value; - } - } - - public function offsetUnset($offset) - { - unset($this->metadata[ $offset ]); - } -} - -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"; - - const Err3 = "PHP in template not allowed. Use SmartyBC to enable it"; - - /** - * result status - * - * @var bool - */ - public $successful = true; - - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - - /** - * counter for prefix code - * - * @var int - */ - public static $prefix_number = 0; - - /** - * @var - */ - public $yymajor; - - /** - * last index of array variable - * - * @var mixed - */ - public $last_index; - - /** - * last variable name - * - * @var string - */ - public $last_variable; - - /** - * root parse tree buffer - * - * @var Smarty_Internal_ParseTree - */ - public $root_buffer; - - /** - * current parse tree object - * - * @var Smarty_Internal_ParseTree - */ - public $current_buffer; - - /** - * lexer object - * - * @var Smarty_Internal_Templatelexer - */ - public $lex; - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - - /** - * {strip} status - * - * @var bool - */ - public $strip = false; - - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * template object - * - * @var Smarty_Internal_Template - */ - public $template = null; - - /** - * block nesting level - * - * @var int - */ - public $block_nesting_level = 0; - - /** - * security object - * - * @var Smarty_Security - */ - public $security = null; - - /** - * template prefix array - * - * @var \Smarty_Internal_ParseTree[] - */ - public $template_prefix = array(); - - /** - * security object - * - * @var \Smarty_Internal_ParseTree[] - */ - public $template_postfix = array(); - - /** - * constructor - * - * @param Smarty_Internal_Templatelexer $lex - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->lex = $lex; - $this->compiler = $compiler; - $this->template = $this->compiler->template; - $this->smarty = $this->template->smarty; - $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false; - $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template(); - } - - /** - * insert PHP code in current buffer - * - * @param string $code - */ - public function insertPhpCode($code) - { - $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code)); - } - - /** - * merge PHP code with prefix code and return parse tree tag object - * - * @param string $code - * - * @return Smarty_Internal_ParseTree_Tag - */ - public function mergePrefixCode($code) - { - $tmp = ''; - foreach ($this->compiler->prefix_code as $preCode) { - $tmp .= $preCode; - } - $this->compiler->prefix_code = array(); - $tmp .= $code; - return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true)); - } - - const TP_VERT = 1; - - const TP_COLON = 2; - - const TP_PHP = 3; - - const TP_NOCACHE = 4; - - const TP_TEXT = 5; - - const TP_STRIPON = 6; - - const TP_STRIPOFF = 7; - - const TP_LITERALSTART = 8; - - const TP_LITERALEND = 9; - - const TP_LITERAL = 10; - - const TP_RDEL = 11; - - const TP_SIMPELOUTPUT = 12; - - const TP_LDEL = 13; - - const TP_DOLLARID = 14; - - const TP_EQUAL = 15; - - const TP_SIMPLETAG = 16; - - const TP_ID = 17; - - const TP_PTR = 18; - - const TP_LDELIF = 19; - - const TP_LDELFOR = 20; - - const TP_SEMICOLON = 21; - - const TP_INCDEC = 22; - - const TP_TO = 23; - - const TP_STEP = 24; - - const TP_LDELFOREACH = 25; - - const TP_SPACE = 26; - - const TP_AS = 27; - - const TP_APTR = 28; - - const TP_LDELSETFILTER = 29; - - const TP_SMARTYBLOCKCHILDPARENT = 30; - - const TP_CLOSETAG = 31; - - const TP_LDELSLASH = 32; - - const TP_ATTR = 33; - - const TP_INTEGER = 34; - - const TP_COMMA = 35; - - const TP_OPENP = 36; - - const TP_CLOSEP = 37; - - const TP_MATH = 38; - - const TP_UNIMATH = 39; - - const TP_ISIN = 40; - - const TP_INSTANCEOF = 41; - - const TP_QMARK = 42; - - const TP_NOT = 43; - - const TP_TYPECAST = 44; - - const TP_HEX = 45; - - const TP_DOT = 46; - - const TP_SINGLEQUOTESTRING = 47; - - const TP_DOUBLECOLON = 48; - - const TP_NAMESPACE = 49; - - const TP_AT = 50; - - const TP_HATCH = 51; - - const TP_OPENB = 52; - - const TP_CLOSEB = 53; - - const TP_DOLLAR = 54; - - const TP_LOGOP = 55; - - const TP_TLOGOP = 56; - - const TP_SINGLECOND = 57; - - const TP_QUOTE = 58; - - const TP_BACKTICK = 59; - - const YY_NO_ACTION = 527; - - const YY_ACCEPT_ACTION = 526; - - const YY_ERROR_ACTION = 525; - - const YY_SZ_ACTTAB = 2021; - - static public $yy_action = array(242, 10, 131, 178, 255, 76, 157, 5, 83, 293, 12, 149, 152, 116, 292, 93, 331, 217, - 284, 295, 221, 331, 226, 36, 21, 169, 35, 43, 308, 99, 26, 42, 39, 294, 235, 244, - 30, 200, 187, 80, 1, 251, 320, 206, 442, 123, 53, 242, 10, 130, 98, 255, 194, 399, - 5, 83, 442, 240, 298, 107, 116, 310, 174, 220, 217, 36, 295, 221, 399, 208, 135, - 21, 26, 161, 43, 399, 8, 174, 42, 39, 294, 235, 218, 331, 200, 187, 80, 1, 312, - 320, 11, 290, 313, 53, 242, 10, 133, 306, 255, 205, 187, 5, 83, 264, 266, 267, 211, - 116, 353, 220, 52, 217, 298, 295, 221, 206, 226, 220, 21, 290, 290, 43, 321, 36, - 249, 42, 39, 294, 235, 244, 26, 200, 206, 80, 1, 11, 320, 283, 52, 52, 53, 242, 10, - 132, 248, 255, 205, 455, 5, 83, 84, 301, 151, 455, 116, 323, 92, 36, 217, 2, 295, - 221, 331, 226, 26, 21, 290, 304, 43, 137, 36, 111, 42, 39, 294, 235, 244, 26, 200, - 187, 80, 1, 225, 320, 320, 52, 123, 53, 242, 10, 133, 98, 255, 193, 175, 5, 83, - 177, 280, 273, 234, 116, 310, 23, 278, 217, 13, 295, 221, 320, 203, 223, 21, 290, - 442, 43, 138, 187, 326, 42, 39, 294, 235, 244, 216, 200, 442, 80, 1, 4, 320, 329, - 52, 15, 53, 242, 10, 134, 91, 255, 205, 176, 5, 83, 293, 12, 16, 90, 116, 292, 300, - 99, 217, 241, 295, 221, 320, 226, 215, 28, 213, 201, 43, 105, 187, 286, 42, 39, - 294, 235, 244, 215, 200, 214, 80, 1, 105, 320, 11, 135, 285, 53, 242, 10, 133, 8, - 255, 205, 164, 5, 83, 442, 215, 19, 239, 116, 99, 105, 331, 217, 6, 295, 221, 442, - 192, 311, 21, 182, 289, 43, 308, 443, 32, 42, 39, 294, 235, 244, 296, 200, 17, 80, - 1, 443, 320, 262, 107, 26, 53, 242, 10, 133, 122, 255, 191, 172, 5, 83, 183, 188, - 148, 231, 116, 223, 168, 331, 217, 181, 295, 221, 331, 226, 206, 21, 331, 141, 43, - 308, 206, 38, 42, 39, 294, 235, 244, 331, 200, 188, 80, 1, 187, 320, 155, 206, 308, - 53, 242, 10, 133, 25, 255, 198, 188, 5, 83, 206, 145, 160, 308, 116, 228, 146, 206, - 217, 180, 295, 221, 331, 226, 286, 21, 331, 359, 43, 179, 289, 38, 42, 39, 294, - 235, 244, 250, 200, 271, 80, 1, 272, 320, 122, 94, 103, 53, 242, 10, 129, 3, 255, - 205, 144, 5, 83, 185, 289, 170, 99, 116, 270, 322, 331, 217, 184, 295, 221, 331, - 226, 99, 7, 171, 35, 43, 308, 89, 105, 42, 39, 294, 235, 244, 120, 200, 328, 80, 1, - 187, 320, 82, 223, 4, 53, 242, 10, 134, 142, 255, 205, 107, 5, 83, 309, 324, 302, - 20, 116, 316, 206, 291, 217, 290, 295, 221, 33, 226, 277, 28, 399, 243, 43, 257, - 219, 189, 42, 39, 294, 235, 244, 110, 200, 140, 80, 399, 147, 320, 253, 327, 258, - 53, 399, 14, 236, 220, 207, 154, 113, 65, 108, 319, 159, 238, 311, 98, 471, 471, - 330, 237, 279, 471, 210, 325, 245, 299, 310, 86, 308, 143, 268, 263, 259, 260, 269, - 177, 204, 287, 136, 242, 10, 150, 87, 255, 320, 139, 5, 83, 293, 12, 22, 195, 116, - 292, 247, 258, 217, 153, 295, 221, 220, 207, 36, 126, 50, 104, 109, 112, 88, 26, - 98, 246, 397, 330, 237, 85, 212, 210, 325, 245, 258, 310, 102, 299, 299, 220, 207, - 397, 113, 65, 108, 320, 299, 134, 397, 98, 222, 442, 330, 237, 299, 299, 210, 325, - 245, 258, 310, 299, 299, 442, 220, 207, 299, 126, 69, 108, 299, 288, 31, 299, 98, - 299, 299, 330, 237, 299, 299, 210, 325, 245, 80, 310, 299, 320, 299, 258, 299, 299, - 209, 299, 220, 207, 299, 126, 69, 108, 206, 299, 299, 455, 98, 299, 206, 330, 237, - 455, 365, 210, 325, 245, 299, 310, 355, 227, 258, 299, 299, 299, 199, 220, 207, 36, - 126, 64, 104, 299, 214, 36, 26, 98, 299, 442, 330, 237, 26, 299, 210, 325, 245, - 258, 310, 471, 471, 442, 220, 207, 471, 126, 69, 108, 293, 12, 299, 299, 98, 292, - 299, 330, 237, 299, 299, 210, 325, 245, 36, 310, 163, 299, 258, 299, 299, 26, 202, - 220, 207, 299, 126, 44, 108, 471, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, - 210, 325, 245, 299, 310, 299, 299, 258, 134, 299, 299, 252, 220, 207, 206, 126, 72, - 108, 299, 299, 299, 299, 98, 299, 396, 330, 237, 299, 299, 210, 325, 245, 258, 310, - 299, 299, 299, 220, 207, 396, 126, 74, 108, 254, 299, 80, 396, 98, 320, 299, 330, - 237, 299, 297, 210, 325, 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 258, 5, - 83, 299, 299, 220, 207, 116, 126, 68, 108, 217, 299, 295, 221, 98, 299, 299, 330, - 237, 299, 299, 210, 325, 245, 299, 310, 299, 258, 299, 299, 299, 299, 220, 207, - 299, 100, 70, 108, 299, 303, 29, 299, 98, 299, 299, 330, 237, 299, 297, 210, 325, - 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 299, 5, 83, 299, 299, 299, 299, - 116, 299, 299, 258, 217, 299, 295, 221, 220, 207, 299, 126, 66, 108, 299, 299, 299, - 299, 98, 293, 12, 330, 237, 299, 292, 210, 325, 245, 299, 310, 258, 299, 299, 305, - 29, 220, 207, 299, 126, 60, 108, 299, 293, 12, 299, 98, 299, 292, 330, 237, 299, - 299, 210, 325, 245, 299, 310, 232, 299, 258, 299, 206, 299, 299, 220, 207, 299, - 126, 49, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 230, 210, 325, 245, - 299, 310, 258, 167, 299, 299, 299, 220, 207, 299, 126, 58, 108, 299, 41, 40, 37, - 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, - 220, 97, 299, 81, 45, 106, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, - 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 63, - 108, 299, 186, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, - 258, 299, 299, 299, 299, 220, 197, 299, 114, 59, 108, 299, 41, 40, 37, 98, 299, - 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, - 207, 299, 126, 55, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, - 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 57, 108, - 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, - 299, 256, 275, 282, 220, 95, 299, 81, 48, 106, 233, 41, 40, 37, 98, 299, 299, 330, - 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, - 126, 78, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, - 299, 310, 299, 299, 258, 299, 206, 18, 299, 220, 207, 299, 96, 61, 108, 299, 299, - 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, - 299, 299, 220, 207, 299, 126, 47, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, - 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 75, - 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, - 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 64, 108, 299, 299, 299, 299, - 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, - 220, 207, 299, 126, 56, 108, 317, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, - 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 115, 46, 108, 299, - 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, - 258, 299, 206, 299, 299, 220, 207, 299, 126, 79, 108, 299, 190, 299, 299, 98, 299, - 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, - 207, 299, 126, 62, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, - 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 71, 108, 299, 299, - 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, - 299, 206, 299, 299, 220, 207, 299, 101, 67, 108, 299, 318, 299, 299, 98, 299, 299, - 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207, - 299, 126, 77, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, - 245, 299, 310, 258, 299, 256, 275, 282, 220, 196, 299, 126, 54, 108, 299, 299, 299, - 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, - 206, 299, 299, 220, 207, 299, 126, 73, 108, 299, 274, 299, 299, 98, 299, 299, 330, - 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 224, 299, - 118, 299, 108, 299, 41, 40, 37, 98, 299, 299, 299, 261, 299, 299, 210, 325, 245, - 299, 310, 258, 299, 256, 275, 282, 220, 224, 299, 128, 299, 108, 299, 299, 299, - 299, 98, 299, 299, 229, 315, 206, 299, 210, 325, 245, 299, 310, 299, 471, 471, 307, - 27, 299, 471, 455, 526, 51, 265, 266, 267, 211, 299, 299, 220, 299, 36, 299, 409, - 409, 299, 299, 299, 26, 299, 299, 299, 299, 41, 40, 37, 206, 299, 455, 299, 455, - 299, 471, 299, 455, 299, 299, 299, 299, 299, 256, 275, 282, 229, 299, 299, 117, - 299, 442, 299, 409, 409, 409, 471, 471, 299, 299, 299, 471, 455, 442, 299, 299, 41, - 40, 37, 299, 409, 409, 409, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 256, - 275, 282, 299, 299, 299, 299, 455, 299, 455, 258, 471, 299, 455, 281, 220, 224, - 299, 127, 299, 108, 299, 299, 299, 299, 98, 299, 299, 299, 299, 299, 299, 210, 325, - 245, 258, 310, 206, 156, 299, 220, 224, 175, 121, 299, 108, 299, 299, 331, 299, 98, - 23, 278, 299, 299, 299, 299, 210, 325, 245, 34, 310, 36, 299, 299, 187, 299, 299, - 299, 26, 299, 299, 258, 299, 41, 40, 37, 220, 224, 299, 125, 299, 108, 299, 299, - 299, 299, 98, 299, 299, 229, 256, 275, 282, 210, 325, 245, 299, 310, 299, 471, 471, - 258, 31, 299, 471, 455, 220, 224, 299, 124, 299, 108, 299, 299, 299, 299, 98, 299, - 299, 299, 299, 299, 299, 210, 325, 245, 258, 310, 206, 299, 299, 220, 224, 455, - 119, 455, 108, 471, 299, 455, 299, 98, 299, 299, 229, 299, 299, 24, 210, 325, 245, - 299, 310, 299, 471, 471, 299, 471, 471, 471, 455, 299, 471, 455, 206, 41, 40, 37, - 299, 299, 299, 471, 471, 299, 299, 299, 471, 455, 299, 299, 276, 299, 256, 275, - 282, 299, 299, 299, 455, 36, 455, 455, 471, 455, 455, 471, 26, 455, 299, 206, 403, - 41, 40, 37, 206, 455, 299, 455, 299, 471, 403, 455, 403, 299, 299, 403, 299, 299, - 256, 275, 282, 299, 403, 299, 403, 299, 403, 299, 299, 299, 299, 299, 299, 299, - 299, 223, 41, 40, 37, 299, 299, 41, 40, 37, 299, 299, 299, 299, 299, 299, 299, 299, - 173, 256, 275, 282, 175, 314, 256, 275, 282, 299, 331, 166, 299, 23, 278, 175, 162, - 299, 299, 299, 175, 331, 299, 299, 23, 278, 331, 187, 299, 23, 278, 158, 299, 299, - 299, 175, 299, 299, 187, 299, 299, 331, 165, 187, 23, 278, 175, 299, 299, 299, 299, - 299, 331, 299, 299, 23, 278, 299, 187, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 187,); - - static public $yy_lookahead = array(12, 13, 14, 80, 16, 17, 71, 19, 20, 12, 13, 71, 91, 25, 17, 75, 81, 29, 30, 31, - 32, 81, 34, 26, 36, 28, 15, 39, 93, 18, 33, 43, 44, 45, 46, 47, 28, 49, 98, 51, - 52, 70, 54, 1, 36, 74, 58, 12, 13, 14, 79, 16, 17, 11, 19, 20, 48, 86, 64, 48, - 25, 90, 75, 69, 29, 26, 31, 32, 26, 34, 46, 36, 33, 71, 39, 33, 52, 75, 43, 44, - 45, 46, 47, 81, 49, 98, 51, 52, 53, 54, 35, 22, 37, 58, 12, 13, 14, 103, 16, 17, - 98, 19, 20, 63, 64, 65, 66, 25, 11, 69, 41, 29, 64, 31, 32, 1, 34, 69, 36, 22, - 22, 39, 53, 26, 95, 43, 44, 45, 46, 47, 33, 49, 1, 51, 52, 35, 54, 37, 41, 41, - 58, 12, 13, 14, 14, 16, 17, 46, 19, 20, 102, 103, 71, 52, 25, 11, 75, 26, 29, - 36, 31, 32, 81, 34, 33, 36, 22, 17, 39, 14, 26, 48, 43, 44, 45, 46, 47, 33, 49, - 98, 51, 52, 70, 54, 54, 41, 74, 58, 12, 13, 14, 79, 16, 17, 75, 19, 20, 8, 9, - 10, 50, 25, 90, 84, 85, 29, 13, 31, 32, 54, 34, 46, 36, 22, 36, 39, 14, 98, 53, - 43, 44, 45, 46, 47, 46, 49, 48, 51, 52, 36, 54, 53, 41, 21, 58, 12, 13, 14, 36, - 16, 17, 75, 19, 20, 12, 13, 15, 35, 25, 17, 59, 18, 29, 22, 31, 32, 54, 34, 74, - 36, 76, 77, 39, 79, 98, 99, 43, 44, 45, 46, 47, 74, 49, 76, 51, 52, 79, 54, 35, - 46, 37, 58, 12, 13, 14, 52, 16, 17, 71, 19, 20, 36, 74, 15, 76, 25, 18, 79, 81, - 29, 35, 31, 32, 48, 34, 92, 36, 94, 95, 39, 93, 36, 15, 43, 44, 45, 46, 47, 53, - 49, 26, 51, 52, 48, 54, 89, 48, 33, 58, 12, 13, 14, 96, 16, 17, 71, 19, 20, 14, - 98, 71, 17, 25, 46, 71, 81, 29, 75, 31, 32, 81, 34, 1, 36, 81, 71, 39, 93, 1, 2, - 43, 44, 45, 46, 47, 81, 49, 98, 51, 52, 98, 54, 91, 1, 93, 58, 12, 13, 14, 28, - 16, 17, 98, 19, 20, 1, 91, 71, 93, 25, 18, 71, 1, 29, 80, 31, 32, 81, 34, 99, - 36, 81, 11, 39, 94, 95, 2, 43, 44, 45, 46, 47, 89, 49, 65, 51, 52, 68, 54, 96, - 80, 79, 58, 12, 13, 14, 36, 16, 17, 71, 19, 20, 94, 95, 71, 18, 25, 53, 96, 81, - 29, 75, 31, 32, 81, 34, 18, 36, 74, 15, 39, 93, 91, 79, 43, 44, 45, 46, 47, 17, - 49, 17, 51, 52, 98, 54, 17, 46, 36, 58, 12, 13, 14, 51, 16, 17, 48, 19, 20, 17, - 34, 17, 42, 25, 17, 1, 34, 29, 22, 31, 32, 23, 34, 37, 36, 11, 17, 39, 5, 17, - 17, 43, 44, 45, 46, 47, 17, 49, 51, 51, 26, 27, 54, 11, 53, 64, 58, 33, 13, 14, - 69, 70, 17, 72, 73, 74, 53, 91, 81, 92, 79, 12, 13, 82, 83, 9, 17, 86, 87, 88, - 104, 90, 79, 93, 91, 3, 4, 5, 6, 7, 8, 100, 101, 79, 12, 13, 91, 79, 16, 54, 91, - 19, 20, 12, 13, 13, 14, 25, 17, 17, 64, 29, 91, 31, 32, 69, 70, 26, 72, 73, 74, - 78, 76, 79, 33, 79, 34, 11, 82, 83, 79, 15, 86, 87, 88, 64, 90, 67, 104, 104, - 69, 70, 26, 72, 73, 74, 54, 104, 14, 33, 79, 17, 36, 82, 83, 104, 104, 86, 87, - 88, 64, 90, 104, 104, 48, 69, 70, 104, 72, 73, 74, 104, 101, 15, 104, 79, 104, - 104, 82, 83, 104, 104, 86, 87, 88, 51, 90, 104, 54, 104, 64, 104, 104, 97, 104, - 69, 70, 104, 72, 73, 74, 1, 104, 104, 46, 79, 104, 1, 82, 83, 52, 11, 86, 87, - 88, 104, 90, 11, 18, 64, 104, 104, 104, 97, 69, 70, 26, 72, 73, 74, 104, 76, 26, - 33, 79, 104, 36, 82, 83, 33, 104, 86, 87, 88, 64, 90, 12, 13, 48, 69, 70, 17, - 72, 73, 74, 12, 13, 104, 104, 79, 17, 104, 82, 83, 104, 104, 86, 87, 88, 26, 90, - 28, 104, 64, 104, 104, 33, 97, 69, 70, 104, 72, 73, 74, 50, 104, 104, 104, 79, - 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 14, 104, 104, 17, - 69, 70, 1, 72, 73, 74, 104, 104, 104, 104, 79, 104, 11, 82, 83, 104, 104, 86, - 87, 88, 64, 90, 104, 104, 104, 69, 70, 26, 72, 73, 74, 49, 104, 51, 33, 79, 54, - 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, 12, 13, 14, 104, 16, 104, 64, 19, - 20, 104, 104, 69, 70, 25, 72, 73, 74, 29, 104, 31, 32, 79, 104, 104, 82, 83, - 104, 104, 86, 87, 88, 104, 90, 104, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, - 74, 104, 58, 59, 104, 79, 104, 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, - 12, 13, 14, 104, 16, 104, 104, 19, 20, 104, 104, 104, 104, 25, 104, 104, 64, 29, - 104, 31, 32, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 12, 13, 82, 83, - 104, 17, 86, 87, 88, 104, 90, 64, 104, 104, 58, 59, 69, 70, 104, 72, 73, 74, - 104, 12, 13, 104, 79, 104, 17, 82, 83, 104, 104, 86, 87, 88, 104, 90, 50, 104, - 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, - 82, 83, 104, 50, 86, 87, 88, 104, 90, 64, 27, 104, 104, 104, 69, 70, 104, 72, - 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, - 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, - 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, - 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, - 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, - 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, - 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, - 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, - 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, - 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, - 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, - 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 2, - 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, - 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, - 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, - 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, - 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, - 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, - 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, - 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, - 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, - 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, - 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, - 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, - 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, - 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, - 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, - 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, - 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, - 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, - 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, - 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, - 104, 104, 69, 70, 104, 72, 104, 74, 104, 38, 39, 40, 79, 104, 104, 104, 83, 104, - 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 104, 74, 104, - 104, 104, 104, 79, 104, 104, 2, 83, 1, 104, 86, 87, 88, 104, 90, 104, 12, 13, - 11, 15, 104, 17, 18, 61, 62, 63, 64, 65, 66, 104, 104, 69, 104, 26, 104, 1, 2, - 104, 104, 104, 33, 104, 104, 104, 104, 38, 39, 40, 1, 104, 46, 104, 48, 104, 50, - 104, 52, 104, 104, 104, 104, 104, 55, 56, 57, 2, 104, 104, 21, 104, 36, 104, 38, - 39, 40, 12, 13, 104, 104, 104, 17, 18, 48, 104, 104, 38, 39, 40, 104, 55, 56, - 57, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 55, 56, 57, 104, 104, 104, - 104, 46, 104, 48, 64, 50, 104, 52, 53, 69, 70, 104, 72, 104, 74, 104, 104, 104, - 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 71, 104, 69, 70, - 75, 72, 104, 74, 104, 104, 81, 104, 79, 84, 85, 104, 104, 104, 104, 86, 87, 88, - 24, 90, 26, 104, 104, 98, 104, 104, 104, 33, 104, 104, 64, 104, 38, 39, 40, 69, - 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 2, 55, 56, 57, 86, 87, - 88, 104, 90, 104, 12, 13, 64, 15, 104, 17, 18, 69, 70, 104, 72, 104, 74, 104, - 104, 104, 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 104, - 104, 69, 70, 46, 72, 48, 74, 50, 104, 52, 104, 79, 104, 104, 2, 104, 104, 2, 86, - 87, 88, 104, 90, 104, 12, 13, 104, 12, 13, 17, 18, 104, 17, 18, 1, 38, 39, 40, - 104, 104, 104, 12, 13, 104, 104, 104, 17, 18, 104, 104, 53, 104, 55, 56, 57, - 104, 104, 104, 46, 26, 48, 46, 50, 48, 52, 50, 33, 52, 104, 1, 11, 38, 39, 40, - 1, 46, 104, 48, 104, 50, 21, 52, 23, 104, 104, 26, 104, 104, 55, 56, 57, 104, - 33, 104, 35, 104, 37, 104, 104, 104, 104, 104, 104, 104, 104, 46, 38, 39, 40, - 104, 104, 38, 39, 40, 104, 104, 104, 104, 104, 104, 104, 104, 71, 55, 56, 57, - 75, 59, 55, 56, 57, 104, 81, 71, 104, 84, 85, 75, 71, 104, 104, 104, 75, 81, - 104, 104, 84, 85, 81, 98, 104, 84, 85, 71, 104, 104, 104, 75, 104, 104, 98, 104, - 104, 81, 71, 98, 84, 85, 75, 104, 104, 104, 104, 104, 81, 104, 104, 84, 85, 104, - 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98,); - - const YY_SHIFT_USE_DFLT = - 13; - - const YY_SHIFT_MAX = 236; - - static public $yy_shift_ofst = array(542, 364, 82, 82, 82, 411, 364, 411, 35, - 12, - 12, 82, 82, 82, 82, 82, 82, - 176, 82, 82, 129, 82, 82, 82, 317, 82, 82, 82, 82, 82, 82, 270, 82, 82, 82, 82, - 176, 223, 223, 458, 458, 458, 458, 458, 1734, 1603, 1862, 1862, 1862, 1862, - 1862, 542, 749, 803, 1897, 1448, 1531, 1199, 1643, 1826, 1365, 950, 1282, 1033, - 1116, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 660, - 1902, 1089, 1089, 594, 666, 131, 202, 865, - 3, 703, 551, 551, 233, 202, 202, - 131, 131, 357, 97, 484, 144, 920, 505, 42, 768, 189, 232, 11, 232, 278, 324, - 428, 39, 372, 324, 39, 351, 384, 391, 294, 155, 114, 114, 114, 114, 417, 417, - 114, 114, 114, 114, - 13, 1786, 1659, 1600, 1844, 1841, 1858, 552, 897, 519, - 618, 24, 101, 39, 101, 24, 39, 24, 39, 130, 39, 39, 24, 39, 24, 24, 193, 24, - 39, 39, 39, 24, 39, 39, 39, 130, 39, 39, 39, 130, 39, 130, 39, 231, 39, 39, - 114, 114, 114, 526, 404, 417, 404, 114, 417, 390, 114, 417, - 13, - 13, - 13, - - 13, - 13, 1630, 1888, 576, 178, 694, 191, 69, 8, 100, 275, 212, 243, 297, - 265, 255, 150, 98, 165, 55, 123, 493, 479, 468, 456, 434, 482, 483, 473, 461, - 502, 489, 457, 452, 466, 422, 421, 449, 442, 444, 462, 432, 467, 440, 464, 446, - 390,); - - const YY_REDUCE_USE_DFLT = - 80; - - const YY_REDUCE_MAX = 190; - - static public $yy_reduce_ofst = array(1558, 451, 556, 640, 586, 506, 531, 615, 995, 939, 1078, 723, 1244, 968, 856, - 912, 1354, 1134, 1105, 1161, 1051, 1217, 1022, 1188, 1300, 1466, 1383, 1271, - 1327, 1437, 1410, 757, 698, 669, 885, 829, 785, 1493, 1520, 1761, 1706, 1669, - 1644, 1736, 1880, 1665, 1896, 1911, 1665, 1891, 1922, 40, - 29, 48, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 81, 119, 119, 119, 112, 2, - 60, 184, - 6, 264, 358, - - 65, 217, 213, 218, 197, 284, 269, 166, 363, - 13, 363, 295, 342, - 13, - 13, - 349, 281, 310, 295, 310, 323, 310, 316, 272, 236, 273, - 13, - 13, - 13, 320, - 374, - 13, - 13, 366, - 13, 338, 310, - 13, - 13, - 13, - 13, - 13, 465, 465, - 465, 465, 465, 465, 474, 450, 465, 465, 437, 469, 447, 453, 437, 447, 437, - 447, 463, 447, 447, 437, 447, 437, 437, 481, 437, 447, 447, 447, 437, 447, - 447, 447, 478, 447, 447, 447, 511, 447, 504, 447, 503, 447, 447, 241, 241, - 241, 530, 300, 29, 300, 241, 29, 361, 241, 29, - 79, - 77, 314, 340, 436,); - - static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 53, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44, - 45, 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44, - 45, 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(1, 24, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 11, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,), - array(14, 17, 49, 51, 54,), - array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,), - array(1, 38, 39, 40, 55, 56, 57, 59,), - array(1, 11, 38, 39, 40, 55, 56, 57,), - array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 2, 38, 39, 40, 55, 56, 57,), - array(1, 21, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 53, 55, 56, 57,), - array(1, 11, 38, 39, 40, 55, 56, 57,), - array(1, 27, 38, 39, 40, 55, 56, 57,), - array(1, 37, 38, 39, 40, 55, 56, 57,), - array(1, 11, 38, 39, 40, 55, 56, 57,), - array(1, 37, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 11, 18, 26, 33, 36, 48,), array(1, 38, 39, 40, 55, 56, 57,), - array(38, 39, 40, 55, 56, 57,), array(38, 39, 40, 55, 56, 57,), - array(14, 17, 51, 54,), array(1, 11, 26, 33,), array(1, 26, 33,), - array(14, 36, 54,), - array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,), - array(12, 13, 17, 26, 28, 33,), array(12, 13, 17, 26, 28, 33,), - array(12, 13, 17, 26, 33,), array(12, 13, 17, 26, 33,), array(18, 46, 52,), - array(14, 36, 54,), array(14, 36, 54,), array(1, 26, 33,), - array(1, 26, 33,), array(1, 2,), array(11, 22, 26, 33, 41,), - array(1, 11, 26, 27, 33,), array(11, 22, 26, 33, 41,), - array(12, 13, 17, 50,), array(13, 14, 17, 54,), array(1, 11, 26, 33,), - array(1, 11, 26, 33,), array(8, 9, 10,), array(12, 13, 17,), - array(15, 18, 48,), array(12, 13, 17,), array(15, 18, 48,), array(14, 17,), - array(18, 48,), array(26, 33,), array(1, 18,), array(14, 17,), - array(26, 33,), array(1, 28,), array(1, 53,), array(1, 11,), array(26, 33,), - array(14, 54,), array(1,), array(1,), array(1,), array(1,), array(18,), - array(18,), array(1,), array(1,), array(1,), array(1,), array(), - array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,), - array(2, 12, 13, 17, 18, 46, 48, 50, 52, 53,), - array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,), - array(2, 12, 13, 17, 18, 46, 48, 50, 52,), - array(2, 12, 13, 17, 18, 46, 48, 50, 52,), - array(12, 13, 17, 18, 46, 48, 50, 52,), array(13, 14, 17, 34, 54,), - array(12, 13, 17, 50,), array(12, 13, 17,), array(15, 46, 52,), - array(46, 52,), array(46, 52,), array(26, 33,), array(46, 52,), - array(46, 52,), array(26, 33,), array(46, 52,), array(26, 33,), - array(14, 54,), array(26, 33,), array(26, 33,), array(46, 52,), - array(26, 33,), array(46, 52,), array(46, 52,), array(13, 36,), - array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,), - array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,), - array(14, 54,), array(26, 33,), array(26, 33,), array(26, 33,), - array(14, 54,), array(26, 33,), array(14, 54,), array(26, 33,), - array(15, 22,), array(26, 33,), array(26, 33,), array(1,), array(1,), - array(1,), array(9,), array(2,), array(18,), array(2,), array(1,), - array(18,), array(36,), array(1,), array(18,), array(), array(), array(), - array(), array(), array(1, 2, 36, 38, 39, 40, 48, 55, 56, 57,), - array(11, 21, 23, 26, 33, 35, 37, 46,), array(11, 15, 26, 33, 36, 48,), - array(36, 46, 48, 53,), array(12, 13, 17, 50,), array(22, 41, 59,), - array(22, 41, 53,), array(28, 36, 48,), array(35, 37,), array(36, 48,), - array(21, 35,), array(35, 37,), array(15, 46,), array(35, 53,), - array(36, 48,), array(17, 50,), array(22, 41,), array(46, 53,), - array(35, 37,), array(36, 48,), array(5,), array(17,), array(23,), - array(37,), array(15,), array(17,), array(17,), array(53,), array(53,), - array(11,), array(17,), array(51,), array(34,), array(22,), array(51,), - array(46,), array(17,), array(17,), array(17,), array(17,), array(36,), - array(17,), array(42,), array(17,), array(34,), array(36,), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(),); - - static public $yy_default = array(335, 510, 490, 490, 490, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 393, 525, 360, 393, - 357, 393, 369, 332, 525, 525, 525, 525, 525, 525, 525, 525, 525, 398, 525, 525, - 525, 513, 405, 395, 404, 489, 398, 374, 400, 511, 488, 414, 432, 512, 421, 420, - 525, 407, 393, 525, 525, 393, 393, 393, 393, 502, 525, 525, 393, 393, 383, 422, - 407, 422, 455, 525, 407, 407, 525, 455, 445, 455, 445, 525, 445, 393, 387, 525, - 371, 407, 407, 407, 393, 525, 417, 425, 389, 410, 499, 445, 423, 411, 407, 424, - 497, 444, 444, 444, 444, 444, 444, 525, 457, 455, 471, 449, 448, 366, 450, 451, - 379, 453, 378, 525, 368, 367, 452, 364, 483, 480, 455, 481, 358, 380, 362, 482, - 373, 356, 361, 525, 382, 370, 377, 525, 372, 525, 354, 525, 381, 376, 439, 413, - 384, 348, 492, 477, 491, 388, 503, 455, 390, 500, 455, 496, 496, 496, 455, 432, - 428, 432, 432, 456, 422, 422, 432, 525, 440, 525, 525, 428, 525, 432, 525, 422, - 428, 525, 525, 340, 525, 401, 525, 525, 525, 525, 435, 525, 525, 525, 525, 430, - 422, 525, 428, 525, 525, 525, 525, 501, 525, 434, 525, 525, 471, 412, 391, 402, - 418, 375, 352, 394, 435, 436, 460, 459, 471, 479, 437, 419, 442, 351, 443, 363, - 504, 342, 438, 341, 343, 416, 441, 339, 334, 333, 336, 337, 338, 344, 468, 349, - 347, 350, 476, 505, 469, 406, 415, 345, 346, 466, 506, 486, 385, 487, 495, 508, - 509, 478, 426, 429, 474, 475, 427, 386, 507, 524, 523, 520, 518, 517, 493, 514, - 494, 515, 516, 522, 473, 446, 447, 454, 470, 485, 519, 498, 458, 434, 461, 464, - 472, 467, 484, 521, 431, 433, 465, 463, 409, 462, 408, 392,); - - const YYNOCODE = 105; - - const YYSTACKDEPTH = 500; - - const YYNSTATE = 332; - - const YYNRULE = 193; - - const YYERRORSYMBOL = 60; - - const YYERRSYMDT = 'yy0'; - - const YYFALLBACK = 0; - - 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', 'PHP', 'NOCACHE', 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART', - 'LITERALEND', 'LITERAL', 'RDEL', 'SIMPELOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL', - 'SIMPLETAG', 'ID', 'PTR', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', 'STEP', - 'LDELFOREACH', 'SPACE', 'AS', 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', - 'CLOSETAG', 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP', 'MATH', - 'UNIMATH', 'ISIN', 'INSTANCEOF', 'QMARK', 'NOT', 'TYPECAST', 'HEX', 'DOT', - 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB', - 'DOLLAR', 'LOGOP', 'TLOGOP', 'SINGLECOND', 'QUOTE', 'BACKTICK', 'error', 'start', - 'template', 'template_element', 'smartytag', 'literal', 'text_content', - 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes', 'value', 'expr', - 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction', 'varvar', - 'modparameters', 'attribute', 'ternary', 'array', 'lop', 'scond', 'ns1', 'function', - 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex', 'indexdef', - 'varvarele', 'objectchain', 'objectelement', 'method', 'params', 'modifier', - 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', - 'doublequotedcontent',); - - public static $yyRuleName = array('start ::= template', 'template ::= template_element', - 'template ::= template template_element', 'template ::=', - 'template_element ::= smartytag', 'template_element ::= literal', - 'template_element ::= PHP', 'template_element ::= NOCACHE', - 'template_element ::= text_content', 'text_content ::= TEXT', - 'text_content ::= text_content TEXT', 'template_element ::= STRIPON', - 'template_element ::= STRIPOFF', 'literal ::= LITERALSTART LITERALEND', - 'literal ::= LITERALSTART literal_elements LITERALEND', - 'literal_elements ::= literal_elements literal_element', 'literal_elements ::=', - 'literal_element ::= literal', 'literal_element ::= LITERAL', - 'smartytag ::= tag RDEL', 'smartytag ::= SIMPELOUTPUT', 'tag ::= LDEL variable', - 'tag ::= LDEL variable attributes', 'tag ::= LDEL value', - 'tag ::= LDEL value attributes', 'tag ::= LDEL expr', - 'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value', - 'tag ::= LDEL DOLLARID EQUAL expr', 'tag ::= LDEL DOLLARID EQUAL expr attributes', - 'tag ::= LDEL varindexed EQUAL expr attributes', 'smartytag ::= SIMPLETAG', - 'tag ::= LDEL ID attributes', 'tag ::= LDEL ID', - 'tag ::= LDEL ID modifierlist attributes', 'tag ::= LDEL ID PTR ID attributes', - 'tag ::= LDEL ID PTR ID modifierlist attributes', 'tag ::= LDELIF expr', - 'tag ::= LDELIF expr attributes', 'tag ::= LDELIF statement', - 'tag ::= LDELIF statement attributes', - 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes', - 'foraction ::= EQUAL expr', 'foraction ::= INCDEC', - 'tag ::= LDELFOR statement TO expr attributes', - 'tag ::= LDELFOR statement TO expr STEP expr attributes', - 'tag ::= LDELFOREACH attributes', - 'tag ::= LDELFOREACH SPACE value AS varvar attributes', - 'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', - 'tag ::= LDELSETFILTER ID modparameters', - 'tag ::= LDELSETFILTER ID modparameters modifierlist', - 'tag ::= LDEL SMARTYBLOCKCHILDPARENT', 'smartytag ::= CLOSETAG', - 'tag ::= LDELSLASH ID', 'tag ::= LDELSLASH ID modifierlist', - 'tag ::= LDELSLASH ID PTR ID', 'tag ::= LDELSLASH ID PTR ID modifierlist', - 'attributes ::= attributes attribute', 'attributes ::= attribute', - 'attributes ::=', 'attribute ::= SPACE ID EQUAL ID', 'attribute ::= ATTR expr', - 'attribute ::= ATTR value', 'attribute ::= SPACE ID', 'attribute ::= SPACE expr', - 'attribute ::= SPACE value', 'attribute ::= SPACE INTEGER EQUAL expr', - 'statements ::= statement', 'statements ::= statements COMMA statement', - 'statement ::= DOLLARID EQUAL INTEGER', 'statement ::= DOLLARID EQUAL expr', - 'statement ::= varindexed EQUAL expr', 'statement ::= OPENP statement CLOSEP', - 'expr ::= value', 'expr ::= ternary', 'expr ::= DOLLARID COLON ID', - 'expr ::= expr MATH value', 'expr ::= expr UNIMATH value', 'expr ::= array', - 'expr ::= expr modifierlist', 'expr ::= expr lop expr', 'expr ::= expr scond', - 'expr ::= expr ISIN array', 'expr ::= expr ISIN value', - 'expr ::= variable INSTANCEOF ns1', 'expr ::= variable INSTANCEOF variable', - 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr', - 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', 'value ::= variable', - 'value ::= UNIMATH value', 'value ::= NOT value', 'value ::= TYPECAST value', - 'value ::= variable INCDEC', 'value ::= HEX', 'value ::= INTEGER', - 'value ::= INTEGER DOT INTEGER', 'value ::= INTEGER DOT', 'value ::= DOT INTEGER', - 'value ::= ID', 'value ::= function', 'value ::= OPENP expr CLOSEP', - 'value ::= SINGLEQUOTESTRING', 'value ::= doublequoted_with_quotes', - 'value ::= varindexed DOUBLECOLON static_class_access', 'value ::= smartytag', - 'value ::= value modifierlist', 'value ::= NAMESPACE', - 'value ::= ns1 DOUBLECOLON static_class_access', 'ns1 ::= ID', - 'ns1 ::= NAMESPACE', 'variable ::= DOLLARID', 'variable ::= varindexed', - 'variable ::= varvar AT ID', 'variable ::= object', 'variable ::= HATCH ID HATCH', - 'variable ::= HATCH ID HATCH arrayindex', 'variable ::= HATCH variable HATCH', - 'variable ::= HATCH variable HATCH arrayindex', - 'varindexed ::= DOLLARID arrayindex', 'varindexed ::= varvar arrayindex', - 'arrayindex ::= arrayindex indexdef', 'arrayindex ::=', - 'indexdef ::= DOT DOLLARID', 'indexdef ::= DOT varvar', - 'indexdef ::= DOT varvar AT ID', 'indexdef ::= DOT ID', - 'indexdef ::= DOT INTEGER', 'indexdef ::= DOT LDEL expr RDEL', - 'indexdef ::= OPENB ID CLOSEB', 'indexdef ::= OPENB ID DOT ID CLOSEB', - 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB', - 'indexdef ::= OPENB INTEGER CLOSEB', 'indexdef ::= OPENB DOLLARID CLOSEB', - 'indexdef ::= OPENB variable CLOSEB', 'indexdef ::= OPENB value CLOSEB', - 'indexdef ::= OPENB expr CLOSEB', 'indexdef ::= OPENB CLOSEB', - 'varvar ::= DOLLARID', 'varvar ::= DOLLAR', 'varvar ::= varvar varvarele', - 'varvarele ::= ID', 'varvarele ::= SIMPELOUTPUT', 'varvarele ::= LDEL expr RDEL', - 'object ::= varindexed objectchain', 'objectchain ::= objectelement', - 'objectchain ::= objectchain objectelement', - 'objectelement ::= PTR ID arrayindex', 'objectelement ::= PTR varvar arrayindex', - 'objectelement ::= PTR LDEL expr RDEL arrayindex', - 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', - 'objectelement ::= PTR method', 'function ::= ns1 OPENP params CLOSEP', - 'method ::= ID OPENP params CLOSEP', 'method ::= DOLLARID OPENP params CLOSEP', - 'params ::= params COMMA expr', 'params ::= expr', 'params ::=', - 'modifierlist ::= modifierlist modifier modparameters', - 'modifierlist ::= modifier modparameters', 'modifier ::= VERT AT ID', - 'modifier ::= VERT ID', 'modparameters ::= modparameters modparameter', - 'modparameters ::=', 'modparameter ::= COLON value', - 'modparameter ::= COLON array', 'static_class_access ::= method', - 'static_class_access ::= method objectchain', 'static_class_access ::= ID', - 'static_class_access ::= DOLLARID arrayindex', - 'static_class_access ::= DOLLARID arrayindex objectchain', 'lop ::= LOGOP', - 'lop ::= TLOGOP', 'scond ::= SINGLECOND', 'array ::= OPENB arrayelements CLOSEB', - 'arrayelements ::= arrayelement', - 'arrayelements ::= arrayelements COMMA arrayelement', 'arrayelements ::=', - 'arrayelement ::= value APTR expr', 'arrayelement ::= ID APTR expr', - 'arrayelement ::= expr', 'doublequoted_with_quotes ::= QUOTE QUOTE', - 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE', - 'doublequoted ::= doublequoted doublequotedcontent', - 'doublequoted ::= doublequotedcontent', - 'doublequotedcontent ::= BACKTICK variable BACKTICK', - 'doublequotedcontent ::= BACKTICK expr BACKTICK', - 'doublequotedcontent ::= DOLLARID', 'doublequotedcontent ::= LDEL variable RDEL', - 'doublequotedcontent ::= LDEL expr RDEL', 'doublequotedcontent ::= smartytag', - 'doublequotedcontent ::= TEXT',); - - public function tokenName($tokenType) - { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[ $tokenType ]; - } 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 214 "../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 => 61, 1 => 1), array(0 => 62, 1 => 1), array(0 => 62, 1 => 2), - array(0 => 62, 1 => 0), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), - array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), - array(0 => 66, 1 => 1), array(0 => 66, 1 => 2), array(0 => 63, 1 => 1), - array(0 => 63, 1 => 1), array(0 => 65, 1 => 2), array(0 => 65, 1 => 3), - array(0 => 67, 1 => 2), array(0 => 67, 1 => 0), array(0 => 68, 1 => 1), - array(0 => 68, 1 => 1), array(0 => 64, 1 => 2), array(0 => 64, 1 => 1), - array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), - array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), - array(0 => 69, 1 => 4), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), - array(0 => 69, 1 => 5), array(0 => 64, 1 => 1), array(0 => 69, 1 => 3), - array(0 => 69, 1 => 2), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), - array(0 => 69, 1 => 6), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), - array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 8), - array(0 => 78, 1 => 2), array(0 => 78, 1 => 1), array(0 => 69, 1 => 5), - array(0 => 69, 1 => 7), array(0 => 69, 1 => 2), array(0 => 69, 1 => 6), - array(0 => 69, 1 => 8), array(0 => 69, 1 => 6), array(0 => 69, 1 => 8), - array(0 => 69, 1 => 3), array(0 => 69, 1 => 4), array(0 => 69, 1 => 2), - array(0 => 64, 1 => 1), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), - array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), array(0 => 71, 1 => 2), - array(0 => 71, 1 => 1), array(0 => 71, 1 => 0), array(0 => 81, 1 => 4), - array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), - array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 4), - array(0 => 77, 1 => 1), array(0 => 77, 1 => 3), array(0 => 76, 1 => 3), - array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), - array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), - array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1), - array(0 => 73, 1 => 2), array(0 => 73, 1 => 3), array(0 => 73, 1 => 2), - array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), - array(0 => 73, 1 => 3), array(0 => 82, 1 => 7), array(0 => 82, 1 => 7), - array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), - array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), - array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 72, 1 => 2), - array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), - array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), - array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), - array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 86, 1 => 1), - array(0 => 86, 1 => 1), array(0 => 70, 1 => 1), array(0 => 70, 1 => 1), - array(0 => 70, 1 => 3), array(0 => 70, 1 => 1), array(0 => 70, 1 => 3), - array(0 => 70, 1 => 4), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), - array(0 => 74, 1 => 2), array(0 => 74, 1 => 2), array(0 => 91, 1 => 2), - array(0 => 91, 1 => 0), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2), - array(0 => 92, 1 => 4), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2), - array(0 => 92, 1 => 4), array(0 => 92, 1 => 3), array(0 => 92, 1 => 5), - array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), - array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), - array(0 => 92, 1 => 2), array(0 => 79, 1 => 1), array(0 => 79, 1 => 1), - array(0 => 79, 1 => 2), array(0 => 93, 1 => 1), array(0 => 93, 1 => 1), - array(0 => 93, 1 => 3), array(0 => 90, 1 => 2), array(0 => 94, 1 => 1), - array(0 => 94, 1 => 2), array(0 => 95, 1 => 3), array(0 => 95, 1 => 3), - array(0 => 95, 1 => 5), array(0 => 95, 1 => 6), array(0 => 95, 1 => 2), - array(0 => 87, 1 => 4), array(0 => 96, 1 => 4), array(0 => 96, 1 => 4), - array(0 => 97, 1 => 3), array(0 => 97, 1 => 1), array(0 => 97, 1 => 0), - array(0 => 75, 1 => 3), array(0 => 75, 1 => 2), array(0 => 98, 1 => 3), - array(0 => 98, 1 => 2), array(0 => 80, 1 => 2), array(0 => 80, 1 => 0), - array(0 => 99, 1 => 2), array(0 => 99, 1 => 2), array(0 => 89, 1 => 1), - array(0 => 89, 1 => 2), array(0 => 89, 1 => 1), array(0 => 89, 1 => 2), - array(0 => 89, 1 => 3), array(0 => 84, 1 => 1), array(0 => 84, 1 => 1), - array(0 => 85, 1 => 1), array(0 => 83, 1 => 3), array(0 => 100, 1 => 1), - array(0 => 100, 1 => 3), array(0 => 100, 1 => 0), array(0 => 101, 1 => 3), - array(0 => 101, 1 => 3), array(0 => 101, 1 => 1), array(0 => 88, 1 => 2), - array(0 => 88, 1 => 3), array(0 => 102, 1 => 2), array(0 => 102, 1 => 1), - array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1), - array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1), - array(0 => 103, 1 => 1),); - - public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, - 17 => 9, 18 => 9, 43 => 9, 66 => 9, 67 => 9, 75 => 9, 76 => 9, 80 => 9, 90 => 9, - 95 => 9, 96 => 9, 101 => 9, 103 => 9, 104 => 9, 108 => 9, 110 => 9, 115 => 9, - 176 => 9, 181 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 16 => 13, 14 => 14, - 74 => 14, 15 => 15, 91 => 15, 93 => 15, 94 => 15, 122 => 15, 19 => 19, 20 => 20, - 21 => 21, 23 => 21, 25 => 21, 22 => 22, 24 => 22, 26 => 22, 27 => 27, 28 => 27, - 29 => 29, 30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, 36 => 36, - 37 => 37, 38 => 38, 40 => 38, 39 => 39, 41 => 41, 42 => 42, 44 => 44, 45 => 45, - 46 => 46, 47 => 47, 49 => 47, 48 => 48, 50 => 48, 51 => 51, 52 => 52, 53 => 53, - 54 => 54, 55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, 69 => 60, - 157 => 60, 161 => 60, 165 => 60, 166 => 60, 61 => 61, 158 => 61, 164 => 61, - 62 => 62, 63 => 63, 64 => 63, 65 => 65, 142 => 65, 68 => 68, 70 => 70, 71 => 71, - 72 => 71, 73 => 73, 77 => 77, 78 => 78, 79 => 78, 81 => 81, 107 => 81, 82 => 82, - 83 => 83, 84 => 84, 85 => 85, 86 => 86, 87 => 86, 88 => 88, 89 => 89, 92 => 92, - 97 => 97, 98 => 98, 99 => 99, 100 => 100, 102 => 102, 105 => 105, 106 => 106, - 109 => 109, 111 => 111, 112 => 112, 113 => 113, 114 => 114, 116 => 116, - 117 => 117, 118 => 118, 119 => 119, 120 => 120, 121 => 121, 123 => 123, - 178 => 123, 124 => 124, 125 => 125, 126 => 126, 127 => 127, 128 => 128, - 129 => 129, 137 => 129, 130 => 130, 131 => 131, 132 => 132, 133 => 132, - 135 => 132, 136 => 132, 134 => 134, 138 => 138, 139 => 139, 140 => 140, - 182 => 140, 141 => 141, 143 => 143, 144 => 144, 145 => 145, 146 => 146, - 147 => 147, 148 => 148, 149 => 149, 150 => 150, 151 => 151, 152 => 152, - 153 => 153, 154 => 154, 155 => 155, 156 => 156, 159 => 159, 160 => 160, - 162 => 162, 163 => 163, 167 => 167, 168 => 168, 169 => 169, 170 => 170, - 171 => 171, 172 => 172, 173 => 173, 174 => 174, 175 => 175, 177 => 177, - 179 => 179, 180 => 180, 183 => 183, 184 => 184, 185 => 185, 186 => 186, - 187 => 186, 189 => 186, 188 => 188, 190 => 190, 191 => 191, 192 => 192,); - - #line 225 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r0() - { - $this->root_buffer->prepend_array($this, $this->template_prefix); - $this->root_buffer->append_array($this, $this->template_postfix); - $this->_retvalue = $this->root_buffer->to_smarty_php($this); - } - - #line 235 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r1() - { - if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { - $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - } - - #line 242 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r2() - { - if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { - // because of possible code injection - $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - } - - #line 256 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r4() - { - if ($this->compiler->has_code) { - $this->_retvalue = $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor); - } else { - $this->_retvalue = null; - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); - } - - #line 267 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r5() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 271 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r6() - { - $code = $this->compiler->compileTag('private_php', - array(array('code' => $this->yystack[ $this->yyidx + 0 ]->minor), - array('type' => $this->lex->phpType)), array()); - if ($this->compiler->has_code && !empty($code)) { - $tmp = ''; - foreach ($this->compiler->prefix_code as $code) { - $tmp .= $code; - } - $this->compiler->prefix_code = array(); - $this->_retvalue = - new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true)); - } else { - $this->_retvalue = null; - } - } - - #line 282 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r7() - { - $this->compiler->tag_nocache = true; - $save = $this->template->compiled->has_nocache_code; - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, - $this->compiler->processNocacheCode("<?php echo '{$this->yystack[$this->yyidx + 0]->minor}';?>\n", - $this->compiler, - true)); - $this->template->compiled->has_nocache_code = $save; - } - - #line 289 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r8() - { - $this->_retvalue = $this->compiler->processText($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 293 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r9() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 297 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r10() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 302 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r11() - { - $this->strip = true; - } - - #line 306 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r12() - { - $this->strip = false; - } - - #line 311 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r13() - { - $this->_retvalue = ''; - } - - #line 315 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r14() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - } - - #line 319 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r15() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 335 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r19() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - } - - #line 341 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r20() - { - $var = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), - ' $'); - if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array('nocache'), - array('value' => $this->compiler->compileVariable('\'' . - $match[ 1 ] . - '\''))); - } else { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), - array('value' => $this->compiler->compileVariable('\'' . - $var . - '\''))); - } - } - - #line 351 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r21() - { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), - array('value' => $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 355 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r22() - { - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, - array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor)); - } - - #line 378 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r27() - { - $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[ $this->yyidx + - 0 ]->minor), array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\''))); - } - - #line 386 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r29() - { - $this->_retvalue = $this->compiler->compileTag('assign', - array_merge(array(array('value' => $this->yystack[ $this->yyidx + - - 1 ]->minor), array('var' => '\'' . - substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . - '\'')), $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 390 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r30() - { - $this->_retvalue = $this->compiler->compileTag('assign', - array_merge(array(array('value' => $this->yystack[ $this->yyidx + - - 1 ]->minor), array('var' => $this->yystack[ $this->yyidx + - - 3 ]->minor[ 'var' ])), - $this->yystack[ $this->yyidx + 0 ]->minor), - array('smarty_internal_index' => $this->yystack[ $this->yyidx + - - 3 ]->minor[ 'smarty_internal_index' ])); - } - - #line 395 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r31() - { - $tag = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length)); - if ($tag == 'strip') { - $this->strip = true; - $this->_retvalue = null;; - } else { - if (defined($tag)) { - if ($this->security) { - $this->security->isTrustedConstant($tag, $this->compiler); - } - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag)); - } else { - if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { - $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array("'nocache'")); - } else { - $this->_retvalue = $this->compiler->compileTag($tag, array()); - } - } - } - } - - #line 417 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r32() - { - if (defined($this->yystack[ $this->yyidx + - 1 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 1 ]->minor, $this->compiler); - } - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, - array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor)); - } else { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor); - } - } - - #line 427 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r33() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); - } - $this->_retvalue = $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 440 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r34() - { - if (defined($this->yystack[ $this->yyidx + - 2 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 2 ]->minor, $this->compiler); - } - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, - array('value' => $this->yystack[ $this->yyidx + - 2 ]->minor, - 'modifierlist' => $this->yystack[ $this->yyidx + - 1 ]->minor)); - } else { - $this->_retvalue = '<?php ob_start();?>' . - $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor) . '<?php echo '; - $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), - array('modifierlist' => $this->yystack[ $this->yyidx + - - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>'; - } - } - - #line 453 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r35() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor, - array('object_method' => $this->yystack[ $this->yyidx + - - 1 ]->minor)); - } - - #line 458 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r36() - { - $this->_retvalue = '<?php ob_start();?>' . - $this->compiler->compileTag($this->yystack[ $this->yyidx + - 4 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor, - array('object_method' => $this->yystack[ $this->yyidx + - 2 ]->minor)) . - '<?php echo '; - $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), - array('modifierlist' => $this->yystack[ $this->yyidx + - - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>'; - } - - #line 464 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r37() - { - $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), - array('if condition' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 469 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r38() - { - $tag = trim(substr($this->yystack[ $this->yyidx + - 2 ]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, - $this->yystack[ $this->yyidx + 0 ]->minor, - array('if condition' => $this->yystack[ $this->yyidx + - - 1 ]->minor)); - } - - #line 474 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r39() - { - $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), - array('if condition' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 485 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r41() - { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, - array(array('start' => $this->yystack[ $this->yyidx + - - 6 ]->minor), - array('ifexp' => $this->yystack[ $this->yyidx + - - 4 ]->minor), - array('var' => $this->yystack[ $this->yyidx + - - 2 ]->minor), - array('step' => $this->yystack[ $this->yyidx + - - 1 ]->minor))), 1); - } - - #line 489 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r42() - { - $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 497 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r44() - { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, - array(array('start' => $this->yystack[ $this->yyidx + - - 3 ]->minor), - array('to' => $this->yystack[ $this->yyidx + - - 1 ]->minor))), 0); - } - - #line 501 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r45() - { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, - array(array('start' => $this->yystack[ $this->yyidx + - - 5 ]->minor), - array('to' => $this->yystack[ $this->yyidx + - - 3 ]->minor), - array('step' => $this->yystack[ $this->yyidx + - - 1 ]->minor))), 0); - } - - #line 506 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r46() - { - $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 511 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r47() - { - $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, - array(array('from' => $this->yystack[ $this->yyidx + - - 3 ]->minor), - array('item' => $this->yystack[ $this->yyidx + - - 1 ]->minor)))); - } - - #line 515 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r48() - { - $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, - array(array('from' => $this->yystack[ $this->yyidx + - - 5 ]->minor), - array('item' => $this->yystack[ $this->yyidx + - - 1 ]->minor), - array('key' => $this->yystack[ $this->yyidx + - - 3 ]->minor)))); - } - - #line 528 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r51() - { - $this->_retvalue = $this->compiler->compileTag('setfilter', array(), - array('modifier_list' => array(array_merge(array($this->yystack[ $this->yyidx + - - 1 ]->minor), $this->yystack[ $this->yyidx + 0 ]->minor)))); - } - - #line 532 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r52() - { - $this->_retvalue = $this->compiler->compileTag('setfilter', array(), - array('modifier_list' => array_merge(array(array_merge(array($this->yystack[ $this->yyidx + - - 2 ]->minor), $this->yystack[ $this->yyidx + - 1 ]->minor)), - $this->yystack[ $this->yyidx + - 0 ]->minor))); - } - - #line 537 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r53() - { - $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.'); - if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') { - // {$smarty.block.child} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); - } else { - // {$smarty.block.parent} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); - } - } - - #line 550 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r54() - { - $tag = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), - ' /'); - if ($tag == 'strip') { - $this->strip = false; - $this->_retvalue = null; - } else { - $this->_retvalue = $this->compiler->compileTag($tag . 'close', array()); - } - } - - #line 559 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r55() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array()); - } - - #line 563 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r56() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor . 'close', array(), - array('modifier_list' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 568 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r57() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor . 'close', array(), - array('object_method' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 572 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r58() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor . 'close', array(), - array('object_method' => $this->yystack[ $this->yyidx + - - 1 ]->minor, 'modifier_list' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 580 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r59() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 586 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r60() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 591 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r61() - { - $this->_retvalue = array(); - } - - #line 596 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r62() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); - } - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); - } else { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 2 ]->minor => '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . - '\''); - } - } - - #line 607 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r63() - { - $this->_retvalue = - array(trim($this->yystack[ $this->yyidx + - 1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx + - 0 ]->minor); - } - - #line 615 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r65() - { - $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; - } - - #line 627 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r68() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 640 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r70() - { - $this->yystack[ $this->yyidx + - 2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor; - $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor; - } - - #line 645 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r71() - { - $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'', - 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 652 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r73() - { - $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor, - 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 676 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r77() - { - $this->_retvalue = - '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '://' . - $this->yystack[ $this->yyidx + 0 ]->minor . '\')'; - } - - #line 681 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r78() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . trim($this->yystack[ $this->yyidx + - 1 ]->minor) . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 695 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r81() - { - $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), - array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor, - 'modifierlist' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 701 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r82() - { - $this->_retvalue = (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? - $this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ] : '') . - $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor[ 'op' ] . - $this->yystack[ $this->yyidx + 0 ]->minor . - (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? ')' : ''); - } - - #line 704 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r83() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; - } - - #line 708 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r84() - { - $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . - $this->yystack[ $this->yyidx + 0 ]->minor . ')'; - } - - #line 712 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r85() - { - $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',(array)' . - $this->yystack[ $this->yyidx + 0 ]->minor . ')'; - } - - #line 716 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r86() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 728 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r88() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'') . - ' : ' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 732 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r89() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->yystack[ $this->yyidx + - 2 ]->minor . ' : ' . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 747 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r92() - { - $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 768 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r97() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 772 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r98() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.'; - } - - #line 776 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r99() - { - $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 781 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r100() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); - } - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } else { - $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; - } - } - - #line 798 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r102() - { - $this->_retvalue = "(" . $this->yystack[ $this->yyidx + - 1 ]->minor . ")"; - } - - #line 813 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r105() - { - self::$prefix_number ++; - if ($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ] == '\'smarty\'') { - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' . - $this->compiler->compileTag('private_special_variable', array(), - $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ]) . - ';?>'; - } else { - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' . - $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ]) . - $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ] . ';?>'; - } - $this->_retvalue = '$_tmp' . self::$prefix_number . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . - $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; - } - - #line 824 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r106() - { - self::$prefix_number ++; - $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[ $this->yyidx + 0 ]->minor); - $this->compiler->prefix_code[] = - $this->compiler->appendCode($tmp, '<?php $_tmp' . self::$prefix_number . '=ob_get_clean();?>'); - $this->_retvalue = '$_tmp' . self::$prefix_number; - } - - #line 841 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r109() - { - if (!in_array(strtolower($this->yystack[ $this->yyidx + - 2 ]->minor), array('self', 'parent')) && - (!$this->security || - $this->security->isTrustedStaticClassAccess($this->yystack[ $this->yyidx + - 2 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler)) - ) { - if (isset($this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ])) { - $this->_retvalue = - $this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ] . '::' . - $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; - } else { - $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . '::' . - $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; - } - } else { - $this->compiler->trigger_template_error("static class '" . $this->yystack[ $this->yyidx + - 2 ]->minor . - "' is undefined or not allowed by security setting"); - } - } - - #line 860 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r111() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 871 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r112() - { - $this->_retvalue = - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''); - } - - #line 874 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r113() - { - if ($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ] == '\'smarty\'') { - $smarty_var = $this->compiler->compileTag('private_special_variable', array(), - $this->yystack[ $this->yyidx + - 0 ]->minor[ 'smarty_internal_index' ]); - $this->_retvalue = $smarty_var; - } else { - // used for array reset,next,prev,end,current - $this->last_variable = $this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]; - $this->last_index = $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ]; - $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]) . - $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ]; - } - } - - #line 887 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r114() - { - $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[ $this->yyidx + - 2 ]->minor . ']->' . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 897 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r116() - { - $this->_retvalue = - $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 1 ]->minor . "'"); - } - - #line 901 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r117() - { - $this->_retvalue = '(is_array($tmp = ' . - $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 2 ]->minor . "'") . - ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' :null)'; - } - - #line 905 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r118() - { - $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 1 ]->minor); - } - - #line 909 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r119() - { - $this->_retvalue = - '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . - ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' : null)'; - } - - #line 913 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r120() - { - $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'', - 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 916 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r121() - { - $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 1 ]->minor, - 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 929 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r123() - { - return; - } - - #line 935 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r124() - { - $this->_retvalue = - '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') . - ']'; - } - - #line 938 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r125() - { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']'; - } - - #line 942 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r126() - { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . '->' . - $this->yystack[ $this->yyidx + 0 ]->minor . ']'; - } - - #line 946 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r127() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); - } - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; - } else { - $this->_retvalue = "['" . $this->yystack[ $this->yyidx + 0 ]->minor . "']"; - } - } - - #line 957 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r128() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; - } - - #line 962 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r129() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; - } - - #line 967 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r130() - { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . - $this->yystack[ $this->yyidx + - - 1 ]->minor . - '\'][\'index\']') . ']'; - } - - #line 971 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r131() - { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . - $this->yystack[ $this->yyidx + - - 3 ]->minor . '\'][\'' . - $this->yystack[ $this->yyidx + - - 1 ]->minor . '\']') . ']'; - } - - #line 974 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r132() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; - } - - #line 980 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r134() - { - $this->_retvalue = '[' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'') . - ']';; - } - - #line 996 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r138() - { - $this->_retvalue = '[]'; - } - - #line 1006 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r139() - { - $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''; - } - - #line 1010 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r140() - { - $this->_retvalue = "''"; - } - - #line 1015 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r141() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1023 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r143() - { - $var = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), - ' $'); - $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\''); - } - - #line 1029 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r144() - { - $this->_retvalue = '(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; - } - - #line 1036 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r145() - { - if ($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ] == '\'smarty\'') { - $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), - $this->yystack[ $this->yyidx + - - 1 ]->minor[ 'smarty_internal_index' ]) . - $this->yystack[ $this->yyidx + 0 ]->minor; - } else { - $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ]) . - $this->yystack[ $this->yyidx + - 1 ]->minor[ 'smarty_internal_index' ] . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - } - - #line 1045 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r146() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1050 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r147() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1055 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r148() - { - if ($this->security && substr($this->yystack[ $this->yyidx + - 1 ]->minor, 0, 1) == '_') { - $this->compiler->trigger_template_error(self::Err1); - } - $this->_retvalue = - '->' . $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1062 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r149() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor) . - $this->yystack[ $this->yyidx + 0 ]->minor . '}'; - } - - #line 1069 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r150() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = - '->{' . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; - } - - #line 1076 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r151() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{\'' . $this->yystack[ $this->yyidx + - 4 ]->minor . '\'.' . - $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; - } - - #line 1084 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r152() - { - $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1092 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r153() - { - if (!$this->security || - $this->security->isTrustedPhpFunction($this->yystack[ $this->yyidx + - 3 ]->minor, $this->compiler) - ) { - if (strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'isset') === 0 || - strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'empty') === 0 || - strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'array') === 0 || - is_callable($this->yystack[ $this->yyidx + - 3 ]->minor) - ) { - $func_name = strtolower($this->yystack[ $this->yyidx + - 3 ]->minor); - if ($func_name == 'isset') { - if (count($this->yystack[ $this->yyidx + - 1 ]->minor) == 0) { - $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"'); - } - $par = implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor); - if (strncasecmp($par, '$_smarty_tpl->smarty->ext->_config->_getConfigVariable', - strlen('$_smarty_tpl->smarty->ext->_config->_getConfigVariable')) === 0 - ) { - self::$prefix_number ++; - $this->compiler->prefix_code[] = - '<?php $_tmp' . self::$prefix_number . '=' . str_replace(')', ', false)', $par) . ';?>'; - $isset_par = '$_tmp' . self::$prefix_number; - } else { - $isset_par = str_replace("')->value", "',null,true,false)->value", $par); - } - $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . $isset_par . ")"; - } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) { - if (count($this->yystack[ $this->yyidx + - 1 ]->minor) != 1) { - $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"'); - } - if ($func_name == 'empty') { - $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", - $this->yystack[ $this->yyidx + - - 1 ]->minor[ 0 ]) . ')'; - } else { - $this->_retvalue = $func_name . '(' . $this->yystack[ $this->yyidx + - 1 ]->minor[ 0 ] . ')'; - } - } else { - $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . - implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")"; - } - } else { - $this->compiler->trigger_template_error("unknown function \"" . - $this->yystack[ $this->yyidx + - 3 ]->minor . "\""); - } - } - } - - #line 1131 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r154() - { - if ($this->security && substr($this->yystack[ $this->yyidx + - 3 ]->minor, 0, 1) == '_') { - $this->compiler->trigger_template_error(self::Err1); - } - $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . - implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")"; - } - - #line 1138 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r155() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - self::$prefix_number ++; - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . '\'') . - ';?>'; - $this->_retvalue = - '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ')'; - } - - #line 1149 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r156() - { - $this->_retvalue = - array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 1166 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r159() - { - $this->_retvalue = array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, - array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor))); - } - - #line 1170 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r160() - { - $this->_retvalue = - array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 1178 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r162() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1186 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r163() - { - $this->_retvalue = - array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1205 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r167() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method'); - } - - #line 1210 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r168() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method'); - } - - #line 1215 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r169() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, ''); - } - - #line 1220 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r170() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); - } - - #line 1225 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r171() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor, - $this->yystack[ $this->yyidx + - 1 ]->minor . - $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); - } - - #line 1231 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r172() - { - $this->_retvalue[ 'op' ] = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' '; - } - - #line 1235 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r173() - { - static $lops = array('eq' => array('op' => ' == ', 'pre' => null), - 'ne' => array('op' => ' != ', 'pre' => null), - 'neq' => array('op' => ' != ', 'pre' => null), - 'gt' => array('op' => ' > ', 'pre' => null), - 'ge' => array('op' => ' >= ', 'pre' => null), - 'gte' => array('op' => ' >= ', 'pre' => null), - 'lt' => array('op' => ' < ', 'pre' => null), - 'le' => array('op' => ' <= ', 'pre' => null), - 'lte' => array('op' => ' <= ', 'pre' => null), - 'mod' => array('op' => ' % ', 'pre' => null), - 'and' => array('op' => ' && ', 'pre' => null), - 'or' => array('op' => ' || ', 'pre' => null), - 'xor' => array('op' => ' xor ', 'pre' => null), - 'isdivby' => array('op' => ' % ', 'pre' => '!('), - 'isnotdivby' => array('op' => ' % ', 'pre' => '('), - 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '), - 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),); - $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor)); - $this->_retvalue = $lops[ $op ]; - } - - #line 1261 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r174() - { - static $scond = - array('iseven' => '!(1 & ', 'isnoteven' => '(1 & ', 'isodd' => '(1 & ', 'isnotodd' => '!(1 & ',); - $op = strtolower(str_replace(' ', '', $this->yystack[ $this->yyidx + 0 ]->minor)); - $this->_retvalue = $scond[ $op ]; - } - - #line 1275 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r175() - { - $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; - } - - #line 1283 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r177() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1291 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r179() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1295 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r180() - { - $this->_retvalue = - '\'' . $this->yystack[ $this->yyidx + - 2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1311 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r183() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor->to_smarty_php($this); - } - - #line 1316 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r184() - { - $this->yystack[ $this->yyidx + - 1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - } - - #line 1321 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r185() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1325 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r186() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + - 1 ]->minor); - } - - #line 1333 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r188() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' . - substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . - '\']->value'); - } - - #line 1341 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r190() - { - $this->_retvalue = - new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'); - } - - #line 1345 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r191() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1349 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r192() - { - $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor); - } - - 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 207 "../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 200 "../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/library/Smarty/libs/sysplugins/smarty_internal_undefined.php b/library/Smarty/libs/sysplugins/smarty_internal_undefined.php deleted file mode 100644 index 93fca8ec1..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_undefined.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php - -/** - * Smarty Method AppendByRef - * - * Smarty::appendByRef() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Undefined -{ - - /** - * This function is executed automatically when a compiled or cached template file is included - * - Decode saved properties from compiled template and cache files - * - Check if compiled or cache file is valid - * - * @param array $properties special template properties - * @param bool $cache flag if called from cache file - * - * @return bool flag if compiled or cache file is valid - */ - public function decodeProperties($tpl, $properties, $cache = false) - { - if ($cache) { - $tpl->cached->valid = false; - } else { - $tpl->mustCompile = true; - } - return false; - } - - /** - * Call error handler for undefined method - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - public function __call($name, $args) - { - throw new SmartyException(get_class($args[0]) . "->{$name}() undefined method"); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php deleted file mode 100644 index cfd73401b..000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php +++ /dev/null @@ -1,47 +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; - - /** - * 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; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php deleted file mode 100644 index 88d2bba81..000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php +++ /dev/null @@ -1,79 +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; - - /** - * Render and output the template (without using the compiler) - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @throws SmartyException on failure - */ - abstract public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template); - - /** - * populate compiled object with compiled filepath - * - * @param Smarty_Template_Compiled $compiled compiled object - * @param Smarty_Internal_Template $_template template object (is ignored) - */ - public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) - { - $compiled->filepath = false; - $compiled->timestamp = false; - $compiled->exists = false; - } - - /** - * render compiled template code - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render($_template) - { - $level = ob_get_level(); - ob_start(); - try { - $this->renderUncompiled($_template->source, $_template); - return ob_get_clean(); - } - catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_compiled.php b/library/Smarty/libs/sysplugins/smarty_template_compiled.php deleted file mode 100644 index e7710f85e..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_compiled.php +++ /dev/null @@ -1,297 +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 - */ - static function load($_template) - { - // check runtime cache - if (!$_template->source->handler->recompiled && - ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) - ) { - $_cache_key = $_template->source->unique_resource . '#'; - if ($_template->caching) { - $_cache_key .= 'caching#'; - } - $_cache_key .= $_template->compile_id; - if (isset($_template->source->compileds[$_cache_key])) { - return $_template->source->compileds[$_cache_key]; - } - } - $compiled = new Smarty_Template_Compiled(); - if ($_template->source->handler->hasCompiledHandler) { - $_template->source->handler->populateCompiledFilepath($compiled, $_template); - } else { - $compiled->populateCompiledFilepath($_template); - } - // runtime cache - if (!$_template->source->handler->recompiled && - ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) - ) { - $_template->source->compileds[$_cache_key] = $compiled; - } - return $compiled; - } - - /** - * populate Compiled Object with compiled filepath - * - * @param Smarty_Internal_Template $_template template object - **/ - public function populateCompiledFilepath(Smarty_Internal_Template $_template) - { - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null; - if ($_template->source->isConfig) { - $_flag = '_' . - ((int) $_template->smarty->config_read_hidden + (int) $_template->smarty->config_booleanize * 2 + - (int) $_template->smarty->config_overwrite * 4); - } else { - $_flag = - '_' . ((int) $_template->smarty->merge_compiled_includes + (int) $_template->smarty->escape_html * 2); - } - $_filepath = $_template->source->uid . $_flag; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS . - $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_compile_id)) { - $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; - } - // caching token - if ($_template->caching) { - $_cache = '.cache'; - } else { - $_cache = ''; - } - $_compile_dir = $_template->smarty->getCompileDir(); - // set basename if not specified - $_basename = $_template->source->handler->getBasename($_template->source); - if ($_basename === null) { - $_basename = basename(preg_replace('![^\w]+!', '_', $_template->source->name)); - } - // separate (optional) basename by dot - if ($_basename) { - $_basename = '.' . $_basename; - } - - $this->filepath = $_compile_dir . $_filepath . '.' . $_template->source->type . $_basename . $_cache . '.php'; - $this->exists = is_file($this->filepath); - if (!$this->exists) { - $this->timestamp = false; - } - } - - /** - * load compiled template or compile from source - * - * @param Smarty_Internal_Template $_template - * - * @throws Exception - */ - public function process(Smarty_Internal_Template $_template) - { - $_smarty_tpl = $_template; - if ($_template->source->handler->recompiled || !$_template->compiled->exists || - $_template->smarty->force_compile || ($_template->smarty->compile_check && - $_template->source->getTimeStamp() > $_template->compiled->getTimeStamp()) - ) { - $this->compileTemplateSource($_template); - $compileCheck = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - if ($_template->source->handler->recompiled) { - $level = ob_get_level(); - ob_start(); - try { - eval("?>" . $this->content); - } - catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - ob_get_clean(); - $this->content = null; - } else { - $this->loadCompiledTemplate($_template); - } - $_template->smarty->compile_check = $compileCheck; - } else { - $_template->mustCompile = true; - @include($_template->compiled->filepath); - if ($_template->mustCompile) { - $this->compileTemplateSource($_template); - $compileCheck = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - $this->loadCompiledTemplate($_template); - $_template->smarty->compile_check = $compileCheck; - } - } - $_template->smarty->ext->_subTemplate->registerSubTemplates($_template); - - $this->processed = true; - } - - /** - * Load fresh compiled template by including the PHP file - * HHVM requires a work around because of a PHP incompatibility - * - * @param \Smarty_Internal_Template $_template - */ - private function loadCompiledTemplate(Smarty_Internal_Template $_template) - { - if (function_exists('opcache_invalidate')) { - opcache_invalidate($_template->compiled->filepath); - } - $_smarty_tpl = $_template; - if (defined('HHVM_VERSION')) { - $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->compiled->filepath); - } else { - include($_template->compiled->filepath); - } - } - - /** - * render compiled template code - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render(Smarty_Internal_Template $_template) - { - if ($_template->smarty->debugging) { - $_template->smarty->_debug->start_render($_template); - } - if (!$this->processed) { - $this->process($_template); - } - if (isset($_template->cached)) { - $_template->cached->file_dependency = - array_merge($_template->cached->file_dependency, $this->file_dependency); - } - $this->getRenderedTemplateCode($_template); - if ($_template->caching && $this->has_nocache_code) { - $_template->cached->hashes[$this->nocache_hash] = true; - } - if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) { - $_template->parent->tpl_function = array_merge($_template->parent->tpl_function, $_template->tpl_function); - } - if ($_template->smarty->debugging) { - $_template->smarty->_debug->end_render($_template); - } - } - - /** - * compile template from source - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function compileTemplateSource(Smarty_Internal_Template $_template) - { - $_template->source->compileds = array(); - $this->file_dependency = array(); - $this->tpl_function = array(); - $this->includes = array(); - $this->nocache_hash = null; - $this->unifunc = null; - // compile locking - if (!$_template->source->handler->recompiled) { - if ($saved_timestamp = $_template->compiled->getTimeStamp()) { - touch($_template->compiled->filepath); - } - } - // call compiler - try { - $_template->loadCompiler(); - $code = $_template->compiler->compileTemplate($_template); - } - catch (Exception $e) { - // restore old timestamp in case of error - if (!$_template->source->handler->recompiled && $saved_timestamp) { - touch($_template->compiled->filepath, $saved_timestamp); - } - throw $e; - } - // compiling succeeded - if ($_template->compiler->write_compiled_code) { - // write compiled template - $this->write($_template, $code); - $code = ''; - } - // release compiler object to free memory - unset($_template->compiler); - return $code; - } - - /** - * Write compiled code by handler - * - * @param Smarty_Internal_Template $_template template object - * @param string $code compiled code - * - * @return boolean success - */ - public function write(Smarty_Internal_Template $_template, $code) - { - if (!$_template->source->handler->recompiled) { - if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) { - $this->timestamp = $this->exists = is_file($this->filepath); - if ($this->exists) { - $this->timestamp = filemtime($this->filepath); - return true; - } - } - return false; - } else { - $this->content = $code; - } - $this->timestamp = time(); - $this->exists = true; - return true; - } - - /** - * Read compiled content from handler - * - * @param Smarty_Internal_Template $_template template object - * - * @return string content - */ - public function read(Smarty_Internal_Template $_template) - { - if (!$_template->source->handler->recompiled) { - return file_get_contents($this->filepath); - } - return isset($this->content) ? $this->content : false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_config.php b/library/Smarty/libs/sysplugins/smarty_template_config.php deleted file mode 100644 index f0fff5080..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_config.php +++ /dev/null @@ -1,97 +0,0 @@ -<?php -/** - * Smarty Config Source Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - */ - -/** - * Smarty Connfig Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * - */ -class Smarty_Template_Config extends Smarty_Template_Source -{ - /** - * array of section names, single section or null - * - * @var null|string|array - */ - public $config_sections = null; - - /** - * scope into which the config variables shall be loaded - * - * @var string - */ - public $scope = 'local'; - - /** - * Flag that source is a config file - * - * @var bool - */ - public $isConfig = true; - - /** - * create Source Object container - * - * @param Smarty_Resource $handler Resource Handler this source object communicates with - * @param Smarty $smarty Smarty instance this source object belongs to - * @param string $resource full template_resource - * @param string $type type of resource - * @param string $name resource name - */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name) - { - // must clone handler as we change class names - $this->handler = clone $handler; // Note: prone to circular references - $this->handler->compiler_class = 'Smarty_Internal_Config_File_Compiler'; - $this->handler->template_lexer_class = 'Smarty_Internal_Configfilelexer'; - $this->handler->template_parser_class = 'Smarty_Internal_Configfileparser'; - $this->resource = $resource; - $this->type = $type; - $this->name = $name; - $this->smarty = $smarty; - } - - /** - * initialize Source Object for given resource - * Either [$_template] or [$smarty, $template_resource] must be specified - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty $smarty smarty object - * @param string $template_resource resource identifier - * - * @return Smarty_Template_Config Source Object - * @throws SmartyException - */ - public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) - { - static $_incompatible_resources = array('extends' => true, 'php' => true); - $template_resource = $_template->template_resource; - if (empty($template_resource)) { - throw new SmartyException('Missing config name'); - } - // parse resource_name, load resource handler - list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $_template->smarty->default_config_type); - // make sure configs are not loaded via anything smarty can't handle - if (isset($_incompatible_resources[$type])) { - throw new SmartyException ("Unable to use resource '{$type}' for config"); - } - $resource = Smarty_Resource::load($_template->smarty, $type); - $source = new Smarty_Template_Config($resource, $_template->smarty, $template_resource, $type, $name); - $resource->populate($source, $_template); - if (!$source->exists && isset($_template->smarty->default_config_handler_func)) { - Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); - } - $source->unique_resource = $resource->buildUniqueResourceName($_template->smarty, $name, true); - return $source; - } -} diff --git a/vendor/bshaffer/oauth2-server-php/CHANGELOG.md b/vendor/bshaffer/oauth2-server-php/CHANGELOG.md index 4fddd72c9..7671b2396 100644 --- a/vendor/bshaffer/oauth2-server-php/CHANGELOG.md +++ b/vendor/bshaffer/oauth2-server-php/CHANGELOG.md @@ -8,6 +8,24 @@ To see the files changed for a given bug, go to https://github.com/bshaffer/oaut To get the diff between two versions, go to https://github.com/bshaffer/oauth2-server-php/compare/v1.0...v1.1 To get the diff for a specific change, go to https://github.com/bshaffer/oauth2-server-php/commit/XXX where XXX is the change hash +* 1.10.0 (2017-12-14) + + PR: https://github.com/bshaffer/oauth2-server-php/pull/889 + + * #795 - [feature] added protected createPayload method to allow easier customization of JWT payload + * #807 - [refactor] simplifies UserInfoController constructor + * #814 - [docs] Adds https to README link + * #827 - [testing] Explicitly pulls in phpunit 4 + * #828 - [docs] PHPDoc improvements and type hinting of variables. + * #829 - [bug] Fix CORS issue for revoking and requesting an access token + * #869 - [testing] Remove php 5.3 from travis and use vendored phpunit + * #834 - [feature] use random_bytes if available + * #851 - [docs] Fix PHPDoc + * #872 - [bug] Fix count() error on PHP 7.2 + * #873 - [testing] adds php 7.2 to travis + * #794 - [docs] Fix typo in composer.json + * #885 - [testing] Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase + * 1.9.0 (2016-01-06) PR: https://github.com/bshaffer/oauth2-server-php/pull/788 @@ -87,7 +105,7 @@ To get the diff for a specific change, go to https://github.com/bshaffer/oauth2- * bug #346 Fixes open_basedir warning * bug #351 Adds OpenID Connect support * bug #355 Adds php 5.6 and HHVM to travis.ci testing - * [BC] bug #358 Adds `getQuerystringIdentifier()` to the GrantType interface + * [BC] bug #358 Adds `getQueryStringIdentifier()` to the GrantType interface * bug #363 Encryption\JWT - Allows for subclassing JWT Headers * bug #349 Bearer Tokens - adds requestHasToken method for when access tokens are optional * bug #301 Encryption\JWT - fixes urlSafeB64Encode(): ensures newlines are replaced as expected diff --git a/vendor/bshaffer/oauth2-server-php/README.md b/vendor/bshaffer/oauth2-server-php/README.md index 4ceda6cf9..f1788e9ce 100644 --- a/vendor/bshaffer/oauth2-server-php/README.md +++ b/vendor/bshaffer/oauth2-server-php/README.md @@ -5,4 +5,4 @@ oauth2-server-php [![Total Downloads](https://poser.pugx.org/bshaffer/oauth2-server-php/downloads.png)](https://packagist.org/packages/bshaffer/oauth2-server-php) -View the [complete documentation](http://bshaffer.github.io/oauth2-server-php-docs/)
\ No newline at end of file +View the [complete documentation](https://bshaffer.github.io/oauth2-server-php-docs/) diff --git a/vendor/bshaffer/oauth2-server-php/composer.json b/vendor/bshaffer/oauth2-server-php/composer.json index 561699f5e..272d20027 100644 --- a/vendor/bshaffer/oauth2-server-php/composer.json +++ b/vendor/bshaffer/oauth2-server-php/composer.json @@ -19,6 +19,7 @@ "php":">=5.3.9" }, "require-dev": { + "phpunit/phpunit": "^4.0", "aws/aws-sdk-php": "~2.8", "firebase/php-jwt": "~2.2", "predis/predis": "dev-master", @@ -29,6 +30,7 @@ "predis/predis": "Required to use Redis storage", "thobbs/phpcassa": "Required to use Cassandra storage", "aws/aws-sdk-php": "~2.8 is required to use DynamoDB storage", - "firebase/php-jwt": "~1.1 is required to use MondoDB storage" + "firebase/php-jwt": "~2.2 is required to use JWT features", + "mongodb/mongodb": "^1.1 is required to use MongoDB storage" } } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php index ecfb6ba75..4ec08cbdd 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php @@ -10,8 +10,14 @@ namespace OAuth2; */ class Autoloader { + /** + * @var string + */ private $dir; + /** + * @param string $dir + */ public function __construct($dir = null) { if (is_null($dir)) { @@ -19,6 +25,7 @@ class Autoloader } $this->dir = $dir; } + /** * Registers OAuth2\Autoloader as an SPL autoloader. */ @@ -31,9 +38,8 @@ class Autoloader /** * Handles autoloading of classes. * - * @param string $class A class name. - * - * @return boolean Returns true if the class has been loaded + * @param string $class - A class name. + * @return boolean - Returns true if the class has been loaded */ public function autoload($class) { diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php index 29c7171b5..6a167da90 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php @@ -10,6 +10,19 @@ use OAuth2\ResponseInterface; */ interface ClientAssertionTypeInterface { + /** + * Validate the OAuth request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return mixed + */ public function validateRequest(RequestInterface $request, ResponseInterface $response); + + /** + * Get the client id + * + * @return mixed + */ public function getClientId(); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php index 0ecb7e18d..ef6120300 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php @@ -5,6 +5,7 @@ namespace OAuth2\ClientAssertionType; use OAuth2\Storage\ClientCredentialsInterface; use OAuth2\RequestInterface; use OAuth2\ResponseInterface; +use LogicException; /** * Validate a client via Http Basic authentication @@ -19,14 +20,16 @@ class HttpBasic implements ClientAssertionTypeInterface protected $config; /** - * @param OAuth2\Storage\ClientCredentialsInterface $clientStorage REQUIRED Storage class for retrieving client credentials information - * @param array $config OPTIONAL Configuration options for the server - * <code> - * $config = array( - * 'allow_credentials_in_request_body' => true, // whether to look for credentials in the POST body in addition to the Authorize HTTP Header - * 'allow_public_clients' => true // if true, "public clients" (clients without a secret) may be authenticated - * ); - * </code> + * Config array $config should look as follows: + * @code + * $config = array( + * 'allow_credentials_in_request_body' => true, // whether to look for credentials in the POST body in addition to the Authorize HTTP Header + * 'allow_public_clients' => true // if true, "public clients" (clients without a secret) may be authenticated + * ); + * @endcode + * + * @param ClientCredentialsInterface $storage Storage + * @param array $config Configuration options for the server */ public function __construct(ClientCredentialsInterface $storage, array $config = array()) { @@ -37,6 +40,14 @@ class HttpBasic implements ClientAssertionTypeInterface ), $config); } + /** + * Validate the OAuth request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool|mixed + * @throws LogicException + */ public function validateRequest(RequestInterface $request, ResponseInterface $response) { if (!$clientData = $this->getClientCredentials($request, $response)) { @@ -44,7 +55,7 @@ class HttpBasic implements ClientAssertionTypeInterface } if (!isset($clientData['client_id'])) { - throw new \LogicException('the clientData array must have "client_id" set'); + throw new LogicException('the clientData array must have "client_id" set'); } if (!isset($clientData['client_secret']) || $clientData['client_secret'] == '') { @@ -70,6 +81,11 @@ class HttpBasic implements ClientAssertionTypeInterface return true; } + /** + * Get the client id + * + * @return mixed + */ public function getClientId() { return $this->clientData['client_id']; @@ -82,13 +98,14 @@ class HttpBasic implements ClientAssertionTypeInterface * According to the spec (draft 20), the client_id can be provided in * the Basic Authorization header (recommended) or via GET/POST. * - * @return - * A list containing the client identifier and password, for example + * @param RequestInterface $request + * @param ResponseInterface $response + * @return array|null A list containing the client identifier and password, for example: * @code - * return array( - * "client_id" => CLIENT_ID, // REQUIRED the client id - * "client_secret" => CLIENT_SECRET, // OPTIONAL the client secret (may be omitted for public clients) - * ); + * return array( + * "client_id" => CLIENT_ID, // REQUIRED the client id + * "client_secret" => CLIENT_SECRET, // OPTIONAL the client secret (may be omitted for public clients) + * ); * @endcode * * @see http://tools.ietf.org/html/rfc6749#section-2.3.1 @@ -108,7 +125,6 @@ class HttpBasic implements ClientAssertionTypeInterface * client_secret can be null if the client's password is an empty string * @see http://tools.ietf.org/html/rfc6749#section-2.3.1 */ - return array('client_id' => $request->request('client_id'), 'client_secret' => $request->request('client_secret')); } } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php index ea7f54a87..4bafb1d24 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php @@ -7,37 +7,76 @@ use OAuth2\ScopeInterface; use OAuth2\RequestInterface; use OAuth2\ResponseInterface; use OAuth2\Scope; +use InvalidArgumentException; /** - * @see OAuth2\Controller\AuthorizeControllerInterface + * @see AuthorizeControllerInterface */ class AuthorizeController implements AuthorizeControllerInterface { + /** + * @var string + */ private $scope; + + /** + * @var int + */ private $state; + + /** + * @var mixed + */ private $client_id; + + /** + * @var string + */ private $redirect_uri; + + /** + * The response type + * + * @var string + */ private $response_type; + /** + * @var ClientInterface + */ protected $clientStorage; + + /** + * @var array + */ protected $responseTypes; + + /** + * @var array + */ protected $config; + + /** + * @var ScopeInterface + */ protected $scopeUtil; /** - * @param OAuth2\Storage\ClientInterface $clientStorage REQUIRED Instance of OAuth2\Storage\ClientInterface to retrieve client information - * @param array $responseTypes OPTIONAL Array of OAuth2\ResponseType\ResponseTypeInterface objects. Valid array - * keys are "code" and "token" - * @param array $config OPTIONAL Configuration options for the server - * <code> - * $config = array( - * 'allow_implicit' => false, // if the controller should allow the "implicit" grant type - * 'enforce_state' => true // if the controller should require the "state" parameter - * 'require_exact_redirect_uri' => true, // if the controller should require an exact match on the "redirect_uri" parameter - * 'redirect_status_code' => 302, // HTTP status code to use for redirect responses - * ); - * </code> - * @param OAuth2\ScopeInterface $scopeUtil OPTIONAL Instance of OAuth2\ScopeInterface to validate the requested scope + * Constructor + * + * @param ClientInterface $clientStorage REQUIRED Instance of OAuth2\Storage\ClientInterface to retrieve client information + * @param array $responseTypes OPTIONAL Array of OAuth2\ResponseType\ResponseTypeInterface objects. Valid array + * keys are "code" and "token" + * @param array $config OPTIONAL Configuration options for the server: + * @param ScopeInterface $scopeUtil OPTIONAL Instance of OAuth2\ScopeInterface to validate the requested scope + * @code + * $config = array( + * 'allow_implicit' => false, // if the controller should allow the "implicit" grant type + * 'enforce_state' => true // if the controller should require the "state" parameter + * 'require_exact_redirect_uri' => true, // if the controller should require an exact match on the "redirect_uri" parameter + * 'redirect_status_code' => 302, // HTTP status code to use for redirect responses + * ); + * @endcode */ public function __construct(ClientInterface $clientStorage, array $responseTypes = array(), array $config = array(), ScopeInterface $scopeUtil = null) { @@ -56,10 +95,20 @@ class AuthorizeController implements AuthorizeControllerInterface $this->scopeUtil = $scopeUtil; } + /** + * Handle the authorization request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param boolean $is_authorized + * @param mixed $user_id + * @return mixed|void + * @throws InvalidArgumentException + */ public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null) { if (!is_bool($is_authorized)) { - throw new \InvalidArgumentException('Argument "is_authorized" must be a boolean. This method must know if the user has granted access to the client.'); + throw new InvalidArgumentException('Argument "is_authorized" must be a boolean. This method must know if the user has granted access to the client.'); } // We repeat this, because we need to re-validate. The request could be POSTed @@ -101,6 +150,14 @@ class AuthorizeController implements AuthorizeControllerInterface $response->setRedirect($this->config['redirect_status_code'], $uri); } + /** + * Set not authorized response + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param string $redirect_uri + * @param mixed $user_id + */ protected function setNotAuthorizedResponse(RequestInterface $request, ResponseInterface $response, $redirect_uri, $user_id = null) { $error = 'access_denied'; @@ -108,9 +165,16 @@ class AuthorizeController implements AuthorizeControllerInterface $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $this->state, $error, $error_message); } - /* + /** * We have made this protected so this class can be extended to add/modify * these parameters + * + * @TODO: add dependency injection for the parameters in this method + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param mixed $user_id + * @return array */ protected function buildAuthorizeParameters($request, $response, $user_id) { @@ -127,6 +191,8 @@ class AuthorizeController implements AuthorizeControllerInterface } /** + * Validate the OAuth request + * * @param RequestInterface $request * @param ResponseInterface $response * @return bool @@ -186,7 +252,7 @@ class AuthorizeController implements AuthorizeControllerInterface $redirect_uri = $registered_redirect_uri; } - // Select the redirect URI + // Select the response type $response_type = $request->query('response_type', $request->request('response_type')); // for multiple-valued response types - make them alphabetical @@ -281,10 +347,10 @@ class AuthorizeController implements AuthorizeControllerInterface /** * Build the absolute URI based on supplied URI and parameters. * - * @param $uri An absolute URI. - * @param $params Parameters to be append as GET. + * @param string $uri An absolute URI. + * @param array $params Parameters to be append as GET. * - * @return + * @return string * An absolute URI with supplied parameters. * * @ingroup oauth2_section_4 @@ -302,9 +368,9 @@ class AuthorizeController implements AuthorizeControllerInterface } } - // Put humpty dumpty back together + // Put the uri back together return - ((isset($parse_url["scheme"])) ? $parse_url["scheme"] . "://" : "") + ((isset($parse_url["scheme"])) ? $parse_url["scheme"] . "://" : "") . ((isset($parse_url["user"])) ? $parse_url["user"] . ((isset($parse_url["pass"])) ? ":" . $parse_url["pass"] : "") . "@" : "") . ((isset($parse_url["host"])) ? $parse_url["host"] : "") @@ -326,10 +392,10 @@ class AuthorizeController implements AuthorizeControllerInterface /** * Internal method for validating redirect URI supplied * - * @param string $inputUri The submitted URI to be validated + * @param string $inputUri The submitted URI to be validated * @param string $registeredUriString The allowed URI(s) to validate against. Can be a space-delimited string of URIs to * allow for multiple URIs - * + * @return bool * @see http://tools.ietf.org/html/rfc6749#section-3.1.2 */ protected function validateRedirectUri($inputUri, $registeredUriString) @@ -363,29 +429,50 @@ class AuthorizeController implements AuthorizeControllerInterface } /** - * Convenience methods to access the parameters derived from the validated request + * Convenience method to access the scope + * + * @return string */ - public function getScope() { return $this->scope; } + /** + * Convenience method to access the state + * + * @return int + */ public function getState() { return $this->state; } + /** + * Convenience method to access the client id + * + * @return mixed + */ public function getClientId() { return $this->client_id; } + /** + * Convenience method to access the redirect url + * + * @return string + */ public function getRedirectUri() { return $this->redirect_uri; } + /** + * Convenience method to access the response type + * + * @return string + */ public function getResponseType() { return $this->response_type; diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php index fa07ae8d2..f758f976a 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php @@ -11,17 +11,18 @@ use OAuth2\ResponseInterface; * authorization directly, this controller ensures the request is valid, but * requires the application to determine the value of $is_authorized * - * ex: - * > $user_id = $this->somehowDetermineUserId(); - * > $is_authorized = $this->somehowDetermineUserAuthorization(); - * > $response = new OAuth2\Response(); - * > $authorizeController->handleAuthorizeRequest( - * > OAuth2\Request::createFromGlobals(), - * > $response, - * > $is_authorized, - * > $user_id); - * > $response->send(); - * + * @code + * $user_id = $this->somehowDetermineUserId(); + * $is_authorized = $this->somehowDetermineUserAuthorization(); + * $response = new OAuth2\Response(); + * $authorizeController->handleAuthorizeRequest( + * OAuth2\Request::createFromGlobals(), + * $response, + * $is_authorized, + * $user_id + * ); + * $response->send(); + * @endcode */ interface AuthorizeControllerInterface { @@ -37,7 +38,21 @@ interface AuthorizeControllerInterface const RESPONSE_TYPE_AUTHORIZATION_CODE = 'code'; const RESPONSE_TYPE_ACCESS_TOKEN = 'token'; + /** + * Handle the OAuth request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param $is_authorized + * @param null $user_id + * @return mixed + */ public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null); + /** + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool + */ public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php index 3cfaaaf12..926f90fda 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php @@ -10,17 +10,43 @@ use OAuth2\ResponseInterface; use OAuth2\Scope; /** - * @see OAuth2\Controller\ResourceControllerInterface + * @see ResourceControllerInterface */ class ResourceController implements ResourceControllerInterface { + /** + * @var array + */ private $token; + /** + * @var TokenTypeInterface + */ protected $tokenType; + + /** + * @var AccessTokenInterface + */ protected $tokenStorage; + + /** + * @var array + */ protected $config; + + /** + * @var ScopeInterface + */ protected $scopeUtil; + /** + * Constructor + * + * @param TokenTypeInterface $tokenType + * @param AccessTokenInterface $tokenStorage + * @param array $config + * @param ScopeInterface $scopeUtil + */ public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, $config = array(), ScopeInterface $scopeUtil = null) { $this->tokenType = $tokenType; @@ -36,6 +62,14 @@ class ResourceController implements ResourceControllerInterface $this->scopeUtil = $scopeUtil; } + /** + * Verify the resource request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param null $scope + * @return bool + */ public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response, $scope = null) { $token = $this->getAccessTokenData($request, $response); @@ -71,6 +105,13 @@ class ResourceController implements ResourceControllerInterface return (bool) $token; } + /** + * Get access token data. + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return array|null + */ public function getAccessTokenData(RequestInterface $request, ResponseInterface $response) { // Get the token parameter @@ -103,7 +144,11 @@ class ResourceController implements ResourceControllerInterface return null; } - // convenience method to allow retrieval of the token + /** + * convenience method to allow retrieval of the token. + * + * @return array + */ public function getToken() { return $this->token; diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php index 611421935..0e847ca61 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php @@ -10,17 +10,32 @@ use OAuth2\ResponseInterface; * call verifyResourceRequest in order to determine if the request * contains a valid token. * - * ex: - * > if (!$resourceController->verifyResourceRequest(OAuth2\Request::createFromGlobals(), $response = new OAuth2\Response())) { - * > $response->send(); // authorization failed - * > die(); - * > } - * > return json_encode($resource); // valid token! Send the stuff! - * + * @code + * if (!$resourceController->verifyResourceRequest(OAuth2\Request::createFromGlobals(), $response = new OAuth2\Response())) { + * $response->send(); // authorization failed + * die(); + * } + * return json_encode($resource); // valid token! Send the stuff! + * @endcode */ interface ResourceControllerInterface { + /** + * Verify the resource request + * + * @param RequestInterface $request - Request object + * @param ResponseInterface $response - Response object + * @param string $scope + * @return mixed + */ public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response, $scope = null); + /** + * Get access token data. + * + * @param RequestInterface $request - Request object + * @param ResponseInterface $response - Response object + * @return mixed + */ public function getAccessTokenData(RequestInterface $request, ResponseInterface $response); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php index 5d2d731fe..7fdaf85a6 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php @@ -10,9 +10,12 @@ use OAuth2\Scope; use OAuth2\Storage\ClientInterface; use OAuth2\RequestInterface; use OAuth2\ResponseInterface; +use InvalidArgumentException; +use LogicException; +use RuntimeException; /** - * @see \OAuth2\Controller\TokenControllerInterface + * @see TokenControllerInterface */ class TokenController implements TokenControllerInterface { @@ -22,7 +25,7 @@ class TokenController implements TokenControllerInterface protected $accessToken; /** - * @var array + * @var array<GrantTypeInterface> */ protected $grantTypes; @@ -32,7 +35,7 @@ class TokenController implements TokenControllerInterface protected $clientAssertionType; /** - * @var Scope|ScopeInterface + * @var ScopeInterface */ protected $scopeUtil; @@ -41,12 +44,22 @@ class TokenController implements TokenControllerInterface */ protected $clientStorage; + /** + * Constructor + * + * @param AccessTokenInterface $accessToken + * @param ClientInterface $clientStorage + * @param array $grantTypes + * @param ClientAssertionTypeInterface $clientAssertionType + * @param ScopeInterface $scopeUtil + * @throws InvalidArgumentException + */ public function __construct(AccessTokenInterface $accessToken, ClientInterface $clientStorage, array $grantTypes = array(), ClientAssertionTypeInterface $clientAssertionType = null, ScopeInterface $scopeUtil = null) { if (is_null($clientAssertionType)) { foreach ($grantTypes as $grantType) { if (!$grantType instanceof ClientAssertionTypeInterface) { - throw new \InvalidArgumentException('You must supply an instance of OAuth2\ClientAssertionType\ClientAssertionTypeInterface or only use grant types which implement OAuth2\ClientAssertionType\ClientAssertionTypeInterface'); + throw new InvalidArgumentException('You must supply an instance of OAuth2\ClientAssertionType\ClientAssertionTypeInterface or only use grant types which implement OAuth2\ClientAssertionType\ClientAssertionTypeInterface'); } } } @@ -63,6 +76,12 @@ class TokenController implements TokenControllerInterface $this->scopeUtil = $scopeUtil; } + /** + * Handle the token request. + * + * @param RequestInterface $request - Request object to grant access token + * @param ResponseInterface $response - Response object + */ public function handleTokenRequest(RequestInterface $request, ResponseInterface $response) { if ($token = $this->grantAccessToken($request, $response)) { @@ -83,8 +102,10 @@ class TokenController implements TokenControllerInterface * This would be called from the "/token" endpoint as defined in the spec. * You can call your endpoint whatever you want. * - * @param RequestInterface $request Request object to grant access token - * @param ResponseInterface $response + * @param RequestInterface $request - Request object to grant access token + * @param ResponseInterface $response - Response object + * + * @return bool|null|array * * @throws \InvalidArgumentException * @throws \LogicException @@ -97,9 +118,15 @@ class TokenController implements TokenControllerInterface */ public function grantAccessToken(RequestInterface $request, ResponseInterface $response) { - if (strtolower($request->server('REQUEST_METHOD')) != 'post') { + if (strtolower($request->server('REQUEST_METHOD')) === 'options') { + $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS')); + + return null; + } + + if (strtolower($request->server('REQUEST_METHOD')) !== 'post') { $response->setError(405, 'invalid_request', 'The request method must be POST when requesting an access token', '#section-3.2'); - $response->addHttpHeaders(array('Allow' => 'POST')); + $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS')); return null; } @@ -121,6 +148,7 @@ class TokenController implements TokenControllerInterface return null; } + /** @var GrantTypeInterface $grantType */ $grantType = $this->grantTypes[$grantTypeIdentifier]; /** @@ -128,8 +156,8 @@ class TokenController implements TokenControllerInterface * ClientAssertionTypes allow for grant types which also assert the client data * in which case ClientAssertion is handled in the validateRequest method * - * @see OAuth2\GrantType\JWTBearer - * @see OAuth2\GrantType\ClientCredentials + * @see \OAuth2\GrantType\JWTBearer + * @see \OAuth2\GrantType\ClientCredentials */ if (!$grantType instanceof ClientAssertionTypeInterface) { if (!$this->clientAssertionType->validateRequest($request, $response)) { @@ -178,7 +206,6 @@ class TokenController implements TokenControllerInterface * * @see http://tools.ietf.org/html/rfc6749#section-3.3 */ - $requestedScope = $this->scopeUtil->getScopeFromRequest($request); $availableScope = $grantType->getScope(); @@ -225,20 +252,24 @@ class TokenController implements TokenControllerInterface } /** - * addGrantType + * Add grant type * - * @param GrantTypeInterface $grantType the grant type to add for the specified identifier - * @param string $identifier a string passed in as "grant_type" in the response that will call this grantType + * @param GrantTypeInterface $grantType - the grant type to add for the specified identifier + * @param string|null $identifier - a string passed in as "grant_type" in the response that will call this grantType */ public function addGrantType(GrantTypeInterface $grantType, $identifier = null) { if (is_null($identifier) || is_numeric($identifier)) { - $identifier = $grantType->getQuerystringIdentifier(); + $identifier = $grantType->getQueryStringIdentifier(); } $this->grantTypes[$identifier] = $grantType; } + /** + * @param RequestInterface $request + * @param ResponseInterface $response + */ public function handleRevokeRequest(RequestInterface $request, ResponseInterface $response) { if ($this->revokeToken($request, $response)) { @@ -257,13 +288,20 @@ class TokenController implements TokenControllerInterface * * @param RequestInterface $request * @param ResponseInterface $response + * @throws RuntimeException * @return bool|null */ public function revokeToken(RequestInterface $request, ResponseInterface $response) { - if (strtolower($request->server('REQUEST_METHOD')) != 'post') { + if (strtolower($request->server('REQUEST_METHOD')) === 'options') { + $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS')); + + return null; + } + + if (strtolower($request->server('REQUEST_METHOD')) !== 'post') { $response->setError(405, 'invalid_request', 'The request method must be POST when revoking an access token', '#section-3.2'); - $response->addHttpHeaders(array('Allow' => 'POST')); + $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS')); return null; } @@ -285,7 +323,7 @@ class TokenController implements TokenControllerInterface // @todo remove this check for v2.0 if (!method_exists($this->accessToken, 'revokeToken')) { $class = get_class($this->accessToken); - throw new \RuntimeException("AccessToken {$class} does not implement required revokeToken method"); + throw new RuntimeException("AccessToken {$class} does not implement required revokeToken method"); } $this->accessToken->revokeToken($token, $token_type_hint); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php index 72d72570f..2f83ce4bd 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php @@ -10,23 +10,30 @@ use OAuth2\ResponseInterface; * it is called to handle all grant types the application supports. * It also validates the client's credentials * - * ex: - * > $tokenController->handleTokenRequest(OAuth2\Request::createFromGlobals(), $response = new OAuth2\Response()); - * > $response->send(); - * + * @code + * $tokenController->handleTokenRequest(OAuth2\Request::createFromGlobals(), $response = new OAuth2\Response()); + * $response->send(); + * @endcode */ interface TokenControllerInterface { /** - * handleTokenRequest - * - * @param $request - * OAuth2\RequestInterface - The current http request - * @param $response - * OAuth2\ResponseInterface - An instance of OAuth2\ResponseInterface to contain the response data + * Handle the token request * + * @param RequestInterface $request - The current http request + * @param ResponseInterface $response - An instance of OAuth2\ResponseInterface to contain the response data */ public function handleTokenRequest(RequestInterface $request, ResponseInterface $response); + /** + * Grant or deny a requested access token. + * This would be called from the "/token" endpoint as defined in the spec. + * You can call your endpoint whatever you want. + * + * @param RequestInterface $request - Request object to grant access token + * @param ResponseInterface $response - Response object + * + * @return mixed + */ public function grantAccessToken(RequestInterface $request, ResponseInterface $response); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php index 2d336c664..8dc720a43 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php @@ -4,8 +4,31 @@ namespace OAuth2\Encryption; interface EncryptionInterface { + /** + * @param $payload + * @param $key + * @param null $algorithm + * @return mixed + */ public function encode($payload, $key, $algorithm = null); + + /** + * @param $payload + * @param $key + * @param null $algorithm + * @return mixed + */ public function decode($payload, $key, $algorithm = null); + + /** + * @param $data + * @return mixed + */ public function urlSafeB64Encode($data); + + /** + * @param $b64 + * @return mixed + */ public function urlSafeB64Decode($b64); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php index ee576e643..c258b8fc3 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php @@ -2,12 +2,21 @@ namespace OAuth2\Encryption; +use Exception; +use InvalidArgumentException; + /** * @link https://github.com/F21/jwt * @author F21 */ class Jwt implements EncryptionInterface { + /** + * @param $payload + * @param $key + * @param string $algo + * @return string + */ public function encode($payload, $key, $algo = 'HS256') { $header = $this->generateJwtHeader($payload, $algo); @@ -25,6 +34,12 @@ class Jwt implements EncryptionInterface return implode('.', $segments); } + /** + * @param string $jwt + * @param null $key + * @param array|bool $allowedAlgorithms + * @return bool|mixed + */ public function decode($jwt, $key = null, $allowedAlgorithms = true) { if (!strpos($jwt, '.')) { @@ -67,6 +82,14 @@ class Jwt implements EncryptionInterface return $payload; } + /** + * @param $signature + * @param $input + * @param $key + * @param string $algo + * @return bool + * @throws InvalidArgumentException + */ private function verifySignature($signature, $input, $key, $algo = 'HS256') { // use constants when possible, for HipHop support @@ -89,10 +112,17 @@ class Jwt implements EncryptionInterface return @openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA512') ? OPENSSL_ALGO_SHA512 : 'sha512') === 1; default: - throw new \InvalidArgumentException("Unsupported or invalid signing algorithm."); + throw new InvalidArgumentException("Unsupported or invalid signing algorithm."); } } + /** + * @param $input + * @param $key + * @param string $algo + * @return string + * @throws Exception + */ private function sign($input, $key, $algo = 'HS256') { switch ($algo) { @@ -115,19 +145,30 @@ class Jwt implements EncryptionInterface return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA512') ? OPENSSL_ALGO_SHA512 : 'sha512'); default: - throw new \Exception("Unsupported or invalid signing algorithm."); + throw new Exception("Unsupported or invalid signing algorithm."); } } + /** + * @param $input + * @param $key + * @param string $algo + * @return mixed + * @throws Exception + */ private function generateRSASignature($input, $key, $algo) { if (!openssl_sign($input, $signature, $key, $algo)) { - throw new \Exception("Unable to sign data."); + throw new Exception("Unable to sign data."); } return $signature; } + /** + * @param string $data + * @return string + */ public function urlSafeB64Encode($data) { $b64 = base64_encode($data); @@ -138,6 +179,10 @@ class Jwt implements EncryptionInterface return $b64; } + /** + * @param string $b64 + * @return mixed|string + */ public function urlSafeB64Decode($b64) { $b64 = str_replace(array('-', '_'), @@ -158,6 +203,11 @@ class Jwt implements EncryptionInterface ); } + /** + * @param string $a + * @param string $b + * @return bool + */ protected function hash_equals($a, $b) { if (function_exists('hash_equals')) { @@ -170,4 +220,4 @@ class Jwt implements EncryptionInterface return $diff === 0; } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php index cae9f787d..784f6b3a3 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php @@ -6,29 +6,47 @@ use OAuth2\Storage\AuthorizationCodeInterface; use OAuth2\ResponseType\AccessTokenInterface; use OAuth2\RequestInterface; use OAuth2\ResponseInterface; +use Exception; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class AuthorizationCode implements GrantTypeInterface { + /** + * @var AuthorizationCodeInterface + */ protected $storage; + + /** + * @var array + */ protected $authCode; /** - * @param \OAuth2\Storage\AuthorizationCodeInterface $storage REQUIRED Storage class for retrieving authorization code information + * @param AuthorizationCodeInterface $storage - REQUIRED Storage class for retrieving authorization code information */ public function __construct(AuthorizationCodeInterface $storage) { $this->storage = $storage; } - public function getQuerystringIdentifier() + /** + * @return string + */ + public function getQueryStringIdentifier() { return 'authorization_code'; } + /** + * Validate the OAuth request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool + * @throws Exception + */ public function validateRequest(RequestInterface $request, ResponseInterface $response) { if (!$request->request('code')) { @@ -75,21 +93,45 @@ class AuthorizationCode implements GrantTypeInterface return true; } + /** + * Get the client id + * + * @return mixed + */ public function getClientId() { return $this->authCode['client_id']; } + /** + * Get the scope + * + * @return string + */ public function getScope() { return isset($this->authCode['scope']) ? $this->authCode['scope'] : null; } + /** + * Get the user id + * + * @return mixed + */ public function getUserId() { return isset($this->authCode['user_id']) ? $this->authCode['user_id'] : null; } + /** + * Create access token + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array + */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope) { $token = $accessToken->createAccessToken($client_id, $user_id, $scope); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php index f953e4e8d..e135c2dd2 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php @@ -9,12 +9,19 @@ use OAuth2\Storage\ClientCredentialsInterface; /** * @author Brent Shaffer <bshafs at gmail dot com> * - * @see OAuth2\ClientAssertionType_HttpBasic + * @see HttpBasic */ class ClientCredentials extends HttpBasic implements GrantTypeInterface { + /** + * @var array + */ private $clientData; + /** + * @param ClientCredentialsInterface $storage + * @param array $config + */ public function __construct(ClientCredentialsInterface $storage, array $config = array()) { /** @@ -27,11 +34,21 @@ class ClientCredentials extends HttpBasic implements GrantTypeInterface parent::__construct($storage, $config); } - public function getQuerystringIdentifier() + /** + * Get query string identifier + * + * @return string + */ + public function getQueryStringIdentifier() { return 'client_credentials'; } + /** + * Get scope + * + * @return string|null + */ public function getScope() { $this->loadClientData(); @@ -39,6 +56,11 @@ class ClientCredentials extends HttpBasic implements GrantTypeInterface return isset($this->clientData['scope']) ? $this->clientData['scope'] : null; } + /** + * Get user id + * + * @return mixed + */ public function getUserId() { $this->loadClientData(); @@ -46,6 +68,15 @@ class ClientCredentials extends HttpBasic implements GrantTypeInterface return isset($this->clientData['user_id']) ? $this->clientData['user_id'] : null; } + /** + * Create access token + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array + */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope) { /** diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php index 98489e9c1..f45786ff5 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php @@ -11,10 +11,49 @@ use OAuth2\ResponseInterface; */ interface GrantTypeInterface { - public function getQuerystringIdentifier(); + /** + * Get query string identifier + * + * @return string + */ + public function getQueryStringIdentifier(); + + /** + * @param RequestInterface $request + * @param ResponseInterface $response + * @return mixed + */ public function validateRequest(RequestInterface $request, ResponseInterface $response); + + /** + * Get client id + * + * @return mixed + */ public function getClientId(); + + /** + * Get user id + * + * @return mixed + */ public function getUserId(); + + /** + * Get scope + * + * @return string|null + */ public function getScope(); + + /** + * Create access token + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array + */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php index bb11a6954..62c1efabd 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php @@ -30,10 +30,12 @@ class JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface /** * Creates an instance of the JWT bearer grant type. * - * @param OAuth2\Storage\JWTBearerInterface|JwtBearerInterface $storage A valid storage interface that implements storage hooks for the JWT bearer grant type. - * @param string $audience The audience to validate the token against. This is usually the full URI of the OAuth token requests endpoint. - * @param EncryptionInterface|OAuth2\Encryption\JWT $jwtUtil OPTONAL The class used to decode, encode and verify JWTs. - * @param array $config + * @param JwtBearerInterface $storage - A valid storage interface that implements storage hooks for the JWT + * bearer grant type. + * @param string $audience - The audience to validate the token against. This is usually the full + * URI of the OAuth token requests endpoint. + * @param EncryptionInterface|JWT $jwtUtil - OPTONAL The class used to decode, encode and verify JWTs. + * @param array $config */ public function __construct(JwtBearerInterface $storage, $audience, EncryptionInterface $jwtUtil = null, array $config = array()) { @@ -56,12 +58,11 @@ class JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface /** * Returns the grant_type get parameter to identify the grant type request as JWT bearer authorization grant. * - * @return - * The string identifier for grant_type. + * @return string - The string identifier for grant_type. * - * @see OAuth2\GrantType\GrantTypeInterface::getQuerystringIdentifier() + * @see GrantTypeInterface::getQueryStringIdentifier() */ - public function getQuerystringIdentifier() + public function getQueryStringIdentifier() { return 'urn:ietf:params:oauth:grant-type:jwt-bearer'; } @@ -69,10 +70,9 @@ class JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface /** * Validates the data from the decoded JWT. * - * @return - * TRUE if the JWT request is valid and can be decoded. Otherwise, FALSE is returned. - * - * @see OAuth2\GrantType\GrantTypeInterface::getTokenData() + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool|mixed|null TRUE if the JWT request is valid and can be decoded. Otherwise, FALSE is returned.@see GrantTypeInterface::getTokenData() */ public function validateRequest(RequestInterface $request, ResponseInterface $response) { @@ -196,16 +196,31 @@ class JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface return true; } + /** + * Get client id + * + * @return mixed + */ public function getClientId() { return $this->jwt['iss']; } + /** + * Get user id + * + * @return mixed + */ public function getUserId() { return $this->jwt['sub']; } + /** + * Get scope + * + * @return null + */ public function getScope() { return null; @@ -215,7 +230,13 @@ class JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface * Creates an access token that is NOT associated with a refresh token. * If a subject (sub) the name of the user/account we are accessing data on behalf of. * - * @see OAuth2\GrantType\GrantTypeInterface::createAccessToken() + * @see GrantTypeInterface::createAccessToken() + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope) { diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php index e55385222..75c611f1d 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php @@ -8,25 +8,34 @@ use OAuth2\RequestInterface; use OAuth2\ResponseInterface; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class RefreshToken implements GrantTypeInterface { + /** + * @var array + */ private $refreshToken; + /** + * @var RefreshTokenInterface + */ protected $storage; + + /** + * @var array + */ protected $config; /** - * @param OAuth2\Storage\RefreshTokenInterface $storage REQUIRED Storage class for retrieving refresh token information - * @param array $config OPTIONAL Configuration options for the server - * <code> - * $config = array( - * 'always_issue_new_refresh_token' => true, // whether to issue a new refresh token upon successful token request - * 'unset_refresh_token_after_use' => true // whether to unset the refresh token after after using - * ); - * </code> + * @param RefreshTokenInterface $storage - REQUIRED Storage class for retrieving refresh token information + * @param array $config - OPTIONAL Configuration options for the server + * @code + * $config = array( + * 'always_issue_new_refresh_token' => true, // whether to issue a new refresh token upon successful token request + * 'unset_refresh_token_after_use' => true // whether to unset the refresh token after after using + * ); + * @endcode */ public function __construct(RefreshTokenInterface $storage, $config = array()) { @@ -45,11 +54,21 @@ class RefreshToken implements GrantTypeInterface $this->storage = $storage; } - public function getQuerystringIdentifier() + /** + * @return string + */ + public function getQueryStringIdentifier() { return 'refresh_token'; } + /** + * Validate the OAuth request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool|mixed|null + */ public function validateRequest(RequestInterface $request, ResponseInterface $response) { if (!$request->request("refresh_token")) { @@ -76,21 +95,45 @@ class RefreshToken implements GrantTypeInterface return true; } + /** + * Get client id + * + * @return mixed + */ public function getClientId() { return $this->refreshToken['client_id']; } + /** + * Get user id + * + * @return mixed|null + */ public function getUserId() { return isset($this->refreshToken['user_id']) ? $this->refreshToken['user_id'] : null; } + /** + * Get scope + * + * @return null|string + */ public function getScope() { return isset($this->refreshToken['scope']) ? $this->refreshToken['scope'] : null; } + /** + * Create access token + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array + */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope) { /* diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php index f165538ba..b10c2dd09 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php @@ -6,30 +6,46 @@ use OAuth2\Storage\UserCredentialsInterface; use OAuth2\ResponseType\AccessTokenInterface; use OAuth2\RequestInterface; use OAuth2\ResponseInterface; +use LogicException; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class UserCredentials implements GrantTypeInterface { + /** + * @var array + */ private $userInfo; + /** + * @var UserCredentialsInterface + */ protected $storage; /** - * @param OAuth2\Storage\UserCredentialsInterface $storage REQUIRED Storage class for retrieving user credentials information + * @param UserCredentialsInterface $storage - REQUIRED Storage class for retrieving user credentials information */ public function __construct(UserCredentialsInterface $storage) { $this->storage = $storage; } - public function getQuerystringIdentifier() + /** + * @return string + */ + public function getQueryStringIdentifier() { return 'password'; } + /** + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool|mixed|null + * + * @throws LogicException + */ public function validateRequest(RequestInterface $request, ResponseInterface $response) { if (!$request->request("password") || !$request->request("username")) { @@ -61,21 +77,45 @@ class UserCredentials implements GrantTypeInterface return true; } + /** + * Get client id + * + * @return mixed|null + */ public function getClientId() { return null; } + /** + * Get user id + * + * @return mixed + */ public function getUserId() { return $this->userInfo['user_id']; } + /** + * Get scope + * + * @return null|string + */ public function getScope() { return isset($this->userInfo['scope']) ? $this->userInfo['scope'] : null; } + /** + * Create access token + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array + */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope) { return $accessToken->createAccessToken($client_id, $user_id, $scope); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php index c9b5c6af7..54c5f9a63 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php @@ -11,8 +11,19 @@ use OAuth2\ResponseInterface; */ class AuthorizeController extends BaseAuthorizeController implements AuthorizeControllerInterface { + /** + * @var mixed + */ private $nonce; + /** + * Set not authorized response + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param string $redirect_uri + * @param null $user_id + */ protected function setNotAuthorizedResponse(RequestInterface $request, ResponseInterface $response, $redirect_uri, $user_id = null) { $prompt = $request->query('prompt', 'consent'); @@ -32,6 +43,14 @@ class AuthorizeController extends BaseAuthorizeController implements AuthorizeCo $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $this->getState(), $error, $error_message); } + /** + * @TODO: add dependency injection for the parameters in this method + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param mixed $user_id + * @return array + */ protected function buildAuthorizeParameters($request, $response, $user_id) { if (!$params = parent::buildAuthorizeParameters($request, $response, $user_id)) { @@ -49,6 +68,11 @@ class AuthorizeController extends BaseAuthorizeController implements AuthorizeCo return $params; } + /** + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool + */ public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response) { if (!parent::validateAuthorizeRequest($request, $response)) { @@ -69,6 +93,11 @@ class AuthorizeController extends BaseAuthorizeController implements AuthorizeCo return true; } + /** + * Array of valid response types + * + * @return array + */ protected function getValidResponseTypes() { return array( @@ -87,11 +116,8 @@ class AuthorizeController extends BaseAuthorizeController implements AuthorizeCo * method checks whether OpenID Connect is enabled in the server settings * and whether the openid scope was requested. * - * @param $request_scope - * A space-separated string of scopes. - * - * @return - * TRUE if an id token is needed, FALSE otherwise. + * @param string $request_scope - A space-separated string of scopes. + * @return boolean - TRUE if an id token is needed, FALSE otherwise. */ public function needsIdToken($request_scope) { @@ -99,6 +125,9 @@ class AuthorizeController extends BaseAuthorizeController implements AuthorizeCo return $this->scopeUtil->checkScope('openid', $request_scope); } + /** + * @return mixed + */ public function getNonce() { return $this->nonce; diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php index 1e231d844..b4967c317 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php @@ -5,6 +5,8 @@ namespace OAuth2\OpenID\Controller; interface AuthorizeControllerInterface { const RESPONSE_TYPE_ID_TOKEN = 'id_token'; + const RESPONSE_TYPE_ID_TOKEN_TOKEN = 'id_token token'; + const RESPONSE_TYPE_CODE_ID_TOKEN = 'code id_token'; } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php index 30cb942d0..c489b7af3 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php @@ -16,30 +16,34 @@ use OAuth2\ResponseInterface; */ class UserInfoController extends ResourceController implements UserInfoControllerInterface { - private $token; - - protected $tokenType; - protected $tokenStorage; + /** + * @var UserClaimsInterface + */ protected $userClaimsStorage; - protected $config; - protected $scopeUtil; + /** + * Constructor + * + * @param TokenTypeInterface $tokenType + * @param AccessTokenInterface $tokenStorage + * @param UserClaimsInterface $userClaimsStorage + * @param array $config + * @param ScopeInterface $scopeUtil + */ public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, UserClaimsInterface $userClaimsStorage, $config = array(), ScopeInterface $scopeUtil = null) { - $this->tokenType = $tokenType; - $this->tokenStorage = $tokenStorage; - $this->userClaimsStorage = $userClaimsStorage; - - $this->config = array_merge(array( - 'www_realm' => 'Service', - ), $config); + parent::__construct($tokenType, $tokenStorage, $config, $scopeUtil); - if (is_null($scopeUtil)) { - $scopeUtil = new Scope(); - } - $this->scopeUtil = $scopeUtil; + $this->userClaimsStorage = $userClaimsStorage; } + /** + * Handle the user info request + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return void + */ public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response) { if (!$this->verifyResourceRequest($request, $response, 'openid')) { @@ -55,4 +59,4 @@ class UserInfoController extends ResourceController implements UserInfoControlle ); $response->addParameters($claims); } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php index a89049d49..88e9228d0 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php @@ -9,15 +9,22 @@ use OAuth2\ResponseInterface; * This controller is called when the user claims for OpenID Connect's * UserInfo endpoint should be returned. * - * ex: - * > $response = new OAuth2\Response(); - * > $userInfoController->handleUserInfoRequest( - * > OAuth2\Request::createFromGlobals(), - * > $response; - * > $response->send(); - * + * @code + * $response = new OAuth2\Response(); + * $userInfoController->handleUserInfoRequest( + * OAuth2\Request::createFromGlobals(), + * $response + * ); + * $response->send(); + * @endcode */ interface UserInfoControllerInterface { + /** + * Handle user info request + * + * @param RequestInterface $request + * @param ResponseInterface $response + */ public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php index 8ed1edc26..ee113a0e5 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php @@ -6,11 +6,19 @@ use OAuth2\GrantType\AuthorizationCode as BaseAuthorizationCode; use OAuth2\ResponseType\AccessTokenInterface; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class AuthorizationCode extends BaseAuthorizationCode { + /** + * Create access token + * + * @param AccessTokenInterface $accessToken + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user id associated with the access token + * @param string $scope - scopes to be stored in space-separated string. + * @return array + */ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope) { $includeRefreshToken = true; diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php index 8971954c5..b8ad41ffb 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php @@ -6,16 +6,26 @@ use OAuth2\ResponseType\AuthorizationCode as BaseAuthorizationCode; use OAuth2\OpenID\Storage\AuthorizationCodeInterface as AuthorizationCodeStorageInterface; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class AuthorizationCode extends BaseAuthorizationCode implements AuthorizationCodeInterface { + /** + * Constructor + * + * @param AuthorizationCodeStorageInterface $storage + * @param array $config + */ public function __construct(AuthorizationCodeStorageInterface $storage, array $config = array()) { parent::__construct($storage, $config); } + /** + * @param $params + * @param null $user_id + * @return array + */ public function getAuthorizeResponse($params, $user_id = null) { // build the URL to redirect to @@ -35,18 +45,14 @@ class AuthorizationCode extends BaseAuthorizationCode implements AuthorizationCo /** * Handle the creation of the authorization code. * - * @param $client_id - * Client identifier related to the authorization code - * @param $user_id - * User ID associated with the authorization code - * @param $redirect_uri - * An absolute URI to which the authorization server will redirect the - * user-agent to when the end-user authorization step is completed. - * @param $scope - * (optional) Scopes to be stored in space-separated string. - * @param $id_token - * (optional) The OpenID Connect id_token. + * @param mixed $client_id - Client identifier related to the authorization code + * @param mixed $user_id - User ID associated with the authorization code + * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the + * user-agent to when the end-user authorization step is completed. + * @param string $scope - OPTIONAL Scopes to be stored in space-separated string. + * @param string $id_token - OPTIONAL The OpenID Connect id_token. * + * @return string * @see http://tools.ietf.org/html/rfc6749#section-4 * @ingroup oauth2_section_4 */ diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php index ea4779255..eb94ef077 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php @@ -5,7 +5,6 @@ namespace OAuth2\OpenID\ResponseType; use OAuth2\ResponseType\AuthorizationCodeInterface as BaseAuthorizationCodeInterface; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ interface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface @@ -13,12 +12,13 @@ interface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface /** * Handle the creation of the authorization code. * - * @param $client_id Client identifier related to the authorization code - * @param $user_id User ID associated with the authorization code - * @param $redirect_uri An absolute URI to which the authorization server will redirect the - * user-agent to when the end-user authorization step is completed. - * @param $scope OPTIONAL Scopes to be stored in space-separated string. - * @param $id_token OPTIONAL The OpenID Connect id_token. + * @param mixed $client_id - Client identifier related to the authorization code + * @param mixed $user_id - User ID associated with the authorization code + * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the + * user-agent to when the end-user authorization step is completed. + * @param string $scope - OPTIONAL Scopes to be stored in space-separated string. + * @param string $id_token - OPTIONAL The OpenID Connect id_token. + * @return string * * @see http://tools.ietf.org/html/rfc6749#section-4 * @ingroup oauth2_section_4 diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php index ac7764d6c..2696ada37 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php @@ -4,15 +4,31 @@ namespace OAuth2\OpenID\ResponseType; class CodeIdToken implements CodeIdTokenInterface { + /** + * @var AuthorizationCodeInterface + */ protected $authCode; + + /** + * @var IdTokenInterface + */ protected $idToken; + /** + * @param AuthorizationCodeInterface $authCode + * @param IdTokenInterface $idToken + */ public function __construct(AuthorizationCodeInterface $authCode, IdTokenInterface $idToken) { $this->authCode = $authCode; $this->idToken = $idToken; } + /** + * @param array $params + * @param mixed $user_id + * @return mixed + */ public function getAuthorizeResponse($params, $user_id = null) { $result = $this->authCode->getAuthorizeResponse($params, $user_id); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php index 97777fbf2..55e446074 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php @@ -6,14 +6,38 @@ use OAuth2\Encryption\EncryptionInterface; use OAuth2\Encryption\Jwt; use OAuth2\Storage\PublicKeyInterface; use OAuth2\OpenID\Storage\UserClaimsInterface; +use LogicException; class IdToken implements IdTokenInterface { + /** + * @var UserClaimsInterface + */ protected $userClaimsStorage; + /** + * @var PublicKeyInterface + */ protected $publicKeyStorage; + + /** + * @var array + */ protected $config; + + /** + * @var EncryptionInterface + */ protected $encryptionUtil; + /** + * Constructor + * + * @param UserClaimsInterface $userClaimsStorage + * @param PublicKeyInterface $publicKeyStorage + * @param array $config + * @param EncryptionInterface $encryptionUtil + * @throws LogicException + */ public function __construct(UserClaimsInterface $userClaimsStorage, PublicKeyInterface $publicKeyStorage, array $config = array(), EncryptionInterface $encryptionUtil = null) { $this->userClaimsStorage = $userClaimsStorage; @@ -24,13 +48,18 @@ class IdToken implements IdTokenInterface $this->encryptionUtil = $encryptionUtil; if (!isset($config['issuer'])) { - throw new \LogicException('config parameter "issuer" must be set'); + throw new LogicException('config parameter "issuer" must be set'); } $this->config = array_merge(array( 'id_lifetime' => 3600, ), $config); } + /** + * @param array $params + * @param null $userInfo + * @return array|mixed + */ public function getAuthorizeResponse($params, $userInfo = null) { // build the URL to redirect to @@ -50,6 +79,16 @@ class IdToken implements IdTokenInterface return array($params['redirect_uri'], $result); } + /** + * Create id token + * + * @param string $client_id + * @param mixed $userInfo + * @param mixed $nonce + * @param mixed $userClaims + * @param mixed $access_token + * @return mixed|string + */ public function createIdToken($client_id, $userInfo, $nonce = null, $userClaims = null, $access_token = null) { // pull auth_time from user info if supplied @@ -79,6 +118,11 @@ class IdToken implements IdTokenInterface return $this->encodeToken($token, $client_id); } + /** + * @param $access_token + * @param null $client_id + * @return mixed|string + */ protected function createAtHash($access_token, $client_id = null) { // maps HS256 and RS256 to sha256, etc. @@ -90,6 +134,11 @@ class IdToken implements IdTokenInterface return $this->encryptionUtil->urlSafeB64Encode($at_hash); } + /** + * @param array $token + * @param null $client_id + * @return mixed|string + */ protected function encodeToken(array $token, $client_id = null) { $private_key = $this->publicKeyStorage->getPrivateKey($client_id); @@ -98,6 +147,11 @@ class IdToken implements IdTokenInterface return $this->encryptionUtil->encode($token, $private_key, $algorithm); } + /** + * @param $userInfo + * @return array + * @throws LogicException + */ private function getUserIdAndAuthTime($userInfo) { $auth_time = null; @@ -105,7 +159,7 @@ class IdToken implements IdTokenInterface // support an array for user_id / auth_time if (is_array($userInfo)) { if (!isset($userInfo['user_id'])) { - throw new \LogicException('if $user_id argument is an array, user_id index must be set'); + throw new LogicException('if $user_id argument is an array, user_id index must be set'); } $auth_time = isset($userInfo['auth_time']) ? $userInfo['auth_time'] : null; diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php index 0bd2f8391..226a3bcbb 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php @@ -15,12 +15,13 @@ interface IdTokenInterface extends ResponseTypeInterface * If the Implicit Flow is used, the token and id_token are generated and * returned together. * - * @param string $client_id The client id. - * @param string $user_id The user id. - * @param string $nonce OPTIONAL The nonce. - * @param string $userClaims OPTIONAL Claims about the user. - * @param string $access_token OPTIONAL The access token, if known. - * + * @param string $client_id - The client id. + * @param mixed $userInfo - User info + * @param string $nonce - OPTIONAL The nonce. + * @param string $userClaims - OPTIONAL Claims about the user. + * @param string $access_token - OPTIONAL The access token, if known. + + * @internal param string $user_id - The user id. * @return string The ID Token represented as a JSON Web Token (JWT). * * @see http://openid.net/specs/openid-connect-core-1_0.html#IDToken diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php index f0c59799b..94c51ae4d 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php @@ -6,15 +6,33 @@ use OAuth2\ResponseType\AccessTokenInterface; class IdTokenToken implements IdTokenTokenInterface { + /** + * @var AccessTokenInterface + */ protected $accessToken; + + /** + * @var IdTokenInterface + */ protected $idToken; + /** + * Constructor + * + * @param AccessTokenInterface $accessToken + * @param IdTokenInterface $idToken + */ public function __construct(AccessTokenInterface $accessToken, IdTokenInterface $idToken) { $this->accessToken = $accessToken; $this->idToken = $idToken; } + /** + * @param array $params + * @param mixed $user_id + * @return mixed + */ public function getAuthorizeResponse($params, $user_id = null) { $result = $this->accessToken->getAuthorizeResponse($params, $user_id); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php index 51dd867ec..446cec928 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php @@ -23,13 +23,13 @@ interface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface * * Required for OAuth2::GRANT_TYPE_AUTH_CODE. * - * @param $code authorization code to be stored. - * @param $client_id client identifier to be stored. - * @param $user_id user identifier to be stored. - * @param string $redirect_uri redirect URI(s) to be stored in a space-separated string. - * @param int $expires expiration to be stored as a Unix timestamp. - * @param string $scope OPTIONAL scopes to be stored in space-separated string. - * @param string $id_token OPTIONAL the OpenID Connect id_token. + * @param string $code - authorization code to be stored. + * @param mixed $client_id - client identifier to be stored. + * @param mixed $user_id - user identifier to be stored. + * @param string $redirect_uri - redirect URI(s) to be stored in a space-separated string. + * @param int $expires - expiration to be stored as a Unix timestamp. + * @param string $scope - OPTIONAL scopes to be stored in space-separated string. + * @param string $id_token - OPTIONAL the OpenID Connect id_token. * * @ingroup oauth2_section_4 */ diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php index f230bef9e..9c5e7c8c4 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php @@ -23,14 +23,11 @@ interface UserClaimsInterface * Groups of claims are returned based on the requested scopes. No group * is required, and no claim is required. * - * @param $user_id - * The id of the user for which claims should be returned. - * @param $scope - * The requested scope. + * @param mixed $user_id - The id of the user for which claims should be returned. + * @param string $scope - The requested scope. * Scopes with matching claims: profile, email, address, phone. * - * @return - * An array in the claim => value format. + * @return array - An array in the claim => value format. * * @see http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims */ diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php index c92cee821..c96cb972f 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php @@ -2,6 +2,8 @@ namespace OAuth2; +use LogicException; + /** * OAuth2\Request * This class is taken from the Symfony2 Framework and is part of the Symfony package. @@ -21,13 +23,14 @@ class Request implements RequestInterface /** * Constructor. * - * @param array $query The GET parameters - * @param array $request The POST parameters - * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...) - * @param array $cookies The COOKIE parameters - * @param array $files The FILES parameters - * @param array $server The SERVER parameters - * @param string $content The raw body data + * @param array $query - The GET parameters + * @param array $request - The POST parameters + * @param array $attributes - The request attributes (parameters parsed from the PATH_INFO, ...) + * @param array $cookies - The COOKIE parameters + * @param array $files - The FILES parameters + * @param array $server - The SERVER parameters + * @param string $content - The raw body data + * @param array $headers - The headers * * @api */ @@ -41,13 +44,14 @@ class Request implements RequestInterface * * This method also re-initializes all properties. * - * @param array $query The GET parameters - * @param array $request The POST parameters - * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...) - * @param array $cookies The COOKIE parameters - * @param array $files The FILES parameters - * @param array $server The SERVER parameters - * @param string $content The raw body data + * @param array $query - The GET parameters + * @param array $request - The POST parameters + * @param array $attributes - The request attributes (parameters parsed from the PATH_INFO, ...) + * @param array $cookies - The COOKIE parameters + * @param array $files - The FILES parameters + * @param array $server - The SERVER parameters + * @param string $content - The raw body data + * @param array $headers - The headers * * @api */ @@ -63,21 +67,41 @@ class Request implements RequestInterface $this->headers = is_null($headers) ? $this->getHeadersFromServer($this->server) : $headers; } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function query($name, $default = null) { return isset($this->query[$name]) ? $this->query[$name] : $default; } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function request($name, $default = null) { return isset($this->request[$name]) ? $this->request[$name] : $default; } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function server($name, $default = null) { return isset($this->server[$name]) ? $this->server[$name] : $default; } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function headers($name, $default = null) { $headers = array_change_key_case($this->headers); @@ -86,6 +110,9 @@ class Request implements RequestInterface return isset($headers[$name]) ? $headers[$name] : $default; } + /** + * @return array + */ public function getAllQueryParameters() { return $this->query; @@ -94,14 +121,15 @@ class Request implements RequestInterface /** * Returns the request body content. * - * @param Boolean $asResource If true, a resource will be returned + * @param boolean $asResource - If true, a resource will be returned + * @return string|resource - The request body content or a resource to read the body stream. * - * @return string|resource The request body content or a resource to read the body stream. + * @throws LogicException */ public function getContent($asResource = false) { if (false === $this->content || (true === $asResource && null !== $this->content)) { - throw new \LogicException('getContent() can only be called once when using the resource return type.'); + throw new LogicException('getContent() can only be called once when using the resource return type.'); } if (true === $asResource) { @@ -117,6 +145,10 @@ class Request implements RequestInterface return $this->content; } + /** + * @param array $server + * @return array + */ private function getHeadersFromServer($server) { $headers = array(); @@ -185,13 +217,15 @@ class Request implements RequestInterface /** * Creates a new request with values from PHP's super globals. * - * @return Request A new request + * @return Request - A new request * * @api */ public static function createFromGlobals() { $class = get_called_class(); + + /** @var Request $request */ $request = new $class($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER); $contentType = $request->server('CONTENT_TYPE', ''); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php index 8a70d5fad..1d036b735 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php @@ -4,13 +4,36 @@ namespace OAuth2; interface RequestInterface { + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function query($name, $default = null); + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function request($name, $default = null); + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function server($name, $default = null); + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function headers($name, $default = null); + /** + * @return mixed + */ public function getAllQueryParameters(); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php index fc1e62a98..ccd797ae7 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php @@ -2,6 +2,8 @@ namespace OAuth2; +use InvalidArgumentException; + /** * Class to handle OAuth2 Responses in a graceful way. Use this interface * to output the proper OAuth2 responses. @@ -13,12 +15,34 @@ namespace OAuth2; */ class Response implements ResponseInterface { + /** + * @var string + */ public $version; + + /** + * @var int + */ protected $statusCode = 200; + + /** + * @var string + */ protected $statusText; + + /** + * @var array + */ protected $parameters = array(); + + /** + * @var array + */ protected $httpHeaders = array(); + /** + * @var array + */ public static $statusTexts = array( 100 => 'Continue', 101 => 'Switching Protocols', @@ -63,6 +87,11 @@ class Response implements ResponseInterface 505 => 'HTTP Version Not Supported', ); + /** + * @param array $parameters + * @param int $statusCode + * @param array $headers + */ public function __construct($parameters = array(), $statusCode = 200, $headers = array()) { $this->setParameters($parameters); @@ -102,76 +131,128 @@ class Response implements ResponseInterface return sprintf("%s: %s\n", $name, $value); } + /** + * @return int + */ public function getStatusCode() { return $this->statusCode; } + /** + * @param int $statusCode + * @param string $text + * @throws InvalidArgumentException + */ public function setStatusCode($statusCode, $text = null) { $this->statusCode = (int) $statusCode; if ($this->isInvalid()) { - throw new \InvalidArgumentException(sprintf('The HTTP status code "%s" is not valid.', $statusCode)); + throw new InvalidArgumentException(sprintf('The HTTP status code "%s" is not valid.', $statusCode)); } $this->statusText = false === $text ? '' : (null === $text ? self::$statusTexts[$this->statusCode] : $text); } + /** + * @return string + */ public function getStatusText() { return $this->statusText; } + /** + * @return array + */ public function getParameters() { return $this->parameters; } + /** + * @param array $parameters + */ public function setParameters(array $parameters) { $this->parameters = $parameters; } + /** + * @param array $parameters + */ public function addParameters(array $parameters) { $this->parameters = array_merge($this->parameters, $parameters); } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function getParameter($name, $default = null) { return isset($this->parameters[$name]) ? $this->parameters[$name] : $default; } + /** + * @param string $name + * @param mixed $value + */ public function setParameter($name, $value) { $this->parameters[$name] = $value; } + /** + * @param array $httpHeaders + */ public function setHttpHeaders(array $httpHeaders) { $this->httpHeaders = $httpHeaders; } + /** + * @param string $name + * @param mixed $value + */ public function setHttpHeader($name, $value) { $this->httpHeaders[$name] = $value; } + /** + * @param array $httpHeaders + */ public function addHttpHeaders(array $httpHeaders) { $this->httpHeaders = array_merge($this->httpHeaders, $httpHeaders); } + /** + * @return array + */ public function getHttpHeaders() { return $this->httpHeaders; } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function getHttpHeader($name, $default = null) { return isset($this->httpHeaders[$name]) ? $this->httpHeaders[$name] : $default; } + /** + * @param string $format + * @return mixed + * @throws InvalidArgumentException + */ public function getResponseBody($format = 'json') { switch ($format) { @@ -187,10 +268,13 @@ class Response implements ResponseInterface return $xml->asXML(); } - throw new \InvalidArgumentException(sprintf('The format %s is not supported', $format)); + throw new InvalidArgumentException(sprintf('The format %s is not supported', $format)); } + /** + * @param string $format + */ public function send($format = 'json') { // headers have already been sent by the developer @@ -215,6 +299,14 @@ class Response implements ResponseInterface echo $this->getResponseBody($format); } + /** + * @param int $statusCode + * @param string $error + * @param string $errorDescription + * @param string $errorUri + * @return mixed + * @throws InvalidArgumentException + */ public function setError($statusCode, $error, $errorDescription = null, $errorUri = null) { $parameters = array( @@ -239,14 +331,24 @@ class Response implements ResponseInterface $this->addHttpHeaders($httpHeaders); if (!$this->isClientError() && !$this->isServerError()) { - throw new \InvalidArgumentException(sprintf('The HTTP status code is not an error ("%s" given).', $statusCode)); + throw new InvalidArgumentException(sprintf('The HTTP status code is not an error ("%s" given).', $statusCode)); } } + /** + * @param int $statusCode + * @param string $url + * @param string $state + * @param string $error + * @param string $errorDescription + * @param string $errorUri + * @return mixed + * @throws InvalidArgumentException + */ public function setRedirect($statusCode, $url, $state = null, $error = null, $errorDescription = null, $errorUri = null) { if (empty($url)) { - throw new \InvalidArgumentException('Cannot redirect to an empty URL.'); + throw new InvalidArgumentException('Cannot redirect to an empty URL.'); } $parameters = array(); @@ -271,15 +373,16 @@ class Response implements ResponseInterface $this->addHttpHeaders(array('Location' => $url)); if (!$this->isRedirection()) { - throw new \InvalidArgumentException(sprintf('The HTTP status code is not a redirect ("%s" given).', $statusCode)); + throw new InvalidArgumentException(sprintf('The HTTP status code is not a redirect ("%s" given).', $statusCode)); } } - // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html /** * @return Boolean * * @api + * + * @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html */ public function isInvalid() { @@ -336,8 +439,11 @@ class Response implements ResponseInterface return $this->statusCode >= 500 && $this->statusCode < 600; } - /* - * Functions from Symfony2 HttpFoundation - output pretty header + /** + * Function from Symfony2 HttpFoundation - output pretty header + * + * @param array $headers + * @return string */ private function getHttpHeadersAsString($headers) { @@ -357,11 +463,23 @@ class Response implements ResponseInterface return $content; } + /** + * Function from Symfony2 HttpFoundation - output pretty header + * + * @param string $name + * @return mixed + */ private function beautifyHeaderName($name) { return preg_replace_callback('/\-(.)/', array($this, 'beautifyCallback'), ucfirst($name)); } + /** + * Function from Symfony2 HttpFoundation - output pretty header + * + * @param array $match + * @return string + */ private function beautifyCallback($match) { return '-'.strtoupper($match[1]); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php index c99b5f7d1..fe920864a 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php @@ -6,19 +6,48 @@ namespace OAuth2; * Interface which represents an object response. Meant to handle and display the proper OAuth2 Responses * for errors and successes * - * @see OAuth2\Response + * @see \OAuth2\Response */ interface ResponseInterface { + /** + * @param array $parameters + */ public function addParameters(array $parameters); + /** + * @param array $httpHeaders + */ public function addHttpHeaders(array $httpHeaders); + /** + * @param int $statusCode + */ public function setStatusCode($statusCode); + /** + * @param int $statusCode + * @param string $name + * @param string $description + * @param string $uri + * @return mixed + */ public function setError($statusCode, $name, $description = null, $uri = null); + /** + * @param int $statusCode + * @param string $url + * @param string $state + * @param string $error + * @param string $errorDescription + * @param string $errorUri + * @return mixed + */ public function setRedirect($statusCode, $url, $state = null, $error = null, $errorDescription = null, $errorUri = null); + /** + * @param string $name + * @return mixed + */ public function getParameter($name); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php index 98f51218f..e836a3447 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php @@ -4,28 +4,39 @@ namespace OAuth2\ResponseType; use OAuth2\Storage\AccessTokenInterface as AccessTokenStorageInterface; use OAuth2\Storage\RefreshTokenInterface; +use RuntimeException; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class AccessToken implements AccessTokenInterface { + /** + * @var AccessTokenInterface + */ protected $tokenStorage; + + /** + * @var RefreshTokenInterface + */ protected $refreshStorage; + + /** + * @var array + */ protected $config; /** - * @param OAuth2\Storage\AccessTokenInterface $tokenStorage REQUIRED Storage class for saving access token information - * @param OAuth2\Storage\RefreshTokenInterface $refreshStorage OPTIONAL Storage class for saving refresh token information - * @param array $config OPTIONAL Configuration options for the server - * <code> - * $config = array( - * 'token_type' => 'bearer', // token type identifier - * 'access_lifetime' => 3600, // time before access token expires - * 'refresh_token_lifetime' => 1209600, // time before refresh token expires - * ); - * </endcode> + * @param AccessTokenStorageInterface $tokenStorage - REQUIRED Storage class for saving access token information + * @param RefreshTokenInterface $refreshStorage - OPTIONAL Storage class for saving refresh token information + * @param array $config - OPTIONAL Configuration options for the server + * @code + * $config = array( + * 'token_type' => 'bearer', // token type identifier + * 'access_lifetime' => 3600, // time before access token expires + * 'refresh_token_lifetime' => 1209600, // time before refresh token expires + * ); + * @endcode */ public function __construct(AccessTokenStorageInterface $tokenStorage, RefreshTokenInterface $refreshStorage = null, array $config = array()) { @@ -39,6 +50,13 @@ class AccessToken implements AccessTokenInterface ), $config); } + /** + * Get authorize response + * + * @param array $params + * @param mixed $user_id + * @return array + */ public function getAuthorizeResponse($params, $user_id = null) { // build the URL to redirect to @@ -64,10 +82,11 @@ class AccessToken implements AccessTokenInterface /** * Handle the creation of access token, also issue refresh token if supported / desirable. * - * @param $client_id client identifier related to the access token. - * @param $user_id user ID associated with the access token - * @param $scope OPTIONAL scopes to be stored in space-separated string. - * @param bool $includeRefreshToken if true, a new refresh_token will be added to the response + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user ID associated with the access token + * @param string $scope - OPTIONAL scopes to be stored in space-separated string. + * @param bool $includeRefreshToken - if true, a new refresh_token will be added to the response + * @return array * * @see http://tools.ietf.org/html/rfc6749#section-5 * @ingroup oauth2_section_5 @@ -107,13 +126,18 @@ class AccessToken implements AccessTokenInterface * Implementing classes may want to override this function to implement * other access token generation schemes. * - * @return - * An unique access token. + * @return string - A unique access token. * * @ingroup oauth2_section_4 */ protected function generateAccessToken() { + if (function_exists('random_bytes')) { + $randomData = random_bytes(20); + if ($randomData !== false && strlen($randomData) === 20) { + return bin2hex($randomData); + } + } if (function_exists('openssl_random_pseudo_bytes')) { $randomData = openssl_random_pseudo_bytes(20); if ($randomData !== false && strlen($randomData) === 20) { @@ -144,8 +168,7 @@ class AccessToken implements AccessTokenInterface * Implementing classes may want to override this function to implement * other refresh token generation schemes. * - * @return - * An unique refresh. + * @return string - A unique refresh token. * * @ingroup oauth2_section_4 * @see OAuth2::generateAccessToken() @@ -162,6 +185,7 @@ class AccessToken implements AccessTokenInterface * * @param $token * @param null $tokenTypeHint + * @throws RuntimeException * @return boolean */ public function revokeToken($token, $tokenTypeHint = null) @@ -174,7 +198,7 @@ class AccessToken implements AccessTokenInterface /** @TODO remove in v2 */ if (!method_exists($this->tokenStorage, 'unsetAccessToken')) { - throw new \RuntimeException( + throw new RuntimeException( sprintf('Token storage %s must implement unsetAccessToken method', get_class($this->tokenStorage) )); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php index 4bd3928d8..0e576df52 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php @@ -3,7 +3,6 @@ namespace OAuth2\ResponseType; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ interface AccessTokenInterface extends ResponseTypeInterface @@ -11,10 +10,10 @@ interface AccessTokenInterface extends ResponseTypeInterface /** * Handle the creation of access token, also issue refresh token if supported / desirable. * - * @param $client_id client identifier related to the access token. - * @param $user_id user ID associated with the access token - * @param $scope OPTONAL scopes to be stored in space-separated string. - * @param bool $includeRefreshToken if true, a new refresh_token will be added to the response + * @param mixed $client_id - client identifier related to the access token. + * @param mixed $user_id - user ID associated with the access token + * @param string $scope - OPTONAL scopes to be stored in space-separated string. + * @param bool $includeRefreshToken - if true, a new refresh_token will be added to the response * * @see http://tools.ietf.org/html/rfc6749#section-5 * @ingroup oauth2_section_5 @@ -31,4 +30,4 @@ interface AccessTokenInterface extends ResponseTypeInterface * @todo v2.0 include this method in interface. Omitted to maintain BC in v1.x */ //public function revokeToken($token, $tokenTypeHint); -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php index 52aeb4be5..b92c73cda 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php @@ -5,7 +5,6 @@ namespace OAuth2\ResponseType; use OAuth2\Storage\AuthorizationCodeInterface as AuthorizationCodeStorageInterface; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class AuthorizationCode implements AuthorizationCodeInterface @@ -85,7 +84,9 @@ class AuthorizationCode implements AuthorizationCodeInterface protected function generateAuthorizationCode() { $tokenLen = 40; - if (function_exists('openssl_random_pseudo_bytes')) { + if (function_exists('random_bytes')) { + $randomData = random_bytes(100); + } elseif (function_exists('openssl_random_pseudo_bytes')) { $randomData = openssl_random_pseudo_bytes(100); } elseif (function_exists('mcrypt_create_iv')) { $randomData = mcrypt_create_iv(100, MCRYPT_DEV_URANDOM); diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php index df777e221..4f0a29df4 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php @@ -3,7 +3,6 @@ namespace OAuth2\ResponseType; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ interface AuthorizationCodeInterface extends ResponseTypeInterface @@ -17,11 +16,12 @@ interface AuthorizationCodeInterface extends ResponseTypeInterface /** * Handle the creation of the authorization code. * - * @param $client_id client identifier related to the authorization code - * @param $user_id user id associated with the authorization code - * @param $redirect_uri an absolute URI to which the authorization server will redirect the - * user-agent to when the end-user authorization step is completed. - * @param $scope OPTIONAL scopes to be stored in space-separated string. + * @param mixed $client_id - Client identifier related to the authorization code + * @param mixed $user_id - User ID associated with the authorization code + * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the + * user-agent to when the end-user authorization step is completed. + * @param string $scope - OPTIONAL Scopes to be stored in space-separated string. + * @return string * * @see http://tools.ietf.org/html/rfc6749#section-4 * @ingroup oauth2_section_4 diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php index 3942fe41e..0af9705ff 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php @@ -10,7 +10,6 @@ use OAuth2\Storage\PublicKeyInterface; use OAuth2\Storage\Memory; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class JwtAccessToken extends AccessToken @@ -19,10 +18,13 @@ class JwtAccessToken extends AccessToken protected $encryptionUtil; /** - * @param $config - * - store_encrypted_token_string (bool true) - * whether the entire encrypted string is stored, - * or just the token ID is stored + * @param PublicKeyInterface $publicKeyStorage - + * @param AccessTokenStorageInterface $tokenStorage - + * @param RefreshTokenInterface $refreshStorage - + * @param array $config - array with key store_encrypted_token_string (bool true) + * whether the entire encrypted string is stored, + * or just the token ID is stored + * @param EncryptionInterface $encryptionUtil - */ public function __construct(PublicKeyInterface $publicKeyStorage = null, AccessTokenStorageInterface $tokenStorage = null, RefreshTokenInterface $refreshStorage = null, array $config = array(), EncryptionInterface $encryptionUtil = null) { @@ -45,46 +47,31 @@ class JwtAccessToken extends AccessToken /** * Handle the creation of access token, also issue refresh token if supported / desirable. * - * @param $client_id - * Client identifier related to the access token. - * @param $user_id - * User ID associated with the access token - * @param $scope - * (optional) Scopes to be stored in space-separated string. - * @param bool $includeRefreshToken - * If true, a new refresh_token will be added to the response + * @param mixed $client_id - Client identifier related to the access token. + * @param mixed $user_id - User ID associated with the access token + * @param string $scope - (optional) Scopes to be stored in space-separated string. + * @param bool $includeRefreshToken - If true, a new refresh_token will be added to the response + * @return array - The access token * * @see http://tools.ietf.org/html/rfc6749#section-5 * @ingroup oauth2_section_5 */ public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true) { - // token to encrypt - $expires = time() + $this->config['access_lifetime']; - $id = $this->generateAccessToken(); - $jwtAccessToken = array( - 'id' => $id, // for BC (see #591) - 'jti' => $id, - 'iss' => $this->config['issuer'], - 'aud' => $client_id, - 'sub' => $user_id, - 'exp' => $expires, - 'iat' => time(), - 'token_type' => $this->config['token_type'], - 'scope' => $scope - ); + // payload to encrypt + $payload = $this->createPayload($client_id, $user_id, $scope); /* - * Encode the token data into a single access_token string + * Encode the payload data into a single JWT access_token string */ - $access_token = $this->encodeToken($jwtAccessToken, $client_id); + $access_token = $this->encodeToken($payload, $client_id); /* * Save the token to a secondary storage. This is implemented on the * OAuth2\Storage\JwtAccessToken side, and will not actually store anything, * if no secondary storage has been supplied */ - $token_to_store = $this->config['store_encrypted_token_string'] ? $access_token : $jwtAccessToken['id']; + $token_to_store = $this->config['store_encrypted_token_string'] ? $access_token : $payload['id']; $this->tokenStorage->setAccessToken($token_to_store, $client_id, $user_id, $this->config['access_lifetime'] ? time() + $this->config['access_lifetime'] : null, $scope); // token to return to the client @@ -114,6 +101,11 @@ class JwtAccessToken extends AccessToken return $token; } + /** + * @param array $token + * @param mixed $client_id + * @return mixed + */ protected function encodeToken(array $token, $client_id = null) { $private_key = $this->publicKeyStorage->getPrivateKey($client_id); @@ -121,4 +113,31 @@ class JwtAccessToken extends AccessToken return $this->encryptionUtil->encode($token, $private_key, $algorithm); } + + /** + * This function can be used to create custom JWT payloads + * + * @param mixed $client_id - Client identifier related to the access token. + * @param mixed $user_id - User ID associated with the access token + * @param string $scope - (optional) Scopes to be stored in space-separated string. + * @return array - The access token + */ + protected function createPayload($client_id, $user_id, $scope = null) + { + // token to encrypt + $expires = time() + $this->config['access_lifetime']; + $id = $this->generateAccessToken(); + + return array( + 'id' => $id, // for BC (see #591) + 'jti' => $id, + 'iss' => $this->config['issuer'], + 'aud' => $client_id, + 'sub' => $user_id, + 'exp' => $expires, + 'iat' => time(), + 'token_type' => $this->config['token_type'], + 'scope' => $scope + ); + } } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php index f8e26a5b0..a27156580 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php @@ -4,5 +4,10 @@ namespace OAuth2\ResponseType; interface ResponseTypeInterface { + /** + * @param array $params + * @param mixed $user_id + * @return mixed + */ public function getAuthorizeResponse($params, $user_id = null); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php index c44350bfd..3ba6e5328 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php @@ -2,19 +2,23 @@ namespace OAuth2; +use InvalidArgumentException; use OAuth2\Storage\Memory; use OAuth2\Storage\ScopeInterface as ScopeStorageInterface; /** -* @see OAuth2\ScopeInterface +* @see ScopeInterface */ class Scope implements ScopeInterface { protected $storage; /** - * @param mixed @storage - * Either an array of supported scopes, or an instance of OAuth2\Storage\ScopeInterface + * Constructor + * + * @param mixed $storage - Either an array of supported scopes, or an instance of OAuth2\Storage\ScopeInterface + * + * @throws InvalidArgumentException */ public function __construct($storage = null) { @@ -23,7 +27,7 @@ class Scope implements ScopeInterface } if (!$storage instanceof ScopeStorageInterface) { - throw new \InvalidArgumentException("Argument 1 to OAuth2\Scope must be null, an array, or instance of OAuth2\Storage\ScopeInterface"); + throw new InvalidArgumentException("Argument 1 to OAuth2\Scope must be null, an array, or instance of OAuth2\Storage\ScopeInterface"); } $this->storage = $storage; @@ -32,12 +36,10 @@ class Scope implements ScopeInterface /** * Check if everything in required scope is contained in available scope. * - * @param $required_scope - * A space-separated string of scopes. - * - * @return - * TRUE if everything in required scope is contained in available scope, - * and FALSE if it isn't. + * @param string $required_scope - A space-separated string of scopes. + * @param string $available_scope - A space-separated string of scopes. + * @return bool - TRUE if everything in required scope is contained in available scope and FALSE + * if it isn't. * * @see http://tools.ietf.org/html/rfc6749#section-7 * @@ -54,11 +56,8 @@ class Scope implements ScopeInterface /** * Check if the provided scope exists in storage. * - * @param $scope - * A space-separated string of scopes. - * - * @return - * TRUE if it exists, FALSE otherwise. + * @param string $scope - A space-separated string of scopes. + * @return bool - TRUE if it exists, FALSE otherwise. */ public function scopeExists($scope) { @@ -76,12 +75,20 @@ class Scope implements ScopeInterface } } + /** + * @param RequestInterface $request + * @return string + */ public function getScopeFromRequest(RequestInterface $request) { // "scope" is valid if passed in either POST or QUERY return $request->request('scope', $request->query('scope')); } + /** + * @param null $client_id + * @return mixed + */ public function getDefaultScope($client_id = null) { return $this->storage->getDefaultScope($client_id); @@ -93,8 +100,7 @@ class Scope implements ScopeInterface * In case OpenID Connect is used, these scopes must include: * 'openid', offline_access'. * - * @return - * An array of reserved scopes. + * @return array - An array of reserved scopes. */ public function getReservedScopes() { diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php index 5b60f9aee..f65cfa7bd 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php @@ -7,19 +7,17 @@ use OAuth2\Storage\ScopeInterface as ScopeStorageInterface; /** * Class to handle scope implementation logic * - * @see OAuth2\Storage\ScopeInterface + * @see \OAuth2\Storage\ScopeInterface */ interface ScopeInterface extends ScopeStorageInterface { /** * Check if everything in required scope is contained in available scope. * - * @param $required_scope - * A space-separated string of scopes. - * - * @return - * TRUE if everything in required scope is contained in available scope, - * and FALSE if it isn't. + * @param string $required_scope - A space-separated string of scopes. + * @param string $available_scope - A space-separated string of scopes. + * @return boolean - TRUE if everything in required scope is contained in available scope and FALSE + * if it isn't. * * @see http://tools.ietf.org/html/rfc6749#section-7 * @@ -30,11 +28,8 @@ interface ScopeInterface extends ScopeStorageInterface /** * Return scope info from request * - * @param OAuth2\RequestInterface - * Request object to check - * - * @return - * string representation of requested scope + * @param RequestInterface $request - Request object to check + * @return string - representation of requested scope */ public function getScopeFromRequest(RequestInterface $request); } diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php index 9cfcb83a5..62ae8970d 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php @@ -30,25 +30,28 @@ use OAuth2\GrantType\UserCredentials; use OAuth2\GrantType\ClientCredentials; use OAuth2\GrantType\RefreshToken; use OAuth2\GrantType\AuthorizationCode; +use OAuth2\Storage\ClientCredentialsInterface; +use OAuth2\Storage\ClientInterface; use OAuth2\Storage\JwtAccessToken as JwtAccessTokenStorage; use OAuth2\Storage\JwtAccessTokenInterface; +use InvalidArgumentException; +use LogicException; /** * Server class for OAuth2 * This class serves as a convience class which wraps the other Controller classes * -* @see OAuth2\Controller\ResourceController -* @see OAuth2\Controller\AuthorizeController -* @see OAuth2\Controller\TokenController +* @see \OAuth2\Controller\ResourceController +* @see \OAuth2\Controller\AuthorizeController +* @see \OAuth2\Controller\TokenController */ class Server implements ResourceControllerInterface, AuthorizeControllerInterface, TokenControllerInterface, UserInfoControllerInterface { - // misc properties /** - * @var Response + * @var ResponseInterface */ protected $response; @@ -62,7 +65,6 @@ class Server implements ResourceControllerInterface, */ protected $storages; - // servers /** * @var AuthorizeControllerInterface */ @@ -83,17 +85,34 @@ class Server implements ResourceControllerInterface, */ protected $userInfoController; - // config classes - protected $grantTypes; - protected $responseTypes; + /** + * @var array + */ + protected $grantTypes = []; + + /** + * @var array + */ + protected $responseTypes = []; + + /** + * @var TokenTypeInterface + */ protected $tokenType; /** * @var ScopeInterface */ protected $scopeUtil; + + /** + * @var ClientAssertionTypeInterface + */ protected $clientAssertionType; + /** + * @var array + */ protected $storageMap = array( 'access_token' => 'OAuth2\Storage\AccessTokenInterface', 'authorization_code' => 'OAuth2\Storage\AuthorizationCodeInterface', @@ -107,6 +126,9 @@ class Server implements ResourceControllerInterface, 'scope' => 'OAuth2\Storage\ScopeInterface', ); + /** + * @var array + */ protected $responseTypeMap = array( 'token' => 'OAuth2\ResponseType\AccessTokenInterface', 'code' => 'OAuth2\ResponseType\AuthorizationCodeInterface', @@ -116,15 +138,15 @@ class Server implements ResourceControllerInterface, ); /** - * @param mixed $storage (array or OAuth2\Storage) - single object or array of objects implementing the - * required storage types (ClientCredentialsInterface and AccessTokenInterface as a minimum) - * @param array $config specify a different token lifetime, token header name, etc - * @param array $grantTypes An array of OAuth2\GrantType\GrantTypeInterface to use for granting access tokens - * @param array $responseTypes Response types to use. array keys should be "code" and and "token" for - * Access Token and Authorization Code response types - * @param \OAuth2\TokenType\TokenTypeInterface $tokenType The token type object to use. Valid token types are "bearer" and "mac" - * @param \OAuth2\ScopeInterface $scopeUtil The scope utility class to use to validate scope - * @param \OAuth2\ClientAssertionType\ClientAssertionTypeInterface $clientAssertionType The method in which to verify the client identity. Default is HttpBasic + * @param mixed $storage (array or OAuth2\Storage) - single object or array of objects implementing the + * required storage types (ClientCredentialsInterface and AccessTokenInterface as a minimum) + * @param array $config specify a different token lifetime, token header name, etc + * @param array $grantTypes An array of OAuth2\GrantType\GrantTypeInterface to use for granting access tokens + * @param array $responseTypes Response types to use. array keys should be "code" and "token" for + * Access Token and Authorization Code response types + * @param TokenTypeInterface $tokenType The token type object to use. Valid token types are "bearer" and "mac" + * @param ScopeInterface $scopeUtil The scope utility class to use to validate scope + * @param ClientAssertionTypeInterface $clientAssertionType The method in which to verify the client identity. Default is HttpBasic * * @ingroup oauth2_section_7 */ @@ -172,6 +194,9 @@ class Server implements ResourceControllerInterface, } } + /** + * @return AuthorizeControllerInterface + */ public function getAuthorizeController() { if (is_null($this->authorizeController)) { @@ -181,6 +206,9 @@ class Server implements ResourceControllerInterface, return $this->authorizeController; } + /** + * @return TokenController + */ public function getTokenController() { if (is_null($this->tokenController)) { @@ -190,6 +218,9 @@ class Server implements ResourceControllerInterface, return $this->tokenController; } + /** + * @return ResourceControllerInterface + */ public function getResourceController() { if (is_null($this->resourceController)) { @@ -199,6 +230,9 @@ class Server implements ResourceControllerInterface, return $this->resourceController; } + /** + * @return UserInfoControllerInterface + */ public function getUserInfoController() { if (is_null($this->userInfoController)) { @@ -209,8 +243,6 @@ class Server implements ResourceControllerInterface, } /** - * every getter deserves a setter - * * @param AuthorizeControllerInterface $authorizeController */ public function setAuthorizeController(AuthorizeControllerInterface $authorizeController) @@ -219,8 +251,6 @@ class Server implements ResourceControllerInterface, } /** - * every getter deserves a setter - * * @param TokenControllerInterface $tokenController */ public function setTokenController(TokenControllerInterface $tokenController) @@ -229,8 +259,6 @@ class Server implements ResourceControllerInterface, } /** - * every getter deserves a setter - * * @param ResourceControllerInterface $resourceController */ public function setResourceController(ResourceControllerInterface $resourceController) @@ -239,8 +267,6 @@ class Server implements ResourceControllerInterface, } /** - * every getter deserves a setter - * * @param UserInfoControllerInterface $userInfoController */ public function setUserInfoController(UserInfoControllerInterface $userInfoController) @@ -252,12 +278,8 @@ class Server implements ResourceControllerInterface, * Return claims about the authenticated end-user. * This would be called from the "/UserInfo" endpoint as defined in the spec. * - * @param $request - \OAuth2\RequestInterface - * Request object to grant access token - * - * @param $response - \OAuth2\ResponseInterface - * Response object containing error messages (failure) or user claims (success) - * + * @param RequestInterface $request - Request object to grant access token + * @param ResponseInterface $response - Response object containing error messages (failure) or user claims (success) * @return ResponseInterface * * @throws \InvalidArgumentException @@ -278,12 +300,8 @@ class Server implements ResourceControllerInterface, * This would be called from the "/token" endpoint as defined in the spec. * Obviously, you can call your endpoint whatever you want. * - * @param $request - \OAuth2\RequestInterface - * Request object to grant access token - * - * @param $response - \OAuth2\ResponseInterface - * Response object containing error messages (failure) or access token (success) - * + * @param RequestInterface $request - Request object to grant access token + * @param ResponseInterface $response - Response object containing error messages (failure) or access token (success) * @return ResponseInterface * * @throws \InvalidArgumentException @@ -303,6 +321,11 @@ class Server implements ResourceControllerInterface, return $this->response; } + /** + * @param RequestInterface $request - Request object to grant access token + * @param ResponseInterface $response - Response object + * @return mixed + */ public function grantAccessToken(RequestInterface $request, ResponseInterface $response = null) { $this->response = is_null($response) ? new Response() : $response; @@ -336,25 +359,18 @@ class Server implements ResourceControllerInterface, * authorization server should call this function to redirect the user * appropriately. * - * @param $request - * The request should have the follow parameters set in the querystring: - * - response_type: The requested response: an access token, an - * authorization code, or both. + * @param RequestInterface $request - The request should have the follow parameters set in the querystring: + * - response_type: The requested response: an access token, an authorization code, or both. * - client_id: The client identifier as described in Section 2. - * - redirect_uri: An absolute URI to which the authorization server - * will redirect the user-agent to when the end-user authorization - * step is completed. - * - scope: (optional) The scope of the resource request expressed as a - * list of space-delimited strings. - * - state: (optional) An opaque value used by the client to maintain - * state between the request and callback. - * @param ResponseInterface $response - * @param $is_authorized - * TRUE or FALSE depending on whether the user authorized the access. - * @param $user_id - * Identifier of user who authorized the client + * - redirect_uri: An absolute URI to which the authorization server will redirect the user-agent to when the + * end-user authorization step is completed. + * - scope: (optional) The scope of the resource request expressed as a list of space-delimited strings. + * - state: (optional) An opaque value used by the client to maintain state between the request and callback. * - * @return Response + * @param ResponseInterface $response - Response object + * @param bool $is_authorized - TRUE or FALSE depending on whether the user authorized the access. + * @param mixed $user_id - Identifier of user who authorized the client + * @return ResponseInterface * * @see http://tools.ietf.org/html/rfc6749#section-4 * @@ -371,14 +387,17 @@ class Server implements ResourceControllerInterface, /** * Pull the authorization request data out of the HTTP request. * - The redirect_uri is OPTIONAL as per draft 20. But your implementation can enforce it - * by setting $config['enforce_redirect'] to true. + * by setting $config['enforce_redirect'] to true. * - The state is OPTIONAL but recommended to enforce CSRF. Draft 21 states, however, that - * CSRF protection is MANDATORY. You can enforce this by setting the $config['enforce_state'] to true. + * CSRF protection is MANDATORY. You can enforce this by setting the $config['enforce_state'] to true. * * The draft specifies that the parameters should be retrieved from GET, override the Response * object to change this * - * @return + * @param RequestInterface $request - Request object + * @param ResponseInterface $response - Response object + * @return bool + * * The authorization parameters so the authorization server can prompt * the user for approval if valid. * @@ -395,6 +414,12 @@ class Server implements ResourceControllerInterface, return $value; } + /** + * @param RequestInterface $request - Request object + * @param ResponseInterface $response - Response object + * @param string $scope - Scope + * @return mixed + */ public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response = null, $scope = null) { $this->response = is_null($response) ? new Response() : $response; @@ -403,6 +428,11 @@ class Server implements ResourceControllerInterface, return $value; } + /** + * @param RequestInterface $request - Request object + * @param ResponseInterface $response - Response object + * @return mixed + */ public function getAccessTokenData(RequestInterface $request, ResponseInterface $response = null) { $this->response = is_null($response) ? new Response() : $response; @@ -411,10 +441,14 @@ class Server implements ResourceControllerInterface, return $value; } + /** + * @param GrantTypeInterface $grantType + * @param mixed $identifier + */ public function addGrantType(GrantTypeInterface $grantType, $identifier = null) { if (!is_string($identifier)) { - $identifier = $grantType->getQuerystringIdentifier(); + $identifier = $grantType->getQueryStringIdentifier(); } $this->grantTypes[$identifier] = $grantType; @@ -428,11 +462,10 @@ class Server implements ResourceControllerInterface, /** * Set a storage object for the server * - * @param $storage - * An object implementing one of the Storage interfaces - * @param $key - * If null, the storage is set to the key of each storage interface it implements + * @param object $storage - An object implementing one of the Storage interfaces + * @param mixed $key - If null, the storage is set to the key of each storage interface it implements * + * @throws InvalidArgumentException * @see storageMap */ public function addStorage($storage, $key = null) @@ -446,11 +479,11 @@ class Server implements ResourceControllerInterface, // special logic to handle "client" and "client_credentials" strangeness if ($key === 'client' && !isset($this->storages['client_credentials'])) { - if ($storage instanceof \OAuth2\Storage\ClientCredentialsInterface) { + if ($storage instanceof ClientCredentialsInterface) { $this->storages['client_credentials'] = $storage; } } elseif ($key === 'client_credentials' && !isset($this->storages['client'])) { - if ($storage instanceof \OAuth2\Storage\ClientInterface) { + if ($storage instanceof ClientInterface) { $this->storages['client'] = $storage; } } @@ -471,6 +504,12 @@ class Server implements ResourceControllerInterface, } } + /** + * @param ResponseTypeInterface $responseType + * @param mixed $key + * + * @throws InvalidArgumentException + */ public function addResponseType(ResponseTypeInterface $responseType, $key = null) { $key = $this->normalizeResponseType($key); @@ -497,6 +536,9 @@ class Server implements ResourceControllerInterface, } } + /** + * @return ScopeInterface + */ public function getScopeUtil() { if (!$this->scopeUtil) { @@ -508,8 +550,6 @@ class Server implements ResourceControllerInterface, } /** - * every getter deserves a setter - * * @param ScopeInterface $scopeUtil */ public function setScopeUtil($scopeUtil) @@ -517,6 +557,10 @@ class Server implements ResourceControllerInterface, $this->scopeUtil = $scopeUtil; } + /** + * @return AuthorizeControllerInterface + * @throws LogicException + */ protected function createDefaultAuthorizeController() { if (!isset($this->storages['client'])) { @@ -541,6 +585,10 @@ class Server implements ResourceControllerInterface, return new AuthorizeController($this->storages['client'], $this->responseTypes, $config, $this->getScopeUtil()); } + /** + * @return TokenControllerInterface + * @throws LogicException + */ protected function createDefaultTokenController() { if (0 == count($this->grantTypes)) { @@ -562,7 +610,7 @@ class Server implements ResourceControllerInterface, } if (!isset($this->storages['client'])) { - throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\ClientInterface to use the token server'); + throw new LogicException("You must supply a storage object implementing OAuth2\Storage\ClientInterface to use the token server"); } $accessTokenResponseType = $this->getAccessTokenResponseType(); @@ -570,6 +618,10 @@ class Server implements ResourceControllerInterface, return new TokenController($accessTokenResponseType, $this->storages['client'], $this->grantTypes, $this->clientAssertionType, $this->getScopeUtil()); } + /** + * @return ResourceControllerInterface + * @throws LogicException + */ protected function createDefaultResourceController() { if ($this->config['use_jwt_access_tokens']) { @@ -590,6 +642,10 @@ class Server implements ResourceControllerInterface, return new ResourceController($this->tokenType, $this->storages['access_token'], $config, $this->getScopeUtil()); } + /** + * @return UserInfoControllerInterface + * @throws LogicException + */ protected function createDefaultUserInfoController() { if ($this->config['use_jwt_access_tokens']) { @@ -614,6 +670,9 @@ class Server implements ResourceControllerInterface, return new UserInfoController($this->tokenType, $this->storages['access_token'], $this->storages['user_claims'], $config, $this->getScopeUtil()); } + /** + * @return Bearer + */ protected function getDefaultTokenType() { $config = array_intersect_key($this->config, array_flip(explode(' ', 'token_param_name token_bearer_header_name'))); @@ -621,6 +680,10 @@ class Server implements ResourceControllerInterface, return new Bearer($config); } + /** + * @return array + * @throws LogicException + */ protected function getDefaultResponseTypes() { $responseTypes = array(); @@ -656,6 +719,10 @@ class Server implements ResourceControllerInterface, return $responseTypes; } + /** + * @return array + * @throws LogicException + */ protected function getDefaultGrantTypes() { $grantTypes = array(); @@ -692,6 +759,9 @@ class Server implements ResourceControllerInterface, return $grantTypes; } + /** + * @return AccessToken + */ protected function getAccessTokenResponseType() { if (isset($this->responseTypes['token'])) { @@ -705,6 +775,9 @@ class Server implements ResourceControllerInterface, return $this->createDefaultAccessTokenResponseType(); } + /** + * @return IdToken + */ protected function getIdTokenResponseType() { if (isset($this->responseTypes['id_token'])) { @@ -714,6 +787,9 @@ class Server implements ResourceControllerInterface, return $this->createDefaultIdTokenResponseType(); } + /** + * @return IdTokenToken + */ protected function getIdTokenTokenResponseType() { if (isset($this->responseTypes['id_token token'])) { @@ -725,6 +801,9 @@ class Server implements ResourceControllerInterface, /** * For Resource Controller + * + * @return JwtAccessTokenStorage + * @throws LogicException */ protected function createDefaultJwtAccessTokenStorage() { @@ -741,6 +820,9 @@ class Server implements ResourceControllerInterface, /** * For Authorize and Token Controllers + * + * @return JwtAccessToken + * @throws LogicException */ protected function createDefaultJwtAccessTokenResponseType() { @@ -763,10 +845,14 @@ class Server implements ResourceControllerInterface, return new JwtAccessToken($this->storages['public_key'], $tokenStorage, $refreshStorage, $config); } + /** + * @return AccessToken + * @throws LogicException + */ protected function createDefaultAccessTokenResponseType() { if (!isset($this->storages['access_token'])) { - throw new \LogicException('You must supply a response type implementing OAuth2\ResponseType\AccessTokenInterface, or a storage object implementing OAuth2\Storage\AccessTokenInterface to use the token server'); + throw new LogicException("You must supply a response type implementing OAuth2\ResponseType\AccessTokenInterface, or a storage object implementing OAuth2\Storage\AccessTokenInterface to use the token server"); } $refreshStorage = null; @@ -780,13 +866,17 @@ class Server implements ResourceControllerInterface, return new AccessToken($this->storages['access_token'], $refreshStorage, $config); } + /** + * @return IdToken + * @throws LogicException + */ protected function createDefaultIdTokenResponseType() { if (!isset($this->storages['user_claims'])) { - throw new \LogicException('You must supply a storage object implementing OAuth2\OpenID\Storage\UserClaimsInterface to use openid connect'); + throw new LogicException("You must supply a storage object implementing OAuth2\OpenID\Storage\UserClaimsInterface to use openid connect"); } if (!isset($this->storages['public_key'])) { - throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\PublicKeyInterface to use openid connect'); + throw new LogicException("You must supply a storage object implementing OAuth2\Storage\PublicKeyInterface to use openid connect"); } $config = array_intersect_key($this->config, array_flip(explode(' ', 'issuer id_lifetime'))); @@ -794,11 +884,17 @@ class Server implements ResourceControllerInterface, return new IdToken($this->storages['user_claims'], $this->storages['public_key'], $config); } + /** + * @return IdTokenToken + */ protected function createDefaultIdTokenTokenResponseType() { return new IdTokenToken($this->getAccessTokenResponseType(), $this->getIdTokenResponseType()); } + /** + * @throws InvalidArgumentException + */ protected function validateOpenIdConnect() { $authCodeGrant = $this->getGrantType('authorization_code'); @@ -807,6 +903,10 @@ class Server implements ResourceControllerInterface, } } + /** + * @param string $name + * @return string + */ protected function normalizeResponseType($name) { // for multiple-valued response types - make them alphabetical @@ -819,36 +919,60 @@ class Server implements ResourceControllerInterface, return $name; } + /** + * @return mixed + */ public function getResponse() { return $this->response; } + /** + * @return array + */ public function getStorages() { return $this->storages; } + /** + * @param string $name + * @return object|null + */ public function getStorage($name) { return isset($this->storages[$name]) ? $this->storages[$name] : null; } + /** + * @return array + */ public function getGrantTypes() { return $this->grantTypes; } + /** + * @param string $name + * @return object|null + */ public function getGrantType($name) { return isset($this->grantTypes[$name]) ? $this->grantTypes[$name] : null; } + /** + * @return array + */ public function getResponseTypes() { return $this->responseTypes; } + /** + * @param string $name + * @return object|null + */ public function getResponseType($name) { // for multiple-valued response types - make them alphabetical @@ -857,23 +981,38 @@ class Server implements ResourceControllerInterface, return isset($this->responseTypes[$name]) ? $this->responseTypes[$name] : null; } + /** + * @return TokenTypeInterface + */ public function getTokenType() { return $this->tokenType; } + /** + * @return ClientAssertionTypeInterface + */ public function getClientAssertionType() { return $this->clientAssertionType; } + /** + * @param string $name + * @param mixed $value + */ public function setConfig($name, $value) { $this->config[$name] = $value; } + /** + * @param string $name + * @param mixed $default + * @return mixed + */ public function getConfig($name, $default = null) { return isset($this->config[$name]) ? $this->config[$name] : $default; } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php index 1819158af..22428f2c8 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php @@ -15,17 +15,18 @@ interface AccessTokenInterface * * We need to retrieve access token data as we create and verify tokens. * - * @param $oauth_token - * oauth_token to be check with. + * @param string $oauth_token - oauth_token to be check with. * - * @return - * An associative array as below, and return NULL if the supplied oauth_token - * is invalid: - * - expires: Stored expiration in unix timestamp. - * - client_id: (optional) Stored client identifier. - * - user_id: (optional) Stored user identifier. - * - scope: (optional) Stored scope values in space-separated string. - * - id_token: (optional) Stored id_token (if "use_openid_connect" is true). + * @return array|null - An associative array as below, and return NULL if the supplied oauth_token is invalid: + * @code + * array( + * 'expires' => $expires, // Stored expiration in unix timestamp. + * 'client_id' => $client_id, // (optional) Stored client identifier. + * 'user_id' => $user_id, // (optional) Stored user identifier. + * 'scope' => $scope, // (optional) Stored scope values in space-separated string. + * 'id_token' => $id_token // (optional) Stored id_token (if "use_openid_connect" is true). + * ); + * @endcode * * @ingroup oauth2_section_7 */ @@ -36,11 +37,11 @@ interface AccessTokenInterface * * We need to store access token data as we create and verify tokens. * - * @param $oauth_token oauth_token to be stored. - * @param $client_id client identifier to be stored. - * @param $user_id user identifier to be stored. - * @param int $expires expiration to be stored as a Unix timestamp. - * @param string $scope OPTIONAL Scopes to be stored in space-separated string. + * @param string $oauth_token - oauth_token to be stored. + * @param mixed $client_id - client identifier to be stored. + * @param mixed $user_id - user identifier to be stored. + * @param int $expires - expiration to be stored as a Unix timestamp. + * @param string $scope - OPTIONAL Scopes to be stored in space-separated string. * * @ingroup oauth2_section_4 */ @@ -61,4 +62,4 @@ interface AccessTokenInterface * @todo v2.0 include this method in interface. Omitted to maintain BC in v1.x */ //public function unsetAccessToken($access_token); -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php index edc7c70e5..2dbc138ac 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php @@ -59,12 +59,12 @@ interface AuthorizationCodeInterface * * Required for OAuth2::GRANT_TYPE_AUTH_CODE. * - * @param string $code Authorization code to be stored. - * @param mixed $client_id Client identifier to be stored. - * @param mixed $user_id User identifier to be stored. - * @param string $redirect_uri Redirect URI(s) to be stored in a space-separated string. - * @param int $expires Expiration to be stored as a Unix timestamp. - * @param string $scope OPTIONAL Scopes to be stored in space-separated string. + * @param string $code - Authorization code to be stored. + * @param mixed $client_id - Client identifier to be stored. + * @param mixed $user_id - User identifier to be stored. + * @param string $redirect_uri - Redirect URI(s) to be stored in a space-separated string. + * @param int $expires - Expiration to be stored as a Unix timestamp. + * @param string $scope - OPTIONAL Scopes to be stored in space-separated string. * * @ingroup oauth2_section_4 */ diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php index c5048c08d..e60e9d3ad 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php @@ -7,24 +7,25 @@ use phpcassa\ColumnSlice; use phpcassa\Connection\ConnectionPool; use OAuth2\OpenID\Storage\UserClaimsInterface; use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface; +use InvalidArgumentException; /** * Cassandra storage for all storage types * - * To use, install "thobbs/phpcassa" via composer + * To use, install "thobbs/phpcassa" via composer: * <code> - * composer require thobbs/phpcassa:dev-master + * composer require thobbs/phpcassa:dev-master * </code> * - * Once this is done, instantiate the + * Once this is done, instantiate the connection: * <code> - * $cassandra = new \phpcassa\Connection\ConnectionPool('oauth2_server', array('127.0.0.1:9160')); + * $cassandra = new \phpcassa\Connection\ConnectionPool('oauth2_server', array('127.0.0.1:9160')); * </code> * * Then, register the storage client: * <code> - * $storage = new OAuth2\Storage\Cassandra($cassandra); - * $storage->setClientDetails($client_id, $client_secret, $redirect_uri); + * $storage = new OAuth2\Storage\Cassandra($cassandra); + * $storage->setClientDetails($client_id, $client_secret, $redirect_uri); * </code> * * @see test/lib/OAuth2/Storage/Bootstrap::getCassandraStorage @@ -43,17 +44,23 @@ class Cassandra implements AuthorizationCodeInterface, private $cache; - /* The cassandra client */ + /** + * @var ConnectionPool + */ protected $cassandra; - /* Configuration array */ + /** + * @var array + */ protected $config; /** * Cassandra Storage! uses phpCassa * - * @param \phpcassa\ConnectionPool $cassandra - * @param array $config + * @param ConnectionPool|array $connection + * @param array $config + * + * @throws InvalidArgumentException */ public function __construct($connection = array(), array $config = array()) { @@ -61,7 +68,7 @@ class Cassandra implements AuthorizationCodeInterface, $this->cassandra = $connection; } else { if (!is_array($connection)) { - throw new \InvalidArgumentException('First argument to OAuth2\Storage\Cassandra must be an instance of phpcassa\Connection\ConnectionPool or a configuration array'); + throw new InvalidArgumentException('First argument to OAuth2\Storage\Cassandra must be an instance of phpcassa\Connection\ConnectionPool or a configuration array'); } $connection = array_merge(array( 'keyspace' => 'oauth2', @@ -87,6 +94,10 @@ class Cassandra implements AuthorizationCodeInterface, ), $config); } + /** + * @param $key + * @return bool|mixed + */ protected function getValue($key) { if (isset($this->cache[$key])) { @@ -104,6 +115,12 @@ class Cassandra implements AuthorizationCodeInterface, return json_decode($value, true); } + /** + * @param $key + * @param $value + * @param int $expire + * @return bool + */ protected function setValue($key, $value, $expire = 0) { $this->cache[$key] = $value; @@ -131,6 +148,10 @@ class Cassandra implements AuthorizationCodeInterface, return true; } + /** + * @param $key + * @return bool + */ protected function expireValue($key) { unset($this->cache[$key]); @@ -151,12 +172,25 @@ class Cassandra implements AuthorizationCodeInterface, return false; } - /* AuthorizationCodeInterface */ + /** + * @param string $code + * @return bool|mixed + */ public function getAuthorizationCode($code) { return $this->getValue($this->config['code_key'] . $code); } + /** + * @param string $authorization_code + * @param mixed $client_id + * @param mixed $user_id + * @param string $redirect_uri + * @param int $expires + * @param string $scope + * @param string $id_token + * @return bool + */ public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null) { return $this->setValue( @@ -166,6 +200,10 @@ class Cassandra implements AuthorizationCodeInterface, ); } + /** + * @param string $code + * @return bool + */ public function expireAuthorizationCode($code) { $key = $this->config['code_key'] . $code; @@ -174,7 +212,11 @@ class Cassandra implements AuthorizationCodeInterface, return $this->expireValue($key); } - /* UserCredentialsInterface */ + /** + * @param string $username + * @param string $password + * @return bool + */ public function checkUserCredentials($username, $password) { if ($user = $this->getUser($username)) { @@ -184,7 +226,13 @@ class Cassandra implements AuthorizationCodeInterface, return false; } - // plaintext passwords are bad! Override this for your application + /** + * plaintext passwords are bad! Override this for your application + * + * @param array $user + * @param string $password + * @return bool + */ protected function checkPassword($user, $password) { return $user['password'] == $this->hashPassword($password); @@ -196,11 +244,19 @@ class Cassandra implements AuthorizationCodeInterface, return sha1($password); } + /** + * @param string $username + * @return array|bool|false + */ public function getUserDetails($username) { return $this->getUser($username); } + /** + * @param string $username + * @return array|bool + */ public function getUser($username) { if (!$userInfo = $this->getValue($this->config['user_key'] . $username)) { @@ -213,6 +269,13 @@ class Cassandra implements AuthorizationCodeInterface, ), $userInfo); } + /** + * @param string $username + * @param string $password + * @param string $first_name + * @param string $last_name + * @return bool + */ public function setUser($username, $password, $first_name = null, $last_name = null) { $password = $this->hashPassword($password); @@ -223,7 +286,11 @@ class Cassandra implements AuthorizationCodeInterface, ); } - /* ClientCredentialsInterface */ + /** + * @param mixed $client_id + * @param string $client_secret + * @return bool + */ public function checkClientCredentials($client_id, $client_secret = null) { if (!$client = $this->getClientDetails($client_id)) { @@ -234,6 +301,10 @@ class Cassandra implements AuthorizationCodeInterface, && $client['client_secret'] == $client_secret; } + /** + * @param $client_id + * @return bool + */ public function isPublicClient($client_id) { if (!$client = $this->getClientDetails($client_id)) { @@ -243,12 +314,24 @@ class Cassandra implements AuthorizationCodeInterface, return empty($client['client_secret']); } - /* ClientInterface */ + /** + * @param $client_id + * @return array|bool|mixed + */ public function getClientDetails($client_id) { return $this->getValue($this->config['client_key'] . $client_id); } + /** + * @param $client_id + * @param null $client_secret + * @param null $redirect_uri + * @param null $grant_types + * @param null $scope + * @param null $user_id + * @return bool + */ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null) { return $this->setValue( @@ -257,6 +340,11 @@ class Cassandra implements AuthorizationCodeInterface, ); } + /** + * @param $client_id + * @param $grant_type + * @return bool + */ public function checkRestrictedGrantType($client_id, $grant_type) { $details = $this->getClientDetails($client_id); @@ -270,12 +358,23 @@ class Cassandra implements AuthorizationCodeInterface, return true; } - /* RefreshTokenInterface */ + /** + * @param $refresh_token + * @return bool|mixed + */ public function getRefreshToken($refresh_token) { return $this->getValue($this->config['refresh_token_key'] . $refresh_token); } + /** + * @param $refresh_token + * @param $client_id + * @param $user_id + * @param $expires + * @param null $scope + * @return bool + */ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null) { return $this->setValue( @@ -285,17 +384,32 @@ class Cassandra implements AuthorizationCodeInterface, ); } + /** + * @param $refresh_token + * @return bool + */ public function unsetRefreshToken($refresh_token) { return $this->expireValue($this->config['refresh_token_key'] . $refresh_token); } - /* AccessTokenInterface */ + /** + * @param string $access_token + * @return array|bool|mixed|null + */ public function getAccessToken($access_token) { return $this->getValue($this->config['access_token_key'].$access_token); } + /** + * @param string $access_token + * @param mixed $client_id + * @param mixed $user_id + * @param int $expires + * @param null $scope + * @return bool + */ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null) { return $this->setValue( @@ -305,12 +419,19 @@ class Cassandra implements AuthorizationCodeInterface, ); } + /** + * @param $access_token + * @return bool + */ public function unsetAccessToken($access_token) { return $this->expireValue($this->config['access_token_key'] . $access_token); } - /* ScopeInterface */ + /** + * @param $scope + * @return bool + */ public function scopeExists($scope) { $scope = explode(' ', $scope); @@ -322,6 +443,10 @@ class Cassandra implements AuthorizationCodeInterface, return (count(array_diff($scope, $supportedScope)) == 0); } + /** + * @param null $client_id + * @return bool|mixed + */ public function getDefaultScope($client_id = null) { if (is_null($client_id) || !$result = $this->getValue($this->config['scope_key'].'default:'.$client_id)) { @@ -331,6 +456,13 @@ class Cassandra implements AuthorizationCodeInterface, return $result; } + /** + * @param $scope + * @param null $client_id + * @param string $type + * @return bool + * @throws \InvalidArgumentException + */ public function setScope($scope, $client_id = null, $type = 'supported') { if (!in_array($type, array('default', 'supported'))) { @@ -346,7 +478,11 @@ class Cassandra implements AuthorizationCodeInterface, return $this->setValue($key, $scope); } - /*JWTBearerInterface */ + /** + * @param $client_id + * @param $subject + * @return bool|null + */ public function getClientKey($client_id, $subject) { if (!$jwt = $this->getValue($this->config['jwt_key'] . $client_id)) { @@ -360,6 +496,12 @@ class Cassandra implements AuthorizationCodeInterface, return null; } + /** + * @param $client_id + * @param $key + * @param null $subject + * @return bool + */ public function setClientKey($client_id, $key, $subject = null) { return $this->setValue($this->config['jwt_key'] . $client_id, array( @@ -368,7 +510,10 @@ class Cassandra implements AuthorizationCodeInterface, )); } - /*ScopeInterface */ + /** + * @param $client_id + * @return bool|null + */ public function getClientScope($client_id) { if (!$clientDetails = $this->getClientDetails($client_id)) { @@ -382,19 +527,38 @@ class Cassandra implements AuthorizationCodeInterface, return null; } + /** + * @param $client_id + * @param $subject + * @param $audience + * @param $expiration + * @param $jti + * @throws \Exception + */ public function getJti($client_id, $subject, $audience, $expiration, $jti) { //TODO: Needs cassandra implementation. throw new \Exception('getJti() for the Cassandra driver is currently unimplemented.'); } + /** + * @param $client_id + * @param $subject + * @param $audience + * @param $expiration + * @param $jti + * @throws \Exception + */ public function setJti($client_id, $subject, $audience, $expiration, $jti) { //TODO: Needs cassandra implementation. throw new \Exception('setJti() for the Cassandra driver is currently unimplemented.'); } - /* PublicKeyInterface */ + /** + * @param string $client_id + * @return mixed + */ public function getPublicKey($client_id = '') { $public_key = $this->getValue($this->config['public_key_key'] . $client_id); @@ -407,6 +571,10 @@ class Cassandra implements AuthorizationCodeInterface, } } + /** + * @param string $client_id + * @return mixed + */ public function getPrivateKey($client_id = '') { $public_key = $this->getValue($this->config['public_key_key'] . $client_id); @@ -419,6 +587,10 @@ class Cassandra implements AuthorizationCodeInterface, } } + /** + * @param null $client_id + * @return mixed|string + */ public function getEncryptionAlgorithm($client_id = null) { $public_key = $this->getValue($this->config['public_key_key'] . $client_id); @@ -433,7 +605,11 @@ class Cassandra implements AuthorizationCodeInterface, return 'RS256'; } - /* UserClaimsInterface */ + /** + * @param mixed $user_id + * @param string $claims + * @return array|bool + */ public function getUserClaims($user_id, $claims) { $userDetails = $this->getUserDetails($user_id); @@ -460,6 +636,11 @@ class Cassandra implements AuthorizationCodeInterface, return $userClaims; } + /** + * @param $claim + * @param $userDetails + * @return array + */ protected function getUserClaim($claim, $userDetails) { $userClaims = array(); @@ -476,5 +657,4 @@ class Cassandra implements AuthorizationCodeInterface, return $userClaims; } - -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php index 1eb55f027..9e8148b6b 100755..100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php @@ -328,4 +328,4 @@ class CouchbaseDB implements AuthorizationCodeInterface, //TODO: Needs couchbase implementation. throw new \Exception('setJti() for the Couchbase driver is currently unimplemented.'); } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php index 8347ab258..a54cb3712 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php @@ -537,4 +537,4 @@ class DynamoDB implements { return null !== $value && '' !== $value; } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php index 75b49d301..6ccacd6d9 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php @@ -6,7 +6,6 @@ use OAuth2\Encryption\EncryptionInterface; use OAuth2\Encryption\Jwt; /** - * * @author Brent Shaffer <bshafs at gmail dot com> */ class JwtAccessToken implements JwtAccessTokenInterface @@ -85,4 +84,4 @@ class JwtAccessToken implements JwtAccessTokenInterface return $tokenData; } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php index 42d833ccb..2c60b71ce 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php @@ -378,4 +378,4 @@ class Memory implements AuthorizationCodeInterface, return 'RS256'; } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php index ae5107e29..074cee447 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php @@ -4,6 +4,7 @@ namespace OAuth2\Storage; use OAuth2\OpenID\Storage\UserClaimsInterface; use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface; +use InvalidArgumentException; /** * Simple PDO storage for all storage types @@ -29,9 +30,22 @@ class Pdo implements UserClaimsInterface, OpenIDAuthorizationCodeInterface { + /** + * @var \PDO + */ protected $db; + + /** + * @var array + */ protected $config; + /** + * @param mixed $connection + * @param array $config + * + * @throws InvalidArgumentException + */ public function __construct($connection, $config = array()) { if (!$connection instanceof \PDO) { @@ -70,7 +84,11 @@ class Pdo implements ), $config); } - /* OAuth2\Storage\ClientCredentialsInterface */ + /** + * @param string $client_id + * @param null|string $client_secret + * @return bool + */ public function checkClientCredentials($client_id, $client_secret = null) { $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table'])); @@ -81,6 +99,10 @@ class Pdo implements return $result && $result['client_secret'] == $client_secret; } + /** + * @param string $client_id + * @return bool + */ public function isPublicClient($client_id) { $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table'])); @@ -93,7 +115,10 @@ class Pdo implements return empty($result['client_secret']); } - /* OAuth2\Storage\ClientInterface */ + /** + * @param string $client_id + * @return array|mixed + */ public function getClientDetails($client_id) { $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table'])); @@ -102,6 +127,15 @@ class Pdo implements return $stmt->fetch(\PDO::FETCH_ASSOC); } + /** + * @param string $client_id + * @param null|string $client_secret + * @param null|string $redirect_uri + * @param null|array $grant_types + * @param null|string $scope + * @param null|string $user_id + * @return bool + */ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null) { // if it exists, update it. @@ -114,6 +148,11 @@ class Pdo implements return $stmt->execute(compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id')); } + /** + * @param $client_id + * @param $grant_type + * @return bool + */ public function checkRestrictedGrantType($client_id, $grant_type) { $details = $this->getClientDetails($client_id); @@ -127,7 +166,10 @@ class Pdo implements return true; } - /* OAuth2\Storage\AccessTokenInterface */ + /** + * @param string $access_token + * @return array|bool|mixed|null + */ public function getAccessToken($access_token) { $stmt = $this->db->prepare(sprintf('SELECT * from %s where access_token = :access_token', $this->config['access_token_table'])); @@ -141,6 +183,14 @@ class Pdo implements return $token; } + /** + * @param string $access_token + * @param mixed $client_id + * @param mixed $user_id + * @param int $expires + * @param string $scope + * @return bool + */ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null) { // convert expires to datestring @@ -156,6 +206,10 @@ class Pdo implements return $stmt->execute(compact('access_token', 'client_id', 'user_id', 'expires', 'scope')); } + /** + * @param $access_token + * @return bool + */ public function unsetAccessToken($access_token) { $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE access_token = :access_token', $this->config['access_token_table'])); @@ -166,6 +220,10 @@ class Pdo implements } /* OAuth2\Storage\AuthorizationCodeInterface */ + /** + * @param string $code + * @return mixed + */ public function getAuthorizationCode($code) { $stmt = $this->db->prepare(sprintf('SELECT * from %s where authorization_code = :code', $this->config['code_table'])); @@ -179,6 +237,16 @@ class Pdo implements return $code; } + /** + * @param string $code + * @param mixed $client_id + * @param mixed $user_id + * @param string $redirect_uri + * @param int $expires + * @param string $scope + * @param string $id_token + * @return bool|mixed + */ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null) { if (func_num_args() > 6) { @@ -199,6 +267,16 @@ class Pdo implements return $stmt->execute(compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope')); } + /** + * @param string $code + * @param mixed $client_id + * @param mixed $user_id + * @param string $redirect_uri + * @param string $expires + * @param string $scope + * @param string $id_token + * @return bool + */ private function setAuthorizationCodeWithIdToken($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null) { // convert expires to datestring @@ -214,6 +292,10 @@ class Pdo implements return $stmt->execute(compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token')); } + /** + * @param string $code + * @return bool + */ public function expireAuthorizationCode($code) { $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE authorization_code = :code', $this->config['code_table'])); @@ -221,7 +303,11 @@ class Pdo implements return $stmt->execute(compact('code')); } - /* OAuth2\Storage\UserCredentialsInterface */ + /** + * @param string $username + * @param string $password + * @return bool + */ public function checkUserCredentials($username, $password) { if ($user = $this->getUser($username)) { @@ -231,12 +317,20 @@ class Pdo implements return false; } + /** + * @param string $username + * @return array|bool + */ public function getUserDetails($username) { return $this->getUser($username); } - /* UserClaimsInterface */ + /** + * @param mixed $user_id + * @param string $claims + * @return array|bool + */ public function getUserClaims($user_id, $claims) { if (!$userDetails = $this->getUserDetails($user_id)) { @@ -262,6 +356,11 @@ class Pdo implements return $userClaims; } + /** + * @param string $claim + * @param array $userDetails + * @return array + */ protected function getUserClaim($claim, $userDetails) { $userClaims = array(); @@ -275,7 +374,10 @@ class Pdo implements return $userClaims; } - /* OAuth2\Storage\RefreshTokenInterface */ + /** + * @param string $refresh_token + * @return bool|mixed + */ public function getRefreshToken($refresh_token) { $stmt = $this->db->prepare(sprintf('SELECT * FROM %s WHERE refresh_token = :refresh_token', $this->config['refresh_token_table'])); @@ -289,6 +391,14 @@ class Pdo implements return $token; } + /** + * @param string $refresh_token + * @param mixed $client_id + * @param mixed $user_id + * @param string $expires + * @param string $scope + * @return bool + */ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null) { // convert expires to datestring @@ -299,6 +409,10 @@ class Pdo implements return $stmt->execute(compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope')); } + /** + * @param string $refresh_token + * @return bool + */ public function unsetRefreshToken($refresh_token) { $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE refresh_token = :refresh_token', $this->config['refresh_token_table'])); @@ -308,7 +422,13 @@ class Pdo implements return $stmt->rowCount() > 0; } - // plaintext passwords are bad! Override this for your application + /** + * plaintext passwords are bad! Override this for your application + * + * @param array $user + * @param string $password + * @return bool + */ protected function checkPassword($user, $password) { return $user['password'] == $this->hashPassword($password); @@ -320,6 +440,10 @@ class Pdo implements return sha1($password); } + /** + * @param string $username + * @return array|bool + */ public function getUser($username) { $stmt = $this->db->prepare($sql = sprintf('SELECT * from %s where username=:username', $this->config['user_table'])); @@ -335,6 +459,15 @@ class Pdo implements ), $userInfo); } + /** + * plaintext passwords are bad! Override this for your application + * + * @param string $username + * @param string $password + * @param string $firstName + * @param string $lastName + * @return bool + */ public function setUser($username, $password, $firstName = null, $lastName = null) { // do not store in plaintext @@ -350,7 +483,10 @@ class Pdo implements return $stmt->execute(compact('username', 'password', 'firstName', 'lastName')); } - /* ScopeInterface */ + /** + * @param string $scope + * @return bool + */ public function scopeExists($scope) { $scope = explode(' ', $scope); @@ -365,6 +501,10 @@ class Pdo implements return false; } + /** + * @param mixed $client_id + * @return null|string + */ public function getDefaultScope($client_id = null) { $stmt = $this->db->prepare(sprintf('SELECT scope FROM %s WHERE is_default=:is_default', $this->config['scope_table'])); @@ -381,7 +521,11 @@ class Pdo implements return null; } - /* JWTBearerInterface */ + /** + * @param mixed $client_id + * @param $subject + * @return string + */ public function getClientKey($client_id, $subject) { $stmt = $this->db->prepare($sql = sprintf('SELECT public_key from %s where client_id=:client_id AND subject=:subject', $this->config['jwt_table'])); @@ -391,6 +535,10 @@ class Pdo implements return $stmt->fetchColumn(); } + /** + * @param mixed $client_id + * @return bool|null + */ public function getClientScope($client_id) { if (!$clientDetails = $this->getClientDetails($client_id)) { @@ -404,6 +552,14 @@ class Pdo implements return null; } + /** + * @param mixed $client_id + * @param $subject + * @param $audience + * @param $expires + * @param $jti + * @return array|null + */ public function getJti($client_id, $subject, $audience, $expires, $jti) { $stmt = $this->db->prepare($sql = sprintf('SELECT * FROM %s WHERE issuer=:client_id AND subject=:subject AND audience=:audience AND expires=:expires AND jti=:jti', $this->config['jti_table'])); @@ -423,6 +579,14 @@ class Pdo implements return null; } + /** + * @param mixed $client_id + * @param $subject + * @param $audience + * @param $expires + * @param $jti + * @return bool + */ public function setJti($client_id, $subject, $audience, $expires, $jti) { $stmt = $this->db->prepare(sprintf('INSERT INTO %s (issuer, subject, audience, expires, jti) VALUES (:client_id, :subject, :audience, :expires, :jti)', $this->config['jti_table'])); @@ -430,7 +594,10 @@ class Pdo implements return $stmt->execute(compact('client_id', 'subject', 'audience', 'expires', 'jti')); } - /* PublicKeyInterface */ + /** + * @param mixed $client_id + * @return mixed + */ public function getPublicKey($client_id = null) { $stmt = $this->db->prepare($sql = sprintf('SELECT public_key FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table'])); @@ -441,6 +608,10 @@ class Pdo implements } } + /** + * @param mixed $client_id + * @return mixed + */ public function getPrivateKey($client_id = null) { $stmt = $this->db->prepare($sql = sprintf('SELECT private_key FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table'])); @@ -451,6 +622,10 @@ class Pdo implements } } + /** + * @param mixed $client_id + * @return string + */ public function getEncryptionAlgorithm($client_id = null) { $stmt = $this->db->prepare($sql = sprintf('SELECT encryption_algorithm FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table'])); @@ -467,6 +642,9 @@ class Pdo implements * DDL to create OAuth2 database and tables for PDO storage * * @see https://github.com/dsquier/oauth2-server-php-mysql + * + * @param string $dbName + * @return string */ public function getBuildSql($dbName = 'oauth2_server_php') { @@ -481,73 +659,73 @@ class Pdo implements PRIMARY KEY (client_id) ); - CREATE TABLE {$this->config['access_token_table']} ( - access_token VARCHAR(40) NOT NULL, - client_id VARCHAR(80) NOT NULL, - user_id VARCHAR(80), - expires TIMESTAMP NOT NULL, - scope VARCHAR(4000), - PRIMARY KEY (access_token) - ); + CREATE TABLE {$this->config['access_token_table']} ( + access_token VARCHAR(40) NOT NULL, + client_id VARCHAR(80) NOT NULL, + user_id VARCHAR(80), + expires TIMESTAMP NOT NULL, + scope VARCHAR(4000), + PRIMARY KEY (access_token) + ); - CREATE TABLE {$this->config['code_table']} ( - authorization_code VARCHAR(40) NOT NULL, - client_id VARCHAR(80) NOT NULL, - user_id VARCHAR(80), - redirect_uri VARCHAR(2000), - expires TIMESTAMP NOT NULL, - scope VARCHAR(4000), - id_token VARCHAR(1000), - PRIMARY KEY (authorization_code) - ); + CREATE TABLE {$this->config['code_table']} ( + authorization_code VARCHAR(40) NOT NULL, + client_id VARCHAR(80) NOT NULL, + user_id VARCHAR(80), + redirect_uri VARCHAR(2000), + expires TIMESTAMP NOT NULL, + scope VARCHAR(4000), + id_token VARCHAR(1000), + PRIMARY KEY (authorization_code) + ); - CREATE TABLE {$this->config['refresh_token_table']} ( - refresh_token VARCHAR(40) NOT NULL, - client_id VARCHAR(80) NOT NULL, - user_id VARCHAR(80), - expires TIMESTAMP NOT NULL, - scope VARCHAR(4000), - PRIMARY KEY (refresh_token) - ); + CREATE TABLE {$this->config['refresh_token_table']} ( + refresh_token VARCHAR(40) NOT NULL, + client_id VARCHAR(80) NOT NULL, + user_id VARCHAR(80), + expires TIMESTAMP NOT NULL, + scope VARCHAR(4000), + PRIMARY KEY (refresh_token) + ); - CREATE TABLE {$this->config['user_table']} ( - username VARCHAR(80), - password VARCHAR(80), - first_name VARCHAR(80), - last_name VARCHAR(80), - email VARCHAR(80), - email_verified BOOLEAN, - scope VARCHAR(4000) - ); + CREATE TABLE {$this->config['user_table']} ( + username VARCHAR(80), + password VARCHAR(80), + first_name VARCHAR(80), + last_name VARCHAR(80), + email VARCHAR(80), + email_verified BOOLEAN, + scope VARCHAR(4000) + ); - CREATE TABLE {$this->config['scope_table']} ( - scope VARCHAR(80) NOT NULL, - is_default BOOLEAN, - PRIMARY KEY (scope) - ); + CREATE TABLE {$this->config['scope_table']} ( + scope VARCHAR(80) NOT NULL, + is_default BOOLEAN, + PRIMARY KEY (scope) + ); - CREATE TABLE {$this->config['jwt_table']} ( - client_id VARCHAR(80) NOT NULL, - subject VARCHAR(80), - public_key VARCHAR(2000) NOT NULL - ); + CREATE TABLE {$this->config['jwt_table']} ( + client_id VARCHAR(80) NOT NULL, + subject VARCHAR(80), + public_key VARCHAR(2000) NOT NULL + ); - CREATE TABLE {$this->config['jti_table']} ( - issuer VARCHAR(80) NOT NULL, - subject VARCHAR(80), - audience VARCHAR(80), - expires TIMESTAMP NOT NULL, - jti VARCHAR(2000) NOT NULL - ); + CREATE TABLE {$this->config['jti_table']} ( + issuer VARCHAR(80) NOT NULL, + subject VARCHAR(80), + audiance VARCHAR(80), + expires TIMESTAMP NOT NULL, + jti VARCHAR(2000) NOT NULL + ); - CREATE TABLE {$this->config['public_key_table']} ( - client_id VARCHAR(80), - public_key VARCHAR(2000), - private_key VARCHAR(2000), - encryption_algorithm VARCHAR(100) DEFAULT 'RS256' - ) -"; + CREATE TABLE {$this->config['public_key_table']} ( + client_id VARCHAR(80), + public_key VARCHAR(2000), + private_key VARCHAR(2000), + encryption_algorithm VARCHAR(100) DEFAULT 'RS256' + ) + "; return $sql; } -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php index 108418d3a..a6dc49fb5 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php @@ -10,7 +10,21 @@ namespace OAuth2\Storage; */ interface PublicKeyInterface { + /** + * @param mixed $client_id + * @return mixed + */ public function getPublicKey($client_id = null); + + /** + * @param mixed $client_id + * @return mixed + */ public function getPrivateKey($client_id = null); + + /** + * @param mixed $client_id + * @return mixed + */ public function getEncryptionAlgorithm($client_id = null); -} +}
\ No newline at end of file diff --git a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php index 6e0fd7bad..f550579e4 100644 --- a/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php +++ b/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php @@ -37,15 +37,15 @@ interface UserCredentialsInterface public function checkUserCredentials($username, $password); /** - * @return - * ARRAY the associated "user_id" and optional "scope" values - * This function MUST return FALSE if the requested user does not exist or is - * invalid. "scope" is a space-separated list of restricted scopes. + * @param string $username - username to get details for + * @return array|false - the associated "user_id" and optional "scope" values + * This function MUST return FALSE if the requested user does not exist or is + * invalid. "scope" is a space-separated list of restricted scopes. * @code - * return array( - * "user_id" => USER_ID, // REQUIRED user_id to be stored with the authorization code or access token - * "scope" => SCOPE // OPTIONAL space-separated list of restricted scopes - * ); + * return array( + * "user_id" => USER_ID, // REQUIRED user_id to be stored with the authorization code or access token + * "scope" => SCOPE // OPTIONAL space-separated list of restricted scopes + * ); * @endcode */ public function getUserDetails($username); diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php index 5901bdc42..2cb292389 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php @@ -2,7 +2,9 @@ namespace OAuth2; -class AutoloadTest extends \PHPUnit_Framework_TestCase +use PHPUnit\Framework\TestCase; + +class AutoloadTest extends TestCase { public function testClassesExist() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php index 3bfc760e4..fe3553b23 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php @@ -10,8 +10,9 @@ use OAuth2\GrantType\AuthorizationCode; use OAuth2\Request; use OAuth2\Response; use OAuth2\Request\TestRequest; +use PHPUnit\Framework\TestCase; -class AuthorizeControllerTest extends \PHPUnit_Framework_TestCase +class AuthorizeControllerTest extends TestCase { public function testNoClientIdResponse() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php index b277514a5..cd54d239a 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php @@ -7,8 +7,9 @@ use OAuth2\Server; use OAuth2\GrantType\AuthorizationCode; use OAuth2\Request; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class ResourceControllerTest extends \PHPUnit_Framework_TestCase +class ResourceControllerTest extends TestCase { public function testNoAccessToken() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php index 4a217bd55..d18eaa6d7 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php @@ -10,8 +10,9 @@ use OAuth2\GrantType\UserCredentials; use OAuth2\Scope; use OAuth2\Request\TestRequest; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class TokenControllerTest extends \PHPUnit_Framework_TestCase +class TokenControllerTest extends TestCase { public function testNoGrantType() { @@ -271,6 +272,48 @@ class TokenControllerTest extends \PHPUnit_Framework_TestCase $this->assertEquals($response->getParameter('error_description'), 'The request method must be POST when revoking an access token'); } + public function testCanUseCrossOriginRequestForRevoke() + { + $server = $this->getTestServer(); + + $request = new TestRequest(); + $request->setMethod('OPTIONS'); + + $server->handleRevokeRequest($request, $response = new Response()); + $this->assertTrue($response instanceof Response); + $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1)); + $this->assertEquals($response->getHttpHeader('Allow'), 'POST, OPTIONS'); + } + + public function testInvalidRequestMethodForAccessToken() + { + $server = $this->getTestServer(); + + $request = new TestRequest(); + $request->setQuery(array( + 'token_type_hint' => 'access_token' + )); + + $server->handleTokenRequest($request, $response = new Response()); + $this->assertTrue($response instanceof Response); + $this->assertEquals(405, $response->getStatusCode(), var_export($response, 1)); + $this->assertEquals($response->getParameter('error'), 'invalid_request'); + $this->assertEquals($response->getParameter('error_description'), 'The request method must be POST when requesting an access token'); + } + + public function testCanUseCrossOriginRequestForAccessToken() + { + $server = $this->getTestServer(); + + $request = new TestRequest(); + $request->setMethod('OPTIONS'); + + $server->handleTokenRequest($request, $response = new Response()); + $this->assertTrue($response instanceof Response); + $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1)); + $this->assertEquals($response->getHttpHeader('Allow'), 'POST, OPTIONS'); + } + public function testCreateController() { $storage = Bootstrap::getInstance()->getMemoryStorage(); diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php index d34136767..c7e92c053 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php @@ -3,8 +3,9 @@ namespace OAuth2\Encryption; use OAuth2\Storage\Bootstrap; +use PHPUnit\Framework\TestCase; -class FirebaseJwtTest extends \PHPUnit_Framework_TestCase +class FirebaseJwtTest extends TestCase { private $privateKey; diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php index 214eebac8..d73b4c923 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php @@ -3,8 +3,9 @@ namespace OAuth2\Encryption; use OAuth2\Storage\Bootstrap; +use PHPUnit\Framework\TestCase; -class JwtTest extends \PHPUnit_Framework_TestCase +class JwtTest extends TestCase { private $privateKey; diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php index 356b8e53c..b2314ffc6 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request\TestRequest; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class AuthorizationCodeTest extends \PHPUnit_Framework_TestCase +class AuthorizationCodeTest extends TestCase { public function testNoCode() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php index f0d46ccb3..2a7d0eb3d 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php @@ -7,8 +7,9 @@ use OAuth2\Server; use OAuth2\Request\TestRequest; use OAuth2\Request; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class ClientCredentialsTest extends \PHPUnit_Framework_TestCase +class ClientCredentialsTest extends TestCase { public function testInvalidCredentials() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php index a47aae3e8..14bf980f1 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class ImplicitTest extends \PHPUnit_Framework_TestCase +class ImplicitTest extends TestCase { public function testImplicitNotAllowedResponse() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php index 0a6c4b827..e60023b3c 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php @@ -7,8 +7,9 @@ use OAuth2\Server; use OAuth2\Request\TestRequest; use OAuth2\Response; use OAuth2\Encryption\Jwt; +use PHPUnit\Framework\TestCase; -class JwtBearerTest extends \PHPUnit_Framework_TestCase +class JwtBearerTest extends TestCase { private $privateKey; diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php index a458aad8a..c964c6bbd 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request\TestRequest; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class RefreshTokenTest extends \PHPUnit_Framework_TestCase +class RefreshTokenTest extends TestCase { private $storage; diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php index 18943d055..8b725e13a 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request\TestRequest; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class UserCredentialsTest extends \PHPUnit_Framework_TestCase +class UserCredentialsTest extends TestCase { public function testNoUsername() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php index 46de936d8..fdc16daba 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class AuthorizeControllerTest extends \PHPUnit_Framework_TestCase +class AuthorizeControllerTest extends TestCase { public function testValidateAuthorizeRequest() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php index b1b687077..62e84df57 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class UserInfoControllerTest extends \PHPUnit_Framework_TestCase +class UserInfoControllerTest extends TestCase { public function testCreateController() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php index 776002d1e..c89a1ae97 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php @@ -6,8 +6,9 @@ use OAuth2\Storage\Bootstrap; use OAuth2\Server; use OAuth2\Request\TestRequest; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class AuthorizationCodeTest extends \PHPUnit_Framework_TestCase +class AuthorizationCodeTest extends TestCase { public function testValidCode() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php index b0311434a..7b892c946 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php @@ -7,8 +7,9 @@ use OAuth2\Request; use OAuth2\Response; use OAuth2\Storage\Bootstrap; use OAuth2\GrantType\ClientCredentials; +use PHPUnit\Framework\TestCase; -class CodeIdTokenTest extends \PHPUnit_Framework_TestCase +class CodeIdTokenTest extends TestCase { public function testHandleAuthorizeRequest() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php index e772f6be4..a0df3a936 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php @@ -8,8 +8,9 @@ use OAuth2\Response; use OAuth2\Storage\Bootstrap; use OAuth2\GrantType\ClientCredentials; use OAuth2\Encryption\Jwt; +use PHPUnit\Framework\TestCase; -class IdTokenTest extends \PHPUnit_Framework_TestCase +class IdTokenTest extends TestCase { public function testValidateAuthorizeRequest() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php index bc564d37b..0573a9866 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php @@ -8,8 +8,9 @@ use OAuth2\Response; use OAuth2\Storage\Bootstrap; use OAuth2\GrantType\ClientCredentials; use OAuth2\ResponseType\AccessToken; +use PHPUnit\Framework\TestCase; -class IdTokenTokenTest extends \PHPUnit_Framework_TestCase +class IdTokenTokenTest extends TestCase { public function testHandleAuthorizeRequest() diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php index 10db3215c..cbf8f096b 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php @@ -5,8 +5,9 @@ namespace OAuth2; use OAuth2\Request\TestRequest; use OAuth2\Storage\Bootstrap; use OAuth2\GrantType\AuthorizationCode; +use PHPUnit\Framework\TestCase; -class RequestTest extends \PHPUnit_Framework_TestCase +class RequestTest extends TestCase { public function testRequestOverride() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php index b8149005d..2d2c57ee6 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php @@ -1,8 +1,8 @@ <?php -namespace OAuth2; +namespace OAuth2;use PHPUnit\Framework\TestCase; -class ResponseTest extends \PHPUnit_Framework_TestCase +class ResponseTest extends TestCase { public function testRenderAsXml() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php index 0ed1c82fc..43b02254f 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php @@ -4,8 +4,9 @@ namespace OAuth2\ResponseType; use OAuth2\Server; use OAuth2\Storage\Memory; +use PHPUnit\Framework\TestCase; -class AccessTokenTest extends \PHPUnit_Framework_TestCase +class AccessTokenTest extends TestCase { public function testRevokeAccessTokenWithTypeHint() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php index 51b01a927..7e37509ef 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php @@ -11,8 +11,9 @@ use OAuth2\GrantType\ClientCredentials; use OAuth2\GrantType\UserCredentials; use OAuth2\GrantType\RefreshToken; use OAuth2\Encryption\Jwt; +use PHPUnit\Framework\TestCase; -class JwtAccessTokenTest extends \PHPUnit_Framework_TestCase +class JwtAccessTokenTest extends TestCase { public function testCreateAccessToken() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php index 99f9cf6eb..5b51be1d1 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php @@ -3,8 +3,9 @@ namespace OAuth2; use OAuth2\Storage\Memory; +use PHPUnit\Framework\TestCase; -class ScopeTest extends \PHPUnit_Framework_TestCase +class ScopeTest extends TestCase { public function testCheckScope() { diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php index 747e120f5..3106961e2 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php @@ -5,8 +5,9 @@ namespace OAuth2; use OAuth2\Request\TestRequest; use OAuth2\ResponseType\AuthorizationCode; use OAuth2\Storage\Bootstrap; +use PHPUnit\Framework\TestCase; -class ServerTest extends \PHPUnit_Framework_TestCase +class ServerTest extends TestCase { /** * @expectedException LogicException OAuth2\Storage\ClientInterface diff --git a/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php b/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php index a2e000e22..71cca3bd9 100644 --- a/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php @@ -4,8 +4,9 @@ namespace OAuth2\TokenType; use OAuth2\Request\TestRequest; use OAuth2\Response; +use PHPUnit\Framework\TestCase; -class BearerTest extends \PHPUnit_Framework_TestCase +class BearerTest extends TestCase { public function testValidContentTypeWithCharset() { diff --git a/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php b/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php index 7bbce28a4..a916ff2a3 100644 --- a/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php +++ b/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php @@ -45,9 +45,14 @@ class TestRequest extends Request implements RequestInterface $this->query = $query; } + public function setMethod($method) + { + $this->server['REQUEST_METHOD'] = $method; + } + public function setPost(array $params) { - $this->server['REQUEST_METHOD'] = 'POST'; + $this->setMethod('POST'); $this->request = $params; } diff --git a/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php b/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php index f0b1274a2..e841d3ad2 100755..100644 --- a/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php +++ b/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php @@ -2,7 +2,9 @@ namespace OAuth2\Storage; -abstract class BaseTest extends \PHPUnit_Framework_TestCase +use PHPUnit\Framework\TestCase; + +abstract class BaseTest extends TestCase { public function provideStorage() { diff --git a/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php b/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php index 3d7bdd4e9..3d7bdd4e9 100755..100644 --- a/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php +++ b/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index ea7bbb286..707f72738 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -755,10 +755,8 @@ return array( 'SimplePie_XML_Declaration_Parser' => $vendorDir . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php', 'SimplePie_gzdecode' => $vendorDir . '/simplepie/simplepie/library/SimplePie/gzdecode.php', 'Text_LanguageDetect' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect.php', - 'Text_LanguageDetectTest' => $vendorDir . '/pear/text_languagedetect/tests/Text_LanguageDetectTest.php', 'Text_LanguageDetect_Exception' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php', 'Text_LanguageDetect_ISO639' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php', - 'Text_LanguageDetect_ISO639Test' => $vendorDir . '/pear/text_languagedetect/tests/Text_LanguageDetect_ISO639Test.php', 'Text_LanguageDetect_Parser' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/Parser.php', 'Zotlabs\\Access\\AccessList' => $baseDir . '/Zotlabs/Access/AccessList.php', 'Zotlabs\\Access\\PermissionLimits' => $baseDir . '/Zotlabs/Access/PermissionLimits.php', @@ -839,6 +837,8 @@ return array( 'Zotlabs\\Module\\Appman' => $baseDir . '/Zotlabs/Module/Appman.php', 'Zotlabs\\Module\\Apporder' => $baseDir . '/Zotlabs/Module/Apporder.php', 'Zotlabs\\Module\\Apps' => $baseDir . '/Zotlabs/Module/Apps.php', + 'Zotlabs\\Module\\Article_edit' => $baseDir . '/Zotlabs/Module/Article_edit.php', + 'Zotlabs\\Module\\Articles' => $baseDir . '/Zotlabs/Module/Articles.php', 'Zotlabs\\Module\\Attach' => $baseDir . '/Zotlabs/Module/Attach.php', 'Zotlabs\\Module\\Authorize' => $baseDir . '/Zotlabs/Module/Authorize.php', 'Zotlabs\\Module\\Authtest' => $baseDir . '/Zotlabs/Module/Authtest.php', @@ -990,13 +990,7 @@ return array( 'Zotlabs\\Module\\Toggle_safesearch' => $baseDir . '/Zotlabs/Module/Toggle_safesearch.php', 'Zotlabs\\Module\\Token' => $baseDir . '/Zotlabs/Module/Token.php', 'Zotlabs\\Module\\Uexport' => $baseDir . '/Zotlabs/Module/Uexport.php', - 'Zotlabs\\Module\\Update_cards' => $baseDir . '/Zotlabs/Module/Update_cards.php', - 'Zotlabs\\Module\\Update_channel' => $baseDir . '/Zotlabs/Module/Update_channel.php', - 'Zotlabs\\Module\\Update_display' => $baseDir . '/Zotlabs/Module/Update_display.php', - 'Zotlabs\\Module\\Update_home' => $baseDir . '/Zotlabs/Module/Update_home.php', - 'Zotlabs\\Module\\Update_network' => $baseDir . '/Zotlabs/Module/Update_network.php', - 'Zotlabs\\Module\\Update_pubstream' => $baseDir . '/Zotlabs/Module/Update_pubstream.php', - 'Zotlabs\\Module\\Update_search' => $baseDir . '/Zotlabs/Module/Update_search.php', + 'Zotlabs\\Module\\Update' => $baseDir . '/Zotlabs/Module/Update.php', 'Zotlabs\\Module\\View' => $baseDir . '/Zotlabs/Module/View.php', 'Zotlabs\\Module\\Viewconnections' => $baseDir . '/Zotlabs/Module/Viewconnections.php', 'Zotlabs\\Module\\Viewsrc' => $baseDir . '/Zotlabs/Module/Viewsrc.php', @@ -1027,6 +1021,11 @@ return array( 'Zotlabs\\Storage\\File' => $baseDir . '/Zotlabs/Storage/File.php', 'Zotlabs\\Storage\\GitRepo' => $baseDir . '/Zotlabs/Storage/GitRepo.php', 'Zotlabs\\Text\\Tagadelic' => $baseDir . '/Zotlabs/Text/Tagadelic.php', + 'Zotlabs\\Thumbs\\Epubthumb' => $baseDir . '/Zotlabs/Thumbs/Epubthumb.php', + 'Zotlabs\\Thumbs\\Mp3audio' => $baseDir . '/Zotlabs/Thumbs/Mp3audio.php', + 'Zotlabs\\Thumbs\\Pdf' => $baseDir . '/Zotlabs/Thumbs/Pdf.php', + 'Zotlabs\\Thumbs\\Text' => $baseDir . '/Zotlabs/Thumbs/Text.php', + 'Zotlabs\\Thumbs\\Video' => $baseDir . '/Zotlabs/Thumbs/Video.php', 'Zotlabs\\Web\\CheckJS' => $baseDir . '/Zotlabs/Web/CheckJS.php', 'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php', @@ -1065,6 +1064,7 @@ return array( 'Zotlabs\\Widget\\Forums' => $baseDir . '/Zotlabs/Widget/Forums.php', 'Zotlabs\\Widget\\Fullprofile' => $baseDir . '/Zotlabs/Widget/Fullprofile.php', 'Zotlabs\\Widget\\Helpindex' => $baseDir . '/Zotlabs/Widget/Helpindex.php', + 'Zotlabs\\Widget\\Hq_controls' => $baseDir . '/Zotlabs/Widget/Hq_controls.php', 'Zotlabs\\Widget\\Item' => $baseDir . '/Zotlabs/Widget/Item.php', 'Zotlabs\\Widget\\Mailmenu' => $baseDir . '/Zotlabs/Widget/Mailmenu.php', 'Zotlabs\\Widget\\Menu_preview' => $baseDir . '/Zotlabs/Widget/Menu_preview.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index bbe6fd553..f2747ecac 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -7,11 +7,12 @@ $baseDir = dirname($vendorDir); return array( '383eaff206634a77a1be54e64e6459c7' => $vendorDir . '/sabre/uri/lib/functions.php', + '3569eecfeed3bcf0bad3c998a494ecb8' => $vendorDir . '/sabre/xml/lib/Deserializer/functions.php', + '93aa591bc4ca510c520999e34229ee79' => $vendorDir . '/sabre/xml/lib/Serializer/functions.php', '2b9d0f43f9552984cfa82fee95491826' => $vendorDir . '/sabre/event/lib/coroutine.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => $vendorDir . '/sabre/event/lib/Loop/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php', - '3569eecfeed3bcf0bad3c998a494ecb8' => $vendorDir . '/sabre/xml/lib/Deserializer/functions.php', - '93aa591bc4ca510c520999e34229ee79' => $vendorDir . '/sabre/xml/lib/Serializer/functions.php', 'ebdb698ed4152ae445614b69b5e4bb6a' => $vendorDir . '/sabre/http/lib/functions.php', '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', + 'f084d01b0a599f67676cffef638aa95b' => $vendorDir . '/smarty/smarty/libs/bootstrap.php', ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 63dc8c257..74d6cf27b 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -8,13 +8,14 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d { public static $files = array ( '383eaff206634a77a1be54e64e6459c7' => __DIR__ . '/..' . '/sabre/uri/lib/functions.php', + '3569eecfeed3bcf0bad3c998a494ecb8' => __DIR__ . '/..' . '/sabre/xml/lib/Deserializer/functions.php', + '93aa591bc4ca510c520999e34229ee79' => __DIR__ . '/..' . '/sabre/xml/lib/Serializer/functions.php', '2b9d0f43f9552984cfa82fee95491826' => __DIR__ . '/..' . '/sabre/event/lib/coroutine.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => __DIR__ . '/..' . '/sabre/event/lib/Loop/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php', - '3569eecfeed3bcf0bad3c998a494ecb8' => __DIR__ . '/..' . '/sabre/xml/lib/Deserializer/functions.php', - '93aa591bc4ca510c520999e34229ee79' => __DIR__ . '/..' . '/sabre/xml/lib/Serializer/functions.php', 'ebdb698ed4152ae445614b69b5e4bb6a' => __DIR__ . '/..' . '/sabre/http/lib/functions.php', '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', + 'f084d01b0a599f67676cffef638aa95b' => __DIR__ . '/..' . '/smarty/smarty/libs/bootstrap.php', ); public static $prefixLengthsPsr4 = array ( @@ -907,10 +908,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'SimplePie_XML_Declaration_Parser' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php', 'SimplePie_gzdecode' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/gzdecode.php', 'Text_LanguageDetect' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect.php', - 'Text_LanguageDetectTest' => __DIR__ . '/..' . '/pear/text_languagedetect/tests/Text_LanguageDetectTest.php', 'Text_LanguageDetect_Exception' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php', 'Text_LanguageDetect_ISO639' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php', - 'Text_LanguageDetect_ISO639Test' => __DIR__ . '/..' . '/pear/text_languagedetect/tests/Text_LanguageDetect_ISO639Test.php', 'Text_LanguageDetect_Parser' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/Parser.php', 'Zotlabs\\Access\\AccessList' => __DIR__ . '/../..' . '/Zotlabs/Access/AccessList.php', 'Zotlabs\\Access\\PermissionLimits' => __DIR__ . '/../..' . '/Zotlabs/Access/PermissionLimits.php', @@ -991,6 +990,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Appman' => __DIR__ . '/../..' . '/Zotlabs/Module/Appman.php', 'Zotlabs\\Module\\Apporder' => __DIR__ . '/../..' . '/Zotlabs/Module/Apporder.php', 'Zotlabs\\Module\\Apps' => __DIR__ . '/../..' . '/Zotlabs/Module/Apps.php', + 'Zotlabs\\Module\\Article_edit' => __DIR__ . '/../..' . '/Zotlabs/Module/Article_edit.php', + 'Zotlabs\\Module\\Articles' => __DIR__ . '/../..' . '/Zotlabs/Module/Articles.php', 'Zotlabs\\Module\\Attach' => __DIR__ . '/../..' . '/Zotlabs/Module/Attach.php', 'Zotlabs\\Module\\Authorize' => __DIR__ . '/../..' . '/Zotlabs/Module/Authorize.php', 'Zotlabs\\Module\\Authtest' => __DIR__ . '/../..' . '/Zotlabs/Module/Authtest.php', @@ -1142,13 +1143,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Toggle_safesearch' => __DIR__ . '/../..' . '/Zotlabs/Module/Toggle_safesearch.php', 'Zotlabs\\Module\\Token' => __DIR__ . '/../..' . '/Zotlabs/Module/Token.php', 'Zotlabs\\Module\\Uexport' => __DIR__ . '/../..' . '/Zotlabs/Module/Uexport.php', - 'Zotlabs\\Module\\Update_cards' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_cards.php', - 'Zotlabs\\Module\\Update_channel' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_channel.php', - 'Zotlabs\\Module\\Update_display' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_display.php', - 'Zotlabs\\Module\\Update_home' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_home.php', - 'Zotlabs\\Module\\Update_network' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_network.php', - 'Zotlabs\\Module\\Update_pubstream' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_pubstream.php', - 'Zotlabs\\Module\\Update_search' => __DIR__ . '/../..' . '/Zotlabs/Module/Update_search.php', + 'Zotlabs\\Module\\Update' => __DIR__ . '/../..' . '/Zotlabs/Module/Update.php', 'Zotlabs\\Module\\View' => __DIR__ . '/../..' . '/Zotlabs/Module/View.php', 'Zotlabs\\Module\\Viewconnections' => __DIR__ . '/../..' . '/Zotlabs/Module/Viewconnections.php', 'Zotlabs\\Module\\Viewsrc' => __DIR__ . '/../..' . '/Zotlabs/Module/Viewsrc.php', @@ -1179,6 +1174,11 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Storage\\File' => __DIR__ . '/../..' . '/Zotlabs/Storage/File.php', 'Zotlabs\\Storage\\GitRepo' => __DIR__ . '/../..' . '/Zotlabs/Storage/GitRepo.php', 'Zotlabs\\Text\\Tagadelic' => __DIR__ . '/../..' . '/Zotlabs/Text/Tagadelic.php', + 'Zotlabs\\Thumbs\\Epubthumb' => __DIR__ . '/../..' . '/Zotlabs/Thumbs/Epubthumb.php', + 'Zotlabs\\Thumbs\\Mp3audio' => __DIR__ . '/../..' . '/Zotlabs/Thumbs/Mp3audio.php', + 'Zotlabs\\Thumbs\\Pdf' => __DIR__ . '/../..' . '/Zotlabs/Thumbs/Pdf.php', + 'Zotlabs\\Thumbs\\Text' => __DIR__ . '/../..' . '/Zotlabs/Thumbs/Text.php', + 'Zotlabs\\Thumbs\\Video' => __DIR__ . '/../..' . '/Zotlabs/Thumbs/Video.php', 'Zotlabs\\Web\\CheckJS' => __DIR__ . '/../..' . '/Zotlabs/Web/CheckJS.php', 'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php', @@ -1217,6 +1217,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Widget\\Forums' => __DIR__ . '/../..' . '/Zotlabs/Widget/Forums.php', 'Zotlabs\\Widget\\Fullprofile' => __DIR__ . '/../..' . '/Zotlabs/Widget/Fullprofile.php', 'Zotlabs\\Widget\\Helpindex' => __DIR__ . '/../..' . '/Zotlabs/Widget/Helpindex.php', + 'Zotlabs\\Widget\\Hq_controls' => __DIR__ . '/../..' . '/Zotlabs/Widget/Hq_controls.php', 'Zotlabs\\Widget\\Item' => __DIR__ . '/../..' . '/Zotlabs/Widget/Item.php', 'Zotlabs\\Widget\\Mailmenu' => __DIR__ . '/../..' . '/Zotlabs/Widget/Mailmenu.php', 'Zotlabs\\Widget\\Menu_preview' => __DIR__ . '/../..' . '/Zotlabs/Widget/Menu_preview.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 31aa8aef4..52312a34a 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,41 +1,270 @@ [ { - "name": "sabre/event", - "version": "3.0.0", - "version_normalized": "3.0.0.0", + "name": "commerceguys/intl", + "version": "v0.7.4", + "version_normalized": "0.7.4.0", "source": { "type": "git", - "url": "https://github.com/sabre-io/event.git", - "reference": "831d586f5a442dceacdcf5e9c4c36a4db99a3534" + "url": "https://github.com/commerceguys/intl.git", + "reference": "edfcfc26ed8505c4f6fcf862eb36dfda1af74b00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/831d586f5a442dceacdcf5e9c4c36a4db99a3534", - "reference": "831d586f5a442dceacdcf5e9c4c36a4db99a3534", + "url": "https://api.github.com/repos/commerceguys/intl/zipball/edfcfc26ed8505c4f6fcf862eb36dfda1af74b00", + "reference": "edfcfc26ed8505c4f6fcf862eb36dfda1af74b00", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "*", - "sabre/cs": "~0.0.4" + "mikey179/vfsstream": "1.*", + "phpunit/phpunit": "~4.0" }, - "time": "2015-11-05T20:14:39+00:00", + "time": "2016-12-13T12:33:19+00:00", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.x-dev" + } + }, "installation-source": "dist", "autoload": { "psr-4": { - "Sabre\\Event\\": "lib/" + "CommerceGuys\\Intl\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bojan Zivanovic" + } + ], + "description": "Internationalization library powered by CLDR data." + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.9.3", + "version_normalized": "4.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "95e1bae3182efc0f3422896a3236e991049dac69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/95e1bae3182efc0f3422896a3236e991049dac69", + "reference": "95e1bae3182efc0f3422896a3236e991049dac69", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "require-dev": { + "simpletest/simpletest": "^1.1" + }, + "time": "2017-06-03T02:28:16+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" }, "files": [ - "lib/coroutine.php", - "lib/Loop/functions.php", - "lib/Promise/functions.php" + "library/HTMLPurifier.composer.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ] + }, + { + "name": "lukasreschke/id3parser", + "version": "v0.0.1", + "version_normalized": "0.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/LukasReschke/ID3Parser.git", + "reference": "cd3ba6e8918cc30883f01a3c24281cfe23b8877a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LukasReschke/ID3Parser/zipball/cd3ba6e8918cc30883f01a3c24281cfe23b8877a", + "reference": "cd3ba6e8918cc30883f01a3c24281cfe23b8877a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "time": "2016-04-04T09:34:50+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "ID3Parser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "homepage": "https://github.com/LukasReschke/ID3Parser/", + "keywords": [ + "codecs", + "php", + "tags" + ] + }, + { + "name": "michelf/php-markdown", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/michelf/php-markdown.git", + "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220", + "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-10-29T18:58:20+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-lib": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Michelf": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Michel Fortin", + "email": "michel.fortin@michelf.ca", + "homepage": "https://michelf.ca/", + "role": "Developer" + }, + { + "name": "John Gruber", + "homepage": "https://daringfireball.net/" + } + ], + "description": "PHP Markdown", + "homepage": "https://michelf.ca/projects/php-markdown/", + "keywords": [ + "markdown" + ] + }, + { + "name": "pear/text_languagedetect", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Text_LanguageDetect.git", + "reference": "bb9ff6f4970f686fac59081e916b456021fe7ba6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Text_LanguageDetect/zipball/bb9ff6f4970f686fac59081e916b456021fe7ba6", + "reference": "bb9ff6f4970f686fac59081e916b456021fe7ba6", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-mbstring": "May require the mbstring PHP extension" + }, + "time": "2017-03-02T16:14:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Text": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Nicholas Pisarro", + "email": "taak@php.net", + "role": "Lead" + } + ], + "description": "Identify human languages from text samples", + "homepage": "http://pear.php.net/package/Text_LanguageDetect" + }, + { + "name": "sabre/uri", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/uri.git", + "reference": "ada354d83579565949d80b2e15593c2371225e61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/ada354d83579565949d80b2e15593c2371225e61", + "reference": "ada354d83579565949d80b2e15593c2371225e61", + "shasum": "" + }, + "require": { + "php": ">=5.4.7" + }, + "require-dev": { + "phpunit/phpunit": ">=4.0,<6.0", + "sabre/cs": "~1.0.0" + }, + "time": "2017-02-20T19:59:28+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Sabre\\Uri\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ "BSD-3-Clause" ], "authors": [ @@ -46,16 +275,12 @@ "role": "Developer" } ], - "description": "sabre/event is a library for lightweight event-based programming", - "homepage": "http://sabre.io/event/", + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", "keywords": [ - "EventEmitter", - "async", - "events", - "hooks", - "plugin", - "promise", - "signal" + "rfc3986", + "uri", + "url" ] }, { @@ -124,6 +349,123 @@ ] }, { + "name": "sabre/event", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/event.git", + "reference": "831d586f5a442dceacdcf5e9c4c36a4db99a3534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/event/zipball/831d586f5a442dceacdcf5e9c4c36a4db99a3534", + "reference": "831d586f5a442dceacdcf5e9c4c36a4db99a3534", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "*", + "sabre/cs": "~0.0.4" + }, + "time": "2015-11-05T20:14:39+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Sabre\\Event\\": "lib/" + }, + "files": [ + "lib/coroutine.php", + "lib/Loop/functions.php", + "lib/Promise/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "sabre/event is a library for lightweight event-based programming", + "homepage": "http://sabre.io/event/", + "keywords": [ + "EventEmitter", + "async", + "events", + "hooks", + "plugin", + "promise", + "signal" + ] + }, + { + "name": "sabre/http", + "version": "4.2.3", + "version_normalized": "4.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/http.git", + "reference": "0295f9a3ee39be97e0898592fc19e42421e0cd93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/http/zipball/0295f9a3ee39be97e0898592fc19e42421e0cd93", + "reference": "0295f9a3ee39be97e0898592fc19e42421e0cd93", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-mbstring": "*", + "php": ">=5.4", + "sabre/event": ">=1.0.0,<4.0.0", + "sabre/uri": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.3", + "sabre/cs": "~0.0.1" + }, + "suggest": { + "ext-curl": " to make http requests with the Client class" + }, + "time": "2017-06-12T07:53:04+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Sabre\\HTTP\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "The sabre/http library provides utilities for dealing with http requests and responses. ", + "homepage": "https://github.com/fruux/sabre-http", + "keywords": [ + "http" + ] + }, + { "name": "psr/log", "version": "1.0.2", "version_normalized": "1.0.2.0", @@ -173,34 +515,66 @@ ] }, { - "name": "michelf/php-markdown", - "version": "1.7.0", - "version_normalized": "1.7.0.0", + "name": "sabre/dav", + "version": "3.2.2", + "version_normalized": "3.2.2.0", "source": { "type": "git", - "url": "https://github.com/michelf/php-markdown.git", - "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220" + "url": "https://github.com/sabre-io/dav.git", + "reference": "e987775e619728f12205606c9cc3ee565ffb1516" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220", - "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/e987775e619728f12205606c9cc3ee565ffb1516", + "reference": "e987775e619728f12205606c9cc3ee565ffb1516", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-ctype": "*", + "ext-date": "*", + "ext-dom": "*", + "ext-iconv": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "lib-libxml": ">=2.7.0", + "php": ">=5.5.0", + "psr/log": "^1.0", + "sabre/event": ">=2.0.0, <4.0.0", + "sabre/http": "^4.2.1", + "sabre/uri": "^1.0.1", + "sabre/vobject": "^4.1.0", + "sabre/xml": "^1.4.0" }, - "time": "2016-10-29T18:58:20+00:00", + "require-dev": { + "evert/phpdoc-md": "~0.1.0", + "monolog/monolog": "^1.18", + "phpunit/phpunit": "> 4.8, <6.0.0", + "sabre/cs": "^1.0.0" + }, + "suggest": { + "ext-curl": "*", + "ext-pdo": "*" + }, + "time": "2017-02-15T03:06:08+00:00", + "bin": [ + "bin/sabredav", + "bin/naturalselection" + ], "type": "library", "extra": { "branch-alias": { - "dev-lib": "1.4.x-dev" + "dev-master": "3.1.0-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "Michelf": "" + "psr-4": { + "Sabre\\DAV\\": "lib/DAV/", + "Sabre\\DAVACL\\": "lib/DAVACL/", + "Sabre\\CalDAV\\": "lib/CalDAV/", + "Sabre\\CardDAV\\": "lib/CardDAV/" } }, "notification-url": "https://packagist.org/downloads/", @@ -209,35 +583,35 @@ ], "authors": [ { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "https://michelf.ca/", + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", "role": "Developer" - }, - { - "name": "John Gruber", - "homepage": "https://daringfireball.net/" } ], - "description": "PHP Markdown", - "homepage": "https://michelf.ca/projects/php-markdown/", + "description": "WebDAV Framework for PHP", + "homepage": "http://sabre.io/", "keywords": [ - "markdown" + "CalDAV", + "CardDAV", + "WebDAV", + "framework", + "iCalendar" ] }, { "name": "bshaffer/oauth2-server-php", - "version": "v1.9.0", - "version_normalized": "1.9.0.0", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", "source": { "type": "git", "url": "https://github.com/bshaffer/oauth2-server-php.git", - "reference": "8856aed1a98d6da596ae3f9b8095b5c7a1581697" + "reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/8856aed1a98d6da596ae3f9b8095b5c7a1581697", - "reference": "8856aed1a98d6da596ae3f9b8095b5c7a1581697", + "url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/d158878425392fe5a0cc34f15dbaf46315ae0ed9", + "reference": "d158878425392fe5a0cc34f15dbaf46315ae0ed9", "shasum": "" }, "require": { @@ -247,16 +621,18 @@ "aws/aws-sdk-php": "~2.8", "firebase/php-jwt": "~2.2", "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^4.0", "predis/predis": "dev-master", "thobbs/phpcassa": "dev-master" }, "suggest": { "aws/aws-sdk-php": "~2.8 is required to use DynamoDB storage", - "firebase/php-jwt": "~1.1 is required to use MondoDB storage", + "firebase/php-jwt": "~2.2 is required to use JWT features", + "mongodb/mongodb": "^1.1 is required to use MongoDB storage", "predis/predis": "Required to use Redis storage", "thobbs/phpcassa": "Required to use Cassandra storage" }, - "time": "2017-01-06T23:20:00+00:00", + "time": "2017-11-15T01:41:02+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -285,17 +661,17 @@ }, { "name": "simplepie/simplepie", - "version": "1.5", - "version_normalized": "1.5.0.0", + "version": "1.5.1", + "version_normalized": "1.5.1.0", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab" + "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/5de5551953f95feef12cf355a7a26a70f94aa3ab", - "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", + "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", "shasum": "" }, "require": { @@ -307,9 +683,9 @@ "suggest": { "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" }, - "time": "2017-04-17T07:29:31+00:00", + "time": "2017-11-12T02:03:34+00:00", "type": "library", - "installation-source": "source", + "installation-source": "dist", "autoload": { "psr-0": { "SimplePie": "library" @@ -344,108 +720,23 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/1.5", + "source": "https://github.com/simplepie/simplepie/tree/1.5.1", "issues": "https://github.com/simplepie/simplepie/issues" } }, { - "name": "sabre/dav", - "version": "3.2.2", - "version_normalized": "3.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/sabre-io/dav.git", - "reference": "e987775e619728f12205606c9cc3ee565ffb1516" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/e987775e619728f12205606c9cc3ee565ffb1516", - "reference": "e987775e619728f12205606c9cc3ee565ffb1516", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-date": "*", - "ext-dom": "*", - "ext-iconv": "*", - "ext-mbstring": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "lib-libxml": ">=2.7.0", - "php": ">=5.5.0", - "psr/log": "^1.0", - "sabre/event": ">=2.0.0, <4.0.0", - "sabre/http": "^4.2.1", - "sabre/uri": "^1.0.1", - "sabre/vobject": "^4.1.0", - "sabre/xml": "^1.4.0" - }, - "require-dev": { - "evert/phpdoc-md": "~0.1.0", - "monolog/monolog": "^1.18", - "phpunit/phpunit": "> 4.8, <6.0.0", - "sabre/cs": "^1.0.0" - }, - "suggest": { - "ext-curl": "*", - "ext-pdo": "*" - }, - "time": "2017-02-15T03:06:08+00:00", - "bin": [ - "bin/sabredav", - "bin/naturalselection" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Sabre\\DAV\\": "lib/DAV/", - "Sabre\\DAVACL\\": "lib/DAVACL/", - "Sabre\\CalDAV\\": "lib/CalDAV/", - "Sabre\\CardDAV\\": "lib/CardDAV/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - } - ], - "description": "WebDAV Framework for PHP", - "homepage": "http://sabre.io/", - "keywords": [ - "CalDAV", - "CardDAV", - "WebDAV", - "framework", - "iCalendar" - ] - }, - { "name": "league/html-to-markdown", - "version": "4.4.1", - "version_normalized": "4.4.1.0", + "version": "4.6.0", + "version_normalized": "4.6.0.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "82ea375b5b2b1da1da222644c0565c695bf88186" + "reference": "9022e648bc40e44cb3b18438d97ed8715ecbc49b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/82ea375b5b2b1da1da222644c0565c695bf88186", - "reference": "82ea375b5b2b1da1da222644c0565c695bf88186", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/9022e648bc40e44cb3b18438d97ed8715ecbc49b", + "reference": "9022e648bc40e44cb3b18438d97ed8715ecbc49b", "shasum": "" }, "require": { @@ -458,14 +749,14 @@ "phpunit/phpunit": "4.*", "scrutinizer/ocular": "~1.1" }, - "time": "2017-03-16T00:45:59+00:00", + "time": "2017-10-24T02:45:05+00:00", "bin": [ "bin/html-to-markdown" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.5-dev" + "dev-master": "4.7-dev" } }, "installation-source": "dist", @@ -500,71 +791,18 @@ ] }, { - "name": "sabre/uri", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/sabre-io/uri.git", - "reference": "ada354d83579565949d80b2e15593c2371225e61" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/ada354d83579565949d80b2e15593c2371225e61", - "reference": "ada354d83579565949d80b2e15593c2371225e61", - "shasum": "" - }, - "require": { - "php": ">=5.4.7" - }, - "require-dev": { - "phpunit/phpunit": ">=4.0,<6.0", - "sabre/cs": "~1.0.0" - }, - "time": "2017-02-20T19:59:28+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Sabre\\Uri\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - } - ], - "description": "Functions for making sense out of URIs.", - "homepage": "http://sabre.io/uri/", - "keywords": [ - "rfc3986", - "uri", - "url" - ] - }, - { "name": "sabre/vobject", - "version": "4.1.2", - "version_normalized": "4.1.2.0", + "version": "4.1.3", + "version_normalized": "4.1.3.0", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "d0fde2fafa2a3dad1f559c2d1c2591d4fd75ae3c" + "reference": "df9916813d1d83e4f761c4cba13361ee74196fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d0fde2fafa2a3dad1f559c2d1c2591d4fd75ae3c", - "reference": "d0fde2fafa2a3dad1f559c2d1c2591d4fd75ae3c", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/df9916813d1d83e4f761c4cba13361ee74196fac", + "reference": "df9916813d1d83e4f761c4cba13361ee74196fac", "shasum": "" }, "require": { @@ -573,13 +811,13 @@ "sabre/xml": ">=1.5 <3.0" }, "require-dev": { - "phpunit/phpunit": "*", + "phpunit/phpunit": "> 4.8, <6.0.0", "sabre/cs": "^1.0.0" }, "suggest": { "hoa/bench": "If you would like to run the benchmark scripts" }, - "time": "2016-12-06T04:14:09+00:00", + "time": "2017-10-18T08:29:40+00:00", "bin": [ "bin/vobject", "bin/generate_vcards" @@ -652,239 +890,58 @@ ] }, { - "name": "ezyang/htmlpurifier", - "version": "v4.9.3", - "version_normalized": "4.9.3.0", + "name": "smarty/smarty", + "version": "v3.1.31", + "version_normalized": "3.1.31.0", "source": { "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "95e1bae3182efc0f3422896a3236e991049dac69" + "url": "https://github.com/smarty-php/smarty.git", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/95e1bae3182efc0f3422896a3236e991049dac69", - "reference": "95e1bae3182efc0f3422896a3236e991049dac69", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9", "shasum": "" }, "require": { "php": ">=5.2" }, - "require-dev": { - "simpletest/simpletest": "^1.1" - }, - "time": "2017-06-03T02:28:16+00:00", + "time": "2016-12-14T21:57:25+00:00", "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "HTMLPurifier": "library/" - }, - "files": [ - "library/HTMLPurifier.composer.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Edward Z. Yang", - "email": "admin@htmlpurifier.org", - "homepage": "http://ezyang.com" + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" } - ], - "description": "Standards compliant HTML filter written in PHP", - "homepage": "http://htmlpurifier.org/", - "keywords": [ - "html" - ] - }, - { - "name": "sabre/http", - "version": "4.2.3", - "version_normalized": "4.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/sabre-io/http.git", - "reference": "0295f9a3ee39be97e0898592fc19e42421e0cd93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabre-io/http/zipball/0295f9a3ee39be97e0898592fc19e42421e0cd93", - "reference": "0295f9a3ee39be97e0898592fc19e42421e0cd93", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-mbstring": "*", - "php": ">=5.4", - "sabre/event": ">=1.0.0,<4.0.0", - "sabre/uri": "~1.0" }, - "require-dev": { - "phpunit/phpunit": "~4.3", - "sabre/cs": "~0.0.1" - }, - "suggest": { - "ext-curl": " to make http requests with the Client class" - }, - "time": "2017-06-12T07:53:04+00:00", - "type": "library", "installation-source": "dist", "autoload": { "files": [ - "lib/functions.php" - ], - "psr-4": { - "Sabre\\HTTP\\": "lib/" - } + "libs/bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "LGPL-3.0" ], "authors": [ { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - } - ], - "description": "The sabre/http library provides utilities for dealing with http requests and responses. ", - "homepage": "https://github.com/fruux/sabre-http", - "keywords": [ - "http" - ] - }, - { - "name": "pear/text_languagedetect", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Text_LanguageDetect.git", - "reference": "bb9ff6f4970f686fac59081e916b456021fe7ba6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Text_LanguageDetect/zipball/bb9ff6f4970f686fac59081e916b456021fe7ba6", - "reference": "bb9ff6f4970f686fac59081e916b456021fe7ba6", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-mbstring": "May require the mbstring PHP extension" - }, - "time": "2017-03-02T16:14:08+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Text": "./" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "./" - ], - "license": [ - "BSD-2-Clause" - ], - "authors": [ + "name": "Monte Ohrt", + "email": "monte@ohrt.com" + }, { - "name": "Nicholas Pisarro", - "email": "taak@php.net", - "role": "Lead" - } - ], - "description": "Identify human languages from text samples", - "homepage": "http://pear.php.net/package/Text_LanguageDetect" - }, - { - "name": "commerceguys/intl", - "version": "v0.7.4", - "version_normalized": "0.7.4.0", - "source": { - "type": "git", - "url": "https://github.com/commerceguys/intl.git", - "reference": "edfcfc26ed8505c4f6fcf862eb36dfda1af74b00" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/commerceguys/intl/zipball/edfcfc26ed8505c4f6fcf862eb36dfda1af74b00", - "reference": "edfcfc26ed8505c4f6fcf862eb36dfda1af74b00", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "mikey179/vfsstream": "1.*", - "phpunit/phpunit": "~4.0" - }, - "time": "2016-12-13T12:33:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "CommerceGuys\\Intl\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "name": "Uwe Tews", + "email": "uwe.tews@googlemail.com" + }, { - "name": "Bojan Zivanovic" + "name": "Rodney Rehm", + "email": "rodney.rehm@medialize.de" } ], - "description": "Internationalization library powered by CLDR data." - }, - { - "name": "lukasreschke/id3parser", - "version": "v0.0.1", - "version_normalized": "0.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/LukasReschke/ID3Parser.git", - "reference": "cd3ba6e8918cc30883f01a3c24281cfe23b8877a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/LukasReschke/ID3Parser/zipball/cd3ba6e8918cc30883f01a3c24281cfe23b8877a", - "reference": "cd3ba6e8918cc30883f01a3c24281cfe23b8877a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "time": "2016-04-04T09:34:50+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "ID3Parser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL" - ], - "homepage": "https://github.com/LukasReschke/ID3Parser/", + "description": "Smarty - the compiling PHP template engine", + "homepage": "http://www.smarty.net", "keywords": [ - "codecs", - "php", - "tags" + "templating" ] } ] diff --git a/vendor/league/html-to-markdown/CHANGELOG.md b/vendor/league/html-to-markdown/CHANGELOG.md index 067864412..7a24130df 100644 --- a/vendor/league/html-to-markdown/CHANGELOG.md +++ b/vendor/league/html-to-markdown/CHANGELOG.md @@ -4,6 +4,17 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip ## [Unreleased][unreleased] +## [4.6.0] +### Added + - Added support for ordered lists starting at numbers other than 1 + +### Fixed + - Fixed overly-eager escaping of list-like text (#141) + +## [4.5.0] +### Added + - Added configuration option for list item style (#135, #136) + ## [4.4.1] ### Fixed @@ -188,7 +199,9 @@ not ideally set, so this releases fixes that. Moving forwards this should reduce ### Added - Initial release -[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/4.4.1...master +[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/4.6.0...master +[4.6.0]: https://github.com/thephpleague/html-to-markdown/compare/4.5.0...4.6.0 +[4.5.0]: https://github.com/thephpleague/html-to-markdown/compare/4.4.1...4.5.0 [4.4.1]: https://github.com/thephpleague/html-to-markdown/compare/4.4.0...4.4.1 [4.4.0]: https://github.com/thephpleague/html-to-markdown/compare/4.3.1...4.4.0 [4.3.1]: https://github.com/thephpleague/html-to-markdown/compare/4.3.0...4.3.1 diff --git a/vendor/league/html-to-markdown/README.md b/vendor/league/html-to-markdown/README.md index 8d75649d6..ab80541e6 100644 --- a/vendor/league/html-to-markdown/README.md +++ b/vendor/league/html-to-markdown/README.md @@ -13,7 +13,7 @@ HTML To Markdown for PHP Library which converts HTML to [Markdown](http://daringfireball.net/projects/markdown/) for your sanity and convenience. -**Requires**: PHP 5.3+ +**Requires**: PHP 5.3+ or PHP 7.0+ **Lead Developer**: [@colinodell](http://twitter.com/colinodell) @@ -97,15 +97,15 @@ $markdown = $converter->convert($html); // $markdown now contains "" ### Style options -Bold and italic tags are converted using the asterisk syntax by default. Change this to the underlined syntax using the `bold_style` and `italic_style` options. +By default bold tags are converted using the asterisk syntax, and italic tags are converted using the underlined syntax. Change these by using the `bold_style` and `italic_style` options. ```php $converter = new HtmlConverter(); -$converter->getConfig()->setOption('italic_style', '_'); +$converter->getConfig()->setOption('italic_style', '*'); $converter->getConfig()->setOption('bold_style', '__'); $html = '<em>Italic</em> and a <strong>bold</strong>'; -$markdown = $converter->convert($html); // $markdown now contains "_Italic_ and a __bold__" +$markdown = $converter->convert($html); // $markdown now contains "*Italic* and a __bold__" ``` ### Line break options diff --git a/vendor/league/html-to-markdown/composer.json b/vendor/league/html-to-markdown/composer.json index 58764bcb5..8482b767c 100644 --- a/vendor/league/html-to-markdown/composer.json +++ b/vendor/league/html-to-markdown/composer.json @@ -42,7 +42,7 @@ "bin": ["bin/html-to-markdown"], "extra": { "branch-alias": { - "dev-master": "4.5-dev" + "dev-master": "4.7-dev" } } } diff --git a/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php b/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php index dafec077c..f737b4e19 100644 --- a/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php @@ -2,11 +2,26 @@ namespace League\HTMLToMarkdown\Converter; +use League\HTMLToMarkdown\Configuration; +use League\HTMLToMarkdown\ConfigurationAwareInterface; use League\HTMLToMarkdown\ElementInterface; -class ListItemConverter implements ConverterInterface +class ListItemConverter implements ConverterInterface, ConfigurationAwareInterface { /** + * @var Configuration + */ + protected $config; + + /** + * @param Configuration $config + */ + public function setConfig(Configuration $config) + { + $this->config = $config; + } + + /** * @param ElementInterface $element * * @return string @@ -29,10 +44,15 @@ class ListItemConverter implements ConverterInterface } if ($list_type === 'ul') { - return $prefix . '- ' . $value . "\n"; + $list_item_style = $this->config->getOption('list_item_style', '-'); + return $prefix . $list_item_style . ' ' . $value . "\n"; } - $number = $element->getSiblingPosition(); + if ($list_type === 'ol' && $start = $element->getParent()->getAttribute('start')) { + $number = $start + $element->getSiblingPosition() - 1; + } else { + $number = $element->getSiblingPosition(); + } return $prefix . $number . '. ' . $value . "\n"; } diff --git a/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php b/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php index cf852bfcf..7207b81a6 100644 --- a/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php @@ -109,7 +109,8 @@ class ParagraphConverter implements ConverterInterface { $regExs = array( // Match numbers ending on ')' or '.' that are at the beginning of the line. - '/^[0-9]+(?=\)|\.)/' + // They will be escaped if immediately followed by a space or newline. + '/^[0-9]+(?=(\)|\.)( |$))/' ); foreach ($regExs as $i) { diff --git a/vendor/league/html-to-markdown/src/HtmlConverter.php b/vendor/league/html-to-markdown/src/HtmlConverter.php index db3c29e1c..8d8936ec5 100644 --- a/vendor/league/html-to-markdown/src/HtmlConverter.php +++ b/vendor/league/html-to-markdown/src/HtmlConverter.php @@ -38,7 +38,8 @@ class HtmlConverter 'bold_style' => '**', // Set to '__' if you prefer the underlined style 'italic_style' => '_', // Set to '*' if you prefer the asterisk style 'remove_nodes' => '', // space-separated list of dom nodes that should be removed. example: 'meta style script' - 'hard_break' => false,// Set to true to turn <br> into `\n` instead of ` \n` + 'hard_break' => false, // Set to true to turn <br> into `\n` instead of ` \n` + 'list_item_style' => '-', // Set the default character for each <li> in a <ul>. Can be '-', '*', or '+' ); $this->environment = Environment::createDefaultEnvironment($defaults); diff --git a/vendor/sabre/vobject/.travis.yml b/vendor/sabre/vobject/.travis.yml index 3c5b32157..531ad5be4 100644 --- a/vendor/sabre/vobject/.travis.yml +++ b/vendor/sabre/vobject/.travis.yml @@ -4,15 +4,15 @@ php: - 5.6 - 7.0 - 7.1 + - 7.2 sudo: false script: - - phpunit --configuration tests/phpunit.xml + - ./bin/phpunit --configuration tests/phpunit.xml - ./bin/sabre-cs-fixer fix . --dry-run --diff before_script: - - phpenv config-rm xdebug.ini; true - composer install cache: diff --git a/vendor/sabre/vobject/CHANGELOG.md b/vendor/sabre/vobject/CHANGELOG.md index c8f4cb4be..56a36f99c 100644 --- a/vendor/sabre/vobject/CHANGELOG.md +++ b/vendor/sabre/vobject/CHANGELOG.md @@ -1,6 +1,15 @@ ChangeLog ========= +4.1.3 (2017-10-18) +------------------ + +* #363: Repair script and de-duplicate properties that are only allowed once, + but appear more than once. (@ddolcimascolo). +* #377: Addes Pacific Time (US & Canada) as exchange timezone +* #384: Added fallback for VCards without `FN` + + 4.1.2 (2016-12-15) ------------------ diff --git a/vendor/sabre/vobject/README.md b/vendor/sabre/vobject/README.md index 0e37f1388..5030cf276 100644 --- a/vendor/sabre/vobject/README.md +++ b/vendor/sabre/vobject/README.md @@ -33,12 +33,12 @@ Build status | branch | status | | ------ | ------ | -| master | [![Build Status](https://travis-ci.org/fruux/sabre-vobject.svg?branch=master)](https://travis-ci.org/fruux/sabre-vobject) | -| 3.5 | [![Build Status](https://travis-ci.org/fruux/sabre-vobject.svg?branch=3.5)](https://travis-ci.org/fruux/sabre-vobject) | -| 3.4 | [![Build Status](https://travis-ci.org/fruux/sabre-vobject.svg?branch=3.4)](https://travis-ci.org/fruux/sabre-vobject) | -| 3.1 | [![Build Status](https://travis-ci.org/fruux/sabre-vobject.svg?branch=3.1)](https://travis-ci.org/fruux/sabre-vobject) | -| 2.1 | [![Build Status](https://travis-ci.org/fruux/sabre-vobject.svg?branch=2.1)](https://travis-ci.org/fruux/sabre-vobject) | -| 2.0 | [![Build Status](https://travis-ci.org/fruux/sabre-vobject.svg?branch=2.0)](https://travis-ci.org/fruux/sabre-vobject) | +| master | [![Build Status](https://travis-ci.org/sabre-io/vobject.svg?branch=master)](https://travis-ci.org/sabre-io/vobject) | +| 3.5 | [![Build Status](https://travis-ci.org/sabre-io/vobject.svg?branch=3.5)](https://travis-ci.org/sabre-io/vobject) | +| 3.4 | [![Build Status](https://travis-ci.org/sabre-io/vobject.svg?branch=3.4)](https://travis-ci.org/sabre-io/vobject) | +| 3.1 | [![Build Status](https://travis-ci.org/sabre-io/vobject.svg?branch=3.1)](https://travis-ci.org/sabre-io/vobject) | +| 2.1 | [![Build Status](https://travis-ci.org/sabre-io/vobject.svg?branch=2.1)](https://travis-ci.org/sabre-io/vobject) | +| 2.0 | [![Build Status](https://travis-ci.org/sabre-io/vobject.svg?branch=2.0)](https://travis-ci.org/sabre-io/vobject) | diff --git a/vendor/sabre/vobject/bin/bench.php b/vendor/sabre/vobject/bin/bench.php index 807b40777..807b40777 100755..100644 --- a/vendor/sabre/vobject/bin/bench.php +++ b/vendor/sabre/vobject/bin/bench.php diff --git a/vendor/sabre/vobject/bin/fetch_windows_zones.php b/vendor/sabre/vobject/bin/fetch_windows_zones.php index 3f2a00f7a..3f2a00f7a 100755..100644 --- a/vendor/sabre/vobject/bin/fetch_windows_zones.php +++ b/vendor/sabre/vobject/bin/fetch_windows_zones.php diff --git a/vendor/sabre/vobject/bin/generateicalendardata.php b/vendor/sabre/vobject/bin/generateicalendardata.php index a2df3c63a..a2df3c63a 100755..100644 --- a/vendor/sabre/vobject/bin/generateicalendardata.php +++ b/vendor/sabre/vobject/bin/generateicalendardata.php diff --git a/vendor/sabre/vobject/bin/mergeduplicates.php b/vendor/sabre/vobject/bin/mergeduplicates.php index 076524d36..076524d36 100755..100644 --- a/vendor/sabre/vobject/bin/mergeduplicates.php +++ b/vendor/sabre/vobject/bin/mergeduplicates.php diff --git a/vendor/sabre/vobject/composer.json b/vendor/sabre/vobject/composer.json index cfa4a712d..1f22f6de1 100644 --- a/vendor/sabre/vobject/composer.json +++ b/vendor/sabre/vobject/composer.json @@ -37,7 +37,7 @@ "sabre/xml" : ">=1.5 <3.0" }, "require-dev" : { - "phpunit/phpunit" : "*", + "phpunit/phpunit" : "> 4.8, <6.0.0", "sabre/cs" : "^1.0.0" }, diff --git a/vendor/sabre/vobject/lib/Component.php b/vendor/sabre/vobject/lib/Component.php index 9a10ed3f8..ac87a10ec 100644 --- a/vendor/sabre/vobject/lib/Component.php +++ b/vendor/sabre/vobject/lib/Component.php @@ -662,8 +662,23 @@ class Component extends Node { break; case '?' : if (isset($propertyCounters[$propName]) && $propertyCounters[$propName] > 1) { + $level = 3; + + // We try to repair the same property appearing multiple times with the exact same value + // by removing the duplicates and keeping only one property + if ($options & self::REPAIR) { + $properties = array_unique($this->select($propName), SORT_REGULAR); + + if (count($properties) === 1) { + $this->remove($propName); + $this->add($properties[0]); + + $level = 1; + } + } + $messages[] = [ - 'level' => 3, + 'level' => $level, 'message' => $propName . ' MUST NOT appear more than once in a ' . $this->name . ' component', 'node' => $this, ]; diff --git a/vendor/sabre/vobject/lib/Component/VCard.php b/vendor/sabre/vobject/lib/Component/VCard.php index 4f620de10..bca623d5e 100644 --- a/vendor/sabre/vobject/lib/Component/VCard.php +++ b/vendor/sabre/vobject/lib/Component/VCard.php @@ -295,6 +295,11 @@ class VCard extends VObject\Document { } elseif (isset($this->ORG)) { $this->FN = (string)$this->ORG; $repaired = true; + + // Otherwise, the EMAIL property may work + } elseif (isset($this->EMAIL)) { + $this->FN = (string)$this->EMAIL; + $repaired = true; } } diff --git a/vendor/sabre/vobject/lib/Version.php b/vendor/sabre/vobject/lib/Version.php index 346e2044d..24c51a604 100644 --- a/vendor/sabre/vobject/lib/Version.php +++ b/vendor/sabre/vobject/lib/Version.php @@ -14,6 +14,6 @@ class Version { /** * Full version number. */ - const VERSION = '4.1.2'; + const VERSION = '4.1.3'; } diff --git a/vendor/sabre/vobject/lib/timezonedata/exchangezones.php b/vendor/sabre/vobject/lib/timezonedata/exchangezones.php index 38138354a..edba5b473 100644 --- a/vendor/sabre/vobject/lib/timezonedata/exchangezones.php +++ b/vendor/sabre/vobject/lib/timezonedata/exchangezones.php @@ -85,6 +85,7 @@ return [ 'Saskatchewan' => 'America/Edmonton', 'Arizona' => 'America/Phoenix', 'Mountain Time (US & Canada)' => 'America/Denver', // Best guess + 'Pacific Time (US & Canada)' => 'America/Los_Angeles', // Best guess 'Pacific Time (US & Canada); Tijuana' => 'America/Los_Angeles', // Best guess 'Alaska' => 'America/Anchorage', 'Hawaii' => 'Pacific/Honolulu', diff --git a/vendor/simplepie/simplepie/.travis.yml b/vendor/simplepie/simplepie/.travis.yml new file mode 100644 index 000000000..83d90ad19 --- /dev/null +++ b/vendor/simplepie/simplepie/.travis.yml @@ -0,0 +1,21 @@ +sudo: false +language: php +matrix: + fast_finish: true + include: + - php: 5.4 + - php: 5.5 + - php: 5.6 + - php: 7.0 + - php: 7.1 + - php: hhvm + sudo: true + dist: trusty + group: edge # until the next Travis CI update + allow_failures: + - php: hhvm + - php: 7.0 + - php: 7.1 +branches: + except: + - one-dot-two diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php index 428bfc068..34b6ca0c9 100755..100644 --- a/vendor/simplepie/simplepie/library/SimplePie.php +++ b/vendor/simplepie/simplepie/library/SimplePie.php @@ -33,7 +33,7 @@ * POSSIBILITY OF SUCH DAMAGE. * * @package SimplePie - * @version 1.5 + * @version 1.5.1 * @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue * @author Ryan Parman * @author Geoffrey Sneddon @@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie'); /** * SimplePie Version */ -define('SIMPLEPIE_VERSION', '1.5'); +define('SIMPLEPIE_VERSION', '1.5.1'); /** * SimplePie Build @@ -810,7 +810,7 @@ class SimplePie } /** - * Set the the default timeout for fetching remote feeds + * Set the default timeout for fetching remote feeds * * This allows you to change the maximum time the feed's server to respond * and send the feed back. @@ -1320,6 +1320,11 @@ class SimplePie } } + // The default sanitize class gets set in the constructor, check if it has + // changed. + if ($this->registry->get_class('Sanitize') !== 'SimplePie_Sanitize') { + $this->sanitize = $this->registry->create('Sanitize'); + } if (method_exists($this->sanitize, 'set_registry')) { $this->sanitize->set_registry($this->registry); @@ -1644,33 +1649,18 @@ class SimplePie try { $microformats = false; - if (function_exists('Mf2\parse')) { + if (class_exists('DOMXpath') && function_exists('Mf2\parse')) { + $doc = new DOMDocument(); + @$doc->loadHTML($file->body); + $xpath = new DOMXpath($doc); // Check for both h-feed and h-entry, as both a feed with no entries // and a list of entries without an h-feed wrapper are both valid. - $position = 0; - while ($position = strpos($file->body, 'h-feed', $position)) - { - $start = $position < 200 ? 0 : $position - 200; - $check = substr($file->body, $start, 400); - if ($microformats = preg_match('/class="[^"]*h-feed/', $check)) - { - break; - } - $position += 7; - } - $position = 0; - while ($position = strpos($file->body, 'h-entry', $position)) - { - $start = $position < 200 ? 0 : $position - 200; - $check = substr($file->body, $start, 400); - if ($microformats = preg_match('/class="[^"]*h-entry/', $check)) - { - break; - } - $position += 7; - } + $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '. + 'contains(concat(" ", @class, " "), " h-entry ")]'; + $result = $xpath->query($query); + $microformats = $result->length !== 0; } - // Now also do feed discovery, but if an h-entry was found don't + // Now also do feed discovery, but if microformats were found don't // overwrite the current value of file. $discovered = $locate->find($this->autodiscovery, $this->all_discovered_feeds); @@ -2606,15 +2596,15 @@ class SimplePie } } - if (isset($this->data['links'][$rel])) + if (isset($this->data['headers']['link']) && + preg_match('/<([^>]+)>; rel='.preg_quote($rel).'/', + $this->data['headers']['link'], $match)) { - return $this->data['links'][$rel]; + return array($match[1]); } - else if (isset($this->data['headers']['link']) && - preg_match('/<([^>]+)>; rel='.preg_quote($rel).'/', - $this->data['headers']['link'], $match)) + else if (isset($this->data['links'][$rel])) { - return array($match[1]); + return $this->data['links'][$rel]; } else { @@ -3155,7 +3145,7 @@ class SimplePie if (($url = $this->get_link()) !== null) { - return 'http://g.etfv.co/' . urlencode($url); + return 'https://www.google.com/s2/favicons?domain=' . urlencode($url); } return false; diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php index 1f73b3890..1f73b3890 100755..100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php diff --git a/vendor/simplepie/simplepie/library/SimplePie/File.php b/vendor/simplepie/simplepie/library/SimplePie/File.php index e670e05a0..2bb0a3b44 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/File.php +++ b/vendor/simplepie/simplepie/library/SimplePie/File.php @@ -136,8 +136,7 @@ class SimplePie_File $this->url = $info['url']; } curl_close($fp); - $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); - $this->headers = array_pop($this->headers); + $this->headers = SimplePie_HTTP_Parser::prepareHeaders($this->headers, $info['redirect_count'] + 1); $parser = new SimplePie_HTTP_Parser($this->headers); if ($parser->parse()) { diff --git a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php index 63ae1e03d..e982c206f 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php @@ -496,4 +496,25 @@ class SimplePie_HTTP_Parser } } } + + /** + * Prepare headers (take care of proxies headers) + * + * @param string $headers Raw headers + * @param integer $count Redirection count. Default to 1. + * + * @return string + */ + static public function prepareHeaders($headers, $count = 1) + { + $data = explode("\r\n\r\n", $headers, $count); + $data = array_pop($data); + if (false !== stripos($data, "HTTP/1.0 200 Connection established\r\n\r\n")) { + $data = str_ireplace("HTTP/1.0 200 Connection established\r\n\r\n", '', $data); + } + if (false !== stripos($data, "HTTP/1.1 200 Connection established\r\n\r\n")) { + $data = str_ireplace("HTTP/1.1 200 Connection established\r\n\r\n", '', $data); + } + return $data; + } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php index 00f4179bf..2083e7a92 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Item.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php @@ -477,15 +477,15 @@ class SimplePie_Item $label = null; if (isset($category['attribs']['']['term'])) { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_HTML); + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); } if (isset($category['attribs']['']['scheme'])) { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_HTML); + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); } if (isset($category['attribs']['']['label'])) { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_HTML); + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); } $categories[] = $this->registry->create('Category', array($term, $scheme, $label, $type)); } @@ -493,10 +493,10 @@ class SimplePie_Item { // This is really the label, but keep this as the term also for BC. // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML); + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); if (isset($category['attribs']['']['domain'])) { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_HTML); + $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); } else { @@ -508,11 +508,11 @@ class SimplePie_Item $type = 'subject'; foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, $type) as $category) { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type)); + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null, $type)); } foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, $type) as $category) { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type)); + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null, $type)); } if (!empty($categories)) @@ -649,7 +649,7 @@ class SimplePie_Item $email = null; if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_HTML); + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) { @@ -657,7 +657,7 @@ class SimplePie_Item } if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_HTML); + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } if ($name !== null || $email !== null || $uri !== null) { @@ -671,7 +671,7 @@ class SimplePie_Item $email = null; if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_HTML); + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) { @@ -679,7 +679,7 @@ class SimplePie_Item } if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_HTML); + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } if ($name !== null || $email !== null || $url !== null) { @@ -688,19 +688,19 @@ class SimplePie_Item } if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author')) { - $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_HTML))); + $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT))); } foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null)); + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); } foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null)); + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); } foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null)); + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); } if (!empty($authors)) diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/Parser.php index 17139abe9..df1234023 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Parser.php @@ -76,26 +76,17 @@ class SimplePie_Parser public function parse(&$data, $encoding, $url = '') { - if (function_exists('Mf2\parse')) { + if (class_exists('DOMXpath') && function_exists('Mf2\parse')) { + $doc = new DOMDocument(); + @$doc->loadHTML($data); + $xpath = new DOMXpath($doc); // Check for both h-feed and h-entry, as both a feed with no entries // and a list of entries without an h-feed wrapper are both valid. - $position = 0; - while ($position = strpos($data, 'h-feed', $position)) { - $start = $position < 200 ? 0 : $position - 200; - $check = substr($data, $start, 400); - if (preg_match('/class="[^"]*h-feed/', $check)) { - return $this->parse_microformats($data, $url); - } - $position += 7; - } - $position = 0; - while ($position = strpos($data, 'h-entry', $position)) { - $start = $position < 200 ? 0 : $position - 200; - $check = substr($data, $start, 400); - if (preg_match('/class="[^"]*h-entry/', $check)) { - return $this->parse_microformats($data, $url); - } - $position += 7; + $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '. + 'contains(concat(" ", @class, " "), " h-entry ")]'; + $result = $xpath->query($query); + if ($result->length !== 0) { + return $this->parse_microformats($data, $url); } } @@ -465,7 +456,7 @@ class SimplePie_Parser $h_feed = $mf_item; break; } - // Also look for an h-feed in the children of each top level item. + // Also look for h-feed or h-entry in the children of each top level item. if (!isset($mf_item['children'][0]['type'])) continue; if (in_array('h-feed', $mf_item['children'][0]['type'])) { $h_feed = $mf_item['children'][0]; @@ -474,6 +465,13 @@ class SimplePie_Parser if (in_array('h-card', $mf_item['type'])) $feed_author = $mf_item; break; } + else if (in_array('h-entry', $mf_item['children'][0]['type'])) { + $entries = $mf_item['children']; + // In this case the parent of the h-entry list may be an h-card, so use + // it as the feed_author. + if (in_array('h-card', $mf_item['type'])) $feed_author = $mf_item; + break; + } } if (isset($h_feed['children'])) { $entries = $h_feed['children']; @@ -485,7 +483,7 @@ class SimplePie_Parser $feed_author = $mf['items'][0]['properties']['author'][0]; } } - else { + else if (count($entries) === 0) { $entries = $mf['items']; } for ($i = 0; $i < count($entries); $i++) { @@ -554,18 +552,21 @@ class SimplePie_Parser $photo_list = array(); for ($j = 0; $j < count($entry['properties']['photo']); $j++) { $photo = $entry['properties']['photo'][$j]; - if (strpos($content, $photo) === false) { + if (!empty($photo) && strpos($content, $photo) === false) { $photo_list[] = $photo; } } // When there's more than one photo show the first and use a lightbox. + // Need a permanent, unique name for the image set, but don't have + // anything unique except for the content itself, so use that. $count = count($photo_list); if ($count > 1) { + $image_set_id = preg_replace('/[[:^alnum:]]/', '', $photo_list[0]); $description = '<p>'; for ($j = 0; $j < $count; $j++) { $hidden = $j === 0 ? '' : 'class="hidden" '; $description .= '<a href="'.$photo_list[$j].'" '.$hidden. - 'data-lightbox="image-set-'.$i.'">'. + 'data-lightbox="image-set-'.$image_set_id.'">'. '<img src="'.$photo_list[$j].'"></a>'; } $description .= '<br><b>'.$count.' photos</b></p>'; @@ -583,10 +584,18 @@ class SimplePie_Parser $item['title'] = array(array('data' => $title)); } $description .= $entry['properties']['content'][0]['html']; - if (isset($entry['properties']['in-reply-to'][0]['value'])) { - $in_reply_to = $entry['properties']['in-reply-to'][0]['value']; - $description .= '<p><span class="in-reply-to"></span> '. - '<a href="'.$in_reply_to.'">'.$in_reply_to.'</a><p>'; + if (isset($entry['properties']['in-reply-to'][0])) { + $in_reply_to = ''; + if (is_string($entry['properties']['in-reply-to'][0])) { + $in_reply_to = $entry['properties']['in-reply-to'][0]; + } + else if (isset($entry['properties']['in-reply-to'][0]['value'])) { + $in_reply_to = $entry['properties']['in-reply-to'][0]['value']; + } + if ($in_reply_to !== '') { + $description .= '<p><span class="in-reply-to"></span> '. + '<a href="'.$in_reply_to.'">'.$in_reply_to.'</a><p>'; + } } $item['description'] = array(array('data' => $description)); } @@ -627,7 +636,7 @@ class SimplePie_Parser $image = array(array('child' => array('' => array('url' => array(array('data' => $feed_author['properties']['photo'][0])))))); } - // Use the a name given for the h-feed, or get the title from the html. + // Use the name given for the h-feed, or get the title from the html. if ($feed_title !== '') { $feed_title = array(array('data' => htmlspecialchars($feed_title))); } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Registry.php b/vendor/simplepie/simplepie/library/SimplePie/Registry.php index e0909bb74..e0909bb74 100755..100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Registry.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Registry.php diff --git a/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt b/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt new file mode 100644 index 000000000..c943d9f2e --- /dev/null +++ b/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt @@ -0,0 +1,29 @@ + + +Starting with Smarty 3.1.21 Composer has been configured to load the packages from github. + +******************************************************************************* +* * +* NOTE: Because of this change you must clear your local composer cache with * +* the "composer clearcache" command * +* * +******************************************************************************* + +To get the latest stable version use + "require": { + "smarty/smarty": "~3.1" + } +in your composer.json file. + +To get the trunk version use + "require": { + "smarty/smarty": "~3.1@dev" + } + +The "smarty/smarty" package will start at libs/.... subfolder. + +To retrieve the development and documentation folders add + "require-dev": { + "smarty/smarty-dev": "~3.1@dev" + } + diff --git a/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt b/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt new file mode 100644 index 000000000..c415c4ccd --- /dev/null +++ b/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt @@ -0,0 +1,87 @@ +3.1.31-dev +New tags for inheritance parent and child +{block_parent} == {$smarty.block.parent} +{block_child} == {$smarty.block.child} + +Since 3.1.28 you can mix inheritance by extends resource with the {extends} tag. +A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. +Since 3.1.31 this feature can be turned off by setting the new Smarty property Smarty::$extends_recursion to false. + + +3.1.28 +Starting with version 3.1.28 template inheritance is no longer a compile time process. +All {block} tag parent/child relations are resolved at run time. +This does resolve all known existing restrictions (see below). + +The $smarty::$inheritance_merge_compiled_includes property has been removed. +Any access to it is ignored. + +New features: + +Any code outside root {block} tags in child templates is now executed but any output will be ignored. + + {extends 'foo.tpl'} + {$bar = 'on'} // assigns variable $bar seen in parent templates + {block 'buh'}{/block} + + {extends 'foo.tpl'} + {$bar} // the output of variable bar is ignored + {block 'buh'}{/block} + +{block} tags can be dynamically en/disabled by conditions. + + {block 'root'} + {if $foo} + {block 'v1'} + .... + {/block} + {else} + {block 'v1'} + .... + {/block} + {/if} + {/block} + +{block} tags can have variable names. + + {block $foo} + .... + {/block} + +Starting with 3.1.28 you can mix inheritance by extends resource with the {extends} tag. +A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. + +NOTE There is a BC break. If you used the extends resource {extends} tags have been ignored. + +THE FOLLOWING RESTRICTIONS ARE NO LONGER EXISTING: +In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags +is done at compile time and the parent and child templates are compiled in a single compiled template. +{include} subtemplate could also {block} tags. Such subtemplate could not compiled by it's own because +it could be used in other context where the {block} extended with a different result. For that reasion +the compiled code of {include} subtemplates gets also merged in compiled inheritance template. + +Merging the code into a single compile template has some drawbacks. +1. You could not use variable file names in {include} Smarty would use the {include} of compilation time. +2. You could not use individual compile_id in {include} +3. Seperate caching of subtemplate was not possible +4. Any change of the template directory structure between calls was not necessarily seen. + +Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out +that a couple of users did use some of above and now got exceptions. + +To resolve this starting with 3.1.16 there is a new configuration parameter $inheritance_merge_compiled_includes. +For most backward compatibility its default setting is true. +With this setting all {include} subtemplate will be merge into the compiled inheritance template, but the above cases +could be rejected by exception. + + +If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged. +You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option. +{include file='foo.bar' inline} + +1. In case of a variable file name like {include file=$foo inline} you must use the variable in a compile_id $smarty->compile_id = $foo; +2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the + global compile_id as well $smarty->compile_id = $bar; +3. If call templates with different template_dir configurations and a parent could same named child template from different folders + you must make the folder name part of the compile_id. + diff --git a/library/Smarty/COPYING.lib b/vendor/smarty/smarty/LICENSE index 02bbb60bc..fb8ca6c6f 100644 --- a/library/Smarty/COPYING.lib +++ b/vendor/smarty/smarty/LICENSE @@ -1,3 +1,17 @@ +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 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU Lesser General Public License below for more details. + + GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 @@ -162,4 +176,4 @@ General Public License ever published by the Free Software Foundation. whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the -Library.
\ No newline at end of file +Library. diff --git a/library/Smarty/NEW_FEATURES.txt b/vendor/smarty/smarty/NEW_FEATURES.txt index 1a51c71d9..adbc1099b 100644 --- a/library/Smarty/NEW_FEATURES.txt +++ b/vendor/smarty/smarty/NEW_FEATURES.txt @@ -2,6 +2,114 @@ This file contains a brief description of new features which have been added to Smarty 3.1 +Smarty 3.1.31 + New tags for inheritance parent and child + ========================================= + {block_parent} == {$smarty.block.parent} + {block_child} == {$smarty.block.child} + +Smarty 3.1.30 + + Loop optimization {foreach} and {section} + ========================================= + Smarty does optimize the {foreach} and {section} loops by removing code for not needed loop + properties. + The compiler collects needed properties by scanning the current template for $item@property, + $smarty.foreach.name.property and $smarty.section.name.property. + The compiler does not know if additional properties will be needed outside the current template scope. + Additional properties can be generated by adding them with the property attribute. + + Example: + index.tpl + {foreach $from as $item properties=[iteration, index]} + {include 'sub.tpl'} + {$item.total} + {/foreach} + + sub.tpl + {$item.index} {$item.iteration} {$item.total} + + In above example code for the 'total' property is automatically generated as $item.total is used in + index.tpl. Code for 'iteration' and 'index' must be added with properties=[iteration, index]. + + New tag {make_nocache} + ====================== + Syntax: {make_nocache $foo} + + This tag makes a variable which does exists normally only while rendering the compiled template + available in the cached template for use in not cached expressions. + + Expample: + {foreach from=$list item=item} + <li>{$item.name} {make_nocache $item}{if $current==$item.id} ACTIVE{/if}</li> + {/foreach} + + The {foreach} loop is rendered while processing the compiled template, but $current is a nocache + variable. Normally the {if $current==$item.id} would fail as the $item variable is unkown in the + cached template. {make_nocache $item} does make the current $item value known in thee cached template. + + {make_nocache} is ignored when caching is disabled or the variable does exists as nocache variable. + + NOTE: if the variable value does contain objects these must have the __set_state method implemented. + + + Scope Attributes + ================ + The scope handling has been updated to cover all cases of variable assignments in templates. + + The tags {assign}, {append} direct assignments like {$foo = ...}, {$foo[...]= ...} support + the following optional scope attributes: + scope='parent' - the variable will be assigned in the current template and if the template + was included by {include} the calling template + scope='tpl_root' - the variable will be assigned in the outermost root template called by $smarty->display() + or $smarty->fetch() and is bubbled up all {include} sub-templates to the current template. + scope='smarty' - the variable will be assigned in the Smarty object and is bubbled up all {include} sub-templates + to the current template. + scope='global' - the variable will be assigned as Smarty object global variable and is bubbled up all {include} + sub-templates to the current template. + scope='root' - the variable will be assigned if a data object was used for variable definitions in the data + object or in the Smarty object otherwise and is bubbled up all {include} sub-templates to the + current template. + scope='local' - this scope has only a meaning if the tag is called within a template {function}. + The variable will be assigned in the local scope of the template function and the + template which did call the template function. + + + The {config_load} tag supports all of the above except the global scope. + + The scope attribute can be used also with the {include} tag. + Supported scope are parent, tpl_root, smarty, global and root. + A scope used together with the {include} tag will cause that with some exceptions any variable + assignment within that sub-template will update/assign the variable in other scopes according + to the above rules. It does include also variables assigned by plugins, tags supporting the assign=foo + attribute and direct assignments in {if} and {while} like {if $foo=$bar}. + Excluded are the key and value variables of {foreach}, {for} loop variables , variables passed by attributes + in {include} and direct increments/decrements like {$foo++}, {$foo--} + + Note: The scopes should be used only to the extend really need. If a variable value assigned in an included + sub-template should be returned to the calling sub-template just use {$foo='bar' scope='parent'}. + Use scopes only with variables for which it's realy needed. Avoid general scope settings with the + {include} tag as it can have a performance impact. + + The {assign}, {append}, {config_load} and {$foo...=...} tags have a new option flag 'noscope'.Thi + Example: {$foo='bar' noscope} This will assign $foo only in the current template and any scope settings + at {include} is ignored. + + + Caching + ======= + Caching does now observe the template_dir setting and will create separate cache files if required + + Compiled Templates + ================== + The template_dir setting is now encoded in the uid of the file name. + The content of the compiled template may depend on the template_dir search order + {include .... inline} is used or $smarty->merge_compiled_includes is enabled + + APC + === + If APC is enabled force an apc_compile_file() when compiled or cached template was updated + Smarty 3.1.28 OPCACHE @@ -32,7 +140,7 @@ Smarty 3.1.28 The template_dir array is searched in the order of the indices. (Could be used to change the default search order) Example: $smarty->display('[1],[0]foo.bar'); - + Filter support ============== Optional filter names @@ -47,7 +155,7 @@ Smarty 3.1.28 If you register multiple closures register each with a unique filter name. - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1'); - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2'); - + Smarty 3.1.22 @@ -120,7 +228,7 @@ Smarty 3.1.22 Debugging ========= The layout of the debug window has been changed for better readability - + New class constants Smarty::DEBUG_OFF Smarty::DEBUG_ON @@ -129,5 +237,3 @@ Smarty 3.1.22 Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window. - . - diff --git a/library/Smarty/README b/vendor/smarty/smarty/README index 08b397c3f..08b397c3f 100644 --- a/library/Smarty/README +++ b/vendor/smarty/smarty/README diff --git a/vendor/smarty/smarty/README.md b/vendor/smarty/smarty/README.md new file mode 100644 index 000000000..5783eb3e0 --- /dev/null +++ b/vendor/smarty/smarty/README.md @@ -0,0 +1,65 @@ +#Smarty 3 template engine +##Distribution repository + +> Smarty 3.1.28 introduces run time template inheritance + +> Read the NEW_FEATURES and INHERITANCE_RELEASE_NOTES file for recent extensions to Smarty 3.1 functionality + +Smarty versions 3.1.11 or later are now on github and can be installed with Composer. + + +The "smarty/smarty" package will start at libs/.... subfolder. + +To get the latest stable version of Smarty 3.1 use + +```json +"require": { + "smarty/smarty": "~3.1" +} +``` + +in your composer.json file. + +To get the trunk version use + +```json +"require": { + "smarty/smarty": "~3.1@dev" +} +``` + +For a specific version use something like + +```json +"require": { + "smarty/smarty": "3.1.19" +} +``` + +PHPUnit test can be installed by corresponding composer entries like + +```json +"require": { + "smarty/smarty-phpunit": "3.1.19" +} +``` + +Similar applies for the lexer/parser generator + +```json +"require": { + "smarty/smarty-lexer": "3.1.19" +} +``` + +Or you could use + +```json +"require": { + "smarty/smarty-dev": "3.1.19" +} +``` + +Which is a wrapper to install all 3 packages + +Composer can also be used for Smarty2 versions 2.6.24 to 2.6.28 diff --git a/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt b/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt new file mode 100644 index 000000000..79a2cb1b6 --- /dev/null +++ b/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt @@ -0,0 +1,109 @@ += Known incompatibilities with Smarty 2 = + +== Syntax == + +Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported +by a wrapper but deprecated. See the README that comes with Smarty 3 for more +information. + +The {$array|@mod} syntax has always been a bit confusing, where an "@" is required +to apply a modifier to an array instead of the individual elements. Normally you +always want the modifier to apply to the variable regardless of its type. In Smarty 3, +{$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the +modifier will still apply to the array. If you really want the modifier to apply to +each array element, you must loop the array in-template, or use a custom modifier that +supports array iteration. Most smarty functions already escape values where necessary +such as {html_options} + +== PHP Version == +Smarty 3 is PHP 5 only. It will not work with PHP 4. + +== {php} Tag == +The {php} tag is disabled by default. The use of {php} tags is +deprecated. It can be enabled with $smarty->allow_php_tag=true. + +But if you scatter PHP code which belongs together into several +{php} tags it may not work any longer. + +== Delimiters and whitespace == +Delimiters surrounded by whitespace are no longer treated as Smarty tags. +Therefore, { foo } will not compile as a tag, you must use {foo}. This change +Makes Javascript/CSS easier to work with, eliminating the need for {literal}. +This can be disabled by setting $smarty->auto_literal = false; + +== Unquoted Strings == +Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings +in parameters. Smarty3 is more restrictive. You can still pass strings without quotes +so long as they contain no special characters. (anything outside of A-Za-z0-9_) + +For example filename strings must be quoted +<source lang="smarty"> +{include file='path/foo.tpl'} +</source> + +== Extending the Smarty class == +Smarty 3 makes use of the __construct method for initialization. If you are extending +the Smarty class, its constructor is not called implicitly if the your child class defines +its own constructor. In order to run Smarty's constructor, a call to parent::__construct() +within your child constructor is required. + +<source lang="php"> +class MySmarty extends Smarty { + function __construct() { + parent::__construct(); + + // your initialization code goes here + + } +} +</source> + +== Autoloader == +Smarty 3 does register its own autoloader with spl_autoload_register. If your code has +an existing __autoload function then this function must be explicitly registered on +the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php +for further details. + +== Plugin Filenames == +Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames +to be lower case. Because of this, Smarty plugin file names must also be lowercase. +In Smarty 2, mixed case file names did work. + +== Scope of Special Smarty Variables == +In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach... +had global scope. If you had loops with the same name in subtemplates you could accidentally +overwrite values of parent template. + +In Smarty 3 these special Smarty variable have only local scope in the template which +is defining the loop. If you need their value in a subtemplate you have to pass them +as parameter. +<source lang="smarty"> +{include file='path/foo.tpl' index=$smarty.section.foo.index} +</source> + +== SMARTY_RESOURCE_CHAR_SET == +Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset. +This is now used also on modifiers like escape as default charset. If your templates use +other charsets make sure that you define the constant accordingly. Otherwise you may not +get any output. + +== newline at {if} tags == +A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source. +If one of the {if} tags is at the line end you will now get a newline in the HTML output. + +== trigger_error() == +The API function trigger_error() has been removed because it did just map to PHP trigger_error. +However it's still included in the Smarty2 API wrapper. + +== Smarty constants == +The constants +SMARTY_PHP_PASSTHRU +SMARTY_PHP_QUOTE +SMARTY_PHP_REMOVE +SMARTY_PHP_ALLOW +have been replaced with class constants +Smarty::PHP_PASSTHRU +Smarty::PHP_QUOTE +Smarty::PHP_REMOVE +Smarty::PHP_ALLOW + diff --git a/vendor/smarty/smarty/SMARTY_3.0_BC_NOTES.txt b/vendor/smarty/smarty/SMARTY_3.0_BC_NOTES.txt new file mode 100644 index 000000000..fd8b540c2 --- /dev/null +++ b/vendor/smarty/smarty/SMARTY_3.0_BC_NOTES.txt @@ -0,0 +1,24 @@ +== Smarty2 backward compatibility == +All Smarty2 specific API functions and deprecated functionallity has been moved +to the SmartyBC class. + +== {php} Tag == +The {php} tag is no longer available in the standard Smarty calls. +The use of {php} tags is deprecated and only available in the SmartyBC class. + +== {include_php} Tag == +The {include_php} tag is no longer available in the standard Smarty calls. +The use of {include_php} tags is deprecated and only available in the SmartyBC class. + +== php template resource == +The support of the php template resource is removed. + +== $cache_dir, $compile_dir, $config_dir, $template_dir access == +The mentioned properties can't be accessed directly any longer. You must use +corresponding getter/setters like addConfigDir(), setConfigDir(), getConfigDir() + +== obsolete Smarty class properties == +The following no longer used properties are removed: +$allow_php_tag +$allow_php_template +$deprecation_notices
\ No newline at end of file diff --git a/vendor/smarty/smarty/SMARTY_3.1_NOTES.txt b/vendor/smarty/smarty/SMARTY_3.1_NOTES.txt new file mode 100644 index 000000000..57709f0d7 --- /dev/null +++ b/vendor/smarty/smarty/SMARTY_3.1_NOTES.txt @@ -0,0 +1,306 @@ +Smarty 3.1 Notes +================ + +Smarty 3.1 is a departure from 2.0 compatibility. Most notably, all +backward compatibility has been moved to a separate class file named +SmartyBC.class.php. If you require compatibility with 2.0, you will +need to use this class. + +Some differences from 3.0 are also present. 3.1 begins the journey of +requiring setters/getters for property access. So far this is only +implemented on the five directory properties: template_dir, +plugins_dir, configs_dir, compile_dir and cache_dir. These properties +are now protected, it is required to use the setters/getters instead. +That said, direct property access will still work, however slightly +slower since they will now fall through __set() and __get() and in +turn passed through the setter/getter methods. 3.2 will exhibit a full +list of setter/getter methods for all (currently) public properties, +so code-completion in your IDE will work as expected. + +There is absolutely no PHP allowed in templates any more. All +deprecated features of Smarty 2.0 are gone. Again, use the SmartyBC +class if you need any backward compatibility. + +Internal Changes + + Full UTF-8 Compatibility + +The plugins shipped with Smarty 3.1 have been rewritten to fully +support UTF-8 strings if Multibyte String is available. Without +MBString UTF-8 cannot be handled properly. For those rare cases where +templates themselves have to juggle encodings, the new modifiers +to_charset and from_charset may come in handy. + + Plugin API and Performance + +All Plugins (modifiers, functions, blocks, resources, +default_template_handlers, etc) are now receiving the +Smarty_Internal_Template instance, where they were supplied with the +Smarty instance in Smarty 3.0. *. As The Smarty_Internal_Template +mimics the behavior of Smarty, this API simplification should not +require any changes to custom plugins. + +The plugins shipped with Smarty 3.1 have been rewritten for better +performance. Most notably {html_select_date} and {html_select_time} +have been improved vastly. Performance aside, plugins have also been +reviewed and generalized in their API. {html_select_date} and +{html_select_time} now share almost all available options. + +The escape modifier now knows the $double_encode option, which will +prevent entities from being encoded again. + +The capitalize modifier now know the $lc_rest option, which makes sure +all letters following a captial letter are lower-cased. + +The count_sentences modifier now accepts (.?!) as +legitimate endings of a sentence - previously only (.) was +accepted + +The new unescape modifier is there to reverse the effects of the +escape modifier. This applies to the escape formats html, htmlall and +entity. + + default_template_handler_func + +The invocation of $smarty->$default_template_handler_func had to be +altered. Instead of a Smarty_Internal_Template, the fifth argument is +now provided with the Smarty instance. New footprint: + + +/** + * Default Template Handler + * + * called when Smarty's file: resource is unable to load a requested file + * + * @param string $type resource type (e.g. "file", "string", "eval", "resource") + * @param string $name resource name (e.g. "foo/bar.tpl") + * @param string &$content template's content + * @param integer &$modified template's modification time + * @param Smarty $smarty Smarty instance + * @return string|boolean path to file or boolean true if $content and $modified + * have been filled, boolean false if no default template + * could be loaded + */ +function default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) { + if (false) { + // return corrected filepath + return "/tmp/some/foobar.tpl"; + } elseif (false) { + // return a template directly + $content = "the template source"; + $modified = time(); + return true; + } else { + // tell smarty that we failed + return false; + } +} + + Stuff done to the compiler + +Many performance improvements have happened internally. One notable +improvement is that all compiled templates are now handled as PHP +functions. This speeds up repeated templates tremendously, as each one +calls an (in-memory) PHP function instead of performing another file +include/scan. + +New Features + + Template syntax + + {block}..{/block} + +The {block} tag has a new hide option flag. It does suppress the block +content if no corresponding child block exists. +EXAMPLE: +parent.tpl +{block name=body hide} child content "{$smarty.block.child}" was +inserted {block} +In the above example the whole block will be suppressed if no child +block "body" is existing. + + {setfilter}..{/setfilter} + +The new {setfilter} block tag allows the definition of filters which +run on variable output. +SYNTAX: +{setfilter filter1|filter2|filter3....} +Smarty3 will lookup up matching filters in the following search order: +1. varibale filter plugin in plugins_dir. +2. a valid modifier. A modifier specification will also accept +additional parameter like filter2:'foo' +3. a PHP function +{/setfilter} will turn previous filter setting off again. +{setfilter} tags can be nested. +EXAMPLE: +{setfilter filter1} + {$foo} + {setfilter filter2} + {$bar} + {/setfilter} + {$buh} +{/setfilter} +{$blar} +In the above example filter1 will run on the output of $foo, filter2 +on $bar, filter1 again on $buh and no filter on $blar. +NOTES: +- {$foo nofilter} will suppress the filters +- These filters will run in addition to filters defined by +registerFilter('variable',...), autoLoadFilter('variable',...) and +defined default modifier. +- {setfilter} will effect only the current template, not included +subtemplates. + + Resource API + +Smarty 3.1 features a new approach to resource management. The +Smarty_Resource API allows simple, yet powerful integration of custom +resources for templates and configuration files. It offers simple +functions for loading data from a custom resource (e.g. database) as +well as define new template types adhering to the special +non-compiling (e,g, plain php) and non-compile-caching (e.g. eval: +resource type) resources. + +See demo/plugins/resource.mysql.php for an example custom database +resource. + +Note that old-fashioned registration of callbacks for resource +management has been deprecated but is still possible with SmartyBC. + + CacheResource API + +In line with the Resource API, the CacheResource API offers a more +comfortable handling of output-cache data. With the +Smarty_CacheResource_Custom accessing databases is made simple. With +the introduction of Smarty_CacheResource_KeyValueStore the +implementation of resources like memcache or APC became a no-brainer; +simple hash-based storage systems are now supporting hierarchical +output-caches. + +See demo/plugins/cacheresource.mysql.php for an example custom +database CacheResource. +See demo/plugins/cacheresource.memcache.php for an example custom +memcache CacheResource using the KeyValueStore helper. + +Note that old-fashioned registration of $cache_handler is not possible +anymore. As the functionality had not been ported to Smarty 3.0.x +properly, it has been dropped from 3.1 completely. + +Locking facilities have been implemented to avoid concurrent cache +generation. Enable cache locking by setting +$smarty->cache_locking = true; + + Relative Paths in Templates (File-Resource) + +As of Smarty 3.1 {include file="../foo.tpl"} and {include +file="./foo.tpl"} will resolve relative to the template they're in. +Relative paths are available with {include file="..."} and +{extends file="..."}. As $smarty->fetch('../foo.tpl') and +$smarty->fetch('./foo.tpl') cannot be relative to a template, an +exception is thrown. + + Addressing a specific $template_dir + +Smarty 3.1 introduces the $template_dir index notation. +$smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"} +require the template bar.tpl to be loaded from $template_dir['foo']; +Smarty::setTemplateDir() and Smarty::addTemplateDir() offer ways to +define indexes along with the actual directories. + + Mixing Resources in extends-Resource + +Taking the php extends: template resource one step further, it is now +possible to mix resources within an extends: call like +$smarty->fetch("extends:file:foo.tpl|db:bar.tpl"); + +To make eval: and string: resources available to the inheritance +chain, eval:base64:TPL_STRING and eval:urlencode:TPL_STRING have been +introduced. Supplying the base64 or urlencode flags will trigger +decoding the TPL_STRING in with either base64_decode() or urldecode(). + + extends-Resource in template inheritance + +Template based inheritance may now inherit from php's extends: +resource like {extends file="extends:foo.tpl|db:bar.tpl"}. + + New Smarty property escape_html + +$smarty->escape_html = true will autoescape all template variable +output by calling htmlspecialchars({$output}, ENT_QUOTES, +SMARTY_RESOURCE_CHAR_SET). +NOTE: +This is a compile time option. If you change the setting you must make +sure that the templates get recompiled. + + New option at Smarty property compile_check + +The automatic recompilation of modified templates can now be +controlled by the following settings: +$smarty->compile_check = COMPILECHECK_OFF (false) - template files +will not be checked +$smarty->compile_check = COMPILECHECK_ON (true) - template files will +always be checked +$smarty->compile_check = COMPILECHECK_CACHEMISS - template files will +be checked if caching is enabled and there is no existing cache file +or it has expired + + Automatic recompilation on Smarty version change + +Templates will now be automatically recompiled on Smarty version +changes to avoide incompatibillities in the compiled code. Compiled +template checked against the current setting of the SMARTY_VERSION +constant. + + default_config_handler_func() + +Analogous to the default_template_handler_func() +default_config_handler_func() has been introduced. + + default_plugin_handler_func() + +An optional default_plugin_handler_func() can be defined which gets called +by the compiler on tags which can't be resolved internally or by plugins. +The default_plugin_handler() can map tags to plugins on the fly. + +New getters/setters + +The following setters/getters will be part of the official +documentation, and will be strongly recommended. Direct property +access will still work for the foreseeable future... it will be +transparently routed through the setters/getters, and consequently a +bit slower. + +array|string getTemplateDir( [string $index] ) +replaces $smarty->template_dir; and $smarty->template_dir[$index]; +Smarty setTemplateDir( array|string $path ) +replaces $smarty->template_dir = "foo"; and $smarty->template_dir = +array("foo", "bar"); +Smarty addTemplateDir( array|string $path, [string $index]) +replaces $smarty->template_dir[] = "bar"; and +$smarty->template_dir[$index] = "bar"; + +array|string getConfigDir( [string $index] ) +replaces $smarty->config_dir; and $smarty->config_dir[$index]; +Smarty setConfigDir( array|string $path ) +replaces $smarty->config_dir = "foo"; and $smarty->config_dir = +array("foo", "bar"); +Smarty addConfigDir( array|string $path, [string $index]) +replaces $smarty->config_dir[] = "bar"; and +$smarty->config_dir[$index] = "bar"; + +array getPluginsDir() +replaces $smarty->plugins_dir; +Smarty setPluginsDir( array|string $path ) +replaces $smarty->plugins_dir = "foo"; +Smarty addPluginsDir( array|string $path ) +replaces $smarty->plugins_dir[] = "bar"; + +string getCompileDir() +replaces $smarty->compile_dir; +Smarty setCompileDir( string $path ) +replaces $smarty->compile_dir = "foo"; + +string getCacheDir() +replaces $smarty->cache_dir; +Smarty setCacheDir( string $path ) +replaces $smarty->cache_dir; diff --git a/library/Smarty/change_log.txt b/vendor/smarty/smarty/change_log.txt index dadc5d17d..1d42b0a76 100644 --- a/library/Smarty/change_log.txt +++ b/vendor/smarty/smarty/change_log.txt @@ -1,11 +1,348 @@ - ===== 3.1.29 ===== (21.12.2015) +===== 3.1.31 ===== (14.12.2016) + 23.11.2016 + - move template object cache into static variables + + 19.11.2016 + - bugfix inheritance root child templates containing nested {block}{/block} could call sub-bock content from parent + template https://github.com/smarty-php/smarty/issues/317 + - change version checking + + 11.11.2016 + - bugfix when Smarty is using a cached template object on Smarty::fetch() or Smarty::isCached() the inheritance data + must be removed https://github.com/smarty-php/smarty/issues/312 + - smaller speed optimization + + 08.11.2016 + - add bootstrap file to load and register Smarty_Autoloader. Change composer.json to make it known to composer + + 07.11.2016 + - optimization of lexer speed https://github.com/smarty-php/smarty/issues/311 + + 27.10.2016 + - bugfix template function definitions array has not been cached between Smarty::fetch() and Smarty::display() calls + https://github.com/smarty-php/smarty/issues/301 + + 23.10.2016 + - improvement/bugfix when Smarty::fetch() is called on a template object the inheritance and tplFunctions property + should be copied to the called template object + + 21.10.2016 + - bugfix for compile locking touched timestamp of old compiled file was not restored on compilation error https://github.com/smarty-php/smarty/issues/308 + + 20.10.2016 + - bugfix nocache code was not removed in cache file when subtemplate did contain PHP short tags in text but no other + nocache code https://github.com/smarty-php/smarty/issues/300 + + 19.10.2016 + - bugfix {make_nocache $var} did fail when variable value did contain '\' https://github.com/smarty-php/smarty/issues/305 + - bugfix {make_nocache $var} remove spaces from variable value https://github.com/smarty-php/smarty/issues/304 + + 12.10.2016 + - bugfix {include} with template names including variable or constants could fail after bugfix from + 28.09.2016 https://github.com/smarty-php/smarty/issues/302 + + 08.10.2016 + - optimization move runtime extension for template functions into Smarty objects + + 29.09.2016 + - improvement new Smarty::$extends_recursion property to disable execution of {extends} in templates called by extends resource + https://github.com/smarty-php/smarty/issues/296 + + 28.09.2016 + - bugfix the generated code for calling a subtemplate must pass the template resource name in single quotes https://github.com/smarty-php/smarty/issues/299 + - bugfix nocache hash was not removed for <?xml ?> tags in subtemplates https://github.com/smarty-php/smarty/issues/300 + + 27.09.2016 + - bugfix when Smarty does use an internally cached template object on Smarty::fetch() calls + the template and config variables must be cleared https://github.com/smarty-php/smarty/issues/297 + + 20.09.2016 + - bugfix some $smarty special template variables are no longer accessed as real variable. + using them on calls like {if isset($smarty.foo)} or {if empty($smarty.foo)} will fail + http://www.smarty.net/forums/viewtopic.php?t=26222 + - temporary fix for https://github.com/smarty-php/smarty/issues/293 main reason still under investigation + - improvement new tags {block_parent} {block_child} in template inheritance + + 19.09.2016 + - optimization clear compiled and cached folder completely on detected version change + - cleanup convert cache resource file method clear into runtime extension + + 15.09.2016 + - bugfix assigning a variable in if condition by function like {if $value = array_shift($array)} the function got called twice https://github.com/smarty-php/smarty/issues/291 + - bugfix function plugins called with assign attribute like {foo assign='bar'} did not output returned content because + because assumption was made that it was assigned to a variable https://github.com/smarty-php/smarty/issues/292 + - bugfix calling $smarty->isCached() on a not existing cache file with $smarty->cache_locking = true; could cause a 10 second delay http://www.smarty.net/forums/viewtopic.php?t=26282 + - improvement make Smarty::clearCompiledTemplate() on custom resource independent from changes of templateId computation + + 11.09.2016 + - improvement {math} misleading E_USER_WARNING messages when parameter value = null https://github.com/smarty-php/smarty/issues/288 + - improvement move often used code snippets into methods + - performance Smarty::configLoad() did load unneeded template source object + + 09.09.2016 + - bugfix/optimization {foreach} did not execute the {foreachelse} when iterating empty objects https://github.com/smarty-php/smarty/pull/287 + - bugfix {foreach} must keep the @properties when restoring a saved $item variable as the properties might be used outside {foreach} https://github.com/smarty-php/smarty/issues/267 + - improvement {foreach} observe {break n} and {continue n} nesting levels when restoring saved $item and $key variables + + 08.09.2016 + - bugfix implement wrapper for removed method getConfigVariable() https://github.com/smarty-php/smarty/issues/286 + + 07.09.2016 + - bugfix using nocache like attribute with value true like {plugin nocache=true} did not work https://github.com/smarty-php/smarty/issues/285 + - bugfix uppercase TRUE, FALSE and NULL did not work when security was enabled https://github.com/smarty-php/smarty/issues/282 + - bugfix when {foreach} was looping over an object the total property like {$item@total} did always return 1 https://github.com/smarty-php/smarty/issues/281 + - bugfix {capture}{/capture} did add in 3.1.30 unintended additional blank lines https://github.com/smarty-php/smarty/issues/268 + + 01.09.2016 + - performance require_once should be called only once for shared plugins https://github.com/smarty-php/smarty/issues/280 + + 26.08.2016 + - bugfix change of 23.08.2016 failed on linux when use_include_path = true + + 23.08.2016 + - bugfix remove constant DS as shortcut for DIRECTORY_SEPARATOR as the user may have defined it to something else https://github.com/smarty-php/smarty/issues/277 + + 20.08-2016 + - bugfix {config_load ... scope="global"} shall not throw an arror but fallback to scope="smarty" https://github.com/smarty-php/smarty/issues/274 + - bugfix {make_nocache} failed when using composer autoloader https://github.com/smarty-php/smarty/issues/275 + + 14.08.2016 + - bugfix $smarty_>debugging = true; did E_NOTICE messages when {eval} tag was used https://github.com/smarty-php/smarty/issues/266 + - bugfix Class 'Smarty_Internal_Runtime_ValidateCompiled' not found when upgrading from some older Smarty versions with existing + compiled or cached template files https://github.com/smarty-php/smarty/issues/269 + - optimization remove unneeded call to update acopes when {assign} scope and template scope was local (default) + +===== 3.1.30 ===== (07.08.2016) + + 07.08.2016 + - bugfix update of 04.08.2016 was incomplete + + 05.08.2016 + - bugfix compiling of templates failed when the Smarty delimiter did contain '/' https://github.com/smarty-php/smarty/issues/264 + - updated error checking at template and config default handler + + 04.08.2016 + - improvement move template function source parameter into extension + + 26.07.2016 + - optimization unneeded loading of compiled resource + + 24.07.2016 + - regression this->addPluginsDir('/abs/path/to/dir') adding absolute path without trailing '/' did fail https://github.com/smarty-php/smarty/issues/260 + + 23.07.2016 + - bugfix setTemplateDir('/') and setTemplateDir('') did create wrong absolute filepath https://github.com/smarty-php/smarty/issues/245 + - optimization of filepath normalization + - improvement remove double function declaration in plugin shared.escape_special_cars.php https://github.com/smarty-php/smarty/issues/229 + + 19.07.2016 + - bugfix multiple {include} with relative filepath within {block}{/block} could fail https://github.com/smarty-php/smarty/issues/246 + - bugfix {math} shell injection vulnerability patch provided by Tim Weber + + 18.07.2016 + - bugfix {foreach} if key variable and item@key attribute have been used both the key variable was not updated https://github.com/smarty-php/smarty/issues/254 + - bugfix modifier on plugins like {plugin|modifier ... } did fail when the plugin does return an array https://github.com/smarty-php/smarty/issues/228 + - bugfix avoid opcache_invalidate to result in ErrorException when opcache.restrict_api is not empty https://github.com/smarty-php/smarty/pull/244 + - bugfix multiple {include} with relative filepath within {block}{/block} could fail https://github.com/smarty-php/smarty/issues/246 + + 14.07.2016 + - bugfix wrong parameter on compileAllTemplates() and compileAllConfig() https://github.com/smarty-php/smarty/issues/231 + + 13.07.2016 + - bugfix PHP 7 compatibility on registered compiler plugins https://github.com/smarty-php/smarty/issues/241 + - update testInstall() https://github.com/smarty-php/smarty/issues/248https://github.com/smarty-php/smarty/issues/248 + - bugfix enable debugging could fail when template objects did already exists https://github.com/smarty-php/smarty/issues/237 + - bugfix template function data should be merged when loading subtemplate https://github.com/smarty-php/smarty/issues/240 + - bugfix wrong parameter on compileAllTemplates() https://github.com/smarty-php/smarty/issues/231 + + 12.07.2016 + - bugfix {foreach} item variable must be created also on empty from array https://github.com/smarty-php/smarty/issues/238 and https://github.com/smarty-php/smarty/issues/239 + - bugfix enableSecurity() must init cache flags https://github.com/smarty-php/smarty/issues/247 + + 27.05.2016 + - bugfix/improvement of compileAlltemplates() follow symlinks in template folder (PHP >= 5.3.1) https://github.com/smarty-php/smarty/issues/224 + clear internal cache and expension handler for each template to avoid possible conflicts https://github.com/smarty-php/smarty/issues/231 + + 16.05.2016 + - optimization {foreach} compiler and processing + - broken PHP 5.3 and 5.4 compatibility + + 15.05.2016 + - optimization and cleanup of resource code + + 10.05.2016 + - optimization of inheritance processing + + 07.05.2016 + -bugfix Only variables should be assigned by reference https://github.com/smarty-php/smarty/issues/227 + + 02.05.2016 + - enhancement {block} tag names can now be variable https://github.com/smarty-php/smarty/issues/221 + + 01.05.2016 + - bugfix same relative filepath at {include} called from template in different folders could display wrong sub-template + + 29.04.2016 + - bugfix {strip} remove space on linebreak between html tags https://github.com/smarty-php/smarty/issues/213 + + 24.04.2016 + - bugfix nested {include} with relative file path could fail when called in {block} ... {/block} https://github.com/smarty-php/smarty/issues/218 + + 14.04.2016 + - bugfix special variable {$smarty.capture.name} was not case sensitive on name https://github.com/smarty-php/smarty/issues/210 + - bugfix the default template handler must calculate the source uid https://github.com/smarty-php/smarty/issues/205 + + 13.04.2016 + - bugfix template inheritance status must be saved when calling sub-templates https://github.com/smarty-php/smarty/issues/215 + + 27.03.2016 + - bugfix change of 11.03.2016 cause again {capture} data could not been seen in other templates with {$smarty.capture.name} https://github.com/smarty-php/smarty/issues/153 + + 11.03.2016 + - optimization of capture and security handling + - improvement $smarty->clearCompiledTemplate() should return on recompiled or uncompiled resources + + 10.03.2016 + - optimization of resource processing + + 09.03.2016 + - improvement rework of 'scope' attribute handling see see NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/194 + https://github.com/smarty-php/smarty/issues/186 https://github.com/smarty-php/smarty/issues/179 + - bugfix correct Autoloader update of 2.3.2014 https://github.com/smarty-php/smarty/issues/199 + + 04.03.2016 + - bugfix change from 01.03.2016 will cause $smarty->isCached(..) failure if called multiple time for same template + (forum topic 25935) + + 02.03.2016 + - revert autoloader optimizations because of unexplainable warning when using plugins https://github.com/smarty-php/smarty/issues/199 + + 01.03.2016 + - bugfix template objects must be cached on $smarty->fetch('foo.tpl) calls incase the template is fetched + multiple times (forum topic 25909) + + 25.02.2016 + - bugfix wrong _realpath with 4 or more parent-directories https://github.com/smarty-php/smarty/issues/190 + - optimization of _realpath + - bugfix instanceof expression in template code must be treated as value https://github.com/smarty-php/smarty/issues/191 + + 20.02.2016 + - bugfix {strip} must keep space between hmtl tags. Broken by changes of 10.2.2016 https://github.com/smarty-php/smarty/issues/184 + - new feature/bugfix {foreach}{section} add 'properties' attribute to force compilation of loop properties + see NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/189 + + 19.02.2016 + - revert output buffer flushing on display, echo content again because possible problems when PHP files had + characters (newline} after ?> at file end https://github.com/smarty-php/smarty/issues/187 + + 14.02.2016 + - new tag {make_nocache} read NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/110 + - optimization of sub-template processing + - bugfix using extendsall as default resource and {include} inside {block} tags could produce unexpected results https://github.com/smarty-php/smarty/issues/183 + - optimization of tag attribute compiling + - optimization make compiler tag object cache static for higher compilation speed + + 11.02.2016 + - improvement added KnockoutJS comments to trimwhitespace outputfilter https://github.com/smarty-php/smarty/issues/82 + https://github.com/smarty-php/smarty/pull/181 + + 10.02.2016 + - bugfix {strip} must keep space on output creating smarty tags within html tags https://github.com/smarty-php/smarty/issues/177 + - bugfix wrong precedence on special if conditions like '$foo is ... by $bar' could cause wrong code https://github.com/smarty-php/smarty/issues/178 + - improvement because of ambiguities the inline constant support has been removed from the $foo.bar syntax https://github.com/smarty-php/smarty/issues/149 + - bugfix other {strip} error with output tags between hmtl https://github.com/smarty-php/smarty/issues/180 + + 09.02.2016 + - move some code from parser into compiler + - reformat all code for unique style + - update/bugfix scope attribute handling reworked. Read the newfeatures.txt file + + 05.02.2016 + - improvement internal compiler changes + + 01.02.2016 + - bugfix {foreach} compilation failed when $smarty->merge_compiled_includes = true and pre-filters are used. + + 29.01.2016 + - bugfix implement replacement code for _tag_stack property https://github.com/smarty-php/smarty/issues/151 + + 28.01.2016 + - bugfix allow windows network filepath or wrapper (forum topic 25876) https://github.com/smarty-php/smarty/issues/170 + - bugfix if fetch('foo.tpl') is called on a template object the $parent parameter should default to the calling template object https://github.com/smarty-php/smarty/issues/152 + + 27.01.2016 + - revert bugfix compiling {section} did create warning + - bugfix {$smarty.section.customer.loop} did throw compiler error https://github.com/smarty-php/smarty/issues/161 + update of yesterdays fix + - bugfix string resource could inject code at {block} or inline subtemplates through PHP comments https://github.com/smarty-php/smarty/issues/157 + - bugfix output filters did not observe nocache code flhttps://github.com/smarty-php/smarty/issues/154g https://github.com/smarty-php/smarty/issues/160 + - bugfix {extends} with relative file path did not work https://github.com/smarty-php/smarty/issues/154 + https://github.com/smarty-php/smarty/issues/158 + - bugfix {capture} data could not been seen in other templates with {$smarty.capture.name} https://github.com/smarty-php/smarty/issues/153 + + 26.01.2016 + - improvement observe Smarty::$_CHARSET in debugging console https://github.com/smarty-php/smarty/issues/169 + - bugfix compiling {section} did create warning + - bugfix {$smarty.section.customer.loop} did throw compiler error https://github.com/smarty-php/smarty/issues/161 + + 02.01.2016 + - update scope handling + - optimize block plugin compiler + - improvement runtime checks if registered block plugins are callable + + 01.01.2016 + - remove Smarty::$resource_cache_mode property + + 31.12.2015 + - optimization of {assign}, {if} and {while} compiled code + + 30.12.2015 + - bugfix plugin names starting with "php" did not compile https://github.com/smarty-php/smarty/issues/147 + + 29.12.2015 + - bugfix Smarty::error_reporting was not observed when display() or fetch() was called on template objects https://github.com/smarty-php/smarty/issues/145 + + 28.12.2015 + - optimization of {foreach} code size and processing + + 27.12.2015 + - improve inheritance code + - update external methods + - code fixes + - PHPdoc updates + + 25.12.2015 + - compile {block} tag code and its processing into classes + - optimization replace hhvm extension by inline code + - new feature If ACP is enabled force an apc_compile_file() when compiled or cached template was updated + + 24.12.2015 + - new feature Compiler does now observe the template_dir setting and will create separate compiled files if required + - bugfix post filter did fail on template inheritance https://github.com/smarty-php/smarty/issues/144 + + 23.12.2015 + - optimization move internal method decodeProperties back into template object + - optimization move subtemplate processing back into template object + - new feature Caching does now observe the template_dir setting and will create separate cache files if required + + 22.12.2015 + - change $xxx_dir properties from private to protected in case Smarty class gets extended + - code optimizations + + 21.12.2015 + - bugfix a filepath starting with '/' or '\' on windows should normalize to the root dir + of current working drive https://github.com/smarty-php/smarty/issues/134 + - optimization of filepath normalization + - bugfix {strip} must remove all blanks between html tags https://github.com/smarty-php/smarty/issues/136 + + ===== 3.1.29 ===== (21.12.2015) 21.12.2015 - optimization improve speed of filetime checks on extends and extendsall resource 20.12.2015 - bugfix failure when the default resource type was set to 'extendsall' https://github.com/smarty-php/smarty/issues/123 - update compilation of Smarty special variables - - bugfix add addition check for OS type on normalizaition of file path https://github.com/smarty-php/smarty/issues/134 + - bugfix add addition check for OS type on normalization of file path https://github.com/smarty-php/smarty/issues/134 - bugfix the source uid of the extendsall resource must contain $template_dir settings https://github.com/smarty-php/smarty/issues/123 19.12.2015 @@ -15,7 +352,7 @@ - improvement make sure that compiled and cache templates never can contain a trailing '?>? 18.12.2015 - - bugfix regression when modifier parameter was follow by math https://github.com/smarty-php/smarty/issues/132 + - bugfix regression when modifier parameter was followed by math https://github.com/smarty-php/smarty/issues/132 17.12.2015 - bugfix {$smarty.capture.nameFail} did lowercase capture name https://github.com/smarty-php/smarty/issues/135 diff --git a/vendor/smarty/smarty/demo/configs/test.conf b/vendor/smarty/smarty/demo/configs/test.conf new file mode 100644 index 000000000..5eac748ec --- /dev/null +++ b/vendor/smarty/smarty/demo/configs/test.conf @@ -0,0 +1,5 @@ +title = Welcome to Smarty! +cutoff_size = 40 + +[setup] +bold = true diff --git a/vendor/smarty/smarty/demo/index.php b/vendor/smarty/smarty/demo/index.php new file mode 100644 index 000000000..b67c217be --- /dev/null +++ b/vendor/smarty/smarty/demo/index.php @@ -0,0 +1,30 @@ +<?php +/** + * Example Application + * + * @package Example-application + */ + +require '../libs/Smarty.class.php'; + +$smarty = new Smarty; + +//$smarty->force_compile = true; +$smarty->debugging = true; +$smarty->caching = true; +$smarty->cache_lifetime = 120; + +$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true); +$smarty->assign("FirstName", array("John", "Mary", "James", "Henry")); +$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case")); +$smarty->assign("Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"), array("I", "J", "K", "L"), + array("M", "N", "O", "P"))); + +$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"), + array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234"))); + +$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX")); +$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas")); +$smarty->assign("option_selected", "NE"); + +$smarty->display('index.tpl'); diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php b/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php new file mode 100644 index 000000000..ed55ec846 --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php @@ -0,0 +1,83 @@ +<?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 +{ + 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 new file mode 100644 index 000000000..945beb349 --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php @@ -0,0 +1,101 @@ +<?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; + + 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) + { + $_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() + { + $this->memcache->flush(); + } +} diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php b/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php new file mode 100644 index 000000000..027b93766 --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php @@ -0,0 +1,160 @@ +<?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 +{ + // 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"); + } + 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 new file mode 100644 index 000000000..d1e2d6ace --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php @@ -0,0 +1,327 @@ +<?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 +{ + + 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'); + + 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'; + + protected $deleteStatement = 'DELETE FROM %1$s WHERE %2$s'; + + protected $truncateStatement = 'TRUNCATE TABLE %s'; + + protected $fetchColumns = 'modified, content'; + + protected $fetchTimestampColumns = 'modified'; + + protected $pdo, $table, $database; + + /* + * Constructor + * + * @param PDO $pdo PDO : active connection + * @param string $table : table (or view) name + * @param string $database : optionnal - if table is located in another db + */ + 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 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 + */ + protected function getFetchStatement($columns, $id, $cache_id = null, $compile_id = null) + { + + 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 = null, $compile_id = null, &$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 = null, $compile_id = null, $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}`"; + } +} +
\ No newline at end of file diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php new file mode 100644 index 000000000..8a9e0a5dd --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php @@ -0,0 +1,43 @@ +<?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 + */ +require_once 'cacheresource.pdo.php'; + +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); + } +} +
\ No newline at end of file diff --git a/vendor/smarty/smarty/demo/plugins/resource.extendsall.php b/vendor/smarty/smarty/demo/plugins/resource.extendsall.php new file mode 100644 index 000000000..a5ee432dd --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/resource.extendsall.php @@ -0,0 +1,65 @@ +<?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 + */ + 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 new file mode 100644 index 000000000..619707e78 --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/resource.mysql.php @@ -0,0 +1,83 @@ +<?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"); + } + 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 new file mode 100644 index 000000000..d85aecf31 --- /dev/null +++ b/vendor/smarty/smarty/demo/plugins/resource.mysqls.php @@ -0,0 +1,63 @@ +<?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 + protected $db; + + // prepared fetch() statement + protected $fetch; + + 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/footer.tpl b/vendor/smarty/smarty/demo/templates/footer.tpl new file mode 100644 index 000000000..e04310fdd --- /dev/null +++ b/vendor/smarty/smarty/demo/templates/footer.tpl @@ -0,0 +1,2 @@ +</BODY> +</HTML> diff --git a/vendor/smarty/smarty/demo/templates/header.tpl b/vendor/smarty/smarty/demo/templates/header.tpl new file mode 100644 index 000000000..783210a18 --- /dev/null +++ b/vendor/smarty/smarty/demo/templates/header.tpl @@ -0,0 +1,5 @@ +<HTML> +<HEAD> +<TITLE>{$title} - {$Name}</TITLE> +</HEAD> +<BODY bgcolor="#ffffff"> diff --git a/vendor/smarty/smarty/demo/templates/index.tpl b/vendor/smarty/smarty/demo/templates/index.tpl new file mode 100644 index 000000000..1fbb6d379 --- /dev/null +++ b/vendor/smarty/smarty/demo/templates/index.tpl @@ -0,0 +1,87 @@ +{config_load file="test.conf" section="setup"} +{include file="header.tpl" title=foo} + +<PRE> + +{* bold and title are read from the config file *} + {if #bold#}<b>{/if} + {* capitalize the first letters of each word of the title *} + Title: {#title#|capitalize} + {if #bold#}</b>{/if} + + 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> + +variable modifier example of {ldelim}$Name|upper{rdelim} + +<b>{$Name|upper}</b> + + +An example of a section loop: + + {section name=outer + loop=$FirstName} + {if $smarty.section.outer.index is odd by 2} + {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]} + {else} + {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]} + {/if} + {sectionelse} + none + {/section} + + An example of section looped key values: + + {section name=sec1 loop=$contacts} + phone: {$contacts[sec1].phone} + <br> + + fax: {$contacts[sec1].fax} + <br> + + cell: {$contacts[sec1].cell} + <br> + {/section} + <p> + + testing strip tags + {strip} +<table border=0> + <tr> + <td> + <A HREF="{$SCRIPT_NAME}"> + <font color="red">This is a test </font> + </A> + </td> + </tr> +</table> + {/strip} + +</PRE> + +This is an example of the html_select_date function: + +<form> + {html_select_date start_year=1998 end_year=2010} +</form> + +This is an example of the html_select_time function: + +<form> + {html_select_time use_24_hours=false} +</form> + +This is an example of the html_options function: + +<form> + <select name=states> + {html_options values=$option_values selected=$option_selected output=$option_output} + </select> +</form> + +{include file="footer.tpl"} diff --git a/library/Smarty/libs/Autoloader.php b/vendor/smarty/smarty/libs/Autoloader.php index 7d0c388a6..d3b039caa 100644 --- a/library/Smarty/libs/Autoloader.php +++ b/vendor/smarty/smarty/libs/Autoloader.php @@ -11,11 +11,12 @@ * @package Smarty * @author Uwe Tews * Usage: - * require_once '...path/Autoloader.php'; - * Smarty_Autoloader::register(); - * $smarty = new Smarty(); - * Note: This autoloader is not needed if you use Composer. - * Composer will automatically add the classes of the Smarty package to it common autoloader. + * require_once '...path/Autoloader.php'; + * Smarty_Autoloader::register(); + * or + * include '...path/bootstarp.php'; + * + * $smarty = new Smarty(); */ class Smarty_Autoloader { @@ -24,14 +25,14 @@ class Smarty_Autoloader * * @var string */ - public static $SMARTY_DIR = ''; + public static $SMARTY_DIR = null; /** * Filepath to Smarty internal plugins * * @var string */ - public static $SMARTY_SYSPLUGINS_DIR = ''; + public static $SMARTY_SYSPLUGINS_DIR = null; /** * Array with Smarty core classes and their filename @@ -57,7 +58,7 @@ class Smarty_Autoloader set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false ) { $registeredAutoLoadFunctions = spl_autoload_functions(); - if (!isset($registeredAutoLoadFunctions['spl_autoload'])) { + if (!isset($registeredAutoLoadFunctions[ 'spl_autoload' ])) { spl_autoload_register(); } } else { @@ -89,35 +90,20 @@ class Smarty_Autoloader */ public static function autoload($class) { - $_class = strtolower($class); - $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; - if (strpos($_class, 'smarty_internal_') === 0) { - if (strpos($_class, 'smarty_internal_compile_') === 0) { - if (is_file($file)) { - require $file; - } - return; - } - @include $file; + if ($class[ 0 ] !== 'S' && strpos($class, 'Smarty') !== 0) { return; } - if (preg_match('/^(smarty_(((template_(source|config|cache|compiled|resource_base))|((cached|compiled)?resource)|(variable|security)))|(smarty(bc)?)$)/', - $_class, $match)) { - if (!empty($match[3])) { - @include $file; - return; - } elseif (!empty($match[9]) && isset(self::$rootClasses[$_class])) { - $file = self::$rootClasses[$_class]; - require $file; - return; + $_class = strtolower($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; } - } - if (0 !== strpos($_class, 'smarty')) { - return; - } - if (is_file($file)) { - require $file; - return; } return; } diff --git a/library/Smarty/libs/Smarty.class.php b/vendor/smarty/smarty/libs/Smarty.class.php index a029f942e..57eedfb93 100644 --- a/library/Smarty/libs/Smarty.class.php +++ b/vendor/smarty/smarty/libs/Smarty.class.php @@ -21,28 +21,21 @@ * smarty-discussion-subscribe@googlegroups.com * * @link http://www.smarty.net/ - * @copyright 2015 New Digital Group, Inc. - * @copyright 2015 Uwe Tews + * @copyright 2016 New Digital Group, Inc. + * @copyright 2016 Uwe Tews * @author Monte Ohrt <monte at ohrt dot com> * @author Uwe Tews * @author Rodney Rehm * @package Smarty - * @version 3.1.29 + * @version 3.1.31 */ /** - * define shorthand directory separator constant - */ -if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); -} - -/** * 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', dirname(__FILE__) . DS); + define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); } /** @@ -50,10 +43,10 @@ if (!defined('SMARTY_DIR')) { * 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' . DS); + define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR); } if (!defined('SMARTY_PLUGINS_DIR')) { - define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS); + define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DIRECTORY_SEPARATOR); } if (!defined('SMARTY_MBSTRING')) { define('SMARTY_MBSTRING', function_exists('mb_get_info')); @@ -73,23 +66,16 @@ if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { } /** - * Try loading the Smarty_Internal_Data class - * If we fail we must load Smarty's autoloader. - * Otherwise we may have a global autoloader like Composer + * Load Smarty_Autoloader */ -if (!class_exists('Smarty_Autoloader', false)) { - if (!class_exists('Smarty_Internal_Data', true)) { - require_once dirname(__FILE__) . '/Autoloader.php'; - Smarty_Autoloader::registerBC(); - } +if (!class_exists('Smarty_Autoloader')) { + include __DIR__ . '/bootstrap.php'; } /** * Load always needed external class files */ -if (!class_exists('Smarty_Internal_Data', false)) { - require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php'; -} +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'; @@ -97,17 +83,21 @@ 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(Smarty $smarty, string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) - * @method int compileAllConfig(Smarty $smarty, string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) - * + * @method int compileAllTemplates(string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) + * @method int compileAllConfig(string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) + * @method int clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) */ class Smarty extends Smarty_Internal_TemplateBase { @@ -118,12 +108,12 @@ class Smarty extends Smarty_Internal_TemplateBase /** * smarty version */ - const SMARTY_VERSION = '3.1.29'; + const SMARTY_VERSION = '3.1.31'; /** * define variable scopes */ - const SCOPE_LOCAL = 0; + const SCOPE_LOCAL = 1; const SCOPE_PARENT = 2; @@ -135,8 +125,6 @@ class Smarty extends Smarty_Internal_TemplateBase const SCOPE_GLOBAL = 32; - const SCOPE_BUBBLE_UP = 64; - /** * define caching modes */ @@ -206,6 +194,7 @@ class Smarty extends Smarty_Internal_TemplateBase /** * Resource caching modes + * (not used since 3.1.30) */ const RESOURCE_CACHE_OFF = 0; @@ -288,7 +277,21 @@ class Smarty extends Smarty_Internal_TemplateBase * * @var array */ - private $template_dir = array('./templates/'); + protected $template_dir = array('./templates/'); + + /** + * flags for normalized template directory entries + * + * @var array + */ + protected $_processedTemplateDir = array(); + + /** + * flag if template_dir is normalized + * + * @var bool + */ + public $_templateDirNormalized = false; /** * joined template directory string used in cache keys @@ -298,6 +301,27 @@ class Smarty extends Smarty_Internal_TemplateBase public $_joined_template_dir = null; /** + * config directory + * + * @var array + */ + protected $config_dir = array('./configs/'); + + /** + * flags for normalized template directory entries + * + * @var array + */ + protected $_processedConfigDir = array(); + + /** + * flag if config_dir is normalized + * + * @var bool + */ + public $_configDirNormalized = false; + + /** * joined config directory string used in cache keys * * @var string @@ -330,28 +354,42 @@ class Smarty extends Smarty_Internal_TemplateBase * * @var string */ - private $compile_dir = './templates_c/'; + protected $compile_dir = './templates_c/'; + + /** + * flag if template_dir is normalized + * + * @var bool + */ + public $_compileDirNormalized = false; /** * plugins directory * * @var array */ - private $plugins_dir = null; + protected $plugins_dir = array(); + + /** + * flag if plugins_dir is normalized + * + * @var bool + */ + public $_pluginsDirNormalized = false; /** * cache directory * * @var string */ - private $cache_dir = './cache/'; + protected $cache_dir = './cache/'; /** - * config directory + * flag if template_dir is normalized * - * @var array + * @var bool */ - private $config_dir = array('./configs/'); + public $_cacheDirNormalized = false; /** * force template compiling? @@ -388,6 +426,15 @@ class Smarty extends Smarty_Internal_TemplateBase */ 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 * @@ -563,13 +610,6 @@ class Smarty extends Smarty_Internal_TemplateBase public $default_config_type = 'file'; /** - * enable resource caching - * - * @var bool - */ - public $resource_cache_mode = 1; - - /** * check If-Modified-Since headers * * @var boolean @@ -675,22 +715,29 @@ class Smarty extends Smarty_Internal_TemplateBase public $_debug = null; /** + * Directory separator + * + * @var string + */ + public $ds = DIRECTORY_SEPARATOR; + + /** * removed properties * * @var string[] */ - private static $obsoleteProperties = array('resource_caching', 'template_resource_caching', - 'direct_access_security', '_dir_perms', '_file_perms', - 'plugin_search_order', 'inheritance_merge_compiled_includes'); + private $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 ona direct access + * List of private properties which will call getter/setter on a direct access * - * @var array + * @var string[] */ - private static $accessMap = array('template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir', - 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir', - 'cache_dir' => 'CacheDir',); + private $accessMap = array('template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir', + 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir', + 'cache_dir' => 'CacheDir',); /**#@-*/ @@ -699,19 +746,19 @@ class Smarty extends Smarty_Internal_TemplateBase */ 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']); + 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 = ''; @@ -733,31 +780,6 @@ class Smarty extends Smarty_Internal_TemplateBase } /** - * Returns a single or all global variables - * - * @param string $varname variable name or null - * - * @return string variable value or or array of variables - */ - public function getGlobal($varname = null) - { - if (isset($varname)) { - if (isset(self::$global_tpl_vars[$varname])) { - return self::$global_tpl_vars[$varname]->value; - } else { - return ''; - } - } else { - $_result = array(); - foreach (self::$global_tpl_vars AS $key => $var) { - $_result[$key] = $var->value; - } - - return $_result; - } - } - - /** * Loads security class and enables security * * @param string|Smarty_Security $security_class if a string is used, it must be class-name @@ -793,12 +815,14 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function setTemplateDir($template_dir, $isConfig = false) { - $type = $isConfig ? 'config_dir' : 'template_dir'; - $joined = '_joined_' . $type; - $this->{$type} = (array) $template_dir; - $this->{$joined} = join(' # ', $this->{$type}); - $this->_cache[$type . '_new'] = true; - $this->_cache[$type] = false; + 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; } @@ -813,16 +837,36 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function addTemplateDir($template_dir, $key = null, $isConfig = false) { - $type = $isConfig ? 'config_dir' : 'template_dir'; - $joined = '_joined_' . $type; - if (!isset($this->_cache[$type])) { - $this->{$type} = (array) $this->{$type}; - $this->{$joined} = join(' # ', $this->{$type}); - $this->_cache[$type . '_new'] = true; - $this->_cache[$type] = false; + 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; + } } - $this->{$joined} .= ' # ' . join(' # ', (array) $template_dir); - $this->_addDir($type, $template_dir, $key); return $this; } @@ -836,24 +880,18 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function getTemplateDir($index = null, $isConfig = false) { - $type = $isConfig ? 'config_dir' : 'template_dir'; - if (!isset($this->_cache[$type])) { - $joined = '_joined_' . $type; - $this->{$type} = (array) $this->{$type}; - $this->{$joined} = join(' # ', $this->{$type}); - $this->_cache[$type] = false; + if ($isConfig) { + $dir = &$this->config_dir; + } else { + $dir = &$this->template_dir; } - if ($this->_cache[$type] == false) { - foreach ($this->{$type} as $k => $v) { - $this->{$type}[$k] = $this->_realpath($v . DS, true); - } - $this->_cache[$type . '_new'] = true; - $this->_cache[$type] = true; + if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) { + $this->_nomalizeTemplateConfig($isConfig); } if ($index !== null) { - return isset($this->{$type}[$index]) ? $this->{$type}[$index] : null; + return isset($dir[ $index ]) ? $dir[ $index ] : null; } - return $this->{$type}; + return $dir; } /** @@ -903,28 +941,24 @@ class Smarty extends Smarty_Internal_TemplateBase public function setPluginsDir($plugins_dir) { $this->plugins_dir = (array) $plugins_dir; - if (isset($this->_cache['plugins_dir'])) { - unset($this->_cache['plugins_dir']); - } + $this->_pluginsDirNormalized = false; return $this; } /** * Adds directory of plugin files * - * @param $plugins_dir + * @param null|array $plugins_dir * * @return Smarty current Smarty instance for chaining */ public function addPluginsDir($plugins_dir) { - if (!isset($this->plugins_dir)) { - $this->plugins_dir = array(SMARTY_PLUGINS_DIR); - } - $this->plugins_dir = array_merge((array) $this->plugins_dir, (array) $plugins_dir); - if (isset($this->_cache['plugins_dir'])) { - unset($this->_cache['plugins_dir']); + 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; } @@ -935,25 +969,24 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function getPluginsDir() { - if (!isset($this->_cache['plugins_dir'])) { - if (!isset($this->plugins_dir)) { - $this->plugins_dir = array(SMARTY_PLUGINS_DIR); - } else { - $plugins_dir = (array) $this->plugins_dir; - $this->plugins_dir = array(); - foreach ($plugins_dir as $v) { - $this->plugins_dir[] = $this->_realpath($v . DS, true); - } - $this->plugins_dir = array_unique($this->plugins_dir); + 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; } - $this->_cache['plugin_files'] = array(); - $this->_cache['plugins_dir'] = true; + foreach ($this->plugins_dir as $k => $v) { + $this->plugins_dir[ $k ] = $this->_realpath(rtrim($v, "/\\") . $this->ds, true); + } + $this->_cache[ 'plugin_files' ] = array(); + $this->_pluginsDirNormalized = true; } return $this->plugins_dir; } /** - * Set compile directory * * @param string $compile_dir directory to store compiled templates in * @@ -961,11 +994,8 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function setCompileDir($compile_dir) { - $this->compile_dir = $this->_realpath($compile_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - $this->_cache['compile_dir'] = true; + $this->_normalizeDir('compile_dir', $compile_dir); + $this->_compileDirNormalized = true; return $this; } @@ -976,12 +1006,9 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function getCompileDir() { - if (!isset($this->_cache['compile_dir'])) { - $this->compile_dir = $this->_realpath($this->compile_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - $this->_cache['compile_dir'] = true; + if (!$this->_compileDirNormalized) { + $this->_normalizeDir('compile_dir', $this->compile_dir); + $this->_compileDirNormalized = true; } return $this->compile_dir; } @@ -995,11 +1022,8 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function setCacheDir($cache_dir) { - $this->cache_dir = $this->_realpath($cache_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - $this->_cache['cache_dir'] = true; + $this->_normalizeDir('cache_dir', $cache_dir); + $this->_cacheDirNormalized = true; return $this; } @@ -1010,47 +1034,54 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function getCacheDir() { - if (!isset($this->_cache['cache_dir'])) { - $this->cache_dir = $this->_realpath($this->cache_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - $this->_cache['cache_dir'] = true; + if (!$this->_cacheDirNormalized) { + $this->_normalizeDir('cache_dir', $this->cache_dir); + $this->_cacheDirNormalized = true; } return $this->cache_dir; } /** - * add directories to given property name + * Normalize and set directory string * - * @param string $dirName directory property name - * @param string|array $dir directory string or array of strings - * @param mixed $key optional key + * @param string $dirName cache_dir or compile_dir + * @param string $dir filepath of folder */ - private function _addDir($dirName, $dir, $key = null) + private function _normalizeDir($dirName, $dir) { - $rp = $this->_cache[$dirName]; - if (is_array($dir)) { - foreach ($dir as $k => $v) { - $path = $rp ? $this->_realpath($v . DS, true) : $v; - if (is_int($k)) { - // indexes are not merged but appended - $this->{$dirName}[] = $path; - } else { - // string indexes are overridden - $this->{$dirName}[$k] = $path; - } - } + $this->{$dirName} = $this->_realpath(rtrim($dir, "/\\") . $this->ds, true); + if (!isset(Smarty::$_muted_directories[ $this->{$dirName} ])) { + Smarty::$_muted_directories[ $this->{$dirName} ] = null; + } + } + + /** + * Normalize template_dir or config_dir + * + * @param bool $isConfig true for config_dir + * + */ + private function _nomalizeTemplateConfig($isConfig) + { + if ($isConfig) { + $processed = &$this->_processedConfigDir; + $dir = &$this->config_dir; } else { - $path = $rp ? $this->_realpath($dir . DS, true) : $dir; - if ($key !== null) { - // override directory at specified index - $this->{$dirName}[$key] = $path; - } else { - // append new directory - $this->{$dirName}[] = $path; + $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, "/\\") . $this->ds, 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); } /** @@ -1076,27 +1107,34 @@ class Smarty extends Smarty_Internal_TemplateBase } else { $data = null; } - if ($this->caching && - isset($this->_cache['isCached'][$_templateId = $this->_getTemplateId($template, $cache_id, $compile_id)]) - ) { - $tpl = $do_clone ? clone $this->_cache['isCached'][$_templateId] : $this->_cache['isCached'][$_templateId]; - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); + if (!$this->_templateDirNormalized) { + $this->_nomalizeTemplateConfig(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(); + } else if (!$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, $parent, $cache_id, $compile_id, null, null); + $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; - } elseif ($parent === null) { - $tpl->parent = $this; } + $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); + $tpl->tpl_vars[ $_key ] = new Smarty_Variable($_val); } } if ($this->debugging || $this->debugging_ctrl == 'URL') { @@ -1128,26 +1166,31 @@ class Smarty extends Smarty_Internal_TemplateBase /** * Get unique template id * - * @param string $template_name - * @param null|mixed $cache_id - * @param null|mixed $compile_id - * @param null $caching + * @param string $template_name + * @param null|mixed $cache_id + * @param null|mixed $compile_id + * @param null $caching + * @param \Smarty_Internal_Template $template * * @return string */ - public function _getTemplateId($template_name, $cache_id = null, $compile_id = null, $caching = null) + 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 ($this->allow_ambiguous_resources) { + if ((isset($template) && strpos($template_name, ':.') !== false) || $this->allow_ambiguous_resources) { $_templateId = - Smarty_Resource::getUniqueTemplateName($this, $template_name) . "#{$cache_id}#{$compile_id}#{$caching}"; + 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])) { + if (isset($_templateId[ 150 ])) { $_templateId = sha1($_templateId); } return $_templateId; @@ -1158,36 +1201,66 @@ class Smarty extends Smarty_Internal_TemplateBase * - remove /./ and /../ * - make it absolute if required * - * @param string $path file path - * @param bool $realpath leave $path relative + * @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) { - static $pattern = null; - static $nds = null; - if ($pattern == null) { - $nds = DS == '/' ? '\\' : '/'; - $ds = '\\' . DS; - $pattern = - "#([{$ds}]+[^{$ds}]+[{$ds}]+[.]([{$ds}]+[.])*[.][{$ds}]+([.][{$ds}]+)*)|([{$ds}]+([.][{$ds}]+)+)|[{$ds}]{2,}#"; + $nds = $this->ds == '/' ? '\\' : '/'; + // normalize $this->ds + $path = str_replace($nds, $this->ds, $path); + preg_match('%^(?<root>(?:[[:alpha:]]:[\\\\]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?<path>(?:[[:print:]]*))$%', + $path, $parts); + $path = $parts[ 'path' ]; + if ($parts[ 'root' ] == '\\') { + $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ]; + } else { + if ($realpath !== null && !$parts[ 'root' ]) { + $path = getcwd() . $this->ds . $path; + } } - // normalize DS - if (strpos($path, $nds) !== false) { - $path = str_replace($nds, DS, $path); + // remove noop 'DIRECTORY_SEPARATOR DIRECTORY_SEPARATOR' and 'DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR' patterns + $path = preg_replace('#([\\\\/]([.]?[\\\\/])+)#', $this->ds, $path); + // resolve '..DIRECTORY_SEPARATOR' pattern, smallest first + if (strpos($path, '..' . $this->ds) != false && + preg_match_all('#(([.]?[\\\\/])*([.][.])[\\\\/]([.]?[\\\\/])*)+#', $path, $match) + ) { + $counts = array(); + foreach ($match[ 0 ] as $m) { + $counts[] = (int) ((strlen($m) - 1) / 3); + } + sort($counts); + foreach ($counts as $count) { + $path = preg_replace('#(([\\\\/]([.]?[\\\\/])*[^\\\\/.]+){' . $count . + '}[\\\\/]([.]?[\\\\/])*([.][.][\\\\/]([.]?[\\\\/])*){' . $count . '})(?=[^.])#', + $this->ds, $path); + } } - if ($realpath === true && (($path[0] !== '/' && DS == '/') || ($path[1] !== ':' && DS != '/'))) { - $path = getcwd() . DS . $path; - } - while ((strpos($path, '.' . DS) !== false) || (strpos($path, DS . DS) !== false)) { - $path = preg_replace($pattern, DS, $path); - } - if ($realpath === false && ($path[0] == '/' || $path[1] == ':')) { - $path = str_ireplace(getcwd(), '.', $path); - } - return $path; + return $parts[ 'root' ] . $path; + } + + /** + * Empty template objects cache + */ + public function _clearTemplateCache() + { + Smarty_Internal_Template::$isCacheTplObj = array(); + Smarty_Internal_Template::$tplObjCache = array(); + } + + /** + * Get Smarty object + * + * @return Smarty + */ + public function _getSmartyObj() + { + return $this; } /** @@ -1329,14 +1402,6 @@ class Smarty extends Smarty_Internal_TemplateBase } /** - * Class destructor - */ - public function __destruct() - { - $i = 0;// intentionally left blank - } - - /** * <<magic>> Generic getter. * Calls the appropriate getter function. * Issues an E_USER_NOTICE if no valid getter is found. @@ -1347,15 +1412,17 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function __get($name) { - - if (isset(self::$accessMap[$name])) { - $method = 'get' . self::$accessMap[$name]; + if (isset($this->accessMap[ $name ])) { + $method = 'get' . $this->accessMap[ $name ]; return $this->{$method}(); - } elseif (in_array($name, self::$obsoleteProperties)) { + } 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; } /** @@ -1368,10 +1435,10 @@ class Smarty extends Smarty_Internal_TemplateBase */ public function __set($name, $value) { - if (isset(self::$accessMap[$name])) { - $method = 'set' . self::$accessMap[$name]; + if (isset($this->accessMap[ $name ])) { + $method = 'set' . $this->accessMap[ $name ]; $this->{$method}($value); - } elseif (in_array($name, self::$obsoleteProperties)) { + } elseif (in_array($name, $this->obsoleteProperties)) { return; } else { if (is_object($value) && method_exists($value, $name)) { @@ -1393,17 +1460,17 @@ class Smarty extends Smarty_Internal_TemplateBase * @param $errline * @param $errcontext * - * @return boolean + * @return bool|void */ public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { $_is_muted_directory = false; // add the SMARTY_DIR to the list of muted directories - if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) { + if (!isset(Smarty::$_muted_directories[ SMARTY_DIR ])) { $smarty_dir = realpath(SMARTY_DIR); if ($smarty_dir !== false) { - Smarty::$_muted_directories[SMARTY_DIR] = + Smarty::$_muted_directories[ SMARTY_DIR ] = array('file' => $smarty_dir, 'length' => strlen($smarty_dir),); } } @@ -1415,17 +1482,16 @@ class Smarty extends Smarty_Internal_TemplateBase $file = realpath($key); if ($file === false) { // this directory does not exist, remove and skip it - unset(Smarty::$_muted_directories[$key]); + unset(Smarty::$_muted_directories[ $key ]); continue; } $dir = array('file' => $file, 'length' => strlen($file),); } - if (!strncmp($errfile, $dir['file'], $dir['length'])) { + if (!strncmp($errfile, $dir[ 'file' ], $dir[ 'length' ])) { $_is_muted_directory = true; break; } } - // pass to next error handler if this error did not occur inside SMARTY_DIR // or the error was within smarty but masked to be ignored if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { @@ -1436,6 +1502,7 @@ class Smarty extends Smarty_Internal_TemplateBase return false; } } + return; } /** diff --git a/library/Smarty/libs/SmartyBC.class.php b/vendor/smarty/smarty/libs/SmartyBC.class.php index 1dd529c9c..3955e4f24 100644 --- a/library/Smarty/libs/SmartyBC.class.php +++ b/vendor/smarty/smarty/libs/SmartyBC.class.php @@ -31,7 +31,7 @@ require_once(dirname(__FILE__) . '/Smarty.class.php'); /** - * Smarty Backward Compatability Wrapper Class + * Smarty Backward Compatibility Wrapper Class * * @package Smarty */ @@ -54,11 +54,10 @@ class SmartyBC extends Smarty /** * Initialize new SmartyBC object * - * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false ) */ - public function __construct(array $options = array()) + public function __construct() { - parent::__construct($options); + parent::__construct(); } /** @@ -108,7 +107,7 @@ class SmartyBC extends Smarty } /** - * Unregisters custom function + * Unregister custom function * * @param string $function name of template function */ @@ -129,7 +128,8 @@ class SmartyBC extends Smarty * @throws SmartyException * @internal param array $block_functs list of methods that are block format */ - public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) + public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, + $block_methods = array()) { settype($allowed, 'array'); settype($smarty_args, 'boolean'); @@ -137,7 +137,7 @@ class SmartyBC extends Smarty } /** - * Unregisters object + * Unregister object * * @param string $object name of template object */ @@ -160,7 +160,7 @@ class SmartyBC extends Smarty } /** - * Unregisters block function + * Unregister block function * * @param string $block name of template function */ @@ -182,7 +182,7 @@ class SmartyBC extends Smarty } /** - * Unregisters compiler function + * Unregister compiler function * * @param string $function name of template function */ @@ -203,7 +203,7 @@ class SmartyBC extends Smarty } /** - * Unregisters modifier + * Unregister modifier * * @param string $modifier name of template modifier */ @@ -224,7 +224,7 @@ class SmartyBC extends Smarty } /** - * Unregisters a resource + * Unregister a resource * * @param string $type name of resource */ @@ -245,7 +245,7 @@ class SmartyBC extends Smarty } /** - * Unregisters a prefilter function + * Unregister a prefilter function * * @param callable $function */ @@ -266,7 +266,7 @@ class SmartyBC extends Smarty } /** - * Unregisters a postfilter function + * Unregister a postfilter function * * @param callable $function */ @@ -287,7 +287,7 @@ class SmartyBC extends Smarty } /** - * Unregisters an outputfilter function + * Unregister an outputfilter function * * @param callable $function */ diff --git a/vendor/smarty/smarty/libs/bootstrap.php b/vendor/smarty/smarty/libs/bootstrap.php new file mode 100644 index 000000000..32096087f --- /dev/null +++ b/vendor/smarty/smarty/libs/bootstrap.php @@ -0,0 +1,17 @@ +<?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')) { + require __DIR__ . '/Autoloader.php'; +} +Smarty_Autoloader::register(); diff --git a/library/Smarty/libs/debug.tpl b/vendor/smarty/smarty/libs/debug.tpl index 5526cbca8..5526cbca8 100644 --- a/library/Smarty/libs/debug.tpl +++ b/vendor/smarty/smarty/libs/debug.tpl diff --git a/library/Smarty/libs/plugins/block.textformat.php b/vendor/smarty/smarty/libs/plugins/block.textformat.php index abf544939..e2c5e3de4 100644 --- a/library/Smarty/libs/plugins/block.textformat.php +++ b/vendor/smarty/smarty/libs/plugins/block.textformat.php @@ -38,6 +38,9 @@ function smarty_block_textformat($params, $content, $template, &$repeat) if (is_null($content)) { return; } + if (Smarty::$_MBSTRING && !is_callable('smarty_mb_wordwrap')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); + } $style = null; $indent = 0; @@ -83,14 +86,15 @@ function smarty_block_textformat($params, $content, $template, &$repeat) continue; } // convert mult. spaces & special chars to single space - $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph); + $_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) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); } else { $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); diff --git a/vendor/smarty/smarty/libs/plugins/function.counter.php b/vendor/smarty/smarty/libs/plugins/function.counter.php new file mode 100644 index 000000000..bcc8f498c --- /dev/null +++ b/vendor/smarty/smarty/libs/plugins/function.counter.php @@ -0,0 +1,73 @@ +<?php +/** + * Smarty plugin + * + * @package Smarty + * @subpackage PluginsFunction + */ + +/** + * Smarty {counter} function plugin + * Type: function<br> + * Name: counter<br> + * Purpose: print out a counter value + * + * @author Monte Ohrt <monte at ohrt dot com> + * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * + * @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/library/Smarty/libs/plugins/function.cycle.php b/vendor/smarty/smarty/libs/plugins/function.cycle.php index 8dc5cd9d5..a76d49aed 100644 --- a/library/Smarty/libs/plugins/function.cycle.php +++ b/vendor/smarty/smarty/libs/plugins/function.cycle.php @@ -48,58 +48,56 @@ 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; + $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'])) { + 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; + if (isset($cycle_vars[ $name ][ 'values' ]) && $cycle_vars[ $name ][ 'values' ] != $params[ 'values' ]) { + $cycle_vars[ $name ][ 'index' ] = 0; } - $cycle_vars[$name]['values'] = $params['values']; + $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 (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']; + if (is_array($cycle_vars[ $name ][ 'values' ])) { + $cycle_array = $cycle_vars[ $name ][ 'values' ]; } else { - $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']); + $cycle_array = explode($cycle_vars[ $name ][ 'delimiter' ], $cycle_vars[ $name ][ 'values' ]); } - if (!isset($cycle_vars[$name]['index']) || $reset) { - $cycle_vars[$name]['index'] = 0; + if (!isset($cycle_vars[ $name ][ 'index' ]) || $reset) { + $cycle_vars[ $name ][ 'index' ] = 0; } - if (isset($params['assign'])) { + if (isset($params[ 'assign' ])) { $print = false; - $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); + $template->assign($params[ 'assign' ], $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]); } if ($print) { - $retval = $cycle_array[$cycle_vars[$name]['index']]; + $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; + if ($cycle_vars[ $name ][ 'index' ] >= count($cycle_array) - 1) { + $cycle_vars[ $name ][ 'index' ] = 0; } else { - $cycle_vars[$name]['index'] ++; + $cycle_vars[ $name ][ 'index' ] ++; } } diff --git a/library/Smarty/libs/plugins/function.fetch.php b/vendor/smarty/smarty/libs/plugins/function.fetch.php index 3506d4a8d..cb60dd918 100644 --- a/library/Smarty/libs/plugins/function.fetch.php +++ b/vendor/smarty/smarty/libs/plugins/function.fetch.php @@ -24,31 +24,31 @@ */ function smarty_function_fetch($params, $template) { - if (empty($params['file'])) { + 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); + if (stripos($params[ 'file' ], 'file://') === 0) { + $params[ 'file' ] = substr($params[ 'file' ], 7); } - $protocol = strpos($params['file'], '://'); + $protocol = strpos($params[ 'file' ], '://'); if ($protocol !== false) { - $protocol = strtolower(substr($params['file'], 0, $protocol)); + $protocol = strtolower(substr($params[ 'file' ], 0, $protocol)); } if (isset($template->smarty->security_policy)) { if ($protocol) { // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { + if (!$template->smarty->security_policy->isTrustedUri($params[ 'file' ])) { return; } } else { // local file - if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { + if (!$template->smarty->security_policy->isTrustedResourceDir($params[ 'file' ])) { return; } } @@ -57,26 +57,26 @@ function smarty_function_fetch($params, $template) $content = ''; if ($protocol == 'http') { // http fetch - if ($uri_parts = parse_url($params['file'])) { + if ($uri_parts = parse_url($params[ 'file' ])) { // set defaults - $host = $server_name = $uri_parts['host']; + $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'] : ''; + $uri = !empty($uri_parts[ 'path' ]) ? $uri_parts[ 'path' ] : '/'; + $uri .= !empty($uri_parts[ 'query' ]) ? '?' . $uri_parts[ 'query' ] : ''; $_is_proxy = false; - if (empty($uri_parts['port'])) { + if (empty($uri_parts[ 'port' ])) { $port = 80; } else { - $port = $uri_parts['port']; + $port = $uri_parts[ 'port' ]; } - if (!empty($uri_parts['user'])) { - $user = $uri_parts['user']; + if (!empty($uri_parts[ 'user' ])) { + $user = $uri_parts[ 'user' ]; } - if (!empty($uri_parts['pass'])) { - $pass = $uri_parts['pass']; + if (!empty($uri_parts[ 'pass' ])) { + $pass = $uri_parts[ 'pass' ]; } // loop through parameters, setup headers foreach ($params as $param_key => $param_value) { @@ -163,7 +163,7 @@ function smarty_function_fetch($params, $template) return; } else { if ($_is_proxy) { - fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + fputs($fp, 'GET ' . $params[ 'file' ] . " HTTP/1.0\r\n"); } else { fputs($fp, "GET $uri HTTP/1.0\r\n"); } @@ -195,10 +195,10 @@ function smarty_function_fetch($params, $template) fclose($fp); $csplit = preg_split("!\r\n\r\n!", $content, 2); - $content = $csplit[1]; + $content = $csplit[ 1 ]; - if (!empty($params['assign_headers'])) { - $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0])); + if (!empty($params[ 'assign_headers' ])) { + $template->assign($params[ 'assign_headers' ], preg_split("!\r\n!", $csplit[ 0 ])); } } } else { @@ -207,14 +207,14 @@ function smarty_function_fetch($params, $template) return; } } else { - $content = @file_get_contents($params['file']); + $content = @file_get_contents($params[ 'file' ]); if ($content === false) { - throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'"); + throw new SmartyException("{fetch} cannot read resource '" . $params[ 'file' ] . "'"); } } - if (!empty($params['assign'])) { - $template->assign($params['assign'], $content); + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $content); } else { return $content; } diff --git a/library/Smarty/libs/plugins/function.html_checkboxes.php b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php index d78680368..04ce45733 100644 --- a/library/Smarty/libs/plugins/function.html_checkboxes.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php @@ -45,7 +45,9 @@ */ function smarty_function_html_checkboxes($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } $name = 'checkbox'; $values = null; @@ -90,19 +92,21 @@ function smarty_function_html_checkboxes($params, $template) if (method_exists($_sel, "__toString")) { $_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); } else { - trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_checkboxes: selected attribute contains an object of class '" . + get_class($_sel) . "' without __toString() method", E_USER_NOTICE); continue; } } else { $_sel = smarty_function_escape_special_chars((string) $_sel); } - $selected[$_sel] = true; + $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); + 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); @@ -110,7 +114,8 @@ function smarty_function_html_checkboxes($params, $template) break; case 'checkboxes': - trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', + E_USER_WARNING); $options = (array) $_val; break; @@ -122,9 +127,10 @@ function smarty_function_html_checkboxes($params, $template) case 'disabled': case 'readonly': - if (!empty($params['strict'])) { + 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); + 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) { @@ -153,23 +159,28 @@ function smarty_function_html_checkboxes($params, $template) 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); + $_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); + $_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); + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $_html_result); } else { return implode("\n", $_html_result); } } -function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true) +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, + $label_ids, $escape = true) { $_output = ''; @@ -177,7 +188,8 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte if (method_exists($value, "__toString")) { $value = (string) $value->__toString(); } else { - trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_options: value is an object of class '" . get_class($value) . + "' without __toString() method", E_USER_NOTICE); return ''; } @@ -189,7 +201,8 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte if (method_exists($output, "__toString")) { $output = (string) $output->__toString(); } else { - trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_options: output is an object of class '" . get_class($output) . + "' without __toString() method", E_USER_NOTICE); return ''; } @@ -199,7 +212,8 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte if ($labels) { if ($label_ids) { - $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); + $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', + $name . '_' . $value)); $_output .= '<label for="' . $_id . '">'; } else { $_output .= '<label>'; @@ -219,7 +233,7 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte } if (is_array($selected)) { - if (isset($selected[$value])) { + if (isset($selected[ $value ])) { $_output .= ' checked="checked"'; } } elseif ($value === $selected) { diff --git a/library/Smarty/libs/plugins/function.html_image.php b/vendor/smarty/smarty/libs/plugins/function.html_image.php index 5037e8bd1..6da8fc544 100644 --- a/library/Smarty/libs/plugins/function.html_image.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_image.php @@ -38,7 +38,9 @@ */ function smarty_function_html_image($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } $alt = ''; $file = ''; @@ -48,7 +50,7 @@ function smarty_function_html_image($params, $template) $prefix = ''; $suffix = ''; $path_prefix = ''; - $basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : ''; + $basedir = isset($_SERVER[ 'DOCUMENT_ROOT' ]) ? $_SERVER[ 'DOCUMENT_ROOT' ] : ''; foreach ($params as $_key => $_val) { switch ($_key) { case 'file': @@ -90,26 +92,26 @@ function smarty_function_html_image($params, $template) return; } - if ($file[0] == '/') { + 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); + if (stripos($params[ 'file' ], 'file://') === 0) { + $params[ 'file' ] = substr($params[ 'file' ], 7); } - $protocol = strpos($params['file'], '://'); + $protocol = strpos($params[ 'file' ], '://'); if ($protocol !== false) { - $protocol = strtolower(substr($params['file'], 0, $protocol)); + $protocol = strtolower(substr($params[ 'file' ], 0, $protocol)); } if (isset($template->smarty->security_policy)) { if ($protocol) { // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { + if (!$template->smarty->security_policy->isTrustedUri($params[ 'file' ])) { return; } } else { @@ -120,7 +122,7 @@ function smarty_function_html_image($params, $template) } } - if (!isset($params['width']) || !isset($params['height'])) { + 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)) { @@ -138,26 +140,27 @@ function smarty_function_html_image($params, $template) } } - if (!isset($params['width'])) { - $width = $_image_data[0]; + if (!isset($params[ 'width' ])) { + $width = $_image_data[ 0 ]; } - if (!isset($params['height'])) { - $height = $_image_data[1]; + if (!isset($params[ 'height' ])) { + $height = $_image_data[ 1 ]; } } - if (isset($params['dpi'])) { - if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) { + 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']; + $_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; + return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . + $height . '"' . $extra . ' />' . $suffix; } diff --git a/library/Smarty/libs/plugins/function.html_options.php b/vendor/smarty/smarty/libs/plugins/function.html_options.php index 7ec3e065c..bc8f36e0b 100644 --- a/library/Smarty/libs/plugins/function.html_options.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_options.php @@ -35,7 +35,9 @@ */ function smarty_function_html_options($params) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } $name = null; $values = null; @@ -72,19 +74,21 @@ function smarty_function_html_options($params) if (method_exists($_sel, "__toString")) { $_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); } else { - trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_options: selected attribute contains an object of class '" . + get_class($_sel) . "' without __toString() method", E_USER_NOTICE); continue; } } else { $_sel = smarty_function_escape_special_chars((string) $_sel); } - $selected[$_sel] = true; + $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); + 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); @@ -96,9 +100,10 @@ function smarty_function_html_options($params) case 'disabled': case 'readonly': - if (!empty($params['strict'])) { + 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); + 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) { @@ -134,7 +139,7 @@ function smarty_function_html_options($params) } } else { foreach ($values as $_i => $_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_val = isset($output[ $_i ]) ? $output[ $_i ] : ''; $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); } } @@ -142,7 +147,9 @@ function smarty_function_html_options($params) 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"; + $_html_result = + '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . + '</select>' . "\n"; } return $_html_result; @@ -154,7 +161,7 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c $_key = smarty_function_escape_special_chars($key); $_html_result = '<option value="' . $_key . '"'; if (is_array($selected)) { - if (isset($selected[$_key])) { + if (isset($selected[ $_key ])) { $_html_result .= ' selected="selected"'; } } elseif ($_key === $selected) { @@ -166,7 +173,8 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c if (method_exists($value, "__toString")) { $value = smarty_function_escape_special_chars((string) $value->__toString()); } else { - trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_options: value is an object of class '" . get_class($value) . + "' without __toString() method", E_USER_NOTICE); return ''; } @@ -177,7 +185,9 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c $idx ++; } else { $_idx = 0; - $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx); + $_html_result = + smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, + $class, $_idx); $idx ++; } diff --git a/library/Smarty/libs/plugins/function.html_radios.php b/vendor/smarty/smarty/libs/plugins/function.html_radios.php index f121d5eae..6ef84328a 100644 --- a/library/Smarty/libs/plugins/function.html_radios.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_radios.php @@ -45,7 +45,9 @@ */ function smarty_function_html_radios($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } $name = 'radio'; $values = null; @@ -73,7 +75,8 @@ function smarty_function_html_radios($params, $template) if (method_exists($_val, "__toString")) { $selected = smarty_function_escape_special_chars((string) $_val->__toString()); } else { - trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . + "' without __toString() method", E_USER_NOTICE); } } else { $selected = (string) $_val; @@ -96,7 +99,8 @@ function smarty_function_html_radios($params, $template) break; case 'radios': - trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); + trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', + E_USER_WARNING); $options = (array) $_val; break; @@ -108,9 +112,10 @@ function smarty_function_html_radios($params, $template) case 'disabled': case 'readonly': - if (!empty($params['strict'])) { + 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); + 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) { @@ -141,23 +146,28 @@ function smarty_function_html_radios($params, $template) 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); + $_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); + $_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); + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $_html_result); } else { return implode("\n", $_html_result); } } -function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape) +function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, + $escape) { $_output = ''; @@ -165,7 +175,8 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $ if (method_exists($value, "__toString")) { $value = (string) $value->__toString(); } else { - trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_options: value is an object of class '" . get_class($value) . + "' without __toString() method", E_USER_NOTICE); return ''; } @@ -177,7 +188,8 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $ if (method_exists($output, "__toString")) { $output = (string) $output->__toString(); } else { - trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE); + trigger_error("html_options: output is an object of class '" . get_class($output) . + "' without __toString() method", E_USER_NOTICE); return ''; } @@ -187,7 +199,8 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $ if ($labels) { if ($label_ids) { - $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); + $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', + $name . '_' . $value)); $_output .= '<label for="' . $_id . '">'; } else { $_output .= '<label>'; diff --git a/library/Smarty/libs/plugins/function.html_select_date.php b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php index d66256651..3a48da0bb 100644 --- a/library/Smarty/libs/plugins/function.html_select_date.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php @@ -7,15 +7,6 @@ */ /** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - -/** * Smarty {html_select_date} plugin * Type: function<br> * Name: html_select_date<br> @@ -52,6 +43,12 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); */ function smarty_function_html_select_date($params) { + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } + if (!is_callable('smarty_make_timestamp')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); + } // generate timestamps used for month names only static $_month_timestamps = null; static $_current_year = null; @@ -59,7 +56,7 @@ function smarty_function_html_select_date($params) $_current_year = date('Y'); $_month_timestamps = array(); for ($i = 1; $i <= 12; $i ++) { - $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000); + $_month_timestamps[ $i ] = mktime(0, 0, 0, $i, 1, 2000); } } @@ -177,22 +174,21 @@ function smarty_function_html_select_date($params) // Note: date() is faster than strftime() // Note: explode(date()) is faster than date() date() date() - if (isset($params['time']) && is_array($params['time'])) { - if (isset($params['time'][$prefix . 'Year'])) { + if (isset($params[ 'time' ]) && is_array($params[ 'time' ])) { + if (isset($params[ 'time' ][ $prefix . 'Year' ])) { // $_REQUEST[$field_array] given foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { $_variableName = '_' . strtolower($_elementName); - $$_variableName = isset($params['time'][$prefix . $_elementName]) - ? $params['time'][$prefix . $_elementName] - : date($_elementKey); + $$_variableName = + isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] : + date($_elementKey); } - } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) { + } elseif (isset($params[ 'time' ][ $field_array ][ $prefix . 'Year' ])) { // $_REQUEST given foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { $_variableName = '_' . strtolower($_elementName); - $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName]) - ? $params['time'][$field_array][$prefix . $_elementName] - : date($_elementKey); + $$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ? + $params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey); } } else { // no date found, use NOW @@ -215,10 +211,10 @@ function smarty_function_html_select_date($params) $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))); + } 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; } @@ -243,13 +239,16 @@ function smarty_function_html_select_date($params) } if ($year_as_text) { - $_html_years = '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . $extra_attrs . ' />'; + $_html_years = + '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . + $extra_attrs . ' />'; } else { $_html_years = '<select name="' . $_name . '"'; if ($year_id !== null || $all_id !== null) { - $_html_years .= ' id="' . smarty_function_escape_special_chars( - $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; + $_html_years .= ' id="' . smarty_function_escape_special_chars($year_id !== null ? + ($year_id ? $year_id : $_name) : + ($all_id ? ($all_id . $_name) : + $_name)) . '"'; } if ($year_size) { $_html_years .= ' size="' . $year_size . '"'; @@ -257,14 +256,14 @@ function smarty_function_html_select_date($params) $_html_years .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($year_empty) || isset($all_empty)) { - $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator; + $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . + $option_separator; } $op = $start_year > $end_year ? - 1 : 1; for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) { - $_html_years .= '<option value="' . $i . '"' - . ($_year == $i ? ' selected="selected"' : '') - . '>' . $i . '</option>' . $option_separator; + $_html_years .= '<option value="' . $i . '"' . ($_year == $i ? ' selected="selected"' : '') . '>' . $i . + '</option>' . $option_separator; } $_html_years .= '</select>'; @@ -284,9 +283,10 @@ function smarty_function_html_select_date($params) $_html_months = '<select name="' . $_name . '"'; if ($month_id !== null || $all_id !== null) { - $_html_months .= ' id="' . smarty_function_escape_special_chars( - $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; + $_html_months .= ' id="' . smarty_function_escape_special_chars($month_id !== null ? + ($month_id ? $month_id : $_name) : + ($all_id ? ($all_id . $_name) : + $_name)) . '"'; } if ($month_size) { $_html_months .= ' size="' . $month_size . '"'; @@ -294,16 +294,17 @@ function smarty_function_html_select_date($params) $_html_months .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($month_empty) || isset($all_empty)) { - $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator; + $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . + $option_separator; } for ($i = 1; $i <= 12; $i ++) { $_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; + $_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>'; @@ -322,9 +323,9 @@ function smarty_function_html_select_date($params) $_html_days = '<select name="' . $_name . '"'; if ($day_id !== null || $all_id !== null) { - $_html_days .= ' id="' . smarty_function_escape_special_chars( - $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; + $_html_days .= ' id="' . + smarty_function_escape_special_chars($day_id !== null ? ($day_id ? $day_id : $_name) : + ($all_id ? ($all_id . $_name) : $_name)) . '"'; } if ($day_size) { $_html_days .= ' size="' . $day_size . '"'; @@ -332,16 +333,16 @@ function smarty_function_html_select_date($params) $_html_days .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($day_empty) || isset($all_empty)) { - $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator; + $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . + $option_separator; } for ($i = 1; $i <= 31; $i ++) { $_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 .= '<option value="' . $_value . '"' . ($_val == $_day ? ' selected="selected"' : '') . '>' . + $_text . '</option>' . $option_separator; } $_html_days .= '</select>'; @@ -350,7 +351,7 @@ function smarty_function_html_select_date($params) // order the fields for output $_html = ''; for ($i = 0; $i <= 2; $i ++) { - switch ($field_order[$i]) { + switch ($field_order[ $i ]) { case 'Y': case 'y': if (isset($_html_years)) { diff --git a/library/Smarty/libs/plugins/function.html_select_time.php b/vendor/smarty/smarty/libs/plugins/function.html_select_time.php index 9af6aad5b..89f0406f6 100644 --- a/library/Smarty/libs/plugins/function.html_select_time.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_select_time.php @@ -7,15 +7,6 @@ */ /** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - -/** * Smarty {html_select_time} function plugin * Type: function<br> * Name: html_select_time<br> @@ -33,6 +24,12 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); */ function smarty_function_html_select_time($params) { + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } + if (!is_callable('smarty_make_timestamp')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); + } $prefix = "Time_"; $field_array = null; $field_separator = "\n"; @@ -148,31 +145,29 @@ function smarty_function_html_select_time($params) } } - if (isset($params['time']) && is_array($params['time'])) { - if (isset($params['time'][$prefix . 'Hour'])) { + 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); + $$_variableName = + isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] : + date($_elementKey); } - $_meridian = isset($params['time'][$prefix . 'Meridian']) - ? (' ' . $params['time'][$prefix . 'Meridian']) - : ''; + $_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'])) { + } 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); + $$_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']) - : ''; + $_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 { @@ -203,9 +198,9 @@ function smarty_function_html_select_time($params) $_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) - ) . '"'; + $_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 . '"'; @@ -213,7 +208,8 @@ function smarty_function_html_select_time($params) $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($hour_empty) || isset($all_empty)) { - $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator; + $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . + $option_separator; } $start = $use_24_hours ? 0 : 1; @@ -224,15 +220,12 @@ function smarty_function_html_select_time($params) $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i); if (!$use_24_hours) { - $_hour12 = $_hour == 0 - ? 12 - : ($_hour <= 12 ? $_hour : $_hour - 12); + $_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 .= '<option value="' . $_value . '"' . ($selected ? ' selected="selected"' : '') . '>' . + $_text . '</option>' . $option_separator; } $_html_hours .= '</select>'; @@ -252,9 +245,10 @@ function smarty_function_html_select_time($params) $_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) - ) . '"'; + $_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 . '"'; @@ -262,7 +256,8 @@ function smarty_function_html_select_time($params) $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($minute_empty) || isset($all_empty)) { - $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator; + $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . + $option_separator; } $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; @@ -270,9 +265,8 @@ function smarty_function_html_select_time($params) $_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 .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') . + '>' . $_text . '</option>' . $option_separator; } $_html_minutes .= '</select>'; @@ -292,9 +286,10 @@ function smarty_function_html_select_time($params) $_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) - ) . '"'; + $_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 . '"'; @@ -302,7 +297,8 @@ function smarty_function_html_select_time($params) $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($second_empty) || isset($all_empty)) { - $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator; + $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . + $option_separator; } $selected = $_second !== null ? ($_second - $_second % $second_interval) : null; @@ -310,9 +306,8 @@ function smarty_function_html_select_time($params) $_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 .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') . + '>' . $_text . '</option>' . $option_separator; } $_html_seconds .= '</select>'; @@ -332,9 +327,11 @@ function smarty_function_html_select_time($params) $_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) - ) . '"'; + $_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 . '"'; @@ -342,12 +339,14 @@ function smarty_function_html_select_time($params) $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator; if (isset($meridian_empty) || isset($all_empty)) { - $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator; + $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . + '</option>' . $option_separator; } - $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator - . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator - . '</select>'; + $_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 = ''; diff --git a/library/Smarty/libs/plugins/function.html_table.php b/vendor/smarty/smarty/libs/plugins/function.html_table.php index ec7ba48a4..42e23e722 100644 --- a/library/Smarty/libs/plugins/function.html_table.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_table.php @@ -62,7 +62,7 @@ function smarty_function_html_table($params) $caption = ''; $loop = null; - if (!isset($params['loop'])) { + if (!isset($params[ 'loop' ])) { trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING); return; @@ -110,11 +110,11 @@ function smarty_function_html_table($params) } $loop_count = count($loop); - if (empty($params['rows'])) { + if (empty($params[ 'rows' ])) { /* no rows specified */ $rows = ceil($loop_count / $cols_count); - } elseif (empty($params['cols'])) { - if (!empty($params['rows'])) { + } elseif (empty($params[ 'cols' ])) { + if (!empty($params[ 'rows' ])) { /* no cols specified, but rows */ $cols_count = ceil($loop_count / $rows); } @@ -132,7 +132,7 @@ function smarty_function_html_table($params) for ($r = 0; $r < $cols_count; $r ++) { $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>'; - $output .= $cols[$r]; + $output .= $cols[ $r ]; $output .= "</th>\n"; } $output .= "</tr></thead>\n"; @@ -151,7 +151,7 @@ function smarty_function_html_table($params) } if ($x < $loop_count) { - $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n"; + $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"; } @@ -169,7 +169,7 @@ function smarty_function_html_table_cycle($name, $var, $no) if (!is_array($var)) { $ret = $var; } else { - $ret = $var[$no % count($var)]; + $ret = $var[ $no % count($var) ]; } return ($ret) ? ' ' . $ret : ''; diff --git a/library/Smarty/libs/plugins/function.mailto.php b/vendor/smarty/smarty/libs/plugins/function.mailto.php index 520fb7aa6..9d2a5d2d5 100644 --- a/library/Smarty/libs/plugins/function.mailto.php +++ b/vendor/smarty/smarty/libs/plugins/function.mailto.php @@ -50,15 +50,16 @@ */ function smarty_function_mailto($params) { - static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true); + static $_allowed_encoding = + array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true); $extra = ''; - if (empty($params['address'])) { + if (empty($params[ 'address' ])) { trigger_error("mailto: missing 'address' parameter", E_USER_WARNING); return; } else { - $address = $params['address']; + $address = $params[ 'address' ]; } $text = $address; @@ -72,9 +73,9 @@ function smarty_function_mailto($params) case 'cc': case 'bcc': case 'followupto': - if (!empty($value)) { - $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value)); - } + if (!empty($value)) { + $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value)); + } break; case 'subject': @@ -94,9 +95,10 @@ function smarty_function_mailto($params) $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); + $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; } @@ -106,7 +108,7 @@ function smarty_function_mailto($params) $js_encode = ''; for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) { - $js_encode .= '%' . bin2hex($string[$x]); + $js_encode .= '%' . bin2hex($string[ $x ]); } return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>'; @@ -114,35 +116,31 @@ function smarty_function_mailto($params) $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; for ($x = 0, $y = strlen($string); $x < $y; $x ++) { - $ord[] = ord($string[$x]); + $ord[] = ord($string[ $x ]); } - $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n" - . "{document.write(String.fromCharCode(" - . implode(',', $ord) - . "))" - . "}\n" - . "</script>\n"; + $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n" . "{document.write(String.fromCharCode(" . + implode(',', $ord) . "))" . "}\n" . "</script>\n"; return $_ret; } elseif ($encode == 'hex') { preg_match('!^(.*)(\?.*)$!', $address, $match); - if (!empty($match[2])) { + 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]); + if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[ $x ])) { + $address_encode .= '%' . bin2hex($address[ $x ]); } else { - $address_encode .= $address[$x]; + $address_encode .= $address[ $x ]; } } $text_encode = ''; for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) { - $text_encode .= '&#x' . bin2hex($text[$x]) . ';'; + $text_encode .= '&#x' . bin2hex($text[ $x ]) . ';'; } $mailto = "mailto:"; diff --git a/vendor/smarty/smarty/libs/plugins/function.math.php b/vendor/smarty/smarty/libs/plugins/function.math.php new file mode 100644 index 000000000..fc5db335c --- /dev/null +++ b/vendor/smarty/smarty/libs/plugins/function.math.php @@ -0,0 +1,109 @@ +<?php +/** + * Smarty plugin + * This plugin is only for Smarty2 BC + * + * @package Smarty + * @subpackage PluginsFunction + */ + +/** + * Smarty {math} function plugin + * Type: function<br> + * Name: math<br> + * Purpose: handle math computations in template + * + * @link http://www.smarty.net/manual/en/language.function.math.php {math} + * (Smarty online manual) + * @author Monte Ohrt <monte at ohrt dot com> + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @return string|null + */ +function smarty_function_math($params, $template) +{ + static $_allowed_funcs = + array('int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true, + 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true, 'rand' => true, + 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true); + // be sure equation parameter is present + if (empty($params[ 'equation' ])) { + trigger_error("math: missing equation parameter", E_USER_WARNING); + + return; + } + + $equation = $params[ 'equation' ]; + + // make sure parenthesis are balanced + if (substr_count($equation, "(") != substr_count($equation, ")")) { + trigger_error("math: unbalanced parenthesis", E_USER_WARNING); + + 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/library/Smarty/libs/plugins/modifier.capitalize.php b/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php index a8ad76370..6513a0495 100644 --- a/library/Smarty/libs/plugins/modifier.capitalize.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php @@ -29,17 +29,23 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals $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); + $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])); + 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); + $upper_string = + preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', + $upper_string); return $upper_string; } @@ -48,16 +54,21 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals $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); + $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])); + 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); + $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', + $upper_string); return $upper_string; } @@ -71,20 +82,20 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals */ function smarty_mod_cap_mbconvert_cb($matches) { - return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET); + return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET); } function smarty_mod_cap_mbconvert2_cb($matches) { - return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET); + return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET); } function smarty_mod_cap_ucfirst_cb($matches) { - return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2])); + return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ])); } function smarty_mod_cap_ucfirst2_cb($matches) { - return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3])); + return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ])); } diff --git a/library/Smarty/libs/plugins/modifier.date_format.php b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php index 28d6ff021..bfe363c08 100644 --- a/library/Smarty/libs/plugins/modifier.date_format.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php @@ -35,7 +35,9 @@ function smarty_modifier_date_format($string, $format = null, $default_date = '' /** * require_once the {@link shared.make_timestamp.php} plugin */ - require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); + if (!is_callable('smarty_make_timestamp')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); + } if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { $timestamp = smarty_make_timestamp($string); } elseif ($default_date != '') { @@ -44,7 +46,7 @@ function smarty_modifier_date_format($string, $format = null, $default_date = '' return; } if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) { - if (DS == '\\') { + 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) { diff --git a/library/Smarty/libs/plugins/modifier.debug_print_var.php b/vendor/smarty/smarty/libs/plugins/modifier.debug_print_var.php index 4ff8213ce..34f85dcd5 100644 --- a/library/Smarty/libs/plugins/modifier.debug_print_var.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.debug_print_var.php @@ -24,10 +24,7 @@ */ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array()) { - $_replace = array("\n" => '\n', - "\r" => '\r', - "\t" => '\t' - ); + $_replace = array("\n" => '\n', "\r" => '\r', "\t" => '\t'); switch (gettype($var)) { case 'array' : $results = '<b>Array (' . count($var) . ')</b>'; @@ -35,9 +32,9 @@ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = break; } foreach ($var as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat(' ', $depth * 2) - . '<b>' . strtr($curr_key, $_replace) . '</b> => ' - . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); + $results .= '<br>' . str_repeat(' ', $depth * 2) . '<b>' . strtr($curr_key, $_replace) . + '</b> => ' . + smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); $depth --; } break; @@ -54,9 +51,8 @@ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = } $objects[] = $var; foreach ($object_vars as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat(' ', $depth * 2) - . '<b> ->' . strtr($curr_key, $_replace) . '</b> = ' - . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); + $results .= '<br>' . str_repeat(' ', $depth * 2) . '<b> ->' . strtr($curr_key, $_replace) . + '</b> = ' . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); $depth --; } break; @@ -88,12 +84,12 @@ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...'; } } else { - if (isset($var[$length])) { + if (isset($var[ $length ])) { $results = substr($var, 0, $length - 3) . '...'; } } - $results = htmlspecialchars('"' . $results . '"'); + $results = htmlspecialchars('"' . $results . '"', ENT_QUOTES, Smarty::$_CHARSET); break; case 'unknown type' : @@ -109,7 +105,7 @@ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = } } - $results = htmlspecialchars($results); + $results = htmlspecialchars($results, ENT_QUOTES, Smarty::$_CHARSET); } return $results; diff --git a/library/Smarty/libs/plugins/modifier.escape.php b/vendor/smarty/smarty/libs/plugins/modifier.escape.php index 9fdb0702f..9c247b933 100644 --- a/library/Smarty/libs/plugins/modifier.escape.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.escape.php @@ -66,7 +66,8 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ // php <5.2.3 - prevent double encoding $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = htmlspecialchars($string, ENT_QUOTES, $char_set); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); + $string = + str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); return $string; } @@ -107,7 +108,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ $return = ''; $_length = strlen($string); for ($x = 0; $x < $_length; $x ++) { - $return .= '%' . bin2hex($string[$x]); + $return .= '%' . bin2hex($string[ $x ]); } return $return; @@ -115,7 +116,9 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ case 'hexentity': $return = ''; if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); + if (!is_callable('smarty_mb_to_unicode')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); + } $return = ''; foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { $return .= '&#x' . strtoupper(dechex($unicode)) . ';'; @@ -126,7 +129,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ // no MBString fallback $_length = strlen($string); for ($x = 0; $x < $_length; $x ++) { - $return .= '&#x' . bin2hex($string[$x]) . ';'; + $return .= '&#x' . bin2hex($string[ $x ]) . ';'; } return $return; @@ -134,7 +137,9 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ case 'decentity': $return = ''; if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); + if (!is_callable('smarty_mb_to_unicode')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); + } $return = ''; foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { $return .= '&#' . $unicode . ';'; @@ -145,19 +150,21 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ // no MBString fallback $_length = strlen($string); for ($x = 0; $x < $_length; $x ++) { - $return .= '&#' . ord($string[$x]) . ';'; + $return .= '&#' . ord($string[ $x ]) . ';'; } return $return; case 'javascript': // escape quotes and backslashes, newlines, etc. - return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', '</' => '<\/')); + return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', + '</' => '<\/')); case 'mail': if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); - + if (!is_callable('smarty_mb_str_replace')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); + } return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); } // no MBString fallback @@ -167,7 +174,9 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ // escape non-standard chars, such as ms document quotes $return = ''; if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); + if (!is_callable('smarty_mb_to_unicode')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); + } foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { if ($unicode >= 126) { $return .= '&#' . $unicode . ';'; diff --git a/library/Smarty/libs/plugins/modifier.regex_replace.php b/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php index ffea16755..85f41fdda 100644 --- a/library/Smarty/libs/plugins/modifier.regex_replace.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php @@ -23,11 +23,11 @@ * * @return string */ -function smarty_modifier_regex_replace($string, $search, $replace, $limit = -1) +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); + $search[ $idx ] = _smarty_regex_replace_check($s); } } else { $search = _smarty_regex_replace_check($search); @@ -50,8 +50,8 @@ function _smarty_regex_replace_check($search) $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]); + 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/library/Smarty/libs/plugins/modifier.replace.php b/vendor/smarty/smarty/libs/plugins/modifier.replace.php index aa5e8570b..9dca259d5 100644 --- a/library/Smarty/libs/plugins/modifier.replace.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.replace.php @@ -25,8 +25,9 @@ function smarty_modifier_replace($string, $search, $replace) { if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); - + if (!is_callable('smarty_mb_str_replace')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); + } return smarty_mb_str_replace($search, $replace, $string); } diff --git a/library/Smarty/libs/plugins/modifier.spacify.php b/vendor/smarty/smarty/libs/plugins/modifier.spacify.php index e5c41ad8b..e5c41ad8b 100644 --- a/library/Smarty/libs/plugins/modifier.spacify.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.spacify.php diff --git a/library/Smarty/libs/plugins/modifier.truncate.php b/vendor/smarty/smarty/libs/plugins/modifier.truncate.php index fbe62e823..6fe844259 100644 --- a/library/Smarty/libs/plugins/modifier.truncate.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.truncate.php @@ -35,20 +35,22 @@ function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_wo 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)); + $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', + mb_substr($string, 0, $length + 1, Smarty::$_CHARSET)); } if (!$middle) { return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc; } - return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET); + return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . + mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET); } return $string; } // no MBString fallback - if (isset($string[$length])) { + if (isset($string[ $length ])) { $length -= min($length, strlen($etc)); if (!$break_words && !$middle) { $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); diff --git a/library/Smarty/libs/plugins/modifiercompiler.cat.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php index db9d81fbf..db9d81fbf 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.cat.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_characters.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php index f8463d80a..0a3ce257b 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.count_characters.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php @@ -21,12 +21,12 @@ */ 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 (!isset($params[ 1 ]) || $params[ 1 ] != 'true') { + return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[ 0 ] . ', $tmp)'; } if (Smarty::$_MBSTRING) { - return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; + return 'mb_strlen(' . $params[ 0 ] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; } // no MBString fallback - return 'strlen(' . $params[0] . ')'; + return 'strlen(' . $params[ 0 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php index 34f0bbb8a..f7f447763 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php @@ -23,5 +23,5 @@ function smarty_modifiercompiler_count_paragraphs($params) { // count \r or \n characters - return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)'; + return '(preg_match_all(\'#[\r\n]+#\', ' . $params[ 0 ] . ', $tmp)+1)'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php index f1ec56007..20032925e 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php @@ -23,5 +23,5 @@ 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)'; + return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[ 0 ] . ', $tmp)'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_words.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php index 8b4330f1e..f20a197cd 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.count_words.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php @@ -24,8 +24,9 @@ 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)'; + 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(' . $params[0] . ')'; + return 'str_word_count(' . $params[ 0 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.default.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php index fe777623e..2c4c00a37 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.default.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php @@ -21,9 +21,9 @@ */ function smarty_modifiercompiler_default($params) { - $output = $params[0]; - if (!isset($params[1])) { - $params[1] = "''"; + $output = $params[ 0 ]; + if (!isset($params[ 1 ])) { + $params[ 1 ] = "''"; } array_shift($params); diff --git a/library/Smarty/libs/plugins/modifiercompiler.escape.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php index 0b29220ef..11565c2d9 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.escape.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php @@ -7,11 +7,6 @@ */ /** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'); - -/** * Smarty escape modifier plugin * Type: modifier<br> * Name: escape<br> @@ -28,6 +23,9 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'); function smarty_modifiercompiler_escape($params, $compiler) { static $_double_encode = null; + if (!is_callable('smarty_literal_compiler_param')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'); + } if ($_double_encode === null) { $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); } @@ -44,14 +42,10 @@ function smarty_modifiercompiler_escape($params, $compiler) switch ($esc_type) { case 'html': if ($_double_encode) { - return 'htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ', ' - . var_export($double_encode, true) . ')'; + return 'htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' . + var_export($double_encode, true) . ')'; } elseif ($double_encode) { - return 'htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ')'; + return 'htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ')'; } else { // fall back to modifier.escape.php } @@ -60,19 +54,13 @@ function smarty_modifiercompiler_escape($params, $compiler) if (Smarty::$_MBSTRING) { if ($_double_encode) { // php >=5.2.3 - go native - return 'mb_convert_encoding(htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ', ' - . var_export($double_encode, true) - . '), "HTML-ENTITIES", ' - . var_export($char_set, true) . ')'; + return 'mb_convert_encoding(htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' . + var_export($char_set, true) . ', ' . var_export($double_encode, true) . + '), "HTML-ENTITIES", ' . var_export($char_set, true) . ')'; } elseif ($double_encode) { // php <5.2.3 - only handle double encoding - return 'mb_convert_encoding(htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) - . '), "HTML-ENTITIES", ' - . var_export($char_set, true) . ')'; + return 'mb_convert_encoding(htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' . + var_export($char_set, true) . '), "HTML-ENTITIES", ' . var_export($char_set, true) . ')'; } else { // fall back to modifier.escape.php } @@ -81,32 +69,29 @@ function smarty_modifiercompiler_escape($params, $compiler) // no MBString fallback if ($_double_encode) { // php >=5.2.3 - go native - return 'htmlentities(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ', ' - . var_export($double_encode, true) . ')'; + return 'htmlentities(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' . + var_export($double_encode, true) . ')'; } elseif ($double_encode) { // php <5.2.3 - only handle double encoding - return 'htmlentities(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ')'; + return 'htmlentities(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ')'; } else { // fall back to modifier.escape.php } case 'url': - return 'rawurlencode(' . $params[0] . ')'; + return 'rawurlencode(' . $params[ 0 ] . ')'; case 'urlpathinfo': - return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))'; + return 'str_replace("%2F", "/", rawurlencode(' . $params[ 0 ] . '))'; case 'quotes': // escape unescaped single quotes - return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')'; + return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[ 0 ] . ')'; case 'javascript': // escape quotes and backslashes, newlines, etc. - return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))'; + return 'strtr(' . $params[ 0 ] . + ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))'; } } catch (SmartyException $e) { @@ -115,11 +100,15 @@ function smarty_modifiercompiler_escape($params, $compiler) // could not optimize |escape call, so fallback to regular plugin if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { - $compiler->parent_compiler->template->compiled->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->parent_compiler->template->compiled->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'file' ] = + SMARTY_PLUGINS_DIR . 'modifier.escape.php'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'function' ] = + 'smarty_modifier_escape'; } else { - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'file' ] = + SMARTY_PLUGINS_DIR . 'modifier.escape.php'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'function' ] = + 'smarty_modifier_escape'; } return 'smarty_modifier_escape(' . join(', ', $params) . ')'; diff --git a/library/Smarty/libs/plugins/modifiercompiler.from_charset.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.from_charset.php index dab43e9c3..e25a95749 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.from_charset.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.from_charset.php @@ -22,12 +22,12 @@ function smarty_modifiercompiler_from_charset($params) { if (!Smarty::$_MBSTRING) { // FIXME: (rodneyrehm) shouldn't this throw an error? - return $params[0]; + return $params[ 0 ]; } - if (!isset($params[1])) { - $params[1] = '"ISO-8859-1"'; + if (!isset($params[ 1 ])) { + $params[ 1 ] = '"ISO-8859-1"'; } - return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')'; + return 'mb_convert_encoding(' . $params[ 0 ] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[ 1 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.indent.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php index e3ca20821..851f18448 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.indent.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php @@ -22,12 +22,12 @@ function smarty_modifiercompiler_indent($params) { - if (!isset($params[1])) { - $params[1] = 4; + if (!isset($params[ 1 ])) { + $params[ 1 ] = 4; } - if (!isset($params[2])) { - $params[2] = "' '"; + if (!isset($params[ 2 ])) { + $params[ 2 ] = "' '"; } - return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')'; + return 'preg_replace(\'!^!m\',str_repeat(' . $params[ 2 ] . ',' . $params[ 1 ] . '),' . $params[ 0 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.lower.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php index 1d255f371..a335eff7f 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.lower.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php @@ -24,8 +24,8 @@ function smarty_modifiercompiler_lower($params) { if (Smarty::$_MBSTRING) { - return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; + return 'mb_strtolower(' . $params[ 0 ] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; } // no MBString fallback - return 'strtolower(' . $params[0] . ')'; + return 'strtolower(' . $params[ 0 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.noprint.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.noprint.php index 4906908b4..4906908b4 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.noprint.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.noprint.php diff --git a/library/Smarty/libs/plugins/modifiercompiler.string_format.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php index 71cdf2819..bcf9883db 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.string_format.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php @@ -21,5 +21,5 @@ */ function smarty_modifiercompiler_string_format($params) { - return 'sprintf(' . $params[1] . ',' . $params[0] . ')'; + return 'sprintf(' . $params[ 1 ] . ',' . $params[ 0 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.strip.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php index fcd6cbaea..8173eed8f 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.strip.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php @@ -25,8 +25,8 @@ function smarty_modifiercompiler_strip($params) { - if (!isset($params[1])) { - $params[1] = "' '"; + if (!isset($params[ 1 ])) { + $params[ 1 ] = "' '"; } return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})"; diff --git a/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php index da5d364cb..e56bf9315 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php @@ -21,9 +21,9 @@ */ function smarty_modifiercompiler_strip_tags($params) { - if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') { + if (!isset($params[ 1 ]) || $params[ 1 ] === true || trim($params[ 1 ], '"') == 'true') { return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; } else { - return 'strip_tags(' . $params[0] . ')'; + return 'strip_tags(' . $params[ 0 ] . ')'; } } diff --git a/library/Smarty/libs/plugins/modifiercompiler.to_charset.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.to_charset.php index 9122d8bbb..fea8d8273 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.to_charset.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.to_charset.php @@ -22,12 +22,12 @@ function smarty_modifiercompiler_to_charset($params) { if (!Smarty::$_MBSTRING) { // FIXME: (rodneyrehm) shouldn't this throw an error? - return $params[0]; + return $params[ 0 ]; } - if (!isset($params[1])) { - $params[1] = '"ISO-8859-1"'; + if (!isset($params[ 1 ])) { + $params[ 1 ] = '"ISO-8859-1"'; } - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")'; + 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 new file mode 100644 index 000000000..a3409bc73 --- /dev/null +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php @@ -0,0 +1,50 @@ +<?php +/** + * Smarty plugin + * + * @package Smarty + * @subpackage PluginsModifierCompiler + */ + +/** + * Smarty unescape modifier plugin + * Type: modifier<br> + * Name: unescape<br> + * Purpose: unescape html entities + * + * @author Rodney Rehm + * + * @param array $params parameters + * + * @return string with compiled code + */ +function smarty_modifiercompiler_unescape($params) +{ + if (!isset($params[ 1 ])) { + $params[ 1 ] = 'html'; + } + if (!isset($params[ 2 ])) { + $params[ 2 ] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; + } else { + $params[ 2 ] = "'" . $params[ 2 ] . "'"; + } + + switch (trim($params[ 1 ], '"\'')) { + case 'entity': + case 'htmlall': + if (Smarty::$_MBSTRING) { + return 'mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 2 ] . ', \'HTML-ENTITIES\')'; + } + + return 'html_entity_decode(' . $params[ 0 ] . ', ENT_NOQUOTES, ' . $params[ 2 ] . ')'; + + case 'html': + return 'htmlspecialchars_decode(' . $params[ 0 ] . ', ENT_QUOTES)'; + + case 'url': + return 'rawurldecode(' . $params[ 0 ] . ')'; + + default: + return $params[ 0 ]; + } +} diff --git a/library/Smarty/libs/plugins/modifiercompiler.upper.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php index 52ca4e8ff..a083c4f7e 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.upper.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php @@ -22,8 +22,8 @@ function smarty_modifiercompiler_upper($params) { if (Smarty::$_MBSTRING) { - return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; + return 'mb_strtoupper(' . $params[ 0 ] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; } // no MBString fallback - return 'strtoupper(' . $params[0] . ')'; + return 'strtoupper(' . $params[ 0 ] . ')'; } diff --git a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php index 6bb63247d..91849738e 100644 --- a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php @@ -22,26 +22,30 @@ */ function smarty_modifiercompiler_wordwrap($params, $compiler) { - if (!isset($params[1])) { - $params[1] = 80; + if (!isset($params[ 1 ])) { + $params[ 1 ] = 80; } - if (!isset($params[2])) { - $params[2] = '"\n"'; + if (!isset($params[ 2 ])) { + $params[ 2 ] = '"\n"'; } - if (!isset($params[3])) { - $params[3] = 'false'; + if (!isset($params[ 3 ])) { + $params[ 3 ] = 'false'; } $function = 'wordwrap'; if (Smarty::$_MBSTRING) { if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { - $compiler->parent_compiler->template->compiled->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ 'wordwrap' ][ 'modifier' ][ 'file' ] = + SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; + $compiler->template->required_plugins[ 'nocache' ][ 'wordwrap' ][ 'modifier' ][ 'function' ] = + 'smarty_mb_wordwrap'; } else { - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'wordwrap' ][ 'modifier' ][ 'file' ] = + SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'wordwrap' ][ 'modifier' ][ 'function' ] = + 'smarty_mb_wordwrap'; } $function = 'smarty_mb_wordwrap'; } - return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')'; + return $function . '(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')'; } diff --git a/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php b/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php index ad35d11a2..1a67123a4 100644 --- a/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php +++ b/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php @@ -26,13 +26,14 @@ function smarty_outputfilter_trimwhitespace($source) // Unify Line-Breaks to \n $source = preg_replace("/\015\012|\015|\012/", "\n", $source); - // capture Internet Explorer Conditional Comments - if (preg_match_all('#<!--\[[^\]]+\]>.*?<!\[[^\]]+\]-->#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) { + // 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]); + $store[] = $match[ 0 ][ 0 ]; + $_length = strlen($match[ 0 ][ 0 ]); $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@'; - $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); + $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length); $_offset += $_length - strlen($replace); $_store ++; @@ -45,29 +46,27 @@ function smarty_outputfilter_trimwhitespace($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)) { + 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]); + $store[] = $match[ 0 ][ 0 ]; + $_length = strlen($match[ 0 ][ 0 ]); $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@'; - $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); + $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, becaue that might break poorly implemented CSS display:inline-block elements - '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2', - // remove spaces between attributes (but not in attribute values!) - '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5', - // 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' => '>', - ); + $expressions = array(// replace multiple spaces between tags by a single space + // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements + '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2', + // remove spaces between attributes (but not in attribute values!) + '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5', + // 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. @@ -77,9 +76,9 @@ function smarty_outputfilter_trimwhitespace($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); + $_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 ++; diff --git a/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php b/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php new file mode 100644 index 000000000..b68fe4b9d --- /dev/null +++ b/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php @@ -0,0 +1,34 @@ +<?php +/** + * Smarty shared plugin + * + * @package Smarty + * @subpackage PluginsShared + */ + +/** + * escape_special_chars common function + * Function: smarty_function_escape_special_chars<br> + * Purpose: used by other smarty functions to escape + * special chars except for already escaped ones + * + * @author Monte Ohrt <monte at ohrt dot com> + * + * @param string $string text that should by escaped + * + * @return string + */ +function smarty_function_escape_special_chars($string) +{ + if (!is_array($string)) { + if (version_compare(PHP_VERSION, '5.2.3', '>=')) { + $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); + } else { + $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); + $string = htmlspecialchars($string); + $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); + } + } + + return $string; +} diff --git a/library/Smarty/libs/plugins/shared.literal_compiler_param.php b/vendor/smarty/smarty/libs/plugins/shared.literal_compiler_param.php index 47d728a76..8a3711d30 100644 --- a/library/Smarty/libs/plugins/shared.literal_compiler_param.php +++ b/vendor/smarty/smarty/libs/plugins/shared.literal_compiler_param.php @@ -20,16 +20,17 @@ function smarty_literal_compiler_param($params, $index, $default = null) { // not set, go default - if (!isset($params[$index])) { + 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'); + 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] . ";"); + eval("\$t = " . $params[ $index ] . ";"); return $t; } diff --git a/library/Smarty/libs/plugins/shared.make_timestamp.php b/vendor/smarty/smarty/libs/plugins/shared.make_timestamp.php index f87d40c7e..67f862441 100644 --- a/library/Smarty/libs/plugins/shared.make_timestamp.php +++ b/vendor/smarty/smarty/libs/plugins/shared.make_timestamp.php @@ -21,12 +21,14 @@ function smarty_make_timestamp($string) if (empty($string)) { // use "now": return time(); - } elseif ($string instanceof DateTime || (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)) { + } elseif ($string instanceof DateTime || + (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface) + ) { return (int) $string->format('U'); // PHP 5.2 BC } elseif (strlen($string) == 14 && ctype_digit($string)) { // it is mysql timestamp format of YYYYMMDDHHMMSS? - return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2), - substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4)); + return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2), substr($string, 4, 2), + substr($string, 6, 2), substr($string, 0, 4)); } elseif (is_numeric($string)) { // it is a numeric string, we handle it as timestamp return (int) $string; diff --git a/library/Smarty/libs/plugins/shared.mb_str_replace.php b/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php index a5682ed30..0c3ffe258 100644 --- a/library/Smarty/libs/plugins/shared.mb_str_replace.php +++ b/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php @@ -26,7 +26,7 @@ if (!function_exists('smarty_mb_str_replace')) { if (is_array($subject)) { // call mb_replace for each single string in $subject foreach ($subject as &$string) { - $string = & smarty_mb_str_replace($search, $replace, $string, $c); + $string = smarty_mb_str_replace($search, $replace, $string, $c); $count += $c; } } elseif (is_array($search)) { diff --git a/library/Smarty/libs/plugins/shared.mb_unicode.php b/vendor/smarty/smarty/libs/plugins/shared.mb_unicode.php index 0f790b56a..0f790b56a 100644 --- a/library/Smarty/libs/plugins/shared.mb_unicode.php +++ b/vendor/smarty/smarty/libs/plugins/shared.mb_unicode.php diff --git a/library/Smarty/libs/plugins/shared.mb_wordwrap.php b/vendor/smarty/smarty/libs/plugins/shared.mb_wordwrap.php index 31f4acf01..21632a1c0 100644 --- a/library/Smarty/libs/plugins/shared.mb_wordwrap.php +++ b/vendor/smarty/smarty/libs/plugins/shared.mb_wordwrap.php @@ -24,7 +24,8 @@ if (!function_exists('smarty_mb_wordwrap')) { function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false) { // break words into tokens using white space as a delimiter - $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); + $tokens = + preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); $length = 0; $t = ''; $_previous = false; @@ -34,8 +35,9 @@ if (!function_exists('smarty_mb_wordwrap')) { $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); + if ($cut) { + $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, + PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); } } diff --git a/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php b/vendor/smarty/smarty/libs/plugins/variablefilter.htmlspecialchars.php index aecd1e7e7..aecd1e7e7 100644 --- a/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php +++ b/vendor/smarty/smarty/libs/plugins/variablefilter.htmlspecialchars.php diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php index 14ab62fd9..2a4552cb2 100644 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php @@ -46,11 +46,12 @@ abstract class Smarty_CacheResource * * @param Smarty_Internal_Template $_template template object * @param Smarty_Template_Cached $cached cached object - * @param bool $update flag if called because cache update + * @param boolean $update flag if called because cache update * - * @return bool true or false if the cached content does not exist + * @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); + abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, + $update = false); /** * Write the rendered template output to cache @@ -63,6 +64,15 @@ abstract class Smarty_CacheResource 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 function readCachedContent(Smarty_Internal_Template $_template); + + /** * Return cached content * * @param Smarty_Internal_Template $_template template object @@ -185,39 +195,26 @@ abstract class Smarty_CacheResource } // try smarty's cache - if (isset($smarty->_cache['cacheresource_handlers'][$type])) { - return $smarty->_cache['cacheresource_handlers'][$type]; + if (isset($smarty->_cache[ 'cacheresource_handlers' ][ $type ])) { + return $smarty->_cache[ 'cacheresource_handlers' ][ $type ]; } // try registered resource - if (isset($smarty->registered_cache_resources[$type])) { + 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]; + return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = $smarty->registered_cache_resources[ $type ]; } // try sysplugins dir - if (isset(self::$sysplugins[$type])) { + if (isset(self::$sysplugins[ $type ])) { $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); - return $smarty->_cache['cacheresource_handlers'][$type] = new $cache_resource_class(); + return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class(); } // try plugins dir $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); if ($smarty->loadPlugin($cache_resource_class)) { - return $smarty->_cache['cacheresource_handlers'][$type] = new $cache_resource_class(); + return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class(); } // give up throw new SmartyException("Unable to load cache resource '{$type}'"); } - - /** - * Invalid Loaded Cache Files - * - * @param Smarty $smarty Smarty object - */ - public function invalidLoadedCache(Smarty $smarty) - { - $smarty->_cache['isCached'] = array(); - if (isset($smarty->ext->_subtemplate)) { - $smarty->ext->_subtemplate->tplObjects = array(); - } - } } diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php index 4e9606ef1..8f1290e49 100644 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php @@ -43,7 +43,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource */ protected function fetchTimestamp($id, $name, $cache_id, $compile_id) { - return null; + return false; } /** @@ -63,9 +63,9 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource /** * Delete content from cache * - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id + * @param string|null $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 * * @return integer number of deleted caches @@ -84,7 +84,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource { $_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->filepath . $_cache_id . $_compile_id; + $path = $cached->source->uid . $_cache_id . $_compile_id; $cached->filepath = sha1($path); if ($_template->smarty->cache_locking) { $cached->lock_id = sha1('lock.' . $path); @@ -101,7 +101,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource */ public function populateTimestamp(Smarty_Template_Cached $cached) { - $mtime = $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id); + $mtime = + $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id); if ($mtime !== null) { $cached->timestamp = $mtime; $cached->exists = !!$cached->timestamp; @@ -109,7 +110,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource return; } $timestamp = null; - $this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content, $timestamp); + $this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content, + $timestamp); $cached->timestamp = isset($timestamp) ? $timestamp : false; $cached->exists = !!$cached->timestamp; } @@ -117,27 +119,25 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource /** * Read the cached template and process the header * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * @param bool $update flag if called because cache update + * @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 */ - public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false) + public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_Template_Cached $cached = null, + $update = false) { if (!$cached) { - $cached = $_template->cached; + $cached = $_smarty_tpl->cached; } $content = $cached->content ? $cached->content : null; $timestamp = $cached->timestamp ? $cached->timestamp : null; if ($content === null || !$timestamp) { - $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp); + $this->fetch($_smarty_tpl->cached->filepath, $_smarty_tpl->source->name, $_smarty_tpl->cache_id, + $_smarty_tpl->compile_id, $content, $timestamp); } if (isset($content)) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; eval("?>" . $content); $cached->content = null; return true; @@ -156,7 +156,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource */ public function writeCachedContent(Smarty_Internal_Template $_template, $content) { - return $this->save($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $_template->cache_lifetime, $content); + return $this->save($_template->cached->filepath, $_template->source->name, $_template->cache_id, + $_template->compile_id, $_template->cache_lifetime, $content); } /** @@ -164,7 +165,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource * * @param Smarty_Internal_Template $_template template object * - * @return string content + * @return string|boolean content */ public function readCachedContent(Smarty_Internal_Template $_template) { @@ -172,7 +173,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource $timestamp = null; if ($content === null) { $timestamp = null; - $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp); + $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, + $_template->compile_id, $content, $timestamp); } if (isset($content)) { return $content; @@ -215,14 +217,6 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource } else { return 0; } - // remove from template cache - if (isset($smarty->_cache['template_objects'])) { - foreach ($smarty->_cache['template_objects'] as $key => $_tpl) { - if (isset($_tpl->cached) && $_tpl->source->uid == $source->uid) { - unset($smarty->_cache['template_objects'][$key]); - } - } - } } return $this->delete($cache_name, $cache_id, $compile_id, $exp_time); diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php index ee4021a19..bab1b5c09 100644 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php @@ -55,7 +55,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) { $cached->filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' . - $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id); + $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id); $this->populateTimestamp($cached); } @@ -69,40 +69,41 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource */ public function populateTimestamp(Smarty_Template_Cached $cached) { - if (!$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content, $timestamp, $cached->source->uid)) { + if (!$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content, + $timestamp, $cached->source->uid) + ) { return; } $cached->content = $content; $cached->timestamp = (int) $timestamp; - $cached->exists = $cached->timestamp; + $cached->exists = !!$cached->timestamp; } /** * Read the cached template and process the header * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * @param bool $update flag if called because cache update + * @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 */ - public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false) + public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_Template_Cached $cached = null, + $update = false) { if (!$cached) { - $cached = $_template->cached; + $cached = $_smarty_tpl->cached; } $content = $cached->content ? $cached->content : null; $timestamp = $cached->timestamp ? $cached->timestamp : null; if ($content === null || !$timestamp) { - if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) { + if (!$this->fetch($_smarty_tpl->cached->filepath, $_smarty_tpl->source->name, $_smarty_tpl->cache_id, + $_smarty_tpl->compile_id, $content, $timestamp, $_smarty_tpl->source->uid) + ) { return false; } } if (isset($content)) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; eval("?>" . $content); return true; @@ -131,14 +132,16 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource * * @param Smarty_Internal_Template $_template template object * - * @return string content + * @return string|false content */ public function readCachedContent(Smarty_Internal_Template $_template) { $content = $_template->cached->content ? $_template->cached->content : null; $timestamp = null; if ($content === null) { - if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) { + if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, + $_template->compile_id, $content, $timestamp, $_template->source->uid) + ) { return false; } } @@ -164,14 +167,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource if (!$this->purge()) { $this->invalidate(null); } - // remove from template cache - if (isset($smarty->_cache['template_objects'])) { - foreach ($smarty->_cache['template_objects'] as $key => $tpl) { - if (isset($tpl->cached)) { - unset($smarty->_cache['template_objects'][$key]); - } - } - } return - 1; } @@ -194,19 +189,9 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource { $uid = $this->getTemplateUid($smarty, $resource_name); $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . - $this->sanitize($compile_id); + $this->sanitize($compile_id); $this->delete(array($cid)); $this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid); - // remove from template cache - if (isset($resource_name) && isset($smarty->_cache['template_objects'])) { - if (isset($smarty->_cache['template_objects'])) { - foreach ($smarty->_cache['template_objects'] as $key => $tpl) { - if ($tpl->source->uid == $uid && isset($tpl->cached)) { - unset($smarty->_cache['template_objects'][$key]); - } - } - } - } return - 1; } @@ -242,7 +227,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource { $string = trim($string, '|'); if (!$string) { - return null; + return ''; } return preg_replace('#[^\w\|]+#S', '_', $string); } @@ -260,14 +245,16 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource * * @return boolean success */ - protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null) + protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, + &$timestamp = null, $resource_uid = null) { $t = $this->read(array($cid)); - $content = !empty($t[$cid]) ? $t[$cid] : null; + $content = !empty($t[ $cid ]) ? $t[ $cid ] : null; $timestamp = null; if ($content && ($timestamp = $this->getMetaTimestamp($content))) { - $invalidated = $this->getLatestInvalidationTimestamp($cid, $resource_name, $cache_id, $compile_id, $resource_uid); + $invalidated = + $this->getLatestInvalidationTimestamp($cid, $resource_name, $cache_id, $compile_id, $resource_uid); if ($invalidated > $timestamp) { $timestamp = null; $content = null; @@ -286,7 +273,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource protected function addMetaTimestamp(&$content) { $mt = explode(" ", microtime()); - $ts = pack("NN", $mt[1], (int) ($mt[0] * 100000000)); + $ts = pack("NN", $mt[ 1 ], (int) ($mt[ 0 ] * 100000000)); $content = $ts . $content; } @@ -300,6 +287,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource protected function getMetaTimestamp(&$content) { extract(unpack('N1s/N1m/a*content', $content)); + /** + * @var int $s + * @var int $m + */ return $s + ($m / 100000000); } @@ -314,7 +305,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource * * @return void */ - protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) + protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, + $resource_uid = null) { $now = microtime(true); $key = null; @@ -354,7 +346,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource * * @return float the microtime the CacheID was invalidated */ - protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) + protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, + $resource_uid = null) { // abort if there is no CacheID if (false && !$cid) { @@ -388,7 +381,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource * @return array list of InvalidationKeys * @uses $invalidationKeyPrefix to prepend to each InvalidationKey */ - protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) + protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, + $resource_uid = null) { $t = array('IVK#ALL'); $_name = $_compile = '#'; @@ -440,7 +434,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource $key = 'LOCK#' . $cached->filepath; $data = $this->read(array($key)); - return $data && time() - $data[$key] < $smarty->locking_timeout; + return $data && time() - $data[ $key ] < $smarty->locking_timeout; } /** diff --git a/library/Smarty/libs/sysplugins/smarty_data.php b/vendor/smarty/smarty/libs/sysplugins/smarty_data.php index 7cf18a43e..b9f5de9a5 100644 --- a/library/Smarty/libs/sysplugins/smarty_data.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_data.php @@ -59,7 +59,7 @@ class Smarty_Data extends Smarty_Internal_Data } elseif (is_array($_parent)) { // set up variable values foreach ($_parent as $_key => $_val) { - $this->tpl_vars[$_key] = new Smarty_Variable($_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_block.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_block.php new file mode 100644 index 000000000..a33ad1b11 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_block.php @@ -0,0 +1,90 @@ +<?php + +/** + * Smarty {block} tag class + * + * @package Smarty + * @subpackage PluginsInternal + * @author Uwe Tews + */ +class Smarty_Internal_Block +{ + /** + * Block name + * + * @var string + */ + public $name = ''; + + /** + * Hide attribute + * + * @var bool + */ + public $hide = false; + + /** + * Append attribute + * + * @var bool + */ + public $append = false; + + /** + * prepend attribute + * + * @var bool + */ + public $prepend = false; + + /** + * Block calls {$smarty.block.child} + * + * @var bool + */ + public $callsChild = false; + + /** + * Inheritance child block + * + * @var Smarty_Internal_Block|null + */ + public $child = null; + + /** + * Inheritance calling parent block + * + * @var Smarty_Internal_Block|null + */ + public $parent = null; + + /** + * Inheritance Template index + * + * @var int + */ + public $tplIndex = 0; + + /** + * 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 string $name block name + * @param int|null $tplIndex index of outer level {block} if nested + */ + public function __construct($name, $tplIndex) + { + $this->name = $name; + $this->tplIndex = $tplIndex; + } + + /** + * Compiled block code overloaded by {block} class + * + * @param \Smarty_Internal_Template $tpl + */ + public function callBlock(Smarty_Internal_Template $tpl) + { + } +}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php index 64d02dfe5..7df4ddffb 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php @@ -27,39 +27,32 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource */ public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) { - $_source_file_path = str_replace(':', '.', $_template->source->filepath); - $_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null; - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null; - $_filepath = $_template->source->uid; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS . - $_filepath; + $source = &$_template->source; + $smarty = &$_template->smarty; + $_compile_dir_sep = $smarty->use_sub_dirs ? $smarty->ds : '^'; + $_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; } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_cache_id)) { - $_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep; - } else { - $_cache_id = ''; + if (isset($_template->compile_id)) { + $cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep; } - if (isset($_compile_id)) { - $_compile_id = $_compile_id . $_compile_dir_sep; - } else { - $_compile_id = ''; + // if use_sub_dirs, break file into directories + if ($smarty->use_sub_dirs) { + $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . $smarty->ds . $_filepath[ 2 ] . $_filepath[ 3 ] . $smarty->ds . + $_filepath[ 4 ] . $_filepath[ 5 ] . $smarty->ds; } - $_cache_dir = $_template->smarty->getCacheDir(); - if ($_template->smarty->cache_locking) { - // create locking file name - // relative file name? - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) { - $_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir; - } else { - $_lock_dir = $_cache_dir; - } - $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock'; + $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 = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . - '.php'; + $cached->filepath .= '.php'; $cached->timestamp = $cached->exists = is_file($cached->filepath); if ($cached->exists) { $cached->timestamp = filemtime($cached->filepath); @@ -84,23 +77,21 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource /** * Read the cached template and process its header * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * @param bool $update flag if called because cache update + * @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 $_template, Smarty_Template_Cached $cached = null, $update = false) + public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_Template_Cached $cached = null, + $update = false) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in included file - */ - $_smarty_tpl = $_template; - $_template->cached->valid = false; + $_smarty_tpl->cached->valid = false; if ($update && defined('HHVM_VERSION')) { - return $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->cached->filepath); + eval("?>" . file_get_contents($_smarty_tpl->cached->filepath)); + return true; } else { - return @include $_template->cached->filepath; + return @include $_smarty_tpl->cached->filepath; } } @@ -114,9 +105,13 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource */ 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')) { - opcache_invalidate($_template->cached->filepath); + if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath, $content, + $_template->smarty) === true + ) { + if (function_exists('opcache_invalidate') && 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); @@ -153,7 +148,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource */ public function clearAll(Smarty $smarty, $exp_time = null) { - return Smarty_Internal_Extension_Clear::clear($smarty, null, null, null, $exp_time); + return $smarty->ext->_cacheResourceFile->clear($smarty, null, null, null, $exp_time); } /** @@ -169,7 +164,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource */ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { - return Smarty_Internal_Extension_Clear::clear($smarty, $resource_name, $cache_id, $compile_id, $exp_time); + return $smarty->ext->_cacheResourceFile->clear($smarty, $resource_name, $cache_id, $compile_id, $exp_time); } /** @@ -188,7 +183,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource clearstatcache(); } if (is_file($cached->lock_id)) { - $t = @filemtime($cached->lock_id); + $t = filemtime($cached->lock_id); return $t && (time() - $t < $smarty->locking_timeout); } else { return false; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php index bd2ffe474..8539d6b2a 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php @@ -19,9 +19,9 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign /** * Compiles code for the {append} tag * - * @param array $args array with attributes from parser + * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter + * @param array $parameter array with compilation parameter * * @return string compiled code */ @@ -31,14 +31,15 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign $this->required_attributes = array('var', 'value'); $this->shorttag_order = array('var', 'value'); $this->optional_attributes = array('scope', 'index'); + $this->mapCache = array(); // check and get attributes $_attr = $this->getAttributes($compiler, $args); // map to compile assign attributes - if (isset($_attr['index'])) { - $_params['smarty_internal_index'] = '[' . $_attr['index'] . ']'; - unset($_attr['index']); + if (isset($_attr[ 'index' ])) { + $_params[ 'smarty_internal_index' ] = '[' . $_attr[ 'index' ] . ']'; + unset($_attr[ 'index' ]); } else { - $_params['smarty_internal_index'] = '[]'; + $_params[ 'smarty_internal_index' ] = '[]'; } $_new_attr = array(); foreach ($_attr as $key => $value) { diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php new file mode 100644 index 000000000..3bd33847b --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php @@ -0,0 +1,94 @@ +<?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});\n?>"; + } else { + $output = "<?php \$_smarty_tpl->_assignInScope({$_var}, {$_attr['value']}{$_params});\n?>"; + } + 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 new file mode 100644 index 000000000..5098d62fe --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php @@ -0,0 +1,202 @@ +<?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'); + + /** + * Saved compiler object + * + * @var Smarty_Internal_TemplateCompilerBase + */ + public $compiler = null; + + /** + * 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) + { + 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(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)); + // must whole block be nocache ? + if ($compiler->tag_nocache) { + $i = 0; + } + $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; + // $compiler->suppressNocacheProcessing = true; + if ($_attr[ 'nocache' ] === true) { + //$compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->taglineno); + } + $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 .= "/* {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 .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; + 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 .= "/* {/block {$_name}} */\n\n"; + $output .= "?>\n"; + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $output)); + $compiler->blockOrFunctionCode .= $f = $compiler->parser->current_buffer->to_smarty_php($compiler->parser); + $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); + // nocache plugins must be copied + if (!empty($compiler->template->compiled->required_plugins[ 'nocache' ])) { + foreach ($compiler->template->compiled->required_plugins[ 'nocache' ] as $plugin => $tmp) { + foreach ($tmp as $type => $data) { + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin ][ $type ] = + $data; + } + } + } + + // restore old status + $compiler->template->compiled->has_nocache_code = $_has_nocache_code; + $compiler->tag_nocache = $compiler->nocache; + $compiler->nocache = $_nocache; + $compiler->parser->current_buffer = $_buffer; + $output = "<?php \n"; + if ($compiler->_cache[ 'blockNesting' ] == 1) { + $output .= "\$_smarty_tpl->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 new file mode 100644 index 000000000..bb070ebe3 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php @@ -0,0 +1,54 @@ +<?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_Child extends Smarty_Internal_CompileBase +{ + /** + * Attribute definition: Overwrites base class. + * + * @var array + * @see Smarty_Internal_CompileBase + */ + public $option_flags = array(); + + /** + * Saved compiler object + * + * @var Smarty_Internal_TemplateCompilerBase + */ + public $compiler = null; + + /** + * Compiles code for the {block_parent} 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) + { + if (!isset($compiler->_cache[ 'blockNesting' ])) { + $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', + $compiler->parser->lex->taglineno); + } + $compiler->has_code = true; + $compiler->suppressNocacheProcessing = true; + $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ][ 'callsChild' ] = 'true'; + $output = "<?php \n\$_smarty_tpl->inheritance->callChild(\$_smarty_tpl, \$this);\n?>\n"; + return $output; + } +}
\ No newline at end of file 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 new file mode 100644 index 000000000..0ec1e8485 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php @@ -0,0 +1,73 @@ +<?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_Shared_Inheritance +{ + + /** + * Attribute definition: Overwrites base class. + * + * @var array + * @see Smarty_Internal_CompileBase + */ + public $optional_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(); + + /** + * Saved compiler object + * + * @var Smarty_Internal_TemplateCompilerBase + */ + public $compiler = null; + + /** + * Compiles code for the {block_parent} 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) + { + // check and get attributes + $_attr = $this->getAttributes($compiler, $args); + if (!isset($compiler->_cache[ 'blockNesting' ])) { + $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', + $compiler->parser->lex->taglineno); + } + $compiler->suppressNocacheProcessing = true; + $compiler->has_code = true; + $output = "<?php \n\$_smarty_tpl->inheritance->callParent(\$_smarty_tpl, \$this" . + (isset($_attr[ 'name' ]) ? ", {$_attr[ 'name' ]}" : '') . ");\n?>\n"; + return $output; + } +}
\ No newline at end of file diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php new file mode 100644 index 000000000..50157382a --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php @@ -0,0 +1,110 @@ +<?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'); + + /** + * Compiles code for the {break} tag + * + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * @param array $parameter array with compilation parameter + * + * @return string compiled code + */ + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) + { + list($levels, $foreachLevels) = $this->checkLevels($args, $compiler); + $output = "<?php\n"; + if ($foreachLevels) { + /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */ + $foreachCompiler = $compiler->getTagCompiler('foreach'); + $output .= $foreachCompiler->compileRestore($foreachLevels); + } + $output .= "break {$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 + * @param string $tag tag name + * + * @return array + * @throws \SmartyCompilerException + */ + public function checkLevels($args, Smarty_Internal_TemplateCompilerBase $compiler, $tag = 'break') + { + 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 {$tag} {$levels} level(s)", null, true); + } + if ($lastTag === 'foreach' && $tag === 'break') { + $foreachLevels --; + } + return array($levels, $foreachLevels); + } +} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php index b7204bec0..739df5eca 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php @@ -53,13 +53,13 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase // check and get attributes $_attr = $this->getAttributes($compiler, $args); // save possible attributes - if (isset($_attr['assign'])) { + if (isset($_attr[ 'assign' ])) { // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; + $_assign = $_attr[ 'assign' ]; } //$_name = trim($_attr['name'], "'\""); - $_name = $_attr['name']; - unset($_attr['name'], $_attr['assign'], $_attr['nocache']); + $_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'; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php index be45f3e94..34fc55f9d 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php @@ -33,49 +33,50 @@ class Smarty_Internal_Compile_Capture extends 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 + * @throws \SmartyCompilerException + */ + public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null) + { + $tag = trim($parameter[ 0 ], '"\''); + $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false; + if (!$name) { + $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true); + } + return "\$_smarty_tpl->smarty->ext->_capture->getBuffer(\$_smarty_tpl, '{$name}')"; + } + + /** * Compiles code for the {capture} tag * - * @param array $args array with attributes from parser + * @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) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null) { // check and get attributes - $_attr = $this->getAttributes($compiler, $args); + $_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'; + $buffer = isset($_attr[ 'name' ]) ? $_attr[ 'name' ] : "'default'"; + $assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : 'null'; + $append = isset($_attr[ 'append' ]) ? $_attr[ 'append' ] : 'null'; - $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); + $compiler->_cache[ 'capture_stack' ][] = array($compiler->nocache); // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $_output = "<?php \$_smarty_tpl->_cache['capture_stack'][] = array($buffer, $assign, $append); ob_start(); ?>"; + $_output = "<?php \$_smarty_tpl->smarty->ext->_capture->open(\$_smarty_tpl, $buffer, $assign, $append);?>"; return $_output; } - - /** - * Compiles code for the {$smarty.capture.xxx} - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - * @throws \SmartyCompilerException - */ - public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $tag = strtolower(trim($parameter[ 0 ], '"\'')); - $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false; - if (!$name) { - $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true); - } - return "(isset(\$_smarty_tpl->_cache['__smarty_capture']['{$name}']) ? \$_smarty_tpl->_cache['__smarty_capture']['{$name}'] : null)"; - } } /** @@ -89,29 +90,23 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase /** * Compiles code for the {/capture} tag * - * @param array $args array with attributes from parser + * @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) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { // check and get attributes - $_attr = $this->getAttributes($compiler, $args); + $_attr = $this->getAttributes($compiler, $args, $parameter, '/capture'); // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } - list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); - - $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_cache['capture_stack']);\n"; - $_output .= "if (!empty(\$_capture_buffer)) {\n"; - $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; - $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; - $_output .= "\$_smarty_tpl->_cache['__smarty_capture'][\$_capture_buffer]=ob_get_clean();\n"; - $_output .= "} else \$_smarty_tpl->capture_error();?>"; + list($compiler->nocache) = array_pop($compiler->_cache[ 'capture_stack' ]); - return $_output; + return "<?php \$_smarty_tpl->smarty->ext->_capture->close(\$_smarty_tpl);?>"; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php index d2e50a08f..7c6e9b59e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php @@ -38,15 +38,24 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase * @var array * @see Smarty_Internal_CompileBase */ - public $optional_attributes = array('section', 'scope', 'bubble_up'); + 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' => true, 'parent' => true, 'root' => true, 'global' => true, - 'smarty' => true, 'tpl_root' => true); + 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 @@ -62,37 +71,22 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { + 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']; + $conf_file = $_attr[ 'file' ]; + if (isset($_attr[ 'section' ])) { + $section = $_attr[ 'section' ]; } else { $section = 'null'; } - $_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (!isset($this->valid_scopes[$_attr['scope']])) { - $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); - } - if ($_attr['scope'] != 'local') { - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } elseif ($_attr['scope'] == 'smarty') { - $_scope = Smarty::SCOPE_SMARTY; - } elseif ($_attr['scope'] == 'tpl_root') { - $_scope = Smarty::SCOPE_TPL_ROOT; - } - $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP; - } + // scope setup + if ($_attr[ 'noscope' ]) { + $_scope = - 1; + } else { + $_scope = $compiler->convertScope($_attr, $this->valid_scopes); } // create config object diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php new file mode 100644 index 000000000..7492c7df2 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php @@ -0,0 +1,42 @@ +<?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 +{ + + /** + * Compiles code for the {continue} 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) + { + list($levels, $foreachLevels) = $this->checkLevels($args, $compiler, 'continue'); + $output = "<?php\n"; + if ($foreachLevels > 1) { + /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */ + $foreachCompiler = $compiler->getTagCompiler('foreach'); + $output .= $foreachCompiler->compileRestore($foreachLevels - 1); + } + $output .= "continue {$levels};?>"; + return $output; + } +} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php index d73c81a10..1668e72e8 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php @@ -34,7 +34,8 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase $compiler->tag_nocache = true; // display debug template - $_output = "<?php \$_smarty_debug = new Smarty_Internal_Debug;\n \$_smarty_debug->display_debug(\$_smarty_tpl);\n"; + $_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/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php index 407482f07..97a3c29c5 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php @@ -23,6 +23,7 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase */ public $required_attributes = array('var'); + /** * Attribute definition: Overwrites base class. * @@ -30,6 +31,7 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase */ public $optional_attributes = array('assign'); + /** * Attribute definition: Overwrites base class. * @@ -48,17 +50,16 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase */ public function compile($args, $compiler) { - $this->required_attributes = array('var'); - $this->optional_attributes = array('assign'); // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if (isset($_attr['assign'])) { + if (isset($_attr[ 'assign' ])) { // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; + $_assign = $_attr[ 'assign' ]; } // create template object - $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);"; + $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr[ 'var' ] . + ", \$_smarty_tpl->smarty, \$_smarty_tpl);"; //was there an assign attribute? if (isset($_assign)) { $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());"; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php index 7ce3dcf6f..83cb80500 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php @@ -55,37 +55,36 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh { // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { + if ($_attr[ 'nocache' ] === true) { $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1); } - if (strpos($_attr['file'], '$_tmp') !== false) { + 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); - $file = trim($_attr['file'], '\'"'); + $file = trim($_attr[ 'file' ], '\'"'); if (strlen($file) > 8 && substr($file, 0, 8) == 'extends:') { // generate code for each template $files = array_reverse(explode('|', substr($file, 8))); $i = 0; foreach ($files as $file) { - if ($file[0] == '"') { + if ($file[ 0 ] == '"') { $file = trim($file, '".'); } else { $file = "'{$file}'"; } $i ++; - if ($i == count($files) && isset($_attr['extends_resource'])) { + if ($i == count($files) && isset($_attr[ 'extends_resource' ])) { $this->compileEndChild($compiler); } $this->compileInclude($compiler, $file); } - if (!isset($_attr['extends_resource'])) { + if (!isset($_attr[ 'extends_resource' ])) { $this->compileEndChild($compiler); } } else { - $this->compileEndChild($compiler); - $this->compileInclude($compiler, $_attr['file']); + $this->compileEndChild($compiler, $_attr[ 'file' ]); } $compiler->has_code = false; return ''; @@ -95,24 +94,35 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh * Add code for inheritance endChild() method to end of template * * @param \Smarty_Internal_TemplateCompilerBase $compiler + * @param null|string $template optional inheritance parent template */ - private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler) + 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->ext->_inheritance->endChild(\$_smarty_tpl);\n?>\n"); + "<?php \$_smarty_tpl->inheritance->endChild(\$_smarty_tpl" . + (isset($template) ? + ', ' . $template . $inlineUids : + '') . ");\n?>\n"); } /** * Add code for including subtemplate to end of template * * @param \Smarty_Internal_TemplateCompilerBase $compiler - * @param string $file subtemplate name + * @param string $template subtemplate name */ - private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $file) + private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template) { $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->compileTag('include', - array($file, + array($template, array('scope' => 'parent')))); } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php index 7b86d4859..e5e7c61c3 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php @@ -34,7 +34,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase */ public function compile($args, $compiler, $parameter) { - $compiler->loopNesting++; + $compiler->loopNesting ++; if ($parameter == 0) { $this->required_attributes = array('start', 'to'); $this->optional_attributes = array('max', 'step'); @@ -42,46 +42,47 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase $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']; + foreach ($_attr[ 'start' ] as $_statement) { + if (is_array($_statement[ 'var' ])) { + $var = $_statement[ 'var' ][ 'var' ]; + $index = $_statement[ 'var' ][ 'smarty_internal_index' ]; } else { - $var = $_statement['var']; + $var = $_statement[ 'var' ]; $index = ''; } - $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;\n"; + $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']; + if (is_array($_attr[ 'var' ])) { + $var = $_attr[ 'var' ][ 'var' ]; + $index = $_attr[ 'var' ][ 'smarty_internal_index' ]; } else { - $var = $_attr['var']; + $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']; + $_statement = $_attr[ 'start' ]; + if (is_array($_statement[ 'var' ])) { + $var = $_statement[ 'var' ][ 'var' ]; + $index = $_statement[ 'var' ][ 'smarty_internal_index' ]; } else { - $var = $_statement['var']; + $var = $_statement[ 'var' ]; $index = ''; } - $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;"; - if (isset($_attr['step'])) { + $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'])) { + 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"; @@ -149,7 +150,7 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase */ public function compile($args, $compiler, $parameter) { - $compiler->loopNesting--; + $compiler->loopNesting --; // check and get attributes $_attr = $this->getAttributes($compiler, $args); // must endblock be nocache? @@ -162,7 +163,7 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase $output = "<?php }\n"; if ($openTag != 'forelse') { $output .= "}\n"; - } + } $output .= "?>\n"; return $output; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php index 178a0a52c..5ddd42d8a 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php @@ -30,7 +30,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo * @var array * @see Smarty_Internal_CompileBase */ - public $optional_attributes = array('name', 'key'); + public $optional_attributes = array('name', 'key', 'properties'); /** * Attribute definition: Overwrites base class. @@ -92,32 +92,33 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo $this->isNamed = false; // check and get attributes $_attr = $this->getAttributes($compiler, $args); - $from = $_attr['from']; - $item = $compiler->getId($_attr['item']); + $from = $_attr[ 'from' ]; + $item = $compiler->getId($_attr[ 'item' ]); if ($item === false) { - $item = $compiler->getVariableName($_attr['item']); + $item = $compiler->getVariableName($_attr[ 'item' ]); } + $key = $name = null; $attributes = array('item' => $item); - if (isset($_attr['key'])) { - $key = $compiler->getId($_attr['key']); + if (isset($_attr[ 'key' ])) { + $key = $compiler->getId($_attr[ 'key' ]); if ($key === false) { - $key = $compiler->getVariableName($_attr['key']); + $key = $compiler->getVariableName($_attr[ 'key' ]); } - $attributes['key'] = $key; + $attributes[ 'key' ] = $key; } - if (isset($_attr['name'])) { + if (isset($_attr[ 'name' ])) { $this->isNamed = true; - $attributes['name'] = $compiler->getId($_attr['name']); + $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']); + $fromName = $compiler->getVariableName($_attr[ 'from' ]); if ($fromName) { foreach (array('item', 'key') as $a) { - if (isset($attributes[$a]) && $attributes[$a] == $fromName) { + if (isset($attributes[ $a ]) && $attributes[ $a ] == $fromName) { $compiler->trigger_template_error("'{$a}' and 'from' may not have same variable name '{$fromName}'", null, true); } @@ -125,151 +126,144 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo } $itemVar = "\$_smarty_tpl->tpl_vars['{$item}']"; - $local = '$__foreach_' . (isset($attributes['name']) ? $attributes['name'] : $attributes['item']) . '_' . - $this->counter ++ . '_'; - $needIteration = false; + $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[ '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 (!empty($this->matchResults['named'])) { - $namedAttr = $this->matchResults['named']; + if (isset($itemAttr[ 'first' ])) { + $itemAttr[ 'index' ] = true; } - if (isset($itemAttr['last'])) { - $needIteration = true; + if (isset($namedAttr[ 'first' ])) { + $namedAttr[ 'index' ] = true; } - if (isset($namedAttr['last'])) { - $needIteration = 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($itemAttr['key'])) { - $keyTerm = "{$itemVar}->key => "; - } elseif (isset($attributes['key'])) { + if (isset($attributes[ 'key' ])) { $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => "; } - - $saveVars = array(); - $restoreVars = array(); + if (isset($itemAttr[ 'key' ])) { + $keyTerm = "{$itemVar}->key => "; + } if ($this->isNamed) { $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']"; - if (!empty($namedAttr)) { - $saveVars['saved'] = "isset({$foreachVar}) ? {$foreachVar} : false;"; - $restoreVars[] = "if ({$local}saved) {\n{$foreachVar} = {$local}saved;\n}\n"; - } - } - foreach (array('item', 'key') as $a) { - if (isset($attributes[$a])) { - $saveVars['saved_' . $a] = - "isset(\$_smarty_tpl->tpl_vars['{$attributes[$a]}']) ? \$_smarty_tpl->tpl_vars['{$attributes[$a]}'] : false;"; - $restoreVars[] = - "if ({$local}saved_{$a}) {\n\$_smarty_tpl->tpl_vars['{$attributes[$a]}'] = {$local}saved_{$a};\n}\n"; - } } + $needTotal = isset($itemAttr[ 'total' ]); + // Register tag $this->openTag($compiler, 'foreach', - array('foreach', $compiler->nocache, $local, $restoreVars, $itemVar, true)); + 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 = $from;\n"; - $output .= "if (!is_array(\$_from) && !is_object(\$_from)) {\n"; - $output .= "settype(\$_from, 'array');\n"; - $output .= "}\n"; - foreach ($saveVars as $k => $code) { - $output .= "{$local}{$k} = {$code}\n"; + $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 (isset($itemAttr['show']) || isset($itemAttr['total']) || isset($namedAttr['total']) || isset($namedAttr['show']) || isset($itemAttr['last']) || isset($namedAttr['last'])) { - $output .= "{$local}total = \$_smarty_tpl->smarty->ext->_foreach->count(\$_from);\n"; + if ($name || $key) { + $output .= ', ' . var_export($key, true); } - $output .= "{$itemVar} = new Smarty_Variable();\n"; - if (isset($itemAttr['show'])) { - $output .= "{$itemVar}->show = ({$local}total > 0);\n"; + if ($name) { + $output .= ', ' . var_export($name, true) . ', ' . var_export($namedAttr, true); } - if (isset($itemAttr['total'])) { - $output .= "{$itemVar}->total= {$local}total;\n"; + $output .= ");\n"; + if (isset($itemAttr[ 'show' ])) { + $output .= "{$itemVar}->show = ({$itemVar}->total > 0);\n"; } - if ($this->isNamed) { - $prop = array(); - if (isset($namedAttr['total'])) { - $prop['total'] = "'total' => {$local}total"; - } - if (isset($namedAttr['iteration'])) { - $prop['iteration'] = "'iteration' => 0"; - } - if (isset($namedAttr['index'])) { - $prop['index'] = "'index' => -1"; - } - if (isset($namedAttr['show'])) { - $prop['show'] = "'show' => ({$local}total > 0)"; - } - if (!empty($namedAttr)) { - $_vars = 'array(' . join(', ', $prop) . ')'; - $output .= "{$foreachVar} = new Smarty_Variable({$_vars});\n"; - } - } - if (isset($attributes['key'])) { - $output .= "\$_smarty_tpl->tpl_vars['{$key}'] = new Smarty_Variable();\n"; - } - if (isset($namedAttr['first']) || isset($itemAttr['first'])) { - $output .= "{$local}first = true;\n"; + if (isset($itemAttr[ 'iteration' ])) { + $output .= "{$itemVar}->iteration = 0;\n"; } - if (isset($itemAttr['iteration'])) { - $output .= "{$itemVar}->iteration=0;\n"; + if (isset($itemAttr[ 'index' ])) { + $output .= "{$itemVar}->index = -1;\n"; } - if (isset($itemAttr['index'])) { - $output .= "{$itemVar}->index=-1;\n"; - } - if ($needIteration) { - $output .= "{$local}iteration=0;\n"; - } - $output .= "{$itemVar}->_loop = false;\n"; + $output .= "if (\$_from !== null) {\n"; $output .= "foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n"; - $output .= "{$itemVar}->_loop = true;\n"; - if (isset($attributes['key']) && isset($itemAttr['key'])) { + if (isset($attributes[ 'key' ]) && isset($itemAttr[ 'key' ])) { $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n"; } - if (isset($itemAttr['iteration'])) { + if (isset($itemAttr[ 'iteration' ])) { $output .= "{$itemVar}->iteration++;\n"; } - if (isset($itemAttr['index'])) { + if (isset($itemAttr[ 'index' ])) { $output .= "{$itemVar}->index++;\n"; } - if ($needIteration) { - $output .= "{$local}iteration++;\n"; - } - if (isset($itemAttr['first'])) { - $output .= "{$itemVar}->first = {$local}first;\n"; + if (isset($itemAttr[ 'first' ])) { + $output .= "{$itemVar}->first = !{$itemVar}->index;\n"; } - if (isset($itemAttr['last'])) { - $output .= "{$itemVar}->last = {$local}iteration == {$local}total;\n"; + if (isset($itemAttr[ 'last' ])) { + $output .= "{$itemVar}->last = {$itemVar}->iteration == {$itemVar}->total;\n"; } - if ($this->isNamed) { - if (isset($namedAttr['iteration'])) { + if (isset($foreachVar)) { + if (isset($namedAttr[ 'iteration' ])) { $output .= "{$foreachVar}->value['iteration']++;\n"; } - if (isset($namedAttr['index'])) { + if (isset($namedAttr[ 'index' ])) { $output .= "{$foreachVar}->value['index']++;\n"; } - if (isset($namedAttr['first'])) { - $output .= "{$foreachVar}->value['first'] = {$local}first;\n"; + if (isset($namedAttr[ 'first' ])) { + $output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n"; } - if (isset($namedAttr['last'])) { - $output .= "{$foreachVar}->value['last'] = {$local}iteration == {$local}total;\n"; + if (isset($namedAttr[ 'last' ])) { + $output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] == {$foreachVar}->value['total'];\n"; } } - if (isset($namedAttr['first']) || isset($itemAttr['first'])) { - $output .= "{$local}first = false;\n"; + if (!empty($itemAttr)) { + $output .= "{$local}saved = {$itemVar};\n"; } - $output .= "{$local}saved_local_item = {$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});\n"; + } } /** @@ -294,12 +288,13 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase // check and get attributes $_attr = $this->getAttributes($compiler, $args); - list($openTag, $nocache, $local, $restoreVars, $itemVar, $foo) = $this->closeTag($compiler, array('foreach')); - $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $restoreVars, $itemVar, false)); + list($openTag, $nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach')); + $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $itemVar, 0)); $output = "<?php\n"; - $output .= "{$itemVar} = {$local}saved_local_item;\n"; - $output .= "}\n"; - $output .= "if (!{$itemVar}->_loop) {\n?>"; + if ($restore == 2) { + $output .= "{$itemVar} = {$local}saved;\n"; + } + $output .= "}\n} else {\n?>\n"; return $output; } } @@ -329,19 +324,21 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase $compiler->tag_nocache = true; } - list($openTag, $compiler->nocache, $local, $restoreVars, $itemVar, $restore) = + list($openTag, $compiler->nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach', 'foreachelse')); $output = "<?php\n"; - if ($restore) { - $output .= "{$itemVar} = {$local}saved_local_item;\n"; + if ($restore == 2) { + $output .= "{$itemVar} = {$local}saved;\n"; } - $output .= "}\n"; - foreach ($restoreVars as $restore) { - $output .= $restore; + if ($restore > 0) { + $output .= "}\n"; } - $output .= "?>"; - + $output .= "}\n"; + /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */ + $foreachCompiler = $compiler->getTagCompiler('foreach'); + $output .= $foreachCompiler->compileRestore(1); + $output .= "?>\n"; return $output; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php index 28f335949..b7cd9e1c0 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php @@ -53,16 +53,15 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { - $compiler->loopNesting++; // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { + if ($_attr[ 'nocache' ] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } - unset($_attr['nocache']); - $_name = trim($_attr['name'], "'\""); - $compiler->parent_compiler->tpl_function[$_name] = $compiler->parent_compiler->template->tpl_function[$_name] = array(); + unset($_attr[ 'nocache' ]); + $_name = trim($_attr[ 'name' ], "'\""); + $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); @@ -100,17 +99,15 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { - $compiler->loopNesting--; $this->compiler = $compiler; $saved_data = $this->closeTag($compiler, array('function')); - $_attr = $saved_data[0]; - $_name = trim($_attr['name'], "'\""); - $compiler->parent_compiler->tpl_function[$_name]['called_functions'] = $compiler->parent_compiler->template->tpl_function[$_name]['called_functions'] = $compiler->called_functions; - $compiler->parent_compiler->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->compiled->filepath; - $compiler->parent_compiler->tpl_function[$_name]['uid'] = $compiler->parent_compiler->template->tpl_function[$_name]['uid'] = $compiler->template->source->uid; - $compiler->called_functions = array(); + $_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']); + unset($_parameter[ 'name' ]); // default parameter $_paramsArray = array(); foreach ($_parameter as $_key => $_value) { @@ -133,7 +130,7 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase $_funcName = "smarty_template_function_{$_name}_{$compiler->template->compiled->nocache_hash}"; $_funcNameCaching = $_funcName . '_nocache'; if ($compiler->template->compiled->has_nocache_code) { - $compiler->parent_compiler->tpl_function[$_name]['call_name_caching'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching; + $compiler->parent_compiler->tpl_function[ $_name ][ 'call_name_caching' ] = $_funcNameCaching; $output = "<?php\n"; $output .= "/* {$_funcNameCaching} */\n"; $output .= "if (!function_exists('{$_funcNameCaching}')) {\n"; @@ -141,69 +138,78 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase $output .= "ob_start();\n"; $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n"; $output .= $_paramsCode; - $output .= "\$_smarty_tpl->_cache['saved_tpl_vars'][] = \$_smarty_tpl->tpl_vars;\n"; - $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}"; + $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}"; $output .= "\$params = var_export(\$params, true);\n"; $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php "; - $output .= "\\\$saved_tpl_vars = \\\$_smarty_tpl->tpl_vars;\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value);\n}\n?>"; + $output .= "\\\$_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}%%*/\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, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $output)); $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); $output = "<?php echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php "; - $output .= "foreach (Smarty::\\\$global_tpl_vars as \\\$key => \\\$value){\n"; - $output .= "if (!isset(\\\$_smarty_tpl->tpl_vars[\\\$key]) || \\\$_smarty_tpl->tpl_vars[\\\$key] === \\\$value) \\\$saved_tpl_vars[\\\$key] = \\\$value;\n}\n"; - $output .= "\\\$_smarty_tpl->tpl_vars = \\\$saved_tpl_vars;?>\n"; + $output .= "\\\$_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 .= "\$_smarty_tpl->tpl_vars = array_pop(\$_smarty_tpl->_cache['saved_tpl_vars']);\n}\n}\n"; + $output .= "}\n}\n"; $output .= "/*/ {$_funcName}_nocache */\n\n"; $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); - $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", array($this, - 'removeNocache'), $_functionCode->to_smarty_php($compiler->parser))); + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $output)); + $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, + preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", + array($this, 'removeNocache'), + $_functionCode->to_smarty_php($compiler->parser))); } - $compiler->parent_compiler->tpl_function[$_name]['call_name'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name'] = $_funcName; + $compiler->parent_compiler->tpl_function[ $_name ][ 'call_name' ] = $_funcName; $output = "<?php\n"; $output .= "/* {$_funcName} */\n"; $output .= "if (!function_exists('{$_funcName}')) {\n"; $output .= "function {$_funcName}(\$_smarty_tpl,\$params) {\n"; - $output .= "\$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\n"; $output .= $_paramsCode; - $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}?>"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); + $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}?>"; + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $output)); $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); - $output = "<?php foreach (Smarty::\$global_tpl_vars as \$key => \$value){\n"; - $output .= "if (!isset(\$_smarty_tpl->tpl_vars[\$key]) || \$_smarty_tpl->tpl_vars[\$key] === \$value) \$saved_tpl_vars[\$key] = \$value;\n}\n"; - $output .= "\$_smarty_tpl->tpl_vars = \$saved_tpl_vars;\n}\n}\n"; + $output = "<?php\n}}\n"; $output .= "/*/ {$_funcName} */\n\n"; $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $output)); $compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser); // nocache plugins must be copied - if (!empty($compiler->template->compiled->required_plugins['nocache'])) { - foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) { + if (!empty($compiler->template->compiled->required_plugins[ 'nocache' ])) { + foreach ($compiler->template->compiled->required_plugins[ 'nocache' ] as $plugin => $tmp) { foreach ($tmp as $type => $data) { - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = $data; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin ][ $type ] = + $data; } } } // restore old buffer - $compiler->parser->current_buffer = $saved_data[1]; + $compiler->parser->current_buffer = $saved_data[ 1 ]; // restore old status - $compiler->template->compiled->has_nocache_code = $saved_data[2]; - $compiler->template->caching = $saved_data[3]; + $compiler->template->compiled->has_nocache_code = $saved_data[ 2 ]; + $compiler->template->caching = $saved_data[ 3 ]; return true; } /** + * Remove nocache code + * * @param $match * - * @return mixed + * @return string */ 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 = + 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 new file mode 100644 index 000000000..14db55d4f --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php @@ -0,0 +1,211 @@ +<?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 (!array_key_exists("if condition", $parameter)) { + $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 + * @param array $parameter array with compilation parameter + * + * @return string compiled code + */ + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) + { + list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); + $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); + + return "<?php } else { ?>"; + } +} + +/** + * 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 (!array_key_exists("if condition", $parameter)) { + $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 + * @param array $parameter array with compilation parameter + * + * @return string compiled code + */ + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) + { + // must endblock be nocache? + if ($compiler->nocache) { + $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/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php index 09fa11d6c..a81b0c740 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php @@ -43,7 +43,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase * @var array * @see Smarty_Internal_CompileBase */ - public $option_flags = array('nocache', 'inline', 'caching', 'bubble_up'); + public $option_flags = array('nocache', 'inline', 'caching'); /** * Attribute definition: Overwrites base class. @@ -58,8 +58,9 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase * * @var array */ - public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true, - 'smarty' => true, 'tpl_root' => true); + 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 @@ -73,16 +74,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase */ public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler, $parameter) { + $uid = $t_hash = null; // check and get attributes $_attr = $this->getAttributes($compiler, $args); - $hashResourceName = $fullResourceName = $source_resource = $_attr['file']; + $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]; + $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; @@ -91,51 +93,32 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase if ($type != 'string') { $fullResourceName = "{$type}:{$name}"; $compiled = $compiler->parent_compiler->template->compiled; - if (isset($compiled->includes[$fullResourceName])) { - $compiled->includes[$fullResourceName] ++; + if (isset($compiled->includes[ $fullResourceName ])) { + $compiled->includes[ $fullResourceName ] ++; $cache_tpl = true; } else { - $compiled->includes[$fullResourceName] = 1; + 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 = '"' . $fullResourceName . '"'; + $fullResourceName = $match[ 1 ] . $fullResourceName . $match[ 1 ]; } } - if (empty($match[5])) { + if (empty($match[ 5 ])) { $variable_template = true; } } else { $variable_template = true; } - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - // scope setup - $_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (!isset($this->valid_scopes[$_attr['scope']])) { - $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); - } - if ($_attr['scope'] != 'local') { - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } elseif ($_attr['scope'] == 'smarty') { - $_scope = Smarty::SCOPE_SMARTY; - } elseif ($_attr['scope'] == 'tpl_root') { - $_scope = Smarty::SCOPE_TPL_ROOT; - } - if ($_attr['bubble_up'] === true) { - $_scope = $_scope + Smarty::SCOPE_BUBBLE_UP; - } - } - } + $_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) { @@ -146,10 +129,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase // assume caching is off $_caching = Smarty::CACHING_OFF; - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - $call_nocache = $compiler->tag_nocache || $compiler->nocache; // caching was on and {include} is not in nocache mode @@ -158,30 +137,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase } // 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; + $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr[ 'inline' ] === true) && + !$compiler->template->source->handler->recompiled; - if ($merge_compiled_includes && $_attr['inline'] !== true) { + if ($merge_compiled_includes) { // variable template name ? if ($variable_template) { $merge_compiled_includes = false; - if ($compiler->template->caching) { - // must use individual cache file - //$_attr['caching'] = 1; - } } // variable compile_id? - if (isset($_attr['compile_id'])) { - if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2 || - is_numeric($_attr['compile_id']))) || substr_count($_attr['compile_id'], '(') != 0 || - substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0 - ) { - $merge_compiled_includes = false; - if ($compiler->template->caching) { - // must use individual cache file - //$_attr['caching'] = 1; - } - } + if (isset($_attr[ 'compile_id' ]) && $compiler->isVariable($_attr[ 'compile_id' ])) { + $merge_compiled_includes = false; } } @@ -191,28 +157,28 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase * a call in nocache mode. * */ - if ($_attr['nocache'] !== true && $_attr['caching']) { - $_caching = $_new_caching = (int) $_attr['caching']; + 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']; + 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']; + 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']; + if (isset($_attr[ 'compile_id' ])) { + $_compile_id = $_attr[ 'compile_id' ]; } else { $_compile_id = '$_smarty_tpl->compile_id'; } @@ -221,55 +187,67 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase 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; + $c_id = isset($_attr[ 'compile_id' ]) ? $_attr[ 'compile_id' ] : $compiler->template->compile_id; // we must observe different compile_id and caching $t_hash = sha1($c_id . ($_caching ? '--caching' : '--nocaching')); - if (!isset($compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash])) { - $has_compiled_template = - $this->compileInlineTemplate($compiler, $fullResourceName, $_caching, $hashResourceName, $t_hash, - $c_id); + $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'], $_attr['bubble_up']); + 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_nc = ''; + $_vars = 'array()'; if (!empty($_attr)) { - if ($_scope == Smarty::SCOPE_LOCAL) { - $_pairs = array(); - // create variables - foreach ($_attr as $key => $value) { - $_pairs[] = "'$key'=>$value"; - $_vars_nc .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_Variable($value);\n"; - } - $_vars = 'array(' . join(',', $_pairs) . ')'; - } else { - $compiler->trigger_template_error('variable passing not allowed in parent/global scope', null, true); + $_pairs = array(); + // create variables + foreach ($_attr as $key => $value) { + $_pairs[] = "'$key'=>$value"; } - } else { - $_vars = 'array()'; + $_vars = 'array(' . join(',', $_pairs) . ')'; } $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache && - $_compile_id != '$_smarty_tpl->compile_id'; + $_compile_id != '$_smarty_tpl->compile_id'; if ($has_compiled_template && !$call_nocache) { $_output = "<?php\n"; if ($update_compile_id) { $_output .= $compiler->makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"); } - if (!empty($_vars_nc) && $_caching == 9999 && $compiler->template->caching) { - //$compiler->suppressNocacheProcessing = false; + 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); - //$compiler->suppressNocacheProcessing = true; } if (isset($_assign)) { $_output .= "ob_start();\n"; } - $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['func']}');\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"; } @@ -292,7 +270,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase if (isset($_assign)) { $_output .= "ob_start();\n"; } - $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_scope, {$_cache_tpl});\n"; + $_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"; } @@ -307,47 +285,47 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase * Compile inline sub template * * @param \Smarty_Internal_SmartyTemplateCompiler $compiler - * @param $fullResourceName - * @param $_caching - * @param $hashResourceName - * @param $t_hash - * @param $c_id + * @param \Smarty_Internal_Template $tpl + * @param string $t_hash * * @return bool */ - public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, $fullResourceName, - $_caching, $hashResourceName, $t_hash, $c_id) + public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, + Smarty_Internal_Template $tpl, $t_hash) { - $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 (!($tpl->source->handler->uncompiled) && $tpl->source->exists) { - $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid'] = $tpl->source->uid; - if (isset($compiler->template->_inheritance)) { - $tpl->_inheritance = clone $compiler->template->_inheritance; + $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[$hashResourceName][$t_hash]['func'] = + $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[$hashResourceName][$t_hash]['nocache_hash'] = + $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'nocache_hash' ] = $tpl->compiled->nocache_hash; + if ($compiler->template->source->type == 'file') { + $sourceInfo = $compiler->template->source->filepath; + } else { + $basename = $compiler->template->source->handler->getBasename($compiler->template->source); + $sourceInfo = $compiler->template->source->type . ':' . + ($basename ? $basename : $compiler->template->source->name); + } // get compiled code $compiled_code = "<?php\n\n"; - $compiled_code .= "/* Start inline template \"{$tpl->source->type}:{$tpl->source->name}\" =============================*/\n"; + $compiled_code .= "/* Start inline template \"{$sourceInfo}\" =============================*/\n"; $compiled_code .= "function {$tpl->compiled->unifunc} (\$_smarty_tpl) {\n"; $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler); $compiled_code .= "<?php\n"; $compiled_code .= "}\n?>\n"; $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode); $compiled_code .= "<?php\n\n"; - $compiled_code .= "/* End inline template \"{$tpl->source->type}:{$tpl->source->name}\" =============================*/\n"; + $compiled_code .= "/* End inline template \"{$sourceInfo}\" =============================*/\n"; $compiled_code .= "?>"; unset($tpl->compiler); if ($tpl->compiled->has_nocache_code) { @@ -357,7 +335,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase $compiled_code); $compiler->template->compiled->has_nocache_code = true; } - $compiler->parent_compiler->mergedSubTemplatesCode[$tpl->compiled->unifunc] = $compiled_code; + $compiler->parent_compiler->mergedSubTemplatesCode[ $tpl->compiled->unifunc ] = $compiled_code; return true; } else { return false; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php index e7e62997c..77586da8b 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php @@ -64,7 +64,7 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase $_smarty_tpl = $compiler->template; $_filepath = false; $_file = null; - eval('$_file = @' . $_attr['file'] . ';'); + eval('$_file = @' . $_attr[ 'file' ] . ';'); if (!isset($compiler->smarty->security_policy) && file_exists($_file)) { $_filepath = $compiler->smarty->_realpath($_file, true); } else { @@ -75,7 +75,7 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase } if (!empty($_dir)) { foreach ((array) $_dir as $_script_dir) { - $_path = $compiler->smarty->_realpath($_script_dir . DS . $_file, true); + $_path = $compiler->smarty->_realpath($_script_dir . $compiler->smarty->ds . $_file, true); if (file_exists($_path)) { $_filepath = $_path; break; @@ -91,13 +91,13 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase $compiler->smarty->security_policy->isTrustedPHPDir($_filepath); } - if (isset($_attr['assign'])) { + if (isset($_attr[ 'assign' ])) { // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; + $_assign = $_attr[ 'assign' ]; } $_once = '_once'; - if (isset($_attr['once'])) { - if ($_attr['once'] == 'false') { + if (isset($_attr[ 'once' ])) { + if ($_attr[ 'once' ] == 'false') { $_once = ''; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php index 2ebde1661..02ef67c3a 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php @@ -54,6 +54,9 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { // check and get attributes $_attr = $this->getAttributes($compiler, $args); + //Does tag create output + $compiler->has_output = isset($_attr[ 'assign' ]) ? false : true; + $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache); if (!$nocacheParam) { // do not compile as nocache code @@ -66,35 +69,35 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase $_output = '<?php '; // save possible attributes - eval('$_name = @' . $_attr['name'] . ';'); - if (isset($_attr['assign'])) { + eval('$_name = @' . $_attr[ 'name' ] . ';'); + if (isset($_attr[ 'assign' ])) { // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; + $_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; + $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); + $compiler->template->tpl_vars[ $var ] = new Smarty_Variable(null, true); } } - if (isset($_attr['script'])) { + if (isset($_attr[ 'script' ])) { // script which must be included $_function = "smarty_insert_{$_name}"; $_smarty_tpl = $compiler->template; $_filepath = false; - eval('$_script = @' . $_attr['script'] . ';'); + eval('$_script = @' . $_attr[ 'script' ] . ';'); if (!isset($compiler->smarty->security_policy) && file_exists($_script)) { $_filepath = $_script; } else { if (isset($compiler->smarty->security_policy)) { $_dir = $compiler->smarty->security_policy->trusted_dir; } else { - $_dir = $compiler->smarty->trusted_dir; + $_dir = $compiler->smarty instanceof SmartyBC ? $compiler->smarty->trusted_dir : null; } if (!empty($_dir)) { foreach ((array) $_dir as $_script_dir) { - $_script_dir = rtrim($_script_dir, '/\\') . DS; + $_script_dir = rtrim($_script_dir, '/\\') . $compiler->smarty->ds; if (file_exists($_script_dir . $_script)) { $_filepath = $_script_dir . $_script; break; @@ -109,7 +112,8 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase $_output .= "require_once '{$_filepath}' ;"; require_once $_filepath; if (!is_callable($_function)) { - $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", null, true); + $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", + null, true); } } else { $_filepath = 'null'; @@ -118,12 +122,13 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase if (!is_callable($_function)) { // try plugin if (!$_function = $compiler->getPlugin($_name, 'insert')) { - $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", null, true); + $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']); + unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'script' ], $_attr[ 'nocache' ]); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -138,7 +143,6 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>"; } } else { - $compiler->has_output = true; if ($_smarty_tpl->caching && !$nocacheParam) { $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>"; } else { diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php index 8c6b701e1..7251dcd6c 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php @@ -29,7 +29,7 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { + if ($_attr[ 'nocache' ] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } // this tag does not return compiled code 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 new file mode 100644 index 000000000..720dd68b3 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php @@ -0,0 +1,64 @@ +<?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 + * @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); + if ($compiler->template->caching) { + $output = "<?php \$_smarty_tpl->smarty->ext->_make_nocache->save(\$_smarty_tpl, {$_attr[ 'var' ]});\n?>\n"; + $compiler->has_code = true; + $compiler->suppressNocacheProcessing = true; + return $output; + } else { + return true; + } + } +} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php index b29a993aa..b29a993aa 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php 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 new file mode 100644 index 000000000..617564276 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php @@ -0,0 +1,122 @@ +<?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 + */ + 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();\n?>"; + $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)); + //Does tag create output + $compiler->has_output = isset($_params[ 'assign' ]) ? false : true; + // 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']);"; + $output .= "?>"; + } + return $output . "\n"; + } + + /** + * 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/library/Smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php index 16f233359..bf569be3a 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php @@ -110,11 +110,11 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com public function buildPropertyPreg($named, $attributes) { if ($named) { - $this->resultOffsets['named'] = $this->startOffset + 3; + $this->resultOffsets[ 'named' ] = $this->startOffset + 3; $this->propertyPreg .= "([\$]smarty[.]{$this->tagName}[.]{$attributes['name']}[.]("; $properties = $this->nameProperties; } else { - $this->resultOffsets['item'] = $this->startOffset + 3; + $this->resultOffsets[ 'item' ] = $this->startOffset + 3; $this->propertyPreg .= "([\$]{$attributes['item']}[@]("; $properties = $this->itemProperties; } @@ -140,8 +140,8 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com preg_match_all($this->propertyPreg, $source, $match, PREG_SET_ORDER); foreach ($this->resultOffsets as $key => $offset) { foreach ($match as $m) { - if (isset($m[$offset]) && !empty($m[$offset])) { - $this->matchResults[$key][strtolower($m[$offset])] = true; + if (isset($m[ $offset ]) && !empty($m[ $offset ])) { + $this->matchResults[ $key ][ strtolower($m[ $offset ]) ] = true; } } } @@ -173,9 +173,11 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com $_content = $nextCompiler->template->source->getContent(); if ($_content != '') { // run pre filter if required - if ((isset($nextCompiler->smarty->autoload_filters['pre']) || - isset($nextCompiler->smarty->registered_filters['pre']))) { - $_content = $nextCompiler->smarty->ext->_filter_Handler->runFilter('pre', $_content, $nextCompiler->template); + 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); } @@ -190,7 +192,6 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com */ public function matchBlockSource(Smarty_Internal_TemplateCompilerBase $compiler) { - } /** diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php index 0d0ab8138..26529bb68 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php @@ -35,25 +35,20 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co /** * Compiles code for the execution of function plugin * - * @param array $args array with attributes from parser - * @param \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 + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * @param array $parameter array with compilation parameter + * @param string $tag name of function plugin + * @param string $function PHP function name * * @return string compiled code */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function) { - // This tag does create output - $compiler->has_output = true; - // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); + + unset($_attr[ 'nocache' ]); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -65,8 +60,15 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co } $_params = 'array(' . implode(",", $_paramsArray) . ')'; // compile code - $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; - + $output = "{$function}({$_params},\$_smarty_tpl)"; + if (!empty($parameter[ 'modifierlist' ])) { + $output = $compiler->compileTag('private_modifier', array(), + array('modifierlist' => $parameter[ 'modifierlist' ], + 'value' => $output)); + } + //Does tag create output + $compiler->has_output = true; + $output = "<?php echo {$output};?>\n"; return $output; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php index 9594d2ae7..2ee88db48 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php @@ -31,15 +31,15 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa { // check and get attributes $_attr = $this->getAttributes($compiler, $args); - $output = $parameter['value']; + $output = $parameter[ 'value' ]; // loop over list of modifiers - foreach ($parameter['modifierlist'] as $single_modifier) { - $modifier = $single_modifier[0]; - $single_modifier[0] = $output; + foreach ($parameter[ 'modifierlist' ] as $single_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]); + 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); } @@ -47,27 +47,30 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa switch ($type) { case 1: // registered modifier - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; + if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) { + $function = + $compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ]; if (!is_array($function)) { $output = "{$function}({$params})"; } else { - if (is_object($function[0])) { + if (is_object($function[ 0 ])) { $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . - $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; + $modifier . '\'][0][0]->' . $function[ 1 ] . '(' . $params . ')'; } else { - $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; + $output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')'; } } - $compiler->known_modifier_type[$modifier] = $type; + $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; + 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; @@ -81,7 +84,7 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa $plugin = 'smarty_modifiercompiler_' . $modifier; $output = $plugin($single_modifier, $compiler); } - $compiler->known_modifier_type[$modifier] = $type; + $compiler->known_modifier_type[ $modifier ] = $type; break 2; } break; @@ -94,7 +97,7 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa ) { $output = "{$function}({$params})"; } - $compiler->known_modifier_type[$modifier] = $type; + $compiler->known_modifier_type[ $modifier ] = $type; break 2; } break; @@ -107,17 +110,17 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa ) { $output = "{$modifier}({$params})"; } - $compiler->known_modifier_type[$modifier] = $type; + $compiler->known_modifier_type[ $modifier ] = $type; break 2; } break; case 6: // default plugin handler - if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || + if (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ]) || (is_callable($compiler->smarty->default_plugin_handler_func) && - $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER)) + $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER)) ) { - $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; + $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) @@ -125,27 +128,26 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa if (!is_array($function)) { $output = "{$function}({$params})"; } else { - if (is_object($function[0])) { - $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . - $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; + if (is_object($function[ 0 ])) { + $output = $function[ 0 ] . '->'. $function[ 1 ] . '(' . $params . ')'; } else { - $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; + $output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')'; } } } - if (isset($compiler->parent_compiler->template->compiled->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || - isset($compiler->parent_compiler->template->compiled->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) + if (isset($compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ]) || + isset($compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ]) ) { // was a plugin - $compiler->known_modifier_type[$modifier] = 4; + $compiler->known_modifier_type[ $modifier ] = 4; } else { - $compiler->known_modifier_type[$modifier] = $type; + $compiler->known_modifier_type[ $modifier ] = $type; } break 2; } } } - if (!isset($compiler->known_modifier_type[$modifier])) { + if (!isset($compiler->known_modifier_type[ $modifier ])) { $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", null, true); } } 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 new file mode 100644 index 000000000..5c7fb6265 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php @@ -0,0 +1,42 @@ +<?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/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php index e306e0f6d..7f78a421e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php @@ -27,11 +27,11 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co /** * Compiles code for the execution of function plugin * - * @param array $args array with attributes from parser + * @param 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 + * @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 */ @@ -39,19 +39,19 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co { // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); + //Does tag create output + $compiler->has_output = isset($_attr[ 'assign' ]) ? false : true; + + unset($_attr[ 'nocache' ]); $_assign = null; - if (isset($_attr['assign'])) { - $_assign = $_attr['assign']; - unset($_attr['assign']); + if (isset($_attr[ 'assign' ])) { + $_assign = $_attr[ 'assign' ]; + unset($_attr[ 'assign' ]); } // method or property ? - if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) { + if (is_callable(array($compiler->smarty->registered_objects[ $tag ][ 0 ], $method))) { // convert attributes into parameter array string - if ($compiler->smarty->registered_objects[$tag][2]) { + if ($compiler->smarty->registered_objects[ $tag ][ 2 ]) { $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { @@ -61,24 +61,26 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; + $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; } else { $_params = implode(",", $_attr); - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; + $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; } } else { // object property - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; + $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)); + } + //Does tag create output + $compiler->has_output = isset($_attr[ 'assign' ]) ? false : true; if (empty($_assign)) { - // This tag does create output - $compiler->has_output = true; - $output = "<?php echo {$return};?>\n"; + return "<?php echo {$output};?>\n"; } else { - $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n"; + return "<?php \$_smarty_tpl->assign({$_assign},{$output});?>\n"; } - - return $output; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_php.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php index 3ca63a548..8bff8499f 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_php.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php @@ -40,59 +40,65 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase // check and get attributes $_attr = $this->getAttributes($compiler, $args); $compiler->has_code = false; - if ($_attr['type'] == 'xml') { + if ($_attr[ 'type' ] == 'xml') { $compiler->tag_nocache = true; - $save = $compiler->template->compiled->has_nocache_code; - $output = addcslashes($_attr['code'], "'\\"); - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" . - $output . - "';?>", $compiler, true))); - $compiler->template->compiled->has_nocache_code = $save; + $output = addcslashes($_attr[ 'code' ], "'\\"); + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $compiler->processNocacheCode("<?php echo '" . + $output . + "';?>", + true))); return ''; } - if ($_attr['type'] != 'tag') { + if ($_attr[ 'type' ] != 'tag') { if ($compiler->php_handling == Smarty::PHP_REMOVE) { return ''; } elseif ($compiler->php_handling == Smarty::PHP_QUOTE) { - $output = preg_replace_callback('#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', array($this, - 'quote'), $_attr['code']); - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Text($output)); + $output = + preg_replace_callback('#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', + array($this, 'quote'), $_attr[ 'code' ]); + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Text($output)); return ''; - } elseif ($compiler->php_handling == Smarty::PHP_PASSTHRU || $_attr['type'] == 'unmatched') { + } elseif ($compiler->php_handling == Smarty::PHP_PASSTHRU || $_attr[ 'type' ] == 'unmatched') { $compiler->tag_nocache = true; - $save = $compiler->template->compiled->has_nocache_code; - $output = addcslashes($_attr['code'], "'\\"); - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" . - $output . - "';?>", $compiler, true))); - $compiler->template->compiled->has_nocache_code = $save; + $output = addcslashes($_attr[ 'code' ], "'\\"); + $compiler->parser->current_buffer->append_subtree($compiler->parser, + new Smarty_Internal_ParseTree_Tag($compiler->parser, + $compiler->processNocacheCode("<?php echo '" . + $output . + "';?>", + true))); return ''; } elseif ($compiler->php_handling == Smarty::PHP_ALLOW) { if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it', null, true); + $compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it', + null, true); } $compiler->has_code = true; - return $_attr['code']; + return $_attr[ 'code' ]; } else { $compiler->trigger_template_error('Illegal $smarty->php_handling value', null, true); } } else { $compiler->has_code = true; if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error('{php}{/php} tags not allowed. Use SmartyBC to enable them', null, true); + $compiler->trigger_template_error('{php}{/php} tags not allowed. Use SmartyBC to enable them', null, + true); } $ldel = preg_quote($compiler->smarty->left_delimiter, '#'); $rdel = preg_quote($compiler->smarty->right_delimiter, '#'); - preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr['code'], $match); - if (!empty($match[2])) { - if ('nocache' == trim($match[2])) { + preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr[ 'code' ], $match); + if (!empty($match[ 2 ])) { + if ('nocache' == trim($match[ 2 ])) { $compiler->tag_nocache = true; } else { $compiler->trigger_template_error("illegal value of option flag \"{$match[2]}\"", null, true); } } - return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", - "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), array('<?php ', '?>'), $_attr['code']); + return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), + array('<?php ', '?>'), $_attr[ 'code' ]); } } @@ -111,7 +117,7 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase $closeTag = '?>'; if (strpos($lex->value, '<?xml') === 0) { $lex->is_xml = true; - $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; + $lex->phpType = 'xml'; return; } elseif (strpos($lex->value, '<?') === 0) { $lex->phpType = 'php'; @@ -123,7 +129,7 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase } elseif (strpos($lex->value, '?>') === 0) { if ($lex->is_xml) { $lex->is_xml = false; - $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; + $lex->phpType = 'xml'; return; } $lex->phpType = 'unmatched'; @@ -152,14 +158,15 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase $start = $lex->counter + strlen($lex->value); $body = true; if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { - $close = $match[0][1]; + $close = $match[ 0 ][ 1 ]; } else { $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); } while ($body) { - if (preg_match('~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { - $value = $match[0][0]; - $from = $pos = $match[0][1]; + if (preg_match('~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~', + $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { + $value = $match[ 0 ][ 0 ]; + $from = $pos = $match[ 0 ][ 1 ]; if ($pos > $close) { $body = false; } else { @@ -168,15 +175,15 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase if ($phpCommentStart) { $phpCommentEnd = preg_match('~([*][/])~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start); if ($phpCommentEnd) { - $pos2 = $match[0][1]; - $start = $pos2 + strlen($match[0][0]); + $pos2 = $match[ 0 ][ 1 ]; + $start = $pos2 + strlen($match[ 0 ][ 0 ]); } } while ($close > $pos && $close < $start) { - if (preg_match('~' . preg_quote($closeTag, '~') . - '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $from)) { - $close = $match[0][1]; - $from = $close + strlen($match[0][0]); + if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, + $from)) { + $close = $match[ 0 ][ 1 ]; + $from = $close + strlen($match[ 0 ][ 0 ]); } else { $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); } @@ -204,6 +211,6 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase */ private function quote($match) { - return htmlspecialchars($match[0], ENT_QUOTES); + return htmlspecialchars($match[ 0 ], ENT_QUOTES); } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php index c0c089bff..811996bcc 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php @@ -46,59 +46,60 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C { // check and get attributes $_attr = $this->getAttributes($compiler, $args); - // nocache option - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; + $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'])) { + if (isset($_attr[ 'assign' ])) { // assign output to variable - $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>"; + return "<?php \$_smarty_tpl->assign({$_attr['assign']},{$output});?>"; } else { // display value - $output = $parameter['value']; - // tag modifier - if (!empty($parameter['modifierlist'])) { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], - 'value' => $output)); - } - if (!$_attr['nofilter']) { + 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]; + 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)); + $output = $compiler->compileTag('private_modifier', array(), + array('modifierlist' => $compiler->default_modifier_list, + 'value' => $output)); } // autoescape html if ($compiler->template->smarty->escape_html) { $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; } // loop over registered filters - if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { - foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => + 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)"; + } 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) { + if (isset($compiler->smarty->autoload_filters[ Smarty::FILTER_VARIABLE ])) { + foreach ((array) $compiler->template->smarty->autoload_filters[ Smarty::FILTER_VARIABLE ] as $name) + { $result = $this->compile_output_filter($compiler, $name, $output); if ($result !== false) { $output = $result; @@ -110,12 +111,12 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C } foreach ($compiler->variable_filters as $filter) { if (count($filter) == 1 && - ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false + ($result = $this->compile_output_filter($compiler, $filter[ 0 ], $output)) !== false ) { $output = $result; } else { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), - 'value' => $output)); + $output = $compiler->compileTag('private_modifier', array(), + array('modifierlist' => array($filter), 'value' => $output)); } } } @@ -137,20 +138,25 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C private function compile_output_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output) { $plugin_name = "smarty_variablefilter_{$name}"; - $path = $compiler->smarty->loadPlugin($plugin_name, false); + $path = $compiler->smarty->loadPlugin($plugin_name); if ($path) { + /** if ($compiler->template->caching) { - $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; + $compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $name ][ Smarty::FILTER_VARIABLE ][ 'file' ] = + $path; + $compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $name ][ Smarty::FILTER_VARIABLE ][ 'function' ] = + $plugin_name; } else { - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $name ][ Smarty::FILTER_VARIABLE ][ 'file' ] = + $path; + $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $name ][ Smarty::FILTER_VARIABLE ][ 'function' ] = + $plugin_name; } + * */ + return "{$plugin_name}({$output},\$_smarty_tpl)"; } else { // not found return false; } - - return "{$plugin_name}({$output},\$_smarty_tpl)"; } } 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 new file mode 100644 index 000000000..987bc96f3 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php @@ -0,0 +1,72 @@ +<?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/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php index 6bddc7529..7a4cbb7f7 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php @@ -27,36 +27,31 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna /** * Compiles code for the execution of a registered function * - * @param array $args array with attributes from parser + * @param 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 array $parameter array with compilation parameter + * @param string $tag name of function * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag) { - // This tag does create output - $compiler->has_output = true; // check and get attributes $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag]; + unset($_attr[ 'nocache' ]); + if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) { + $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ]; } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag]; + $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ]; } // not cachable? - $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1]; + $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[ 1 ]; // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; - } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { + } elseif ($compiler->template->caching && in_array($_key, $tag_info[ 2 ])) { $_value = str_replace("'", "^#^", $_value); $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; } else { @@ -64,16 +59,24 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $function = $tag_info[0]; + $function = $tag_info[ 0 ]; // compile code if (!is_array($function)) { - $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; - } elseif (is_object($function[0])) { - $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n"; + $output = "{$function}({$_params},\$_smarty_tpl)"; + } elseif (is_object($function[ 0 ])) { + $output = + "\$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl)"; } else { - $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n"; + $output = "{$function[0]}::{$function[1]}({$_params},\$_smarty_tpl)"; } - + if (!empty($parameter[ 'modifierlist' ])) { + $output = $compiler->compileTag('private_modifier', array(), + array('modifierlist' => $parameter[ 'modifierlist' ], + 'value' => $output)); + } + //Does tag create output + $compiler->has_output = true; + $output = "<?php echo {$output};?>\n"; return $output; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php index b83e824af..0c6be44f6 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php @@ -39,11 +39,11 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C switch ($variable) { case 'foreach': case 'section': - if (!isset($compiler->_tag_objects[ $variable ])) { + if (!isset(Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ])) { $class = 'Smarty_Internal_Compile_' . ucfirst($variable); - $compiler->_tag_objects[ $variable ] = new $class; + Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ] = new $class; } - return $compiler->_tag_objects[ $variable ]->compileSpecialVariable(array(), $compiler, $_index); + 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); @@ -85,7 +85,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C return 'dirname($_smarty_tpl->source->filepath)'; case 'version': - return "Smarty::SMARTY_VERSION"; + return "Smarty::SMARTY_VERSION"; case 'const': if (isset($compiler->smarty->security_policy) && diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php index 22b33eaa2..2e6b43c17 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php @@ -20,15 +20,16 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase * Compiles code for the {rdelim} tag * This tag does output the right delimiter. * - * @param array $args array with attributes from parser - * @param object $compiler compiler object + * @param array $args array with attributes from parser + * @param \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) { + if ($_attr[ 'nocache' ] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } // this tag does not return compiled code diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php index 40b297a64..c3701fc63 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php @@ -38,7 +38,7 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo * @var array * @see Smarty_Internal_CompileBase */ - public $optional_attributes = array('start', 'step', 'max', 'show'); + public $optional_attributes = array('start', 'step', 'max', 'show', 'properties'); /** * counter @@ -59,8 +59,8 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo * * @var array */ - public $nameProperties = array('first', 'last', 'index', 'iteration', 'show', 'total', 'rownum', - 'index_prev', 'index_next'); + public $nameProperties = array('first', 'last', 'index', 'iteration', 'show', 'total', 'rownum', 'index_prev', + 'index_next', 'loop'); /** * {section} tag has no item properties @@ -87,11 +87,11 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { - $compiler->loopNesting++; + $compiler->loopNesting ++; // check and get attributes $_attr = $this->getAttributes($compiler, $args); - $attributes = array('name' => $compiler->getId($_attr['name'])); - unset($_attr['name']); + $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); @@ -103,22 +103,32 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $initLocal = array('saved' => "isset(\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']) ? \$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}'] : false",); + $initLocal = + array('saved' => "isset(\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']) ? \$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}'] : false",); $initNamedProperty = array(); $initFor = array(); $incFor = array(); $cmpFor = array(); - $propValue = array('index' => "{$sectionVar}->value['index']", 'show' => 'true', 'step' => 1, + $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 (!empty($this->matchResults[ 'named' ])) { + $namedAttr = $this->matchResults[ 'named' ]; } - $namedAttr['index'] = true; + 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) { @@ -130,13 +140,13 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo $v = "(is_array(@\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop))"; $t = 1; } - if (isset($namedAttr['loop'])) { - $initNamedProperty['loop'] = "'loop' => {$v}"; + if (isset($namedAttr[ 'loop' ])) { + $initNamedProperty[ 'loop' ] = "'loop' => {$v}"; if ($t == 1) { $v = "{$sectionVar}->value['loop']"; } } elseif ($t == 1) { - $initLocal['loop'] = $v; + $initLocal[ 'loop' ] = $v; $v = "{$local}loop"; } break; @@ -156,7 +166,7 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo $t = 0; break; } - $initLocal['step'] = "((int)@$attr_value) == 0 ? 1 : (int)@$attr_value"; + $initLocal[ 'step' ] = "((int)@$attr_value) == 0 ? 1 : (int)@$attr_value"; $v = "{$local}step"; $t = 2; break; @@ -175,166 +185,171 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo if ($t == 3 && $compiler->getId($attr_value)) { $t = 1; } - $propValue[$attr_name] = $v; - $propType[$attr_name] = $t; + $propValue[ $attr_name ] = $v; + $propType[ $attr_name ] = $t; } - if (isset($namedAttr['step'])) { - $initNamedProperty['step'] = $propValue['step']; + if (isset($namedAttr[ 'step' ])) { + $initNamedProperty[ 'step' ] = $propValue[ 'step' ]; } - if (isset($namedAttr['iteration'])) { - $propValue['iteration'] = "{$sectionVar}->value['iteration']"; + if (isset($namedAttr[ 'iteration' ])) { + $propValue[ 'iteration' ] = "{$sectionVar}->value['iteration']"; } - $incFor['iteration'] = "{$propValue['iteration']}++"; - $initFor['iteration'] = "{$propValue['iteration']} = 1"; + $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']}"; + 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']; + $incFor[ 'index' ] = "{$sectionVar}->value['index'] -= " . - $propValue[ 'step' ]; } } else { - $incFor['index'] = "{$sectionVar}->value['index'] += {$propValue['step']}"; + $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; + 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 ($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 (!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) { + if ($propType[ 'step' ] == 0) { + if ($propValue[ 'step' ] > 0) { $start_code = array(1 => '0'); - $propType['start'] = 0; + $propType[ 'start' ] = 0; } else { - $start_code[1] = $start_code[2] = $start_code[3] = ''; - $propType['start'] = $propType['loop']; + $start_code[ 1 ] = $start_code[ 2 ] = $start_code[ 3 ] = ''; + $propType[ 'start' ] = $propType[ 'loop' ]; } } else { - $propType['start'] = 1; + $propType[ 'start' ] = 1; } - $propValue['start'] = join('', $start_code); + $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] = ''; + $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] = ''; + $start_code[ 4 ] = $start_code[ 16 ] = ''; } } - if ($propType['start'] == 0) { - if ($propType['loop'] == 0) { - $start_code[8] = $propValue['start'] + $propValue['loop']; + 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) { + $propType[ 'start' ] = $propType[ 'step' ] + $propType[ 'loop' ]; + $start_code[ 1 ] = ''; + if ($propValue[ 'start' ] < 0) { for ($i = 11; $i <= 19; $i ++) { - $start_code[$i] = ''; + $start_code[ $i ] = ''; } - if ($propType['start'] == 0) { - $start_code = array(max($propValue['step'] > 0 ? 0 : - 1, $propValue['start'] + - $propValue['loop'])); + 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] = ''; + $start_code[ $i ] = ''; } - if ($propType['start'] == 0) { - $start_code = array(min($propValue['step'] > 0 ? $propValue['loop'] : $propValue['loop'] - - 1, $propValue['start'])); + if ($propType[ 'start' ] == 0) { + $start_code = + array(min($propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] : $propValue[ 'loop' ] - 1, + $propValue[ 'start' ])); } } } - $propValue['start'] = join('', $start_code); + $propValue[ 'start' ] = join('', $start_code); } - if ($propType['start'] != 0) { - $initLocal['start'] = $propValue['start']; - $propValue['start'] = "{$local}start"; + if ($propType[ 'start' ] != 0) { + $initLocal[ 'start' ] = $propValue[ 'start' ]; + $propValue[ 'start' ] = "{$local}start"; } - $initFor['index'] = "{$sectionVar}->value['index'] = {$propValue['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']; + 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']); + $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] = ''; + $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[ '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[ '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']; + 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] = ''; + $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] = ''; + $total_code[ 5 ] = $total_code[ 6 ] = $total_code[ 7 ] = $total_code[ 8 ] = ''; } } - $propValue['total'] = join('', $total_code); + $propValue[ 'total' ] = join('', $total_code); } } - if (isset($namedAttr['total'])) { - $initNamedProperty['total'] = "'total' => {$propValue['total']}"; - if ($propType['total'] > 0) { - $propValue['total'] = "{$sectionVar}->value['total']"; + if (isset($namedAttr[ 'loop' ])) { + $initNamedProperty[ 'loop' ] = "'loop' => {$propValue['total']}"; + } + 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"; + } elseif ($propType[ 'total' ] > 0) { + $initLocal[ 'total' ] = $propValue[ 'total' ]; + $propValue[ 'total' ] = "{$local}total"; } - $cmpFor['iteration'] = "{$propValue['iteration']} <= {$propValue['total']}"; + $cmpFor[ 'iteration' ] = "{$propValue['iteration']} <= {$propValue['total']}"; foreach ($initLocal as $key => $code) { $output .= "{$local}{$key} = {$code};\n"; @@ -343,17 +358,17 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo $_vars = 'array(' . join(', ', $initNamedProperty) . ')'; $output .= "{$sectionVar} = new Smarty_Variable({$_vars});\n"; $cond_code = "{$propValue['total']} != 0"; - if ($propType['total'] == 0) { - if ($propValue['total'] == 0) { + if ($propType[ 'total' ] == 0) { + if ($propValue[ 'total' ] == 0) { $cond_code = 'false'; } else { $cond_code = 'true'; } } - if ($propType['show'] > 0) { + if ($propType[ 'show' ] > 0) { $output .= "{$local}show = {$propValue['show']} ? {$cond_code} : false;\n"; $output .= "if ({$local}show) {\n"; - } elseif ($propValue['show'] == 'true') { + } elseif ($propValue[ 'show' ] == 'true') { $output .= "if ({$cond_code}) {\n"; } else { $output .= "if (false) {\n"; @@ -362,19 +377,19 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo $jcmp = join(', ', $cmpFor); $jinc = join(', ', $incFor); $output .= "for ({$jinit}; {$jcmp}; {$jinc}){\n"; - if (isset($namedAttr['rownum'])) { + if (isset($namedAttr[ 'rownum' ])) { $output .= "{$sectionVar}->value['rownum'] = {$propValue['iteration']};\n"; } - if (isset($namedAttr['index_prev'])) { + if (isset($namedAttr[ 'index_prev' ])) { $output .= "{$sectionVar}->value['index_prev'] = {$propValue['index']} - {$propValue['step']};\n"; } - if (isset($namedAttr['index_next'])) { + if (isset($namedAttr[ 'index_next' ])) { $output .= "{$sectionVar}->value['index_next'] = {$propValue['index']} + {$propValue['step']};\n"; } - if (isset($namedAttr['first'])) { + if (isset($namedAttr[ 'first' ])) { $output .= "{$sectionVar}->value['first'] = ({$propValue['iteration']} == 1);\n"; } - if (isset($namedAttr['last'])) { + if (isset($namedAttr[ 'last' ])) { $output .= "{$sectionVar}->value['last'] = ({$propValue['iteration']} == {$propValue['total']});\n"; } $output .= "?>"; @@ -429,14 +444,14 @@ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { - $compiler->loopNesting--; + $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')); + list($openTag, $compiler->nocache, $local, $sectionVar) = + $this->closeTag($compiler, array('section', 'sectionelse')); $output = "<?php\n"; if ($openTag == 'sectionelse') { diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php index b4932c1e1..1f3ba8d48 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php @@ -19,16 +19,16 @@ class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase /** * Compiles code for setfilter tag * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter + * @param array $args array with attributes from parser + * @param \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']; + $compiler->variable_filters = $parameter[ 'modifier_list' ]; // this tag does not return compiled code $compiler->has_code = false; @@ -48,8 +48,8 @@ class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase * Compiles code for the {/setfilter} tag * This tag does not generate compiled output. It resets variable filter. * - * @param array $args array with attributes from parser - * @param object $compiler compiler object + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return string compiled code */ diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php index c7bf1f8fb..c95576596 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php @@ -24,11 +24,11 @@ class Smarty_Internal_Compile_Shared_Inheritance extends Smarty_Internal_Compile */ public function registerInit(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false) { - if ($initChildSequence || !isset($compiler->_cache['inheritanceInit'])) { + if ($initChildSequence || !isset($compiler->_cache[ 'inheritanceInit' ])) { $compiler->registerPostCompileCallback(array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'), array($initChildSequence), 'inheritanceInit', $initChildSequence); - $compiler->_cache['inheritanceInit'] = true; + $compiler->_cache[ 'inheritanceInit' ] = true; } } @@ -40,7 +40,7 @@ class Smarty_Internal_Compile_Shared_Inheritance extends Smarty_Internal_Compile */ static function postCompile(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false) { - $compiler->prefixCompiledCode .= "<?php \$_smarty_tpl->ext->_inheritance->init(\$_smarty_tpl, " . - var_export($initChildSequence, true) . ");\n?>\n"; + $compiler->prefixCompiledCode .= "<?php \$_smarty_tpl->_loadInheritance();\n\$_smarty_tpl->inheritance->init(\$_smarty_tpl, " . + var_export($initChildSequence, true) . ");\n?>\n"; } }
\ No newline at end of file diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php new file mode 100644 index 000000000..6025798c5 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php @@ -0,0 +1,100 @@ +<?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/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php index 0803f27a6..08aab6f4e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php @@ -45,6 +45,20 @@ abstract class Smarty_Internal_CompileBase public $option_flags = array('nocache'); /** + * Mapping array for boolqn 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 @@ -59,71 +73,75 @@ abstract class Smarty_Internal_CompileBase public function getAttributes($compiler, $attributes) { $_indexed_attr = array(); - // loop over attributes + 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 (in_array(trim($mixed, '\'"'), $this->option_flags)) { - $_indexed_attr[trim($mixed, '\'"')] = true; + 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; + } 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 { - $kv = each($mixed); - // option flag? - if (in_array($kv['key'], $this->option_flags)) { - if (is_bool($kv['value'])) { - $_indexed_attr[$kv['key']] = $kv['value']; - } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) { - if (trim($kv['value']) == 'true') { - $_indexed_attr[$kv['key']] = true; - } else { - $_indexed_attr[$kv['key']] = false; - } - } elseif (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) { - if ($kv['value'] == 1) { - $_indexed_attr[$kv['key']] = true; + foreach ($mixed as $k => $v) { + // option flag? + if (isset($this->mapCache[ 'option' ][ $k ])) { + if (is_bool($v)) { + $_indexed_attr[ $k ] = $v; } else { - $_indexed_attr[$kv['key']] = false; + 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 { - $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", null, true); + $_indexed_attr[ $k ] = $v; } - // must be named attribute - } else { - reset($mixed); - $_indexed_attr[key($mixed)] = $mixed[key($mixed)]; } } } // check if all required attributes present foreach ($this->required_attributes as $attr) { - if (!array_key_exists($attr, $_indexed_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')) { - $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags); + 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 (!in_array($key, $tmp_array) && $key !== 0) { + 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[ $flag ])) { + $_indexed_attr[ $flag ] = false; } } - + if (isset($_indexed_attr[ 'nocache' ]) && $_indexed_attr[ 'nocache' ]) { + $compiler->tag_nocache = true; + } return $_indexed_attr; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php index 56d3b0665..b1ef958cd 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php @@ -87,8 +87,8 @@ class Smarty_Internal_Config_File_Compiler $this->lexer_class = $lexer_class; $this->parser_class = $parser_class; $this->smarty = $smarty; - $this->config_data['sections'] = array(); - $this->config_data['vars'] = array(); + $this->config_data[ 'sections' ] = array(); + $this->config_data[ 'vars' ] = array(); } /** @@ -101,18 +101,21 @@ class Smarty_Internal_Config_File_Compiler 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); + $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 $lex */ - $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) . - "\n", $this); - /* @var Smarty_Internal_ConfigFileParser $parser */ - $parser = new $this->parser_class($lex, $this); + /* @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') && ((int) ini_get('mbstring.func_overload')) & 2) { $mbEncoding = mb_internal_encoding(); @@ -122,17 +125,17 @@ class Smarty_Internal_Config_File_Compiler } if ($this->smarty->_parserdebug) { - $parser->PrintTrace(); + $this->parser->PrintTrace(); } // get tokens from lexer and parse them - while ($lex->yylex()) { + while ($this->lex->yylex()) { if ($this->smarty->_parserdebug) { - echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n"; + echo "<br>Parsing {$this->parser->yyTokenName[$this->lex->token]} Token {$this->lex->value} Line {$this->lex->line} \n"; } - $parser->doParse($lex->token, $lex->value); + $this->parser->doParse($this->lex->token, $this->lex->value); } // finish parsing process - $parser->doParse(0, 0); + $this->parser->doParse(0, 0); if ($mbEncoding) { mb_internal_encoding($mbEncoding); @@ -141,12 +144,13 @@ class Smarty_Internal_Config_File_Compiler $this->smarty->_debug->end_compile($this->template); } // template header code - $template_header = "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . - strftime("%Y-%m-%d %H:%M:%S") . "\n"; + $template_header = + "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . + "\n"; $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n"; $code = '<?php $_smarty_tpl->smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' . - var_export($this->config_data, true) . '); ?>'; + var_export($this->config_data, true) . '); ?>'; return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code); } @@ -162,28 +166,27 @@ class Smarty_Internal_Config_File_Compiler */ public function trigger_config_file_error($args = null) { - $this->lex = Smarty_Internal_Configfilelexer::instance(); - $this->parser = Smarty_Internal_Configfileparser::instance(); // 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]}' "; + $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])) { + $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] . '"'; + $expect[] = '"' . $this->lex->smarty_token_names[ $exp_token ] . '"'; } else { // otherwise internal token name - $expect[] = $this->parser->yyTokenName[$token]; + $expect[] = $this->parser->yyTokenName[ $token ]; } } // output parser error message diff --git a/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php index e62728c2c..7869ef384 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php @@ -29,6 +29,13 @@ class Smarty_Internal_Configfilelexer public $data; /** + * Source length + * + * @var int + */ + public $dataLength = null; + + /** * byte counter * * @var int @@ -109,7 +116,7 @@ class Smarty_Internal_Configfilelexer /** * storage for assembled token patterns * - * @var sring + * @var string */ private $yy_global_pattern1 = null; @@ -139,12 +146,11 @@ class Smarty_Internal_Configfilelexer */ function __construct($data, Smarty_Internal_Config_File_Compiler $compiler) { - // set instance object - self::instance($this); $this->data = $data . "\n"; //now all lines are \n-terminated + $this->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; @@ -152,15 +158,6 @@ class Smarty_Internal_Configfilelexer $this->configBooleanize = $this->smarty->config_booleanize; } - public static function &instance($new_instance = null) - { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - public function PrintTrace() { $this->yyTraceFILE = fopen('php://output', 'w'); @@ -179,23 +176,31 @@ 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); + fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, + isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : + $this->_yy_state); } $this->_yy_state = array_pop($this->_yy_stack); if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); + 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); } } @@ -203,29 +208,35 @@ class Smarty_Internal_Configfilelexer { $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 = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS"; + $this->yy_global_pattern1 = + "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS"; + } + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); } - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $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'); + throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . + substr($this->data, $this->counter, 5) . '... state START'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -243,17 +254,18 @@ class Smarty_Internal_Configfilelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; } } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); + throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const START = 1; @@ -312,22 +324,26 @@ class Smarty_Internal_Configfilelexer public function yylex2() { if (!isset($this->yy_global_pattern2)) { - $this->yy_global_pattern2 = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; + $this->yy_global_pattern2 = + "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; + } + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); } - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $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'); + throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . + substr($this->data, $this->counter, 5) . '... state VALUE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -345,17 +361,18 @@ class Smarty_Internal_Configfilelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; } } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); + throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const VALUE = 2; @@ -404,8 +421,8 @@ class Smarty_Internal_Configfilelexer function yy_r2_7() { - if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", - "no")) + if (!$this->configBooleanize || + !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) { $this->yypopstate(); $this->yypushstate(self::NAKED_STRING_VALUE); @@ -436,20 +453,23 @@ class Smarty_Internal_Configfilelexer if (!isset($this->yy_global_pattern3)) { $this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $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'); + throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . + substr($this->data, $this->counter, 5) . '... state NAKED_STRING_VALUE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -467,17 +487,18 @@ class Smarty_Internal_Configfilelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; } } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); + throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const NAKED_STRING_VALUE = 3; @@ -494,20 +515,23 @@ class Smarty_Internal_Configfilelexer if (!isset($this->yy_global_pattern4)) { $this->yy_global_pattern4 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $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'); + throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . + substr($this->data, $this->counter, 5) . '... state COMMENT'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -525,17 +549,18 @@ class Smarty_Internal_Configfilelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; } } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); + throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const COMMENT = 4; @@ -564,20 +589,23 @@ class Smarty_Internal_Configfilelexer if (!isset($this->yy_global_pattern5)) { $this->yy_global_pattern5 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $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'); + throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . + substr($this->data, $this->counter, 5) . '... state SECTION'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -595,17 +623,18 @@ class Smarty_Internal_Configfilelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; } } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); + throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const SECTION = 5; @@ -628,20 +657,23 @@ class Smarty_Internal_Configfilelexer if (!isset($this->yy_global_pattern6)) { $this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $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'); + throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . + substr($this->data, $this->counter, 5) . '... state TRIPPLE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -659,17 +691,18 @@ class Smarty_Internal_Configfilelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; } } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); + throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const TRIPPLE = 6; @@ -687,8 +720,8 @@ class Smarty_Internal_Configfilelexer $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]; + if (isset($match[ 0 ][ 1 ])) { + $to = $match[ 0 ][ 1 ]; } else { $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php index 69aaf990f..b7551a2b5 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php @@ -28,18 +28,18 @@ class TPC_yyToken implements ArrayAccess public function offsetExists($offset) { - return isset($this->metadata[$offset]); + return isset($this->metadata[ $offset ]); } public function offsetGet($offset) { - return $this->metadata[$offset]; + return $this->metadata[ $offset ]; } public function offsetSet($offset, $value) { if ($offset === null) { - if (isset($value[0])) { + if (isset($value[ 0 ])) { $x = ($value instanceof TPC_yyToken) ? $value->metadata : $value; $this->metadata = array_merge($this->metadata, $x); @@ -52,16 +52,16 @@ class TPC_yyToken implements ArrayAccess } if ($value instanceof TPC_yyToken) { if ($value->metadata) { - $this->metadata[$offset] = $value->metadata; + $this->metadata[ $offset ] = $value->metadata; } } elseif ($value) { - $this->metadata[$offset] = $value; + $this->metadata[ $offset ] = $value; } } public function offsetUnset($offset) { - unset($this->metadata[$offset]); + unset($this->metadata[ $offset ]); } } @@ -168,8 +168,6 @@ class Smarty_Internal_Configfileparser */ function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler) { - // set instance object - self::instance($this); $this->lex = $lex; $this->smarty = $compiler->smarty; $this->compiler = $compiler; @@ -178,20 +176,6 @@ class Smarty_Internal_Configfileparser } /** - * @param null $new_instance - * - * @return null - */ - public static function &instance($new_instance = null) - { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - /** * parse optional boolean keywords * * @param string $str @@ -226,9 +210,9 @@ class Smarty_Internal_Configfileparser $str = ""; foreach ($ss as $s) { - if (strlen($s) === 2 && $s[0] === '\\') { - if (isset(self::$escapes_single[$s[1]])) { - $s = self::$escapes_single[$s[1]]; + if (strlen($s) === 2 && $s[ 0 ] === '\\') { + if (isset(self::$escapes_single[ $s[ 1 ] ])) { + $s = self::$escapes_single[ $s[ 1 ] ]; } } $str .= $s; @@ -269,14 +253,14 @@ class Smarty_Internal_Configfileparser */ private function set_var(Array $var, Array &$target_array) { - $key = $var["key"]; - $value = $var["value"]; + $key = $var[ "key" ]; + $value = $var[ "value" ]; - if ($this->configOverwrite || !isset($target_array['vars'][$key])) { - $target_array['vars'][$key] = $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; + settype($target_array[ 'vars' ][ $key ], 'array'); + $target_array[ 'vars' ][ $key ][] = $value; } } @@ -287,8 +271,8 @@ class Smarty_Internal_Configfileparser */ private function add_global_vars(Array $vars) { - if (!isset($this->compiler->config_data['vars'])) { - $this->compiler->config_data['vars'] = Array(); + 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); @@ -303,11 +287,11 @@ class Smarty_Internal_Configfileparser */ 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(); + 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]); + $this->set_var($var, $this->compiler->config_data[ 'sections' ][ $section_name ]); } } @@ -356,17 +340,17 @@ class Smarty_Internal_Configfileparser const YY_SZ_ACTTAB = 38; static public $yy_action = array(29, 30, 34, 33, 24, 13, 19, 25, 35, 21, 59, 8, 3, 1, 20, 12, 14, 31, 20, 12, 15, - 17, 23, 18, 27, 26, 4, 5, 6, 32, 2, 11, 28, 22, 16, 9, 7, 10,); + 17, 23, 18, 27, 26, 4, 5, 6, 32, 2, 11, 28, 22, 16, 9, 7, 10,); static public $yy_lookahead = array(7, 8, 9, 10, 11, 12, 5, 27, 15, 16, 20, 21, 23, 23, 17, 18, 13, 14, 17, 18, 15, - 2, 17, 4, 25, 26, 6, 3, 3, 14, 23, 1, 24, 17, 2, 25, 22, 25,); + 2, 17, 4, 25, 26, 6, 3, 3, 14, 23, 1, 24, 17, 2, 25, 22, 25,); const YY_SHIFT_USE_DFLT = - 8; const YY_SHIFT_MAX = 19; static public $yy_shift_ofst = array(- 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8, - 8, 19, 5, 3, 15, 16, 24, 25, 32, - 20,); + 20,); const YY_REDUCE_USE_DFLT = - 21; @@ -375,13 +359,15 @@ class Smarty_Internal_Configfileparser static public $yy_reduce_ofst = array(- 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7, - 11,); static public $yyExpectedTokens = array(array(), array(5, 17, 18,), array(5, 17, 18,), array(5, 17, 18,), - array(7, 8, 9, 10, 11, 12, 15, 16,), array(17, 18,), array(17, 18,), array(1,), array(), array(), array(), - array(2, 4,), array(15, 17,), array(13, 14,), array(14,), array(17,), array(3,), array(3,), array(2,), - array(6,), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(),); + array(7, 8, 9, 10, 11, 12, 15, 16,), array(17, 18,), array(17, 18,), + array(1,), array(), array(), array(), array(2, 4,), array(15, 17,), + array(13, 14,), array(14,), array(17,), array(3,), array(3,), array(2,), + array(6,), array(), array(), array(), array(), array(), array(), array(), + array(), array(), array(), array(), array(), array(), array(), array(), + array(),); static public $yy_default = array(44, 37, 41, 40, 58, 58, 58, 36, 39, 44, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, 47, 52, 51, 49, 48, 53,); + 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, 47, 52, 51, 49, 48, 53,); const YYNOCODE = 29; @@ -425,18 +411,21 @@ class Smarty_Internal_Configfileparser 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',); + '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',); + '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) { @@ -444,7 +433,7 @@ class Smarty_Internal_Configfileparser return 'End of Input'; } if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[$tokenType]; + return $this->yyTokenName[ $tokenType ]; } else { return "Unknown"; } @@ -465,7 +454,7 @@ class Smarty_Internal_Configfileparser } $yytos = array_pop($this->yystack); if ($this->yyTraceFILE && $this->yyidx >= 0) { - fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] . "\n"); + fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] . "\n"); } $yymajor = $yytos->major; self::yy_destructor($yymajor, $yytos->minor); @@ -488,14 +477,14 @@ class Smarty_Internal_Configfileparser { 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]) { + $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)) { + if ($res3[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) { return $expected; } } @@ -515,18 +504,21 @@ class Smarty_Internal_Configfileparser 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 -= 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)) { + if ($res4[ $nextstate ][ $token ] = + in_array($token, self::$yyExpectedTokens[ $nextstate ], true) + ) { $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); @@ -538,8 +530,8 @@ class Smarty_Internal_Configfileparser $this->yyidx ++; $x = new TPC_yyStackEntry; $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno][0]; - $this->yystack[$this->yyidx] = $x; + $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ]; + $this->yystack[ $this->yyidx ] = $x; continue 2; } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { $this->yyidx = $yyidx; @@ -556,10 +548,12 @@ class Smarty_Internal_Configfileparser } else { $yyact = $nextstate; } - } while (true); + } + while (true); } break; - } while (true); + } + while (true); $this->yyidx = $yyidx; $this->yystack = $stack; @@ -573,13 +567,13 @@ class Smarty_Internal_Configfileparser 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]) { + $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)) { + if ($res[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) { return true; } } @@ -599,16 +593,20 @@ class Smarty_Internal_Configfileparser 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 -= 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))) { + if ($res2[ $nextstate ][ $token ] = (isset(self::$yyExpectedTokens[ $nextstate ]) && + in_array($token, self::$yyExpectedTokens[ $nextstate ], + true)) + ) { $this->yyidx = $yyidx; $this->yystack = $stack; return true; @@ -619,8 +617,8 @@ class Smarty_Internal_Configfileparser $this->yyidx ++; $x = new TPC_yyStackEntry; $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno][0]; - $this->yystack[$this->yyidx] = $x; + $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ]; + $this->yystack[ $this->yyidx ] = $x; continue 2; } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { $this->yyidx = $yyidx; @@ -641,10 +639,12 @@ class Smarty_Internal_Configfileparser } else { $yyact = $nextstate; } - } while (true); + } + while (true); } break; - } while (true); + } + while (true); $this->yyidx = $yyidx; $this->yystack = $stack; @@ -653,33 +653,37 @@ class Smarty_Internal_Configfileparser public function yy_find_shift_action($iLookAhead) { - $stateno = $this->yystack[$this->yyidx]->stateno; + $stateno = $this->yystack[ $this->yyidx ]->stateno; /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ - if (!isset(self::$yy_shift_ofst[$stateno])) { + if (!isset(self::$yy_shift_ofst[ $stateno ])) { // no shift actions - return self::$yy_default[$stateno]; + return self::$yy_default[ $stateno ]; } - $i = self::$yy_shift_ofst[$stateno]; + $i = self::$yy_shift_ofst[ $stateno ]; if ($i === self::YY_SHIFT_USE_DFLT) { - return self::$yy_default[$stateno]; + return self::$yy_default[ $stateno ]; } if ($iLookAhead == self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { - if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { + if ($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"); + fwrite($this->yyTraceFILE, + $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[ $iLookAhead ] . " => " . + $this->yyTokenName[ $iFallback ] . "\n"); } return $this->yy_find_shift_action($iFallback); } - return self::$yy_default[$stateno]; + return self::$yy_default[ $stateno ]; } else { - return self::$yy_action[$i]; + return self::$yy_action[ $i ]; } } @@ -687,21 +691,21 @@ class Smarty_Internal_Configfileparser { /* $stateno = $this->yystack[$this->yyidx]->stateno; */ - if (!isset(self::$yy_reduce_ofst[$stateno])) { - return self::$yy_default[$stateno]; + if (!isset(self::$yy_reduce_ofst[ $stateno ])) { + return self::$yy_default[ $stateno ]; } - $i = self::$yy_reduce_ofst[$stateno]; + $i = self::$yy_reduce_ofst[ $stateno ]; if ($i == self::YY_REDUCE_USE_DFLT) { - return self::$yy_default[$stateno]; + return self::$yy_default[ $stateno ]; } if ($iLookAhead == self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { - return self::$yy_default[$stateno]; + if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) { + return self::$yy_default[ $stateno ]; } else { - return self::$yy_action[$i]; + return self::$yy_action[ $i ]; } } @@ -716,7 +720,7 @@ class Smarty_Internal_Configfileparser while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } - #line 255 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 239 "../smarty/lexer/smarty_internal_configfileparser.y" $this->internalError = true; $this->compiler->trigger_config_file_error("Stack overflow in configfile parser"); @@ -732,123 +736,127 @@ class Smarty_Internal_Configfileparser 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]); + 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 261 "../smarty/lexer/smarty_internal_configfileparser.y" + 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 245 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r0() { $this->_retvalue = null; } - #line 266 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 250 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r1() { - $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); + $this->add_global_vars($this->yystack[ $this->yyidx + 0 ]->minor); $this->_retvalue = null; } - #line 280 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 264 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r4() { - $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor); + $this->add_section_vars($this->yystack[ $this->yyidx + - 3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); $this->_retvalue = null; } - #line 285 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 269 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r5() { if ($this->configReadHidden) { - $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor); + $this->add_section_vars($this->yystack[ $this->yyidx + - 3 ]->minor, + $this->yystack[ $this->yyidx + 0 ]->minor); } $this->_retvalue = null; } - #line 293 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 277 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r6() { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor; + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; } - #line 297 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 281 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r7() { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor)); + $this->_retvalue = + array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, Array($this->yystack[ $this->yyidx + 0 ]->minor)); } - #line 301 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 285 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r8() { $this->_retvalue = Array(); } - #line 307 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 291 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r9() { - $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor, - "value" => $this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = Array("key" => $this->yystack[ $this->yyidx + - 2 ]->minor, + "value" => $this->yystack[ $this->yyidx + 0 ]->minor); } - #line 312 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 296 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r10() { - $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = (float) $this->yystack[ $this->yyidx + 0 ]->minor; } - #line 316 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 300 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r11() { - $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = (int) $this->yystack[ $this->yyidx + 0 ]->minor; } - #line 320 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 304 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r12() { - $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor); } - #line 324 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 308 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r13() { - $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor); } - #line 328 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 312 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r14() { - $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor); } - #line 332 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 316 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r15() { - $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor); + $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + - 1 ]->minor); } - #line 336 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 320 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r16() { $this->_retvalue = ''; } - #line 340 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 324 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r17() { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; } private $_retvalue; @@ -856,24 +864,25 @@ class Smarty_Internal_Configfileparser 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]); + fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, + self::$yyRuleName[ $yyruleno ]); } $this->_retvalue = $yy_lefthand_side = null; - if (isset(self::$yyReduceMap[$yyruleno])) { + if (isset(self::$yyReduceMap[ $yyruleno ])) { // call the action $this->_retvalue = null; - $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); + $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}(); $yy_lefthand_side = $this->_retvalue; } - $yygoto = self::$yyRuleInfo[$yyruleno][0]; - $yysize = self::$yyRuleInfo[$yyruleno][1]; + $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); + $yyact = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, $yygoto); if ($yyact < self::YYNSTATE) { if (!$this->yyTraceFILE && $yysize) { $this->yyidx ++; @@ -881,7 +890,7 @@ class Smarty_Internal_Configfileparser $x->stateno = $yyact; $x->major = $yygoto; $x->minor = $yy_lefthand_side; - $this->yystack[$this->yyidx] = $x; + $this->yystack[ $this->yyidx ] = $x; } else { $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); } @@ -902,7 +911,7 @@ class Smarty_Internal_Configfileparser public function yy_syntax_error($yymajor, $TOKEN) { - #line 248 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 232 "../smarty/lexer/smarty_internal_configfileparser.y" $this->internalError = true; $this->yymajor = $yymajor; @@ -917,7 +926,7 @@ class Smarty_Internal_Configfileparser while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } - #line 241 "../smarty/lexer/smarty_internal_configfileparser.y" + #line 225 "../smarty/lexer/smarty_internal_configfileparser.y" $this->successful = !$this->internalError; $this->internalError = false; @@ -940,7 +949,7 @@ class Smarty_Internal_Configfileparser $yyendofinput = ($yymajor == 0); if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); + fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[ $yymajor ]); } do { @@ -967,15 +976,17 @@ class Smarty_Internal_Configfileparser if ($this->yyerrcnt < 0) { $this->yy_syntax_error($yymajor, $yytokenvalue); } - $yymx = $this->yystack[$this->yyidx]->major; + $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]); + fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt, + $this->yyTokenName[ $yymajor ]); } $this->yy_destructor($yymajor, $yytokenvalue); $yymajor = self::YYNOCODE; } else { - while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) { + while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && + ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) { $this->yy_pop_parser_stack(); } if ($this->yyidx < 0 || $yymajor == 0) { @@ -1004,7 +1015,8 @@ class Smarty_Internal_Configfileparser $this->yy_accept(); $yymajor = self::YYNOCODE; } - } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); + } + while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_data.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php index bba95d303..fd9c3020b 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_data.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php @@ -14,13 +14,19 @@ * @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 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') - * @property int $scope */ class Smarty_Internal_Data { @@ -91,18 +97,15 @@ class Smarty_Internal_Data { if (is_array($tpl_var)) { foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - $this->tpl_vars[$_key] = new Smarty_Variable($_val, $nocache); - if ($this->_objType == 2 && $this->scope) { - $this->ext->_updateScope->updateScope($this, $_key); - } - } + $this->assign($_key, $_val, $nocache); } } else { if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_Variable($value, $nocache); - if ($this->_objType == 2 && $this->scope) { - $this->ext->_updateScope->updateScope($this, $tpl_var); + 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); } } } @@ -190,18 +193,20 @@ class Smarty_Internal_Data /** * gets the object of a Smarty variable * - * @param string $variable the name of the Smarty variable - * @param Smarty_Internal_Data $_ptr optional pointer to data object - * @param boolean $searchParents search also in parent data - * @param bool $error_enable + * @param string $variable the name of the Smarty variable + * @param Smarty_Internal_Data $_ptr optional pointer to data object + * @param boolean $searchParents search also in parent data + * @param bool $error_enable * * @return Smarty_Variable|Smarty_Undefined_Variable the object of the variable * @deprecated since 3.1.28 please use Smarty_Internal_Data::getTemplateVars() instead. */ - public function getVariable($variable = null, Smarty_Internal_Data $_ptr = null, $searchParents = true, $error_enable = true){ + public function getVariable($variable = null, Smarty_Internal_Data $_ptr = null, $searchParents = true, + $error_enable = true) + { return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable); } - + /** * Follow the parent chain an merge template and config variables * @@ -225,6 +230,46 @@ class Smarty_Internal_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 diff --git a/library/Smarty/libs/sysplugins/smarty_internal_debug.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php index 0cbd54955..f16bd3fb1 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_debug.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php @@ -52,13 +52,13 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data */ public function start_template(Smarty_Internal_Template $template, $mode = null) { - if (isset($mode)) { + if (isset($mode) && !$template->_isSubTpl()) { $this->index ++; $this->offset ++; - $this->template_data[$this->index] = null; + $this->template_data[ $this->index ] = null; } $key = $this->get_key($template); - $this->template_data[$this->index][$key]['start_template_time'] = microtime(true); + $this->template_data[ $this->index ][ $key ][ 'start_template_time' ] = microtime(true); } /** @@ -69,8 +69,8 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data public function end_template(Smarty_Internal_Template $template) { $key = $this->get_key($template); - $this->template_data[$this->index][$key]['total_time'] += - microtime(true) - $this->template_data[$this->index][$key]['start_template_time']; + $this->template_data[ $this->index ][ $key ][ 'total_time' ] += + microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_template_time' ]; //$this->template_data[$this->index][$key]['properties'] = $template->properties; } @@ -84,24 +84,24 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data static $_is_stringy = array('string' => true, 'eval' => true); if (!empty($template->compiler->trace_uid)) { $key = $template->compiler->trace_uid; - if (!isset($this->template_data[$this->index][$key])) { - if (isset($_is_stringy[$template->source->type])) { - $this->template_data[$this->index][$key]['name'] = + 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 ][ '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 ][ 'compile_time' ] = 0; + $this->template_data[ $this->index ][ $key ][ 'render_time' ] = 0; + $this->template_data[ $this->index ][ $key ][ 'cache_time' ] = 0; } } else { - if (isset($this->ignore_uid[$template->source->uid])) { + if (isset($this->ignore_uid[ $template->source->uid ])) { return; } $key = $this->get_key($template); } - $this->template_data[$this->index][$key]['start_time'] = microtime(true); + $this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true); } /** @@ -114,14 +114,14 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data if (!empty($template->compiler->trace_uid)) { $key = $template->compiler->trace_uid; } else { - if (isset($this->ignore_uid[$template->source->uid])) { + if (isset($this->ignore_uid[ $template->source->uid ])) { return; } $key = $this->get_key($template); } - $this->template_data[$this->index][$key]['compile_time'] += - microtime(true) - $this->template_data[$this->index][$key]['start_time']; + $this->template_data[ $this->index ][ $key ][ 'compile_time' ] += + microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_time' ]; } /** @@ -132,7 +132,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data public function start_render(Smarty_Internal_Template $template) { $key = $this->get_key($template); - $this->template_data[$this->index][$key]['start_time'] = microtime(true); + $this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true); } /** @@ -143,8 +143,8 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data public function end_render(Smarty_Internal_Template $template) { $key = $this->get_key($template); - $this->template_data[$this->index][$key]['render_time'] += - microtime(true) - $this->template_data[$this->index][$key]['start_time']; + $this->template_data[ $this->index ][ $key ][ 'render_time' ] += + microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_time' ]; } /** @@ -155,7 +155,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data public function start_cache(Smarty_Internal_Template $template) { $key = $this->get_key($template); - $this->template_data[$this->index][$key]['start_time'] = microtime(true); + $this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true); } /** @@ -166,8 +166,8 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data public function end_cache(Smarty_Internal_Template $template) { $key = $this->get_key($template); - $this->template_data[$this->index][$key]['cache_time'] += - microtime(true) - $this->template_data[$this->index][$key]['start_time']; + $this->template_data[ $this->index ][ $key ][ 'cache_time' ] += + microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_time' ]; } /** @@ -201,11 +201,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data $savedIndex = $this->index; $this->index = 9999; } - if ($obj->_objType == 1) { - $smarty = $obj; - } else { - $smarty = $obj->smarty; - } + $smarty = $obj->_getSmartyObj(); // create fresh instance of smarty for displaying the debug console // to avoid problems if the application did overload the Smarty class $debObj = new Smarty(); @@ -240,11 +236,11 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data $debugging = $smarty->debugging; $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj); - if ($obj->_objType == 2) { + if ($obj->_isTplObj()) { $_template->assign('template_name', $obj->source->type . ':' . $obj->source->name); } if ($obj->_objType == 1 || $full) { - $_template->assign('template_data', $this->template_data[$this->index]); + $_template->assign('template_data', $this->template_data[ $this->index ]); } else { $_template->assign('template_data', null); } @@ -273,53 +269,53 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data { $config_vars = array(); foreach ($obj->config_vars as $key => $var) { - $config_vars[$key]['value'] = $var; - if ($obj->_objType == 2) { - $config_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj->_objType == 4) { - $tpl_vars[$key]['scope'] = $obj->dataObjectName; + $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 ][ 'scope' ] = 'Smarty object'; } } $tpl_vars = array(); foreach ($obj->tpl_vars as $key => $var) { foreach ($var as $varkey => $varvalue) { if ($varkey == 'value') { - $tpl_vars[$key][$varkey] = $varvalue; + $tpl_vars[ $key ][ $varkey ] = $varvalue; } else { if ($varkey == 'nocache') { if ($varvalue == true) { - $tpl_vars[$key][$varkey] = $varvalue; + $tpl_vars[ $key ][ $varkey ] = $varvalue; } } else { if ($varkey != 'scope' || $varvalue !== 0) { - $tpl_vars[$key]['attributes'][$varkey] = $varvalue; + $tpl_vars[ $key ][ 'attributes' ][ $varkey ] = $varvalue; } } } } - if ($obj->_objType == 2) { - $tpl_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj->_objType == 4) { - $tpl_vars[$key]['scope'] = $obj->dataObjectName; + 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' ] = 'Smarty object'; } } if (isset($obj->parent)) { $parent = $this->get_debug_vars($obj->parent); foreach ($parent->tpl_vars as $name => $pvar) { - if (isset($tpl_vars[$name]) && $tpl_vars[$name]['value'] === $pvar['value']) { - $tpl_vars[$name]['scope'] = $pvar['scope']; + if (isset($tpl_vars[ $name ]) && $tpl_vars[ $name ][ 'value' ] === $pvar[ 'value' ]) { + $tpl_vars[ $name ][ 'scope' ] = $pvar[ 'scope' ]; } } $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars); foreach ($parent->config_vars as $name => $pvar) { - if (isset($config_vars[$name]) && $config_vars[$name]['value'] === $pvar['value']) { - $config_vars[$name]['scope'] = $pvar['scope']; + if (isset($config_vars[ $name ]) && $config_vars[ $name ][ 'value' ] === $pvar[ 'value' ]) { + $config_vars[ $name ][ 'scope' ] = $pvar[ 'scope' ]; } } $config_vars = array_merge($parent->config_vars, $config_vars); @@ -328,20 +324,20 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data if (!array_key_exists($key, $tpl_vars)) { foreach ($var as $varkey => $varvalue) { if ($varkey == 'value') { - $tpl_vars[$key][$varkey] = $varvalue; + $tpl_vars[ $key ][ $varkey ] = $varvalue; } else { if ($varkey == 'nocache') { if ($varvalue == true) { - $tpl_vars[$key][$varkey] = $varvalue; + $tpl_vars[ $key ][ $varkey ] = $varvalue; } } else { if ($varkey != 'scope' || $varvalue !== 0) { - $tpl_vars[$key]['attributes'][$varkey] = $varvalue; + $tpl_vars[ $key ][ 'attributes' ][ $varkey ] = $varvalue; } } } } - $tpl_vars[$key]['scope'] = 'Global'; + $tpl_vars[ $key ][ 'scope' ] = 'Global'; } } } @@ -364,19 +360,19 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data $template->source->filepath; } $key = $template->source->uid; - if (isset($this->template_data[$this->index][$key])) { + 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'] = + 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 ][ '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->template_data[ $this->index ][ $key ][ 'compile_time' ] = 0; + $this->template_data[ $this->index ][ $key ][ 'render_time' ] = 0; + $this->template_data[ $this->index ][ $key ][ 'cache_time' ] = 0; + $this->template_data[ $this->index ][ $key ][ 'total_time' ] = 0; return $key; } @@ -393,7 +389,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data if ($template->source->uid == '') { $template->source->filepath; } - $this->ignore_uid[$template->source->uid] = true; + $this->ignore_uid[ $template->source->uid ] = true; } /** @@ -403,8 +399,8 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data */ public function debugUrl(Smarty $smarty) { - if (isset($_SERVER['QUERY_STRING'])) { - $_query_string = $_SERVER['QUERY_STRING']; + if (isset($_SERVER[ 'QUERY_STRING' ])) { + $_query_string = $_SERVER[ 'QUERY_STRING' ]; } else { $_query_string = ''; } @@ -422,7 +418,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data $smarty->debugging = true; } } else { - if (isset($_COOKIE['SMARTY_DEBUG'])) { + if (isset($_COOKIE[ 'SMARTY_DEBUG' ])) { $smarty->debugging = true; } } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php new file mode 100644 index 000000000..340e6dee1 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php @@ -0,0 +1,171 @@ +<?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 + */ +class Smarty_Internal_Extension_Handler +{ + + public $objType = null; + + /** + * Cache for property information from generic getter/setter + * Preloaded with names which should not use with generic getter/setter + * + * @var array + */ + private $_property_info = array('AutoloadFilters' => 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0, + 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0, + 'TemplateVars' => 0,);# + + private $resolvedProperties = array(); + + /** + * Call external Method + * + * @param \Smarty_Internal_Data $data + * @param string $name external method names + * @param array $args argument array + * + * @return mixed + * @throws SmartyException + */ + public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args) + { + /* @var Smarty $data ->smarty */ + $smarty = isset($data->smarty) ? $data->smarty : $data; + if (!isset($smarty->ext->$name)) { + $class = 'Smarty_Internal_Method_' . $this->upperCase($name); + if (preg_match('/^(set|get)([A-Z].*)$/', $name, $match)) { + $pn = ''; + if (!isset($this->_property_info[ $prop = $match[ 2 ] ])) { + // convert camel case to underscored name + $this->resolvedProperties[ $prop ] = $pn = strtolower(join('_', + preg_split('/([A-Z][^A-Z]*)/', $prop, + - 1, PREG_SPLIT_NO_EMPTY | + PREG_SPLIT_DELIM_CAPTURE))); + $this->_property_info[ $prop ] = + property_exists($data, $pn) ? 1 : ($data->_isTplObj() && property_exists($smarty, $pn) ? 2 : 0); + } + if ($this->_property_info[ $prop ]) { + $pn = $this->resolvedProperties[ $prop ]; + if ($match[ 1 ] == 'get') { + return $this->_property_info[ $prop ] == 1 ? $data->$pn : $data->smarty->$pn; + } else { + return $this->_property_info[ $prop ] == 1 ? $data->$pn = $args[ 0 ] : + $data->smarty->$pn = $args[ 0 ]; + } + } elseif (!class_exists($class)) { + throw new SmartyException("property '$pn' does not exist."); + } + } + if (class_exists($class)) { + $callback = array($smarty->ext->$name = new $class(), $name); + } + } else { + $callback = array($smarty->ext->$name, $name); + } + array_unshift($args, $data); + if (isset($callback) && $callback[ 0 ]->objMap | $data->_objType) { + return call_user_func_array($callback, $args); + } + return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args); + } + + /** + * Make first character of name parts upper case + * + * @param string $name + * + * @return string + */ + public function upperCase($name) + { + $_name = explode('_', $name); + $_name = array_map('ucfirst', $_name); + return implode('_', $_name); + } + + /** + * set extension property + * + * @param string $property_name property name + * @param mixed $value value + * + * @throws SmartyException + */ + public function __set($property_name, $value) + { + $this->$property_name = $value; + } + + /** + * get extension object + * + * @param string $property_name property name + * + * @return mixed|Smarty_Template_Cached + * @throws SmartyException + */ + public function __get($property_name) + { + // object properties of runtime template extensions will start with '_' + if ($property_name[ 0 ] == '_') { + $class = 'Smarty_Internal_Runtime' . $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(); + } + + /** + * Call error handler for undefined method + * + * @param string $name unknown method-name + * @param array $args argument array + * + * @return mixed + * @throws SmartyException + */ + public function __call($name, $args) + { + return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), array($this)); + } + +}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php index b739f0e3e..3eef8a28c 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php @@ -28,21 +28,22 @@ class Smarty_Internal_Method_AddAutoloadFilters extends Smarty_Internal_Method_S */ public function addAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $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); + 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; + $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); + 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; + $smarty->autoload_filters[ $type ] = (array) $value; } } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php index 55d2c9e71..afb0b68d5 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php @@ -31,9 +31,9 @@ class Smarty_Internal_Method_AddDefaultModifiers */ public function addDefaultModifiers(Smarty_Internal_TemplateBase $obj, $modifiers) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if (is_array($modifiers)) { - $this->default_modifiers = array_merge($smarty->default_modifiers, $modifiers); + $smarty->default_modifiers = array_merge($smarty->default_modifiers, $modifiers); } else { $smarty->default_modifiers[] = $modifiers; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_append.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php index 43df8803f..af6935919 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_append.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php @@ -44,29 +44,29 @@ class Smarty_Internal_Method_Append } } else { if ($tpl_var != '' && isset($value)) { - if (!isset($data->tpl_vars[$tpl_var])) { + 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); + $data->tpl_vars[ $tpl_var ] = new Smarty_Variable(null, $nocache); } else { - $data->tpl_vars[$tpl_var] = clone $tpl_var_inst; + $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) + 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'); + 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; + $data->tpl_vars[ $tpl_var ]->value[ $_mkey ] = $_mval; } } else { - $data->tpl_vars[$tpl_var]->value[] = $value; + $data->tpl_vars[ $tpl_var ]->value[] = $value; } } - if ($data->_objType == 2 && $data->scope) { - $data->ext->_updateScope->updateScope($data, $tpl_var); + if ($data->_isTplObj() && $data->scope) { + $data->ext->_updateScope->_updateScope($data, $tpl_var); } } return $data; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_appendbyref.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php index 124bb803a..532ac9509 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_appendbyref.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php @@ -28,21 +28,21 @@ class Smarty_Internal_Method_AppendByRef 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 (!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 (!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]; + $data->tpl_vars[ $tpl_var ]->value[ $_key ] = &$value[ $_key ]; } } else { - $data->tpl_vars[$tpl_var]->value[] = &$value; + $data->tpl_vars[ $tpl_var ]->value[] = &$value; } - if ($data->_objType == 2 && $data->scope) { - $data->ext->_updateScope->updateScope($data, $tpl_var); + if ($data->_isTplObj() && $data->scope) { + $data->ext->_updateScope->_updateScope($data, $tpl_var); } } return $data; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_assignbyref.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php index a97125e30..0060bbc5f 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_assignbyref.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php @@ -25,10 +25,10 @@ class Smarty_Internal_Method_AssignByRef public function assignByRef(Smarty_Internal_Data $data, $tpl_var, &$value, $nocache) { if ($tpl_var != '') { - $data->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache); - $data->tpl_vars[$tpl_var]->value = &$value; - if ($data->_objType == 2 && $data->scope) { - $data->ext->_updateScope->updateScope($data, $tpl_var); + $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/library/Smarty/libs/sysplugins/smarty_internal_method_assignglobal.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php index 23b13b3a2..3c2b26049 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_assignglobal.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php @@ -18,23 +18,23 @@ class Smarty_Internal_Method_AssignGlobal */ 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 + * @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); + Smarty::$global_tpl_vars[ $varName ] = new Smarty_Variable($value, $nocache); $ptr = $data; - while ($ptr->_objType == 2) { - $ptr->tpl_vars[$varName] = clone Smarty::$global_tpl_vars[$varName]; + while ($ptr->_isTplObj()) { + $ptr->tpl_vars[ $varName ] = clone Smarty::$global_tpl_vars[ $varName ]; $ptr = $ptr->parent; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallassign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php index 1e5fec4bd..1e5fec4bd 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallassign.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallcache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php index 6ae0af15f..5879f9a06 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallcache.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php @@ -32,9 +32,9 @@ class Smarty_Internal_Method_ClearAllCache */ 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); - $_cache_resource->invalidLoadedCache($smarty); return $_cache_resource->clearAll($smarty, $exp_time); } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearassign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php index 3a7bd1e47..060a2ac49 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearassign.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php @@ -33,10 +33,10 @@ class Smarty_Internal_Method_ClearAssign { if (is_array($tpl_var)) { foreach ($tpl_var as $curr_var) { - unset($data->tpl_vars[$curr_var]); + unset($data->tpl_vars[ $curr_var ]); } } else { - unset($data->tpl_vars[$tpl_var]); + unset($data->tpl_vars[ $tpl_var ]); } return $data; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php index 063c57cde..95649a777 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcache.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php @@ -33,11 +33,12 @@ class Smarty_Internal_Method_ClearCache * * @return integer number of cache files deleted */ - public function clearCache(Smarty $smarty, $template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) + 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); - $_cache_resource->invalidLoadedCache($smarty); return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time); } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php index cce8553f5..a1f1a80bb 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php @@ -33,23 +33,23 @@ class Smarty_Internal_Method_ClearCompiledTemplate */ 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 ? DS : '^'; + $_dir_sep = $smarty->use_sub_dirs ? $smarty->ds : '^'; if (isset($resource_name)) { $_save_stat = $smarty->caching; $smarty->caching = false; /* @var Smarty_Internal_Template $tpl */ - $tpl = new $smarty->template_class($resource_name, $smarty); + $tpl = $smarty->createTemplate($resource_name); $smarty->caching = $_save_stat; - if ($tpl->source->exists) { - // remove from compileds cache - $tpl->source->compileds = array(); - $_resource_part_1 = basename(str_replace('^', DS, $tpl->compiled->filepath)); + if (!$tpl->source->handler->uncompiled && !$tpl->source->handler->recompiled && $tpl->source->exists) { + $_resource_part_1 = basename(str_replace('^', $smarty->ds, $tpl->compiled->filepath)); $_resource_part_1_length = strlen($_resource_part_1); } else { return 0; @@ -75,27 +75,30 @@ class Smarty_Internal_Method_ClearCompiledTemplate } $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); foreach ($_compile as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { + 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($_compile_id) || (isset($_filepath[ $_compile_id_part_length ]) && $a = + !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) && + (!isset($resource_name) || (isset($_filepath[ $_resource_part_1_length ]) && + substr_compare($_filepath, $_resource_part_1, + - $_resource_part_1_length, $_resource_part_1_length) == + 0) || (isset($_filepath[ $_resource_part_2_length ]) && + substr_compare($_filepath, $_resource_part_2, + - $_resource_part_2_length, + $_resource_part_2_length) == 0)) ) { if (isset($exp_time)) { if (time() - @filemtime($_filepath) >= $exp_time) { @@ -108,17 +111,12 @@ class Smarty_Internal_Method_ClearCompiledTemplate if ($unlink && @unlink($_filepath)) { $_count ++; - if (function_exists('opcache_invalidate')) { - opcache_invalidate($_filepath); + if (function_exists('opcache_invalidate') && strlen(ini_get("opcache.restrict_api")) < 1) { + opcache_invalidate($_filepath, true); } } } } - // clear template objects cache - $smarty->_cache['isCached'] = array(); - if (isset($smarty->ext->_subtemplate)) { - $smarty->ext->_subtemplate->tplObjects = array(); - } return $_count; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearconfig.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php index 9c6167f4d..371247807 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearconfig.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php @@ -32,7 +32,7 @@ class Smarty_Internal_Method_ClearConfig public function clearConfig(Smarty_Internal_Data $data, $name = null) { if (isset($name)) { - unset($data->config_vars[$name]); + unset($data->config_vars[ $name ]); } else { $data->config_vars = array(); } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php index 4d6be65c4..767031bd9 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php @@ -17,15 +17,16 @@ class Smarty_Internal_Method_CompileAllConfig extends Smarty_Internal_Method_Com * * @api Smarty::compileAllConfig() * - * @param \Smarty $smarty + * @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 + * @return int number of template files recompiled */ - public function compileAllConfig(Smarty $smarty, $extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) + 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/library/Smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php index 685fc0c0d..0abed2124 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php @@ -23,7 +23,7 @@ class Smarty_Internal_Method_CompileAllTemplates * * @api Smarty::compileAllTemplates() * - * @param \Smarty $smarty + * @param \Smarty $smarty passed smarty object * @param string $extension file extension * @param bool $force_compile force all to recompile * @param int $time_limit @@ -31,7 +31,8 @@ class Smarty_Internal_Method_CompileAllTemplates * * @return integer number of template files recompiled */ - public function compileAllTemplates(Smarty $smarty, $extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) + 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); } @@ -48,7 +49,8 @@ class Smarty_Internal_Method_CompileAllTemplates * * @return int number of template files compiled */ - protected function compileAll(Smarty $smarty, $extension, $force_compile, $time_limit, $max_errors, $isConfig = false) + protected function compileAll(Smarty $smarty, $extension, $force_compile, $time_limit, $max_errors, + $isConfig = false) { // switch off time limit if (function_exists('set_time_limit')) { @@ -59,7 +61,8 @@ class Smarty_Internal_Method_CompileAllTemplates $sourceDir = $isConfig ? $smarty->getConfigDir() : $smarty->getTemplateDir(); // loop over array of source directories foreach ($sourceDir as $_dir) { - $_dir_1 = new RecursiveDirectoryIterator($_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(); @@ -69,19 +72,24 @@ class Smarty_Internal_Method_CompileAllTemplates if (!substr_compare($_file, $extension, - strlen($extension)) == 0) { continue; } - if ($_fileinfo->getPath() == !substr($_dir, 0, - 1)) { - $_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; + if ($_fileinfo->getPath() !== substr($_dir, 0, - 1)) { + $_file = substr($_fileinfo->getPath(), strlen($_dir)) . $smarty->ds . $_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); + $_tpl->source = + $isConfig ? Smarty_Template_Config::load($_tpl) : Smarty_Template_Source::load($_tpl); if ($_tpl->mustCompile()) { $_tpl->compileTemplateSource(); $_count ++; @@ -98,7 +106,7 @@ class Smarty_Internal_Method_CompileAllTemplates } // free memory unset($_tpl); - $_smarty->_cache['template_objects'] = array(); + $_smarty->_clearTemplateCache(); if ($max_errors !== null && $_error_count == $max_errors) { echo "\n<br><br>too many errors\n"; exit(); diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_configload.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php index 7b99e35c6..6113eaf98 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_configload.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php @@ -34,7 +34,7 @@ class Smarty_Internal_Method_ConfigLoad */ public function configLoad(Smarty_Internal_Data $data, $config_file, $sections = null) { - $this->_loadConfigFile($data, $config_file, $sections, 0); + $this->_loadConfigFile($data, $config_file, $sections, null); return $data; } @@ -57,17 +57,16 @@ class Smarty_Internal_Method_ConfigLoad public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0) { /* @var \Smarty $smarty */ - $smarty = isset($data->smarty) ? $data->smarty : $data; + $smarty = $data->_getSmartyObj(); /* @var \Smarty_Internal_Template $confObj */ - $confObj = new Smarty_Internal_Template($config_file, $smarty, $data); + $confObj = new Smarty_Internal_Template($config_file, $smarty, $data, null, null, null, null, true); $confObj->caching = Smarty::CACHING_OFF; - $confObj->source = Smarty_Template_Config::load($confObj); $confObj->source->config_sections = $sections; $confObj->source->scope = $scope; $confObj->compiled = Smarty_Template_Compiled::load($confObj); $confObj->compiled->render($confObj); - if ($data->_objType == 2) { - $data->compiled->file_dependency[$confObj->source->uid] = + if ($data->_isTplObj()) { + $data->compiled->file_dependency[ $confObj->source->uid ] = array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type); } } @@ -76,42 +75,31 @@ class Smarty_Internal_Method_ConfigLoad * load config variables into template object * * @param \Smarty_Internal_Template $tpl - * @param array $_config_vars + * @param array $new_config_vars * */ - public function _loadConfigVars(Smarty_Internal_Template $tpl, $_config_vars) + public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars) { - $this->_assignConfigVars($tpl->parent, $tpl, $_config_vars); - $scope = $tpl->source->scope; - if (!$scope && !$tpl->scope) { - return; - } - foreach (array($scope, $tpl->scope) as $s) { - $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s; - if ($bubble_up && $s) { - $ptr = $tpl->parent->parent; - if (isset($ptr)) { - $this->_assignConfigVars($ptr, $tpl, $_config_vars); - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_PARENT) { - continue; + $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; } - while (isset($ptr) && $ptr->_objType == 2) { - $this->_assignConfigVars($ptr, $tpl, $_config_vars); - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_TPL_ROOT) { - continue; - } elseif ($s == Smarty::SCOPE_SMARTY) { - $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars); - } elseif ($s == Smarty::SCOPE_GLOBAL) { - $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars); - } elseif ($s == Smarty::SCOPE_ROOT) { - while (isset($ptr->parent)) { - $ptr = $ptr->parent; + } + if ($tpl->parent->_isTplObj() && ($tagScope || $tpl->parent->scope)) { + $mergedScope = $tagScope | $tpl->scope; + if ($mergedScope) { + // update scopes + 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); + } } - $this->_assignConfigVars($ptr, $tpl, $_config_vars); } } } @@ -120,32 +108,30 @@ class Smarty_Internal_Method_ConfigLoad /** * Assign all config variables in given scope * - * @param \Smarty_Internal_Data $scope_ptr + * @param array $config_vars config variables in scope * @param \Smarty_Internal_Template $tpl - * @param array $_config_vars + * @param array $new_config_vars loaded config variables */ - public function _assignConfigVars(Smarty_Internal_Data $scope_ptr, Smarty_Internal_Template $tpl, $_config_vars) + public function _assignConfigVars(&$config_vars, Smarty_Internal_Template $tpl, $new_config_vars) { // copy global config vars - foreach ($_config_vars['vars'] as $variable => $value) { - if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; + foreach ($new_config_vars[ 'vars' ] as $variable => $value) { + if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) { + $config_vars[ $variable ] = $value; } else { - $scope_ptr->config_vars[$variable] = - array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); + $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($_config_vars['sections'][$tpl_section])) { - foreach ($_config_vars['sections'][$tpl_section]['vars'] as $variable => $value) { - if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; + 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 { - $scope_ptr->config_vars[$variable] = - array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); + $config_vars[ $variable ] = array_merge((array) $config_vars[ $variable ], (array) $value); } } } @@ -154,26 +140,41 @@ class Smarty_Internal_Method_ConfigLoad } /** + * 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_Internal_Template $tpl template object - * @param string $varName the name of the config variable - * @param bool $errorEnable + * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data + * @param string $varName the name of the config variable + * @param bool $errorEnable * - * @return mixed the value of the config variable + * @return null|string the value of the config variable */ - public function _getConfigVariable(Smarty_Internal_Template $tpl, $varName, $errorEnable = true) + public function _getConfigVariable(Smarty_Internal_Data $data, $varName, $errorEnable = true) { - $_ptr = $tpl; + $_ptr = $data; while ($_ptr !== null) { - if (isset($_ptr->config_vars[$varName])) { + if (isset($_ptr->config_vars[ $varName ])) { // found it, return it - return $_ptr->config_vars[$varName]; + return $_ptr->config_vars[ $varName ]; } // not found, try at parent $_ptr = $_ptr->parent; } - if ($tpl->smarty->error_unassigned && $errorEnable) { + if ($data->smarty->error_unassigned && $errorEnable) { // force a notice $x = $$varName; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_createdata.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php index 600bc777c..43ce89432 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_createdata.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php @@ -34,7 +34,7 @@ class Smarty_Internal_Method_CreateData public function createData(Smarty_Internal_TemplateBase $obj, Smarty_Internal_Data $parent = null, $name = null) { /* @var Smarty $smarty */ - $smarty = isset($this->smarty) ? $this->smarty : $obj; + $smarty = $obj->_getSmartyObj(); $dataObj = new Smarty_Data($parent, $smarty, $name); if ($smarty->debugging) { Smarty_Internal_Debug::register_data($dataObj); diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php index e1a7801f7..d945a01e3 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php @@ -27,10 +27,10 @@ class Smarty_Internal_Method_GetAutoloadFilters extends Smarty_Internal_Method_S */ public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if ($type !== null) { $this->_checkFilterType($type); - return isset($smarty->autoload_filters[$type]) ? $smarty->autoload_filters[$type] : array(); + 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 new file mode 100644 index 000000000..4dd398208 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php @@ -0,0 +1,34 @@ +<?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); + } +}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php index b15672168..b75cf8179 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php @@ -36,8 +36,8 @@ class Smarty_Internal_Method_GetConfigVars $var_array = array(); while ($_ptr !== null) { if (isset($varname)) { - if (isset($_ptr->config_vars[$varname])) { - return $_ptr->config_vars[$varname]; + if (isset($_ptr->config_vars[ $varname ])) { + return $_ptr->config_vars[ $varname ]; } } else { $var_array = array_merge($_ptr->config_vars, $var_array); diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php index 3c3432ce1..52073c14e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php @@ -22,14 +22,14 @@ class Smarty_Internal_Method_GetDebugTemplate * return name of debugging template * * @api Smarty::getDebugTemplate() - + * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * * @return string */ public function getDebugTemplate(Smarty_Internal_TemplateBase $obj) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); return $smarty->debug_tpl; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php index 32e0cc413..f65ab7914 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php @@ -29,7 +29,7 @@ class Smarty_Internal_Method_GetDefaultModifiers */ public function getDefaultModifiers(Smarty_Internal_TemplateBase $obj) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); return $smarty->default_modifiers; } }
\ No newline at end of file diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php new file mode 100644 index 000000000..7a8a9bc71 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php @@ -0,0 +1,47 @@ +<?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 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; + } + } +}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php index be0c0dba2..c5c064665 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php @@ -32,13 +32,13 @@ class Smarty_Internal_Method_GetRegisteredObject */ public function getRegisteredObject(Smarty_Internal_TemplateBase $obj, $object_name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (!isset($smarty->registered_objects[$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])) { + 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]; + return $smarty->registered_objects[ $object_name ][ 0 ]; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php index b922fd088..b922fd088 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_gettags.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php index dd9e8d1ca..5718b69e9 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_gettags.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php @@ -33,10 +33,10 @@ class Smarty_Internal_Method_GetTags public function getTags(Smarty_Internal_TemplateBase $obj, $template = null) { /* @var Smarty $smarty */ - $smarty = isset($this->smarty) ? $this->smarty : $obj; - if ($obj->_objType == 2 && !isset($template)) { + $smarty = $obj->_getSmartyObj(); + if ($obj->_isTplObj() && !isset($template)) { $tpl = clone $obj; - } elseif (isset($template) && $template->_objType == 2) { + } elseif (isset($template) && $template->_isTplObj()) { $tpl = clone $template; } elseif (isset($template) && is_string($template)) { /* @var Smarty_Internal_Template $tpl */ @@ -48,14 +48,14 @@ class Smarty_Internal_Method_GetTags } if (isset($tpl)) { $tpl->smarty = clone $tpl->smarty; - $tpl->smarty->_cache['get_used_tags'] = true; - $tpl->_cache['used_tags'] = array(); + $tpl->smarty->_cache[ 'get_used_tags' ] = true; + $tpl->_cache[ 'used_tags' ] = array(); $tpl->smarty->merge_compiled_includes = false; $tpl->smarty->disableSecurity(); $tpl->caching = false; $tpl->loadCompiler(); $tpl->compiler->compileTemplate($tpl); - return $tpl->_cache['used_tags']; + return $tpl->_cache[ 'used_tags' ]; } throw new SmartyException("Missing template specification"); } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php index 235bece46..1759646f3 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php @@ -25,13 +25,14 @@ class Smarty_Internal_Method_GetTemplateVars * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string $varName variable name or null - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object + * @param 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) + 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); @@ -48,7 +49,7 @@ class Smarty_Internal_Method_GetTemplateVars while ($_ptr !== null) { foreach ($_ptr->tpl_vars AS $key => $var) { if (!array_key_exists($key, $_result)) { - $_result[$key] = $var->value; + $_result[ $key ] = $var->value; } } // not found, try at parent @@ -61,7 +62,7 @@ class Smarty_Internal_Method_GetTemplateVars 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; + $_result[ $key ] = $var->value; } } } @@ -73,22 +74,23 @@ class Smarty_Internal_Method_GetTemplateVars * 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 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) + 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])) { + if (isset($_ptr->tpl_vars[ $varName ])) { // found it, return it - return $_ptr->tpl_vars[$varName]; + return $_ptr->tpl_vars[ $varName ]; } // not found, try at parent if ($searchParents) { @@ -97,9 +99,9 @@ class Smarty_Internal_Method_GetTemplateVars $_ptr = null; } } - if (isset(Smarty::$global_tpl_vars[$varName])) { + if (isset(Smarty::$global_tpl_vars[ $varName ])) { // found it, return it - return Smarty::$global_tpl_vars[$varName]; + return Smarty::$global_tpl_vars[ $varName ]; } /* @var \Smarty $smarty */ $smarty = isset($data->smarty) ? $data->smarty : $data; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_loadfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php index 7fb11179f..d092d876e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_loadfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php @@ -41,12 +41,12 @@ class Smarty_Internal_Method_LoadFilter */ public function loadFilter(Smarty_Internal_TemplateBase $obj, $type, $name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $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; + $smarty->registered_filters[ $type ][ $_filter_name ] = $_plugin; return true; } if ($smarty->loadPlugin($_plugin)) { @@ -54,7 +54,7 @@ class Smarty_Internal_Method_LoadFilter $_plugin = array($_plugin, 'execute'); } if (is_callable($_plugin)) { - $smarty->registered_filters[$type][$_filter_name] = $_plugin; + $smarty->registered_filters[ $type ][ $_filter_name ] = $_plugin; return true; } } @@ -70,7 +70,7 @@ class Smarty_Internal_Method_LoadFilter */ public function _checkFilterType($type) { - if (!isset($this->filterTypes[$type])) { + if (!isset($this->filterTypes[ $type ])) { throw new SmartyException("Illegal filter type \"{$type}\""); } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_loadplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php index c153f55f0..50f3bfc2c 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_loadplugin.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php @@ -39,21 +39,21 @@ class Smarty_Internal_Method_LoadPlugin 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])) { + if (!empty($match[ 2 ])) { $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; - if (isset($this->plugin_files[$file])) { - if ($this->plugin_files[$file] !== false) { - return $this->plugin_files[$file]; + 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; + $this->plugin_files[ $file ] = $file; require_once($file); return $file; } else { - $this->plugin_files[$file] = false; + $this->plugin_files[ $file ] = false; return false; } } @@ -62,16 +62,16 @@ class Smarty_Internal_Method_LoadPlugin $_plugin_filename = "{$match[1]}.{$match[4]}.php"; $_lower_filename = strtolower($_plugin_filename); if (isset($this->plugin_files)) { - if (isset($this->plugin_files['plugins_dir'][$_lower_filename])) { - if (!$smarty->use_include_path || $this->plugin_files['plugins_dir'][$_lower_filename] !== false) { - return $this->plugin_files['plugins_dir'][$_lower_filename]; + if (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']); + unset($this->plugin_files[ 'include_path' ]); } else { - if (isset($this->plugin_files['include_path'][$_lower_filename])) { - return $this->plugin_files['include_path'][$_lower_filename]; + if (isset($this->plugin_files[ 'include_path' ][ $_lower_filename ])) { + return $this->plugin_files[ 'include_path' ][ $_lower_filename ]; } } } @@ -80,17 +80,17 @@ class Smarty_Internal_Method_LoadPlugin $_file_names[] = $_lower_filename; } $_p_dirs = $smarty->getPluginsDir(); - if (!isset($this->plugin_files['plugins_dir'][$_lower_filename])) { + 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; + $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = $file; require_once($file); return $file; } - $this->plugin_files['plugins_dir'][$_lower_filename] = false; + $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = false; } } } @@ -98,7 +98,7 @@ class Smarty_Internal_Method_LoadPlugin 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; + $this->plugin_files[ 'include_path' ][ $_lower_filename ] = $file; if ($file !== false) { require_once($file); return $file; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_mustcompile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php index f28a68e6d..0950ba9cf 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_mustcompile.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php @@ -1,7 +1,7 @@ <?php /** - * Smarty Method UnloadFilter + * Smarty Method MustCompile * * Smarty_Internal_Template::mustCompile() method * @@ -31,7 +31,7 @@ class Smarty_Internal_Method_MustCompile public function mustCompile(Smarty_Internal_Template $_template) { if (!$_template->source->exists) { - if (isset($_template->parent) && $_template->parent->_objType == 2) { + if ($_template->_isSubTpl()) { $parent_resource = " in '$_template->parent->template_resource}'"; } else { $parent_resource = ''; @@ -40,8 +40,10 @@ class Smarty_Internal_Method_MustCompile } if ($_template->mustCompile === null) { $_template->mustCompile = (!$_template->source->handler->uncompiled && - ($_template->smarty->force_compile || $_template->source->handler->recompiled || !$_template->compiled->exists || - ($_template->smarty->compile_check && $_template->compiled->getTimeStamp() < $_template->source->getTimeStamp()))); + ($_template->smarty->force_compile || $_template->source->handler->recompiled || + !$_template->compiled->exists || ($_template->smarty->compile_check && + $_template->compiled->getTimeStamp() < + $_template->source->getTimeStamp()))); } return $_template->mustCompile; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php index 55c5090ac..ae3872722 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php @@ -30,10 +30,11 @@ class Smarty_Internal_Method_RegisterCacheResource * * @return \Smarty|\Smarty_Internal_Template */ - public function registerCacheResource(Smarty_Internal_TemplateBase $obj, $name, Smarty_CacheResource $resource_handler) + public function registerCacheResource(Smarty_Internal_TemplateBase $obj, $name, + Smarty_CacheResource $resource_handler) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $smarty->registered_cache_resources[$name] = $resource_handler; + $smarty = $obj->_getSmartyObj(); + $smarty->registered_cache_resources[ $name ] = $resource_handler; return $obj; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerclass.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php index d2e5e20bb..5469b98aa 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerclass.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php @@ -34,13 +34,13 @@ class Smarty_Internal_Method_RegisterClass */ public function registerClass(Smarty_Internal_TemplateBase $obj, $class_name, $class_impl) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $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; + $smarty->registered_classes[ $class_name ] = $class_impl; return $obj; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php index 370aa38dc..43088a1d4 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php @@ -31,7 +31,7 @@ class Smarty_Internal_Method_RegisterDefaultConfigHandler */ public function registerDefaultConfigHandler(Smarty_Internal_TemplateBase $obj, $callback) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if (is_callable($callback)) { $smarty->default_config_handler_func = $callback; } else { diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php index 80b801ce5..d9aecb4a9 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php @@ -32,7 +32,7 @@ class Smarty_Internal_Method_RegisterDefaultPluginHandler */ public function registerDefaultPluginHandler(Smarty_Internal_TemplateBase $obj, $callback) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if (is_callable($callback)) { $smarty->default_plugin_handler_func = $callback; } else { diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php index 40979e7a6..569ea1062 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php @@ -31,7 +31,7 @@ class Smarty_Internal_Method_RegisterDefaultTemplateHandler */ public function registerDefaultTemplateHandler(Smarty_Internal_TemplateBase $obj, $callback) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if (is_callable($callback)) { $smarty->default_template_handler_func = $callback; } else { @@ -44,6 +44,8 @@ class Smarty_Internal_Method_RegisterDefaultTemplateHandler * get default content from template or config resource handler * * @param Smarty_Template_Source $source + * + * @throws \SmartyException */ public static function _getDefaultTemplate(Smarty_Template_Source $source) { @@ -53,20 +55,28 @@ class Smarty_Internal_Method_RegisterDefaultTemplateHandler $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)); + $_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->filepath = $_return; + $source->name = $source->filepath = $_return; + $source->uid = sha1($source->filepath); } elseif ($_return === true) { $source->content = $_content; - $source->timestamp = $_timestamp; $source->exists = true; - $source->handler->recompiled = true; - $source->filepath = false; + $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}'"); } } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php index 84b2c2630..ea8f75a85 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php @@ -42,13 +42,13 @@ class Smarty_Internal_Method_RegisterFilter */ public function registerFilter(Smarty_Internal_TemplateBase $obj, $type, $callback, $name = null) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $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; + $smarty->registered_filters[ $type ][ $name ] = $callback; return $obj; } @@ -62,9 +62,9 @@ class Smarty_Internal_Method_RegisterFilter 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]); + $_class_name = (is_object($function_name[ 0 ]) ? get_class($function_name[ 0 ]) : $function_name[ 0 ]); - return $_class_name . '_' . $function_name[1]; + return $_class_name . '_' . $function_name[ 1 ]; } elseif (is_string($function_name)) { return $function_name; } else { @@ -81,7 +81,7 @@ class Smarty_Internal_Method_RegisterFilter */ public function _checkFilterType($type) { - if (!isset($this->filterTypes[$type])) { + if (!isset($this->filterTypes[ $type ])) { throw new SmartyException("Illegal filter type \"{$type}\""); } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php index f27f1720b..ba699b219 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerobject.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php @@ -44,9 +44,10 @@ class Smarty_Internal_Method_RegisterObject * @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()) + public function registerObject(Smarty_Internal_TemplateBase $obj, $object_name, $object, + $allowed_methods_properties = array(), $format = true, $block_methods = array()) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); // test if allowed methods callable if (!empty($allowed_methods_properties)) { foreach ((array) $allowed_methods_properties as $method) { @@ -64,8 +65,8 @@ class Smarty_Internal_Method_RegisterObject } } // register the object - $smarty->registered_objects[$object_name] = array($object, (array) $allowed_methods_properties, - (boolean) $format, (array) $block_methods); + $smarty->registered_objects[ $object_name ] = + array($object, (array) $allowed_methods_properties, (boolean) $format, (array) $block_methods); return $obj; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php index 95814581d..91f065920 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerplugin.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php @@ -35,15 +35,16 @@ class Smarty_Internal_Method_RegisterPlugin * @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) + public function registerPlugin(Smarty_Internal_TemplateBase $obj, $type, $name, $callback, $cacheable = true, + $cache_attr = null) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_plugins[$type][$name])) { + $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"); } else { - $smarty->registered_plugins[$type][$name] = array($callback, (bool) $cacheable, (array) $cache_attr); + $smarty->registered_plugins[ $type ][ $name ] = array($callback, (bool) $cacheable, (array) $cache_attr); } return $obj; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php index 43246ee9b..44534b738 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php @@ -36,9 +36,9 @@ class Smarty_Internal_Method_RegisterResource */ public function registerResource(Smarty_Internal_TemplateBase $obj, $name, $resource_handler) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $smarty->registered_resources[$name] = $resource_handler instanceof - Smarty_Resource ? $resource_handler : array($resource_handler, false); + $smarty = $obj->_getSmartyObj(); + $smarty->registered_resources[ $name ] = + $resource_handler instanceof Smarty_Resource ? $resource_handler : array($resource_handler, false); return $obj; } }
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php index b1f965cd9..df5ca6405 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php @@ -41,10 +41,10 @@ class Smarty_Internal_Method_SetAutoloadFilters */ public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if ($type !== null) { $this->_checkFilterType($type); - $smarty->autoload_filters[$type] = (array) $filters; + $smarty->autoload_filters[ $type ] = (array) $filters; } else { foreach ((array) $filters as $type => $value) { $this->_checkFilterType($type); @@ -63,7 +63,7 @@ class Smarty_Internal_Method_SetAutoloadFilters */ public function _checkFilterType($type) { - if (!isset($this->filterTypes[$type])) { + if (!isset($this->filterTypes[ $type ])) { throw new SmartyException("Illegal filter type \"{$type}\""); } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php index 4ff5d7f82..76c87deb6 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php @@ -31,7 +31,7 @@ class Smarty_Internal_Method_SetDebugTemplate */ public function setDebugTemplate(Smarty_Internal_TemplateBase $obj, $tpl_name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); if (!is_readable($tpl_name)) { throw new SmartyException("Unknown file '{$tpl_name}'"); } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php index 5a707287a..81434b968 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php @@ -31,7 +31,7 @@ class Smarty_Internal_Method_SetDefaultModifiers */ public function setDefaultModifiers(Smarty_Internal_TemplateBase $obj, $modifiers) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); $smarty->default_modifiers = (array) $modifiers; return $obj; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php index e3d966e1c..9aa1d229b 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php @@ -26,14 +26,14 @@ class Smarty_Internal_Method_UnloadFilter extends Smarty_Internal_Method_LoadFil */ public function unloadFilter(Smarty_Internal_TemplateBase $obj, $type, $name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); $this->_checkFilterType($type); - if (isset($smarty->registered_filters[$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]); + 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 ]); } } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php index 80381015a..1a157ffb6 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php @@ -21,19 +21,19 @@ class Smarty_Internal_Method_UnregisterCacheResource /** * Registers a resource to fetch a template * - * @api Smarty::unregisterCacheResource() - * @link http://www.smarty.net/docs/en/api.unregister.cacheresource.tpl + * @api Smarty::unregisterCacheResource() + * @link http://www.smarty.net/docs/en/api.unregister.cacheresource.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type name of cache resource type - * + * @param $name + * * @return \Smarty|\Smarty_Internal_Template */ public function unregisterCacheResource(Smarty_Internal_TemplateBase $obj, $name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_cache_resources[$name])) { - unset($smarty->registered_cache_resources[$name]); + $smarty = $obj->_getSmartyObj(); + if (isset($smarty->registered_cache_resources[ $name ])) { + unset($smarty->registered_cache_resources[ $name ]); } return $obj; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php index c80ae9a65..c5b88f57d 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php @@ -26,14 +26,14 @@ class Smarty_Internal_Method_UnregisterFilter extends Smarty_Internal_Method_Reg */ public function unregisterFilter(Smarty_Internal_TemplateBase $obj, $type, $callback) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; + $smarty = $obj->_getSmartyObj(); $this->_checkFilterType($type); - if (isset($smarty->registered_filters[$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]); + if (isset($smarty->registered_filters[ $type ][ $name ])) { + unset($smarty->registered_filters[ $type ][ $name ]); + if (empty($smarty->registered_filters[ $type ])) { + unset($smarty->registered_filters[ $type ]); } } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php index a94331683..76d48661e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php @@ -31,9 +31,9 @@ class Smarty_Internal_Method_UnregisterObject */ public function unregisterObject(Smarty_Internal_TemplateBase $obj, $object_name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_objects[$object_name])) { - unset($smarty->registered_objects[$object_name]); + $smarty = $obj->_getSmartyObj(); + if (isset($smarty->registered_objects[ $object_name ])) { + unset($smarty->registered_objects[ $object_name ]); } return $obj; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php index 06cb2d354..b5f0d505b 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php @@ -25,16 +25,16 @@ class Smarty_Internal_Method_UnregisterPlugin * @link http://www.smarty.net/docs/en/api.unregister.plugin.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type plugin type - * @param string $name name of template tag + * @param string $type plugin type + * @param string $name name of template tag * * @return \Smarty|\Smarty_Internal_Template - */ + */ public function unregisterPlugin(Smarty_Internal_TemplateBase $obj, $type, $name) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_plugins[$type][$name])) { - unset($smarty->registered_plugins[$type][$name]); + $smarty = $obj->_getSmartyObj(); + if (isset($smarty->registered_plugins[ $type ][ $name ])) { + unset($smarty->registered_plugins[ $type ][ $name ]); } return $obj; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php index 767bd74ab..ed4801d48 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php @@ -25,15 +25,15 @@ class Smarty_Internal_Method_UnregisterResource * @link http://www.smarty.net/docs/en/api.unregister.resource.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type name of resource type - * + * @param string $type name of resource type + * * @return \Smarty|\Smarty_Internal_Template */ public function unregisterResource(Smarty_Internal_TemplateBase $obj, $type) { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_resources[$type])) { - unset($smarty->registered_resources[$type]); + $smarty = $obj->_getSmartyObj(); + if (isset($smarty->registered_resources[ $type ])) { + unset($smarty->registered_resources[ $type ]); } return $obj; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php index b3d5fa86a..65fc143cd 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php @@ -37,15 +37,17 @@ class Smarty_Internal_Nocache_Insert } // call insert if (isset($_assign)) { - $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>"; + $_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 (isset($_tpl->parent) && $_tpl->parent->_objType == 2) { + while ($_tpl->_isSubTpl()) { $_tpl = $_tpl->parent; } - return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/"; + return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/" . $_output . + "/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/"; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php index 32c9df094..32c9df094 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_code.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php index d0f0b3fd9..d0f0b3fd9 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_code.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dq.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php index 607389cb5..8c2e0d993 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dq.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php @@ -40,13 +40,20 @@ class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree) { $last_subtree = count($this->subtrees) - 1; - if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof Smarty_Internal_ParseTree_Tag && $this->subtrees[$last_subtree]->saved_block_nesting < $parser->block_nesting_level) { + if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag && + $this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level + ) { if ($subtree instanceof Smarty_Internal_ParseTree_Code) { - $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo ' . $subtree->data . ';?>'); + $this->subtrees[ $last_subtree ]->data = + $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, + '<?php echo ' . $subtree->data . ';?>'); } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) { - $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo "' . $subtree->data . '";?>'); + $this->subtrees[ $last_subtree ]->data = + $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, + '<?php echo "' . $subtree->data . '";?>'); } else { - $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, $subtree->data); + $this->subtrees[ $last_subtree ]->data = + $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, $subtree->data); } } else { $this->subtrees[] = $subtree; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php index a8ca389d9..a8ca389d9 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_tag.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php index 575c8c9e8..9058aabfb 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_tag.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php @@ -59,7 +59,7 @@ class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree */ public function assign_to_var(Smarty_Internal_Templateparser $parser) { - $var = sprintf('$_tmp%d', ++ Smarty_Internal_Templateparser::$prefix_number); + $var = $parser->compiler->getNewPrefixVariable(); $tmp = $parser->compiler->appendCode('<?php ob_start();?>', $this->data); $tmp = $parser->compiler->appendCode($tmp, "<?php {$var}=ob_get_clean();?>"); $parser->compiler->prefix_code[] = sprintf("%s", $tmp); diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php index 623ae51a3..f6032351e 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_template.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php @@ -88,15 +88,15 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree { $code = ''; for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) { - if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) { - $subtree = $this->subtrees[$key]->to_smarty_php($parser); - while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text || - $this->subtrees[$key + 1]->data == '')) { + if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) { + $subtree = $this->subtrees[ $key ]->to_smarty_php($parser); + while ($key + 1 < $cnt && ($this->subtrees[ $key + 1 ] instanceof Smarty_Internal_ParseTree_Text || + $this->subtrees[ $key + 1 ]->data == '')) { $key ++; - if ($this->subtrees[$key]->data == '') { + if ($this->subtrees[ $key ]->data == '') { continue; } - $subtree .= $this->subtrees[$key]->to_smarty_php($parser); + $subtree .= $this->subtrees[ $key ]->to_smarty_php($parser); } if ($subtree == '') { continue; @@ -105,15 +105,15 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree $subtree); continue; } - if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) { - $subtree = $this->subtrees[$key]->to_smarty_php($parser); - while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag || - $this->subtrees[$key + 1]->data == '')) { + if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) { + $subtree = $this->subtrees[ $key ]->to_smarty_php($parser); + while ($key + 1 < $cnt && ($this->subtrees[ $key + 1 ] instanceof Smarty_Internal_ParseTree_Tag || + $this->subtrees[ $key + 1 ]->data == '')) { $key ++; - if ($this->subtrees[$key]->data == '') { + if ($this->subtrees[ $key ]->data == '') { continue; } - $subtree = $parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php($parser)); + $subtree = $parser->compiler->appendCode($subtree, $this->subtrees[ $key ]->to_smarty_php($parser)); } if ($subtree == '') { continue; @@ -121,7 +121,7 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree $code .= $subtree; continue; } - $code .= $this->subtrees[$key]->to_smarty_php($parser); + $code .= $this->subtrees[ $key ]->to_smarty_php($parser); } return $code; } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php index b3100fa09..b3100fa09 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_text.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php index aca710350..d3088bdd9 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php @@ -29,8 +29,7 @@ class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { $source->uid = $source->filepath = sha1($source->name); - $source->timestamp = false; - $source->exists = true; + $source->timestamp = $source->exists = true; } /** diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php index 3d687dca8..4f1f09ea5 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php @@ -37,10 +37,11 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource $uid = ''; $sources = array(); $components = explode('|', $source->name); + $smarty = &$source->smarty; $exists = true; foreach ($components as $component) { /* @var \Smarty_Template_Source $_s */ - $_s = Smarty_Template_Source::load(null, $source->smarty, $component); + $_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"); } @@ -52,7 +53,7 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource } $source->components = $sources; $source->filepath = $_s->filepath; - $source->uid = sha1($uid); + $source->uid = sha1($uid . $source->smarty->_joined_template_dir); $source->exists = $exists; if ($_template) { $source->timestamp = $_s->timestamp; @@ -85,7 +86,7 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource public function getContent(Smarty_Template_Source $source) { if (!$source->exists) { - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); + throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'"); } $_components = array_reverse($source->components); diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php index b15e3cc6a..a58771a17 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php @@ -30,51 +30,50 @@ class Smarty_Internal_Resource_File extends Smarty_Resource { $file = $source->name; // absolute file ? - if ($file[0] == '/' || $file[1] == ':') { + if ($file[ 0 ] == '/' || $file[ 1 ] == ':') { $file = $source->smarty->_realpath($file, true); return is_file($file) ? $file : false; } // go relative to a given template? - if ($file[0] == '.' && $_template && isset($_template->parent) && $_template->parent->_objType == 2 && + 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']) + !isset($_template->parent->_cache[ 'allow_relative_path' ]) ) { throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'"); } - $path = dirname($_template->parent->source->filepath) . DS . $file; // normalize path - $path = $source->smarty->_realpath($path); + $path = $source->smarty->_realpath(dirname($_template->parent->source->filepath) . $source->smarty->ds . $file); // files relative to a template only get one shot return is_file($path) ? $path : false; } - // normalize DS - if (strpos($file, DS == '/' ? '\\' : '/') !== false) { - $file = str_replace(DS == '/' ? '\\' : '/', DS, $file); + // normalize $source->smarty->ds + if (strpos($file, $source->smarty->ds == '/' ? '\\' : '/') !== false) { + $file = str_replace($source->smarty->ds == '/' ? '\\' : '/', $source->smarty->ds, $file); } $_directories = $source->smarty->getTemplateDir(null, $source->isConfig); // template_dir index? - if ($file[0] == '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) { - $file = $fileMatch[2]; - $_indices = explode(',', $fileMatch[1]); + 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]; + 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]; + 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 (isset($_directories[ $keys[ $index ] ])) { + $_index_dirs[] = $_directories[ $keys[ $index ] ]; } } } @@ -91,7 +90,7 @@ class Smarty_Internal_Resource_File extends Smarty_Resource foreach ($_directories as $_directory) { $path = $_directory . $file; if (is_file($path)) { - return (strpos($path, '.' . DS) !== false) ? $source->smarty->_realpath($path) : $path; + return (strpos($path, '.' . $source->smarty->ds) !== false) ? $source->smarty->_realpath($path) : $path; } } if (!isset($_index_dirs)) { @@ -123,13 +122,11 @@ class Smarty_Internal_Resource_File extends Smarty_Resource $source->smarty->security_policy->isTrustedResourceDir($source->filepath, $source->isConfig); } $source->exists = true; - $source->uid = sha1($source->filepath); - if ($source->smarty->compile_check == 1) { - $source->timestamp = filemtime($source->filepath); - } + $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 = false; - $source->exists = false; + $source->timestamp = $source->exists = false; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php index 62680625c..52e7096b3 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php @@ -17,6 +17,7 @@ class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File * @var bool */ public $uncompiled = true; + /** * container for short_open_tag directive's value before executing PHP templates * @@ -31,10 +32,8 @@ class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File */ public $hasCompiledHandler = true; - /** * Create a new PHP Resource - */ public function __construct() { @@ -72,12 +71,8 @@ class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File throw new SmartyException("PHP templates are disabled"); } if (!$source->exists) { - if (isset($_template->parent) && $_template->parent->_objType == 2) { - $parent_resource = " in '{$_template->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$source->type} '{$source->name}'{$parent_resource}"); + throw new SmartyException("Unable to load template {$source->type} '{$source->name}'" . + ($_template->_isSubTpl() ? " in '{$_template->parent->template_resource}'" : '')); } // prepare variables @@ -101,8 +96,11 @@ class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File */ public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) { - $compiled->filepath = false; - $compiled->timestamp = false; - $compiled->exists = false; + $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,); } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php index 69b396b6a..8535257ab 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php @@ -29,11 +29,9 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { $source->filepath = $source->type . ':' . $source->name; - $source->uid = sha1($source->filepath); - if ($source->smarty->compile_check) { - $source->timestamp = $this->getTemplateTimestamp($source); - $source->exists = !!$source->timestamp; - } + $source->uid = sha1($source->filepath . $source->smarty->_joined_template_dir); + $source->timestamp = $this->getTemplateTimestamp($source); + $source->exists = !!$source->timestamp; } /** @@ -60,7 +58,8 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource { // return timestamp $time_stamp = false; - call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty)); + call_user_func_array($source->smarty->registered_resources[ $source->type ][ 0 ][ 1 ], + array($source->name, &$time_stamp, $source->smarty)); return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp; } @@ -77,7 +76,8 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource { // return template string $content = null; - $t = call_user_func_array($source->smarty->registered_resources[$source->type][0][0], array($source->name, &$content, $source->smarty)); + $t = call_user_func_array($source->smarty->registered_resources[ $source->type ][ 0 ][ 0 ], + array($source->name, &$content, $source->smarty)); if (is_bool($t) && !$t) { throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php index 8a902268c..b4248fbb5 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php @@ -36,8 +36,7 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled } $source->uid = false; $source->content = $this->getContent($source); - $source->timestamp = false; - $source->exists = !!$source->content; + $source->timestamp = $source->exists = !!$source->content; } /** diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php index 75e99e6fb..f2610d9d6 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php @@ -28,9 +28,8 @@ class Smarty_Internal_Resource_String extends Smarty_Resource */ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $source->uid = $source->filepath = sha1($source->name); - $source->timestamp = 0; - $source->exists = true; + $source->uid = $source->filepath = sha1($source->name . $source->smarty->_joined_template_dir); + $source->timestamp = $source->exists = true; } /** @@ -94,4 +93,15 @@ class Smarty_Internal_Resource_String extends Smarty_Resource { return ''; } + + /* + * Disable timestamp checks for string resource. + * + * @return bool + */ + public function checkTimestamps() + { + return false; + } } + diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php index 4e2fb83e6..a91874a9f 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php @@ -13,14 +13,15 @@ class Smarty_Internal_Runtime_CacheModify /** * check client side cache * - * @param Smarty_Internal_Template $_template - * @param string $content + * @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) { $_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); + @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 @@ -31,19 +32,19 @@ class Smarty_Internal_Runtime_CacheModify case 'cli': if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ + !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */ ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified'; + $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified'; } break; default: if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ + !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */ ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified'; + $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified'; } else { - header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); + header($_SERVER[ 'SERVER_PROTOCOL' ] . ' 304 Not Modified'); } break; } @@ -51,9 +52,9 @@ class Smarty_Internal_Runtime_CacheModify switch (PHP_SAPI) { case 'cli': if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ + !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */ ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = + $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT'; } break; diff --git a/library/Smarty/libs/sysplugins/smarty_internal_extension_clear.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php index 00edc5abf..7b7a9f685 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_extension_clear.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php @@ -1,15 +1,20 @@ <?php /** - * Smarty Extension Clear - * - * $smarty->clear() method file cache file resource + * Smarty cache resource file clear method * * @package Smarty * @subpackage PluginsInternal * @author Uwe Tews */ -class Smarty_Internal_Extension_Clear + +/** + * Smarty Internal Runtime Cache Resource File Class + * + * @package Smarty + * @subpackage PluginsInternal + */ +class Smarty_Internal_Runtime_CacheResourceFile { /** * Empty cache for a specific template @@ -22,7 +27,7 @@ class Smarty_Internal_Extension_Clear * * @return integer number of cache files deleted */ - public static function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) + 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; @@ -38,7 +43,7 @@ class Smarty_Internal_Extension_Clear $_cache_id_parts_count = count($_cache_id_parts); if ($smarty->use_sub_dirs) { foreach ($_cache_id_parts as $id_part) { - $_dir .= $id_part . DS; + $_dir .= $id_part . $smarty->ds; } } } @@ -63,9 +68,10 @@ class Smarty_Internal_Extension_Clear $_cacheDirs = new RecursiveDirectoryIterator($_dir); $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); foreach ($_cache as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { + if (substr(basename($_file->getPathname()), 0, 1) == '.') { continue; } + $_filepath = (string) $_file; // directory ? if ($_file->isDir()) { if (!$_cache->isDot()) { @@ -73,17 +79,21 @@ class Smarty_Internal_Extension_Clear @rmdir($_file->getPathname()); } } else { - $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length))); + // 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) { + 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) + if (isset($_compile_id) && (!isset($_parts[ $_parts_count - 2 - $_compile_id_offset ]) || + $_parts[ $_parts_count - 2 - $_compile_id_offset ] != $_compile_id) ) { continue; } @@ -96,7 +106,7 @@ class Smarty_Internal_Extension_Clear continue; } for ($i = 0; $i < $_cache_id_parts_count; $i ++) { - if ($_parts[$i] != $_cache_id_parts[$i]) { + if ($_parts[ $i ] != $_cache_id_parts[ $i ]) { continue 2; } } @@ -105,7 +115,7 @@ class Smarty_Internal_Extension_Clear if (isset($exp_time)) { if ($exp_time < 0) { preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match); - if ($_time < (@filemtime($_file) + $match[1])) { + if ($_time < (@filemtime($_file) + $match[ 1 ])) { continue; } } else { @@ -114,9 +124,9 @@ class Smarty_Internal_Extension_Clear } } } - $_count += @unlink((string) $_file) ? 1 : 0; - if (function_exists('opcache_invalidate')) { - opcache_invalidate((string) $_file); + $_count += @unlink($_filepath) ? 1 : 0; + if (function_exists('opcache_invalidate') && strlen(ini_get("opcache.restrict_api")) < 1) { + opcache_invalidate($_filepath, true); } } } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php new file mode 100644 index 000000000..69f1ce0cf --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php @@ -0,0 +1,161 @@ +<?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 + * + * @param \Smarty_Internal_Template $_template + * @param $name + * + * @return null + */ + public function getBuffer(Smarty_Internal_Template $_template, $name) + { + return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null; + } + + /** + * 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); + } + } + +}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php index ce6749770..e363712a6 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php @@ -18,9 +18,9 @@ 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 $content optional template content * @param string $functions compiled template function and block code - * @param bool $cache flag for cache file + * @param bool $cache flag for cache file * @param \Smarty_Internal_TemplateCompilerBase $compiler * * @return string @@ -29,30 +29,34 @@ class Smarty_Internal_Runtime_CodeFrame Smarty_Internal_TemplateCompilerBase $compiler = null) { // build property code - $properties[ 'has_nocache_code' ] = $_template->compiled->has_nocache_code; $properties[ 'version' ] = Smarty::SMARTY_VERSION; $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); if (!$cache) { + $properties[ 'has_nocache_code' ] = $_template->compiled->has_nocache_code; $properties[ 'file_dependency' ] = $_template->compiled->file_dependency; $properties[ 'includes' ] = $_template->compiled->includes; - if (!empty($compiler->tpl_function)) { - $properties[ 'tpl_function' ] = $compiler->tpl_function; - } - } else { + } else { + $properties[ 'has_nocache_code' ] = $_template->cached->has_nocache_code; $properties[ 'file_dependency' ] = $_template->cached->file_dependency; $properties[ 'cache_lifetime' ] = $_template->cache_lifetime; - if (!empty($_template->tpl_function)) { - $properties[ 'tpl_function' ] = $_template->tpl_function; - } } $output = "<?php\n"; $output .= "/* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . - "\n from \"" . $_template->source->filepath . "\" */\n\n"; - - $dec = "\$_smarty_tpl->smarty->ext->_validateCompiled->decodeProperties(\$_smarty_tpl, " . - var_export($properties, true) . ',' . ($cache ? 'true' : 'false') . ")"; + "\n from \"" . $_template->source->filepath . "\" */\n\n"; + $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_tpl) {\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, " . + var_export($compiler->tpl_function, true) . ");\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"; + + } // include code for plugins if (!$cache) { if (!empty($_template->compiled->required_plugins[ 'compiled' ])) { @@ -73,7 +77,7 @@ class Smarty_Internal_Runtime_CodeFrame foreach ($_template->compiled->required_plugins[ 'nocache' ] as $tmp) { foreach ($tmp as $data) { $file = addslashes($data[ 'file' ]); - if (is_Array($data[ 'function' ])) { + if (is_array($data[ 'function' ])) { $output .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"); } else { $output .= addslashes("if (!is_callable('{$data['function']}')) require_once '{$file}';\n"); diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php index 9af266758..f6cfa7c44 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php @@ -33,8 +33,8 @@ class Smarty_Internal_Runtime_FilterHandler 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) { + 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; @@ -58,9 +58,9 @@ class Smarty_Internal_Runtime_FilterHandler } } // 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); + 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 diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php new file mode 100644 index 000000000..1e8655d92 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php @@ -0,0 +1,149 @@ +<?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()) + { + $saveVars = array(); + $total = null; + if (!is_array($from)) { + if (is_object($from)) { + $total = $this->count($from); + } else { + settype($from, 'array'); + } + } + if (!isset($total)) { + $total = empty($from) ? 0 : (($needTotal || isset($properties[ 'total' ])) ? 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; + } + + /** + * 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--; + } + } + + /* + * + * [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 Countable) { + return count($value); + } elseif ($value instanceof IteratorAggregate) { + // Note: getIterator() returns a Traversable, not an Iterator + // thus rewind() and valid() methods may not be present + return iterator_count($value->getIterator()); + } elseif ($value instanceof Iterator) { + return $value instanceof Generator ? 1 : iterator_count($value); + } elseif ($value instanceof PDOStatement) { + return $value->rowCount(); + } elseif ($value instanceof Traversable) { + return iterator_count($value); + } elseif ($value instanceof ArrayAccess) { + return $value->offsetExists(0) ? 1 : 0; + } + return count((array) $value); + } +} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php index 72149cd35..e12b0c57c 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php @@ -87,7 +87,7 @@ class Smarty_Internal_Runtime_GetIncludePath $_dirs = (array) explode(PATH_SEPARATOR, $_i_path); foreach ($_dirs as $_path) { if (is_dir($_path)) { - $this->_include_dirs[] = $smarty->_realpath($_path . DS, true); + $this->_include_dirs[] = $smarty->_realpath($_path . $smarty->ds, true); } } return true; @@ -121,50 +121,52 @@ class Smarty_Internal_Runtime_GetIncludePath 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); + 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]; + $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]) { + if (isset($this->_user_dirs[ $dir_n ])) { + if (false === $this->_user_dirs[ $dir_n ]) { continue; } else { - $dir = $this->_user_dirs[$dir_n]; + $dir = $this->_user_dirs[ $dir_n ]; } } else { - if ($dir[0] == '/' || $dir[1] == ':') { + if ($dir[ 0 ] == '/' || $dir[ 1 ] == ':') { $dir = str_ireplace(getcwd(), '.', $dir); - if ($dir[0] == '/' || $dir[1] == ':') { - $this->_user_dirs[$dir_n] = false; + if ($dir[ 0 ] == '/' || $dir[ 1 ] == ':') { + $this->_user_dirs[ $dir_n ] = false; continue; } } $dir = substr($dir, 2); - $this->_user_dirs[$dir_n] = $dir; + $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; + 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; + $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; + $_file = $this->isFile[ $dir_n ][ $file ] = (is_file($path . $file)) ? $path . $file : false; if ($_file) { return $_file; } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php new file mode 100644 index 000000000..7ec5924e6 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php @@ -0,0 +1,241 @@ +<?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 + * - key template index + * + * @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 optinal name of inheritance parent template + * @param null|string $uid uid of inline template + * @param null|string $func function call name of inline template + */ + 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 + */ + 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->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); + } + 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); + 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 + */ + public function callChild(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block) + { + if (isset($block->child)) { + $this->process($tpl, $block->child, $block); + } + } + + /** + * Render parent on {$smarty.block.parent} or {block append/prepend} * + * + * @param \Smarty_Internal_Template $tpl + * @param \Smarty_Internal_Block $block + * + * @param null $name + * + * @throws \SmartyException + */ + public function callParent(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block, $name = null) + { + if (isset($name)) { + $block = $block->parent; + while (isset($block)) { + if (isset($block->subBlocks[ $name ])) { + } else { + $block = $block->parent; + } + } + return; + } else if (isset($block->parent)) { + $this->callBlock($block->parent, $tpl); + } else { + throw new SmartyException("inheritance: illegal {\$smarty.block.parent} or {block append/prepend} used in parent template '{$tpl->inheritance->sources[$block->tplIndex]->filepath}' block '{$block->name}'"); + } + } + + /** + * @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 new file mode 100644 index 000000000..65382772d --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php @@ -0,0 +1,56 @@ +<?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 new file mode 100644 index 000000000..f6b36f2a5 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php @@ -0,0 +1,171 @@ +<?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)) { + /* @var Smarty_Template_Cached $cache */ + $cache = $tplPtr->cached; + $content = $cache->read($tplPtr); + if ($content) { + // check if we must update file dependency + if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) { + $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content); + } + $tplPtr->smarty->ext->_updateCache->write($cache, $tplPtr, + preg_replace('/\s*\?>\s*$/', "\n", $content) . + "\n" . preg_replace(array('/^\s*<\?php\s+/', + '/\s*\?>\s*$/',), "\n", + $match[ 0 ])); + } + } + return true; + } + } + } + return false; + } + + /** + * 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/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php index a895a3070..ceee3b718 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php @@ -34,7 +34,7 @@ class Smarty_Internal_Runtime_UpdateCache $no_output_filter) { $content = ob_get_clean(); - unset($cached->hashes[$_template->compiled->nocache_hash]); + unset($cached->hashes[ $_template->compiled->nocache_hash ]); if (!empty($cached->hashes)) { $hash_array = array(); foreach ($cached->hashes as $hash => $foo) { @@ -56,14 +56,14 @@ class Smarty_Internal_Runtime_UpdateCache // escape PHP tags in template content $content .= preg_replace('/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/', "<?php echo '\$1'; ?>\n", $curr_split); - if (isset($cache_parts[0][$curr_idx])) { + if (isset($cache_parts[ 0 ][ $curr_idx ])) { $_template->cached->has_nocache_code = true; - $content .= $cache_parts[1][$curr_idx]; + $content .= $cache_parts[ 1 ][ $curr_idx ]; } } - if (!$no_output_filter && !$_template->compiled->has_nocache_code && - (isset($_template->smarty->autoload_filters['output']) || - isset($_template->smarty->registered_filters['output'])) + 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); } @@ -82,23 +82,18 @@ class Smarty_Internal_Runtime_UpdateCache */ public function updateCache(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $no_output_filter) { - if ($_template->source->handler->uncompiled) { - ob_start(); - $_template->source->render($_template); - } else { - ob_start(); - if (!isset($_template->compiled)) { - $_template->loadCompiled(); - } - $_template->compiled->render($_template); + ob_start(); + if (!isset($_template->compiled)) { + $_template->loadCompiled(); } + $_template->compiled->render($_template); if ($_template->smarty->debugging) { $_template->smarty->_debug->start_cache($_template); } $this->removeNoCacheHash($cached, $_template, $no_output_filter); $compile_check = $_template->smarty->compile_check; $_template->smarty->compile_check = false; - if (isset($_template->parent) && $_template->parent->_objType == 2) { + if ($_template->_isSubTpl()) { $_template->compiled->unifunc = $_template->parent->compiled->unifunc; } if (!$_template->cached->processed) { @@ -123,7 +118,7 @@ class Smarty_Internal_Runtime_UpdateCache public function writeCachedContent(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) { if ($_template->source->handler->recompiled || !($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || - $_template->caching == Smarty::CACHING_LIFETIME_SAVED) + $_template->caching == Smarty::CACHING_LIFETIME_SAVED) ) { // don't write cache file 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 new file mode 100644 index 000000000..79885321b --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php @@ -0,0 +1,115 @@ +<?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 varibale 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/library/Smarty/libs/sysplugins/smarty_internal_runtime_writefile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php index 05c973783..7c462c6ca 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_writefile.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php @@ -30,7 +30,8 @@ class Smarty_Internal_Runtime_WriteFile $_error_reporting = error_reporting(); error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING); $_file_perms = property_exists($smarty, '_file_perms') ? $smarty->_file_perms : 0644; - $_dir_perms = property_exists($smarty, '_dir_perms') ? (isset($smarty->_dir_perms) ? $smarty->_dir_perms : 0777) : 0771; + $_dir_perms = + property_exists($smarty, '_dir_perms') ? (isset($smarty->_dir_perms) ? $smarty->_dir_perms : 0777) : 0771; if ($_file_perms !== null) { $old_umask = umask(0); } @@ -42,11 +43,11 @@ class Smarty_Internal_Runtime_WriteFile } // write to tmp file, then move to overt file lock race condition - $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true)); + $_tmp_file = $_dirpath . $smarty->ds . str_replace(array('.', ','), '_', uniqid('wrt', true)); if (!file_put_contents($_tmp_file, $_contents)) { error_reporting($_error_reporting); throw new SmartyException("unable to write file {$_tmp_file}"); - } + } /* * Windows' rename() fails if the destination exists, diff --git a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php index 116bbea7b..8cd37dd56 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php @@ -109,7 +109,7 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom 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>"; + htmlentities($this->parser->lex->value) . "</pre>"; } $this->parser->doParse($this->parser->lex->token, $this->parser->lex->value); } @@ -129,8 +129,8 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom // call post compile callbacks foreach ($this->postCompileCallbacks as $cb) { $parameter = $cb; - $parameter[0] = $this; - call_user_func_array($cb[0], $parameter); + $parameter[ 0 ] = $this; + call_user_func_array($cb[ 0 ], $parameter); } // return compiled code return $this->prefixCompiledCode . $this->parser->retvalue . $this->postfixCompiledCode; @@ -144,13 +144,14 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom * @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; + if ($replace || !isset($this->postCompileCallbacks[ $key ])) { + $this->postCompileCallbacks[ $key ] = $parameter; } } else { $this->postCompileCallbacks[] = $parameter; @@ -164,6 +165,6 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom */ public function unregisterPostCompileCallback($key) { - unset($this->postCompileCallbacks[$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 new file mode 100644 index 000000000..f950606df --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php @@ -0,0 +1,692 @@ +<?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 + * + * 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() + */ +class Smarty_Internal_Template extends Smarty_Internal_TemplateBase +{ + /** + * 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(); + + /** + * 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(); + + /** + * Subtemplate Info Cache + * + * @var string[]int[] + */ + public static $subTplInfo = 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 = $_caching === null ? $this->smarty->caching : $_caching; + if ($this->caching === true) { + $this->caching = Smarty::CACHING_LIFETIME_CURRENT; + } + $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime; + $this->parent = $_parent; + // Template resource + $this->template_resource = $template_resource; + $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 \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 = false; + } + // read from cache or render + $isCacheTpl = + $this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED; + if ($isCacheTpl) { + if (!isset($this->cached) || $this->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 ($this->_isSubTpl()) { + foreach ($this->compiled->required_plugins as $code => $tmp1) { + foreach ($tmp1 as $name => $tmp) { + foreach ($tmp as $type => $data) { + $this->parent->compiled->required_plugins[ $code ][ $name ][ $type ] = $data; + } + } + } + } + if (!$no_output_filter && + (!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) && + (isset($this->smarty->autoload_filters[ 'output' ]) || + isset($this->smarty->registered_filters[ 'output' ])) + ) { + return $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this); + } + // return cache content + return null; + } + } + + /** + * 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 + * + */ + 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)) { + $this->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); + } + } + } + + /** + * 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->smarty->compile_check) || $tpl->smarty->compile_check == 1) + ) { + // check file dependencies at compiled code + foreach ($properties[ 'file_dependency' ] as $_file_to_check) { + if ($_file_to_check[ 2 ] == 'file' || $_file_to_check[ 2 ] == '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 + */ + 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->cached, $this, $content); + } + + /** + * Get unique template id + * + * @return string + */ + 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 + */ + 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 + * @throws SmartyException + */ + 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); + } + + /** + * 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'."); + } + + /** + * 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."); + } + + /** + * 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/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php index 9b4953dee..c026a6644 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php @@ -9,34 +9,40 @@ */ /** - * Class with shared template methods + * Class with shared smarty/template methods * * @package Smarty * @subpackage Template * - * @property Smarty $smarty - * @method Smarty_Internal_TemplateBase setAutoloadFilters(mixed $filters, string $type = null) + * @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 addDefaultModifier(mixed $modifiers) + * @method Smarty_Internal_TemplateBase createData(Smarty_Internal_Data $parent = null, string $name = null) * @method array getAutoloadFilters(string $type = null) - * @local_method Smarty_Internal_TemplateBase registerFilter(string $type, callback $callback, string $name = null) - * @method Smarty_Internal_TemplateBase unregisterFilter(string $type, mixed $callback) - * @method Smarty_Internal_TemplateBase unloadFilter(string $type, string $name) * @method string getDebugTemplate() - * @method Smarty_Internal_TemplateBase setDebugTemplate(string $tpl_name) - * @method Smarty_Internal_TemplateBase setDefaultModifier(mixed $modifiers) - * @method Smarty_Internal_TemplateBase addDefaultModifier(mixed $modifiers) * @method array getDefaultModifier() - * @method Smarty_Internal_TemplateBase registerDefaultPluginHandler(callback $callback) - * @method Smarty_Internal_TemplateBase registerResource(string $name, Smarty_Resource $resource_handler) - * @method Smarty_Internal_TemplateBase unregisterResource(string $name) + * @method 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 setDefaultModifier(mixed $modifiers) + * @method Smarty_Internal_TemplateBase unloadFilter(string $type, string $name) * @method Smarty_Internal_TemplateBase unregisterCacheResource(string $name) - * @method Smarty_Internal_TemplateBase unregisterPlugin(string $type, string $name) * @method Smarty_Internal_TemplateBase unregisterObject(string $object_name) - * @method object getRegisteredObject(string $object_name) - * @method Smarty_Internal_TemplateBase registerClass(string $class_name, string $class_impl) - * @method Smarty_Internal_TemplateBase createData(Smarty_Internal_Data $parent = null, string $name = null) - * @method array getTags(mixed $template = null) + * @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) + * @method Smarty _getSmartyObj() */ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data { @@ -71,6 +77,13 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data public $cache_lifetime = 3600; /** + * Array of source information for known template functions + * + * @var array + */ + public $tplFunctions = array(); + + /** * universal cache * * @var array() @@ -80,10 +93,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data /** * 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 $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 @@ -134,7 +147,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data * @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 + * @param string $function function type 0 = fetch, 1 = display, 2 = isCache * * @return mixed * @throws \Exception @@ -142,24 +155,24 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data */ private function _execute($template, $cache_id, $compile_id, $parent, $function) { - $smarty = $this->_objType == 1 ? $this : $this->smarty; + $smarty = $this->_getSmartyObj(); + $saveVars = true; if ($template === null) { - if ($this->_objType != 2) { + if (!$this->_isTplObj()) { throw new SmartyException($function . '():Missing \'$template\' parameter'); } else { - $template = clone $this; + $template = $this; } } elseif (is_object($template)) { - if (!isset($template->_objType) || $template->_objType != 2) { + /* @var Smarty_Internal_Template $template */ + if (!isset($template->_objType) || !$template->_isTplObj()) { throw new SmartyException($function . '():Template object expected'); - } else { - /* @var Smarty_Internal_Template $template */ - $template = clone $template; } } else { // get template object - /* @var Smarty_Internal_Template $template */ - $template = $smarty->createTemplate($template, $cache_id, $compile_id, $parent, false); + $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; @@ -169,8 +182,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data $level = ob_get_level(); try { $_smarty_old_error_level = - ($this->_objType == 1 && isset($smarty->error_reporting)) ? error_reporting($smarty->error_reporting) : - null; + isset($smarty->error_reporting) ? error_reporting($smarty->error_reporting) : null; + 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 @@ -178,17 +199,32 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data $template->loadCached(); } $result = $template->cached->isCached($template); - $template->smarty->_cache['isCached'][$template->_getTemplateId()] = $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($_smarty_old_error_level)) { error_reporting($_smarty_old_error_level); @@ -199,6 +235,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data while (ob_get_level() > $level) { ob_end_clean(); } + if (isset($_smarty_old_error_level)) { + error_reporting($_smarty_old_error_level); + } throw $e; } } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php index 6c3ea5f5d..158d654c7 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php @@ -17,8 +17,8 @@ * * @property Smarty_Internal_SmartyTemplateCompiler $prefixCompiledCode = '' * @property Smarty_Internal_SmartyTemplateCompiler $postfixCompiledCode = '' - * @method Smarty_Internal_SmartyTemplateCompiler registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false) - * @method Smarty_Internal_SmartyTemplateCompiler unregisterPostCompileCallback($key) + * @method registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false) + * @method unregisterPostCompileCallback($key) */ abstract class Smarty_Internal_TemplateCompilerBase { @@ -56,7 +56,7 @@ abstract class Smarty_Internal_TemplateCompilerBase * * @var array */ - public $_tag_objects = array(); + static $_tag_objects = array(); /** * tag stack @@ -290,6 +290,13 @@ abstract class Smarty_Internal_TemplateCompilerBase public $_cache = array(); /** + * counter for prefix variable number + * + * @var int + */ + public static $prefixVariableNumber = 0; + + /** * method to compile a Smarty template * * @param mixed $_content template source @@ -353,6 +360,9 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->plugin_search_order = $this->template->smarty->plugin_search_order; } if ($this->smarty->debugging) { + if (!isset($this->smarty->_debug)) { + $this->smarty->_debug = new Smarty_Internal_Debug(); + } $this->smarty->_debug->start_compile($this->template); } if (isset($this->template->smarty->security_policy)) { @@ -375,9 +385,11 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->has_variable_string = false; $this->prefix_code = array(); // add file dependency - $this->parent_compiler->template->compiled->file_dependency[ $this->template->source->uid ] = - array($this->template->source->filepath, $this->template->source->getTimeStamp(), - $this->template->source->type); + 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)) { @@ -396,7 +408,6 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->smarty->_debug->end_compile($this->template); } $this->_tag_stack = array(); - $this->_tag_objects = array(); // free memory $this->parent_compiler = null; $this->template = null; @@ -407,7 +418,6 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->smarty->_debug->end_compile($this->template); } $this->parent_compiler = null; - $this->template = null; $this->parser = null; return $_compiled_code; } @@ -501,14 +511,23 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->template->_cache[ 'used_tags' ][] = array($tag, $args); } // check nocache option flag - if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) || - in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args) - ) { - $this->tag_nocache = true; + 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->template->tpl_function[ $tag ])) { + 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); @@ -544,7 +563,7 @@ abstract class Smarty_Internal_TemplateCompilerBase $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 ])) + 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 ])) { @@ -557,7 +576,7 @@ abstract class Smarty_Internal_TemplateCompilerBase } } // check if tag is registered - foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) + 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 @@ -573,15 +592,8 @@ abstract class Smarty_Internal_TemplateCompilerBase if (!$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 1 ]) { $this->tag_nocache = true; } - $function = $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[ 0 ])) { - return $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->{$function[ 1 ]}($new_args, - $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } + 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) { @@ -595,7 +607,7 @@ abstract class Smarty_Internal_TemplateCompilerBase if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || - $this->smarty->security_policy->isTrustedTag($tag, $this)) + $this->smarty->security_policy->isTrustedTag($tag, $this)) ) { $plugin = 'smarty_compiler_' . $tag; if (is_callable($plugin)) { @@ -654,15 +666,8 @@ abstract class Smarty_Internal_TemplateCompilerBase foreach ($args as $mixed) { $new_args = array_merge($new_args, $mixed); } - $function = $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[ 0 ])) { - return $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($new_args, - $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } + 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); @@ -713,15 +718,8 @@ abstract class Smarty_Internal_TemplateCompilerBase if (!$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 1 ]) { $this->tag_nocache = true; } - $function = $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ]; - if (!is_array($function)) { - return $function($args, $this); - } elseif (is_object($function[ 0 ])) { - return $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($args, - $this); - } else { - return call_user_func_array($function, array($args, $this)); - } + 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; @@ -754,7 +752,8 @@ abstract class Smarty_Internal_TemplateCompilerBase // 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; + $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'; @@ -774,6 +773,61 @@ abstract class Smarty_Internal_TemplateCompilerBase } /** + * compile PHP function call + * + * @param string $name + * @param array $parameter + * + * @return string + */ + 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 = strtolower($name); + $par = implode(',', $parameter); + $parHasFuction = strpos($par, '(') !== false; + if ($func_name == 'isset') { + if (count($parameter) == 0) { + $this->trigger_template_error('Illegal number of paramer in "isset()"'); + } + if ($parHasFuction) { + $prefixVar = $this->getNewPrefixVariable(); + $this->appendPrefixCode("<?php $prefixVar" . '=' . $par . ';?>'); + $isset_par = $prefixVar; + } else { + $isset_par = str_replace("')->value", "',null,true,false)->value", $par); + } + return $name . "(" . $isset_par . ")"; + } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) { + if (count($parameter) != 1) { + $this->trigger_template_error('Illegal number of paramer in "empty()"'); + } + if ($func_name == 'empty') { + if ($parHasFuction) { + $prefixVar = $this->getNewPrefixVariable(); + $this->appendPrefixCode("<?php $prefixVar" . '=' . $par . ';?>'); + + return $func_name . '(' . $prefixVar . ')'; + } else { + return $func_name . '(' . + str_replace("')->value", "',null,true,false)->value", $parameter[ 0 ]) . ')'; + } + } else { + return $func_name . '(' . $parameter[ 0 ] . ')'; + } + } else { + return $name . "(" . implode(',', $parameter) . ")"; + } + } else { + $this->trigger_template_error("unknown function \"" . $name . "\""); + } + } + } + + /** * This method is called from parser to process a text content section * - remove text from inheritance child templates as they may generate output * - strip text if strip is enabled @@ -787,7 +841,6 @@ abstract class Smarty_Internal_TemplateCompilerBase if ((string) $text != '') { $store = array(); $_store = 0; - $_offset = 0; if ($this->parser->strip) { if (strpos($text, '<') !== false) { // capture html elements not to be messed with @@ -804,15 +857,14 @@ abstract class Smarty_Internal_TemplateCompilerBase $_store ++; } } - $expressions = array(// replace multiple spaces between tags by a single space - // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements - '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2', - // remove spaces between attributes (but not in attribute values!) + '#(: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', - '#^\s+<#Ss' => '<', - '#>\s+$#Ss' => '>', - $this->stripRegEx => ''); + '#>[\040\011]+$#Ss' => '> ', '#>[\040\011]*[\n]\s*$#Ss' => '>', + $this->stripRegEx => '',); $text = preg_replace(array_keys($expressions), array_values($expressions), $text); $_offset = 0; @@ -848,12 +900,29 @@ abstract class Smarty_Internal_TemplateCompilerBase * @param mixed $param2 optional parameter * @param mixed $param3 optional parameter * - * @return string compiled code + * @return string|bool compiled code or false */ public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) { + $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 Smarty_Internal_CompileBase|bool tag compiler object or false if not found + */ + public function getTagCompiler($tag) + { // re-use object if already exists - if (!isset($this->_tag_objects[ $tag ])) { + if (!isset(self::$_tag_objects[ $tag ])) { // lazy load internal compiler plugin $_tag = explode('_', $tag); $_tag = array_map('ucfirst', $_tag); @@ -861,15 +930,12 @@ abstract class Smarty_Internal_TemplateCompilerBase if (class_exists($class_name) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) ) { - $this->_tag_objects[ $tag ] = new $class_name; + self::$_tag_objects[ $tag ] = new $class_name; } else { - $this->_tag_objects[ $tag ] = false; - return false; + self::$_tag_objects[ $tag ] = false; } } - // compile this tag - return $this->_tag_objects[ $tag ] === false ? false : - $this->_tag_objects[ $tag ]->compile($args, $this, $param1, $param2, $param3); + return self::$_tag_objects[ $tag ]; } /** @@ -955,7 +1021,7 @@ abstract class Smarty_Internal_TemplateCompilerBase $script = null; $cacheable = true; $result = call_user_func_array($this->smarty->default_plugin_handler_func, - array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)); + array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable,)); if ($result) { $this->tag_nocache = $this->tag_nocache || !$cacheable; if ($script !== null) { @@ -976,11 +1042,6 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); } } - if (!is_string($callback) && - !(is_array($callback) && is_string($callback[ 0 ]) && is_string($callback[ 1 ])) - ) { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); - } if (is_callable($callback)) { $this->default_handler_plugins[ $plugin_type ][ $tag ] = array($callback, true, array()); @@ -1035,7 +1096,7 @@ abstract class Smarty_Internal_TemplateCompilerBase $_output = addcslashes($content, '\'\\'); $_output = str_replace("^#^", "'", $_output); $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . - "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n"; + "/*/%%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->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) { @@ -1065,8 +1126,8 @@ abstract class Smarty_Internal_TemplateCompilerBase */ public function getId($input) { - if (preg_match('~^[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*$~', $input, $match)) { - return $match[ 1 ]; + if (preg_match('~^([\'"]*)([0-9]*[a-zA-Z_]\w*)\1$~', $input, $match)) { + return $match[ 2 ]; } return false; } @@ -1087,6 +1148,52 @@ abstract class Smarty_Internal_TemplateCompilerBase } /** + * 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 @@ -1096,7 +1203,8 @@ abstract class Smarty_Internal_TemplateCompilerBase public function makeNocacheCode($code) { return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/<?php " . - str_replace("^#^", "'", addcslashes($code, '\'\\')) . "?>/*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n"; + str_replace("^#^", "'", addcslashes($code, '\'\\')) . + "?>/*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n"; } /** @@ -1167,4 +1275,91 @@ abstract class Smarty_Internal_TemplateCompilerBase $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)); + } + + /** + * 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; + } + } diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php index 993b7be62..8e870b75c 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php @@ -26,6 +26,13 @@ class Smarty_Internal_Templatelexer public $data; /** + * Source length + * + * @var int + */ + public $dataLength = null; + + /** * byte counter * * @var int @@ -178,21 +185,20 @@ class Smarty_Internal_Templatelexer * @var array */ public $smarty_token_names = array( // Text for parser error messages - 'NOT' => '(!,not)', 'OPENP' => '(', 'CLOSEP' => ')', - 'OPENB' => '[', 'CLOSEB' => ']', 'PTR' => '->', 'APTR' => '=>', - 'EQUAL' => '=', 'NUMBER' => 'number', 'UNIMATH' => '+" , "-', - 'MATH' => '*" , "/" , "%', 'INCDEC' => '++" , "--', - 'SPACE' => ' ', 'DOLLAR' => '$', 'SEMICOLON' => ';', - 'COLON' => ':', 'DOUBLECOLON' => '::', 'AT' => '@', 'HATCH' => '#', - 'QUOTE' => '"', 'BACKTICK' => '`', 'VERT' => '"|" modifier', - 'DOT' => '.', 'COMMA' => '","', 'QMARK' => '"?"', - 'ID' => 'id, name', 'TEXT' => 'text', - 'LDELSLASH' => '{/..} closing tag', 'LDEL' => '{...} Smarty tag', - 'COMMENT' => 'comment', 'AS' => 'as', 'TO' => 'to', - 'PHP' => '"<?php", "<%", "{php}" tag', - 'LOGOP' => '"<", "==" ... logical operator', - 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', - 'SCOND' => '"is even" ... if condition',); + 'NOT' => '(!,not)', 'OPENP' => '(', 'CLOSEP' => ')', 'OPENB' => '[', + 'CLOSEB' => ']', 'PTR' => '->', 'APTR' => '=>', 'EQUAL' => '=', + 'NUMBER' => 'number', 'UNIMATH' => '+" , "-', 'MATH' => '*" , "/" , "%', + 'INCDEC' => '++" , "--', 'SPACE' => ' ', 'DOLLAR' => '$', + 'SEMICOLON' => ';', 'COLON' => ':', 'DOUBLECOLON' => '::', 'AT' => '@', + 'HATCH' => '#', 'QUOTE' => '"', 'BACKTICK' => '`', + 'VERT' => '"|" modifier', 'DOT' => '.', 'COMMA' => '","', + 'QMARK' => '"?"', 'ID' => 'id, name', 'TEXT' => 'text', + 'LDELSLASH' => '{/..} closing tag', 'LDEL' => '{...} Smarty tag', + 'COMMENT' => 'comment', 'AS' => 'as', 'TO' => 'to', + 'PHP' => '"<?php", "<%", "{php}" tag', + 'LOGOP' => '"<", "==" ... logical operator', + 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', + 'SCOND' => '"is even" ... if condition',); /** * constructor @@ -203,16 +209,17 @@ class Smarty_Internal_Templatelexer function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler) { $this->data = $data; + $this->dataLength = strlen($data); $this->counter = 0; - if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) { + if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) { $this->counter += strlen($match[ 0 ]); } $this->line = 1; $this->smarty = $compiler->smarty; $this->compiler = $compiler; - $this->ldel = preg_quote($this->smarty->left_delimiter, '~'); + $this->ldel = preg_quote($this->smarty->left_delimiter, '/'); $this->ldel_length = strlen($this->smarty->left_delimiter); - $this->rdel = preg_quote($this->smarty->right_delimiter, '~'); + $this->rdel = preg_quote($this->smarty->right_delimiter, '/'); $this->rdel_length = strlen($this->smarty->right_delimiter); $this->smarty_token_names[ 'LDEL' ] = $this->smarty->left_delimiter; $this->smarty_token_names[ 'RDEL' ] = $this->smarty->right_delimiter; @@ -287,22 +294,24 @@ class Smarty_Internal_Templatelexer { if (!isset($this->yy_global_pattern1)) { $this->yy_global_pattern1 = - "/\G([{][}])|\G(" . $this->ldel . "[*])|\G((" . $this->ldel . "\\s*php(.*?)" . $this->rdel . ")|(" . + "/\G([{][}])|\G(" . $this->ldel . "[*])|\G((" . $this->ldel . "\\s*php([ ].*?)?" . $this->rdel . ")|(" . $this->ldel . "\\s*[\/]php" . $this->rdel . "))|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel . ")|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|(<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|([?][>])|([%][>]))|\G([\S\s])/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . @@ -324,7 +333,7 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token @@ -334,7 +343,8 @@ class Smarty_Internal_Templatelexer throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const TEXT = 1; @@ -348,7 +358,7 @@ class Smarty_Internal_Templatelexer function yy_r1_2() { - preg_match("~[*]{$this->rdel}~", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); + preg_match("/[*]{$this->rdel}/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[ 0 ][ 1 ])) { $to = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]); } else { @@ -361,8 +371,7 @@ class Smarty_Internal_Templatelexer function yy_r1_3() { - $obj = new Smarty_Internal_Compile_Private_Php(); - $obj->parsePhp($this); + $this->compiler->getTagCompiler('private_php')->parsePhp($this); } function yy_r1_7() @@ -400,15 +409,14 @@ class Smarty_Internal_Templatelexer function yy_r1_10() { - $obj = new Smarty_Internal_Compile_Private_Php(); - $obj->parsePhp($this); + $this->compiler->getTagCompiler('private_php')->parsePhp($this); } function yy_r1_19() { - $to = strlen($this->data); - preg_match("~($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])~i", + $to = $this->dataLength; + preg_match("/($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])/i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[ 0 ][ 1 ])) { $to = $match[ 0 ][ 1 ]; @@ -423,22 +431,24 @@ class Smarty_Internal_Templatelexer $this->yy_global_pattern2 = "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . - "\\s*[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . - "\\s*[\/](?:(?!block)[0-9]*[a-zA-Z_]\\w*)\\s*" . $this->rdel . ")|\G(" . $this->ldel . - "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . - $this->ldel . "\\s*)/isS"; + "\\s*make_nocache\\s+)|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . + ")|\G(" . $this->ldel . "\\s*[\/](?:(?!block)[0-9]*[a-zA-Z_]\\w*)\\s*" . $this->rdel . ")|\G(" . + $this->ldel . "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . + "\\s*[\/])|\G(" . $this->ldel . "\\s*)/isS"; + } + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); } - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . @@ -460,7 +470,7 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token @@ -470,7 +480,8 @@ class Smarty_Internal_Templatelexer throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const TAG = 2; @@ -510,12 +521,20 @@ class Smarty_Internal_Templatelexer function yy_r2_6() { + $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE; + $this->yybegin(self::TAGBODY); + $this->taglineno = $this->line; + } + + function yy_r2_7() + { + $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; $this->taglineno = $this->line; } - function yy_r2_8() + function yy_r2_9() { $this->yypopstate(); @@ -523,7 +542,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } - function yy_r2_9() + function yy_r2_10() { if ($this->_yy_stack[ count($this->_yy_stack) - 1 ] == self::TEXT) { @@ -538,7 +557,7 @@ class Smarty_Internal_Templatelexer } } - function yy_r2_11() + function yy_r2_12() { $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; @@ -546,7 +565,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } - function yy_r2_12() + function yy_r2_13() { $this->token = Smarty_Internal_Templateparser::TP_LDEL; @@ -558,19 +577,21 @@ class Smarty_Internal_Templatelexer { if (!isset($this->yy_global_pattern3)) { $this->yy_global_pattern3 = "/\G(\\s*" . $this->rdel . ")|\G(" . $this->ldel . - "\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\\s+(not\\s+)?(odd|even|div)\\s+by))\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G(([!]\\s*)|(not\\s+))|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"; + "\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\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([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . @@ -592,7 +613,7 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token @@ -602,7 +623,8 @@ class Smarty_Internal_Templatelexer throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const TAGBODY = 3; @@ -698,107 +720,113 @@ class Smarty_Internal_Templatelexer function yy_r3_19() { + $this->token = Smarty_Internal_Templateparser::TP_SLOGOP; + } + + function yy_r3_21() + { + $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; } - function yy_r3_24() + function yy_r3_25() { $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; } - function yy_r3_27() + function yy_r3_28() { $this->token = Smarty_Internal_Templateparser::TP_NOT; } - function yy_r3_30() + function yy_r3_31() { $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; } - function yy_r3_34() + function yy_r3_35() { $this->token = Smarty_Internal_Templateparser::TP_OPENP; } - function yy_r3_35() + function yy_r3_36() { $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; } - function yy_r3_36() + function yy_r3_37() { $this->token = Smarty_Internal_Templateparser::TP_OPENB; } - function yy_r3_37() + function yy_r3_38() { $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; } - function yy_r3_38() + function yy_r3_39() { $this->token = Smarty_Internal_Templateparser::TP_PTR; } - function yy_r3_39() + function yy_r3_40() { $this->token = Smarty_Internal_Templateparser::TP_APTR; } - function yy_r3_40() + function yy_r3_41() { $this->token = Smarty_Internal_Templateparser::TP_EQUAL; } - function yy_r3_41() + function yy_r3_42() { $this->token = Smarty_Internal_Templateparser::TP_INCDEC; } - function yy_r3_43() + function yy_r3_44() { $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; } - function yy_r3_45() + function yy_r3_46() { $this->token = Smarty_Internal_Templateparser::TP_MATH; } - function yy_r3_47() + function yy_r3_48() { $this->token = Smarty_Internal_Templateparser::TP_AT; } - function yy_r3_48() + function yy_r3_49() { $this->token = Smarty_Internal_Templateparser::TP_HATCH; } - function yy_r3_49() + function yy_r3_50() { // resolve conflicts with shorttag and right_delimiter starting with '=' if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter ) { - preg_match("~\s+~", $this->value, $match); + preg_match("/\s+/", $this->value, $match); $this->value = $match[ 0 ]; $this->token = Smarty_Internal_Templateparser::TP_SPACE; } else { @@ -806,86 +834,86 @@ class Smarty_Internal_Templatelexer } } - function yy_r3_50() + function yy_r3_51() { $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; } - function yy_r3_53() + function yy_r3_54() { $this->token = Smarty_Internal_Templateparser::TP_ID; } - function yy_r3_54() + function yy_r3_55() { $this->token = Smarty_Internal_Templateparser::TP_INTEGER; } - function yy_r3_55() + function yy_r3_56() { $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->yypopstate(); } - function yy_r3_56() + function yy_r3_57() { $this->token = Smarty_Internal_Templateparser::TP_VERT; } - function yy_r3_57() + function yy_r3_58() { $this->token = Smarty_Internal_Templateparser::TP_DOT; } - function yy_r3_58() + function yy_r3_59() { $this->token = Smarty_Internal_Templateparser::TP_COMMA; } - function yy_r3_59() + function yy_r3_60() { $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; } - function yy_r3_60() + function yy_r3_61() { $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; } - function yy_r3_61() + function yy_r3_62() { $this->token = Smarty_Internal_Templateparser::TP_COLON; } - function yy_r3_62() + function yy_r3_63() { $this->token = Smarty_Internal_Templateparser::TP_QMARK; } - function yy_r3_63() + function yy_r3_64() { $this->token = Smarty_Internal_Templateparser::TP_HEX; } - function yy_r3_64() + function yy_r3_65() { $this->token = Smarty_Internal_Templateparser::TP_SPACE; } - function yy_r3_65() + function yy_r3_66() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; @@ -898,17 +926,19 @@ class Smarty_Internal_Templatelexer "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . $this->rdel . ")|\G([\S\s])/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . @@ -930,7 +960,7 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token @@ -940,7 +970,8 @@ class Smarty_Internal_Templatelexer throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const LITERAL = 4; @@ -967,8 +998,8 @@ class Smarty_Internal_Templatelexer function yy_r4_3() { - $to = strlen($this->data); - preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i", $this->data, $match, PREG_OFFSET_CAPTURE, + $to = $this->dataLength; + preg_match("/{$this->ldel}[\/]?literal{$this->rdel}/i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[ 0 ][ 1 ])) { $to = $match[ 0 ][ 1 ]; @@ -989,17 +1020,19 @@ class Smarty_Internal_Templatelexer "\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS"; } - if ($this->counter >= strlen($this->data)) { + if (!isset($this->dataLength)) { + $this->dataLength = strlen($this->data); + } + if ($this->counter >= $this->dataLength) { return false; // end of input } do { if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); + if (!isset($yymatches[ 0 ][ 1 ])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { - $yymatches = array_filter($yymatches, 'strlen'); + $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . @@ -1021,7 +1054,7 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token @@ -1031,7 +1064,8 @@ class Smarty_Internal_Templatelexer throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; - } while (true); + } + while (true); } // end function const DOUBLEQUOTEDSTRING = 5; @@ -1125,7 +1159,7 @@ class Smarty_Internal_Templatelexer function yy_r5_14() { - $to = strlen($this->data); + $to = $this->dataLength; $this->value = substr($this->data, $this->counter, $to - $this->counter); $this->token = Smarty_Internal_Templateparser::TP_TEXT; } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php new file mode 100644 index 000000000..bc74fe440 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php @@ -0,0 +1,2831 @@ +<?php + +class TP_yyToken implements ArrayAccess +{ + public $string = ''; + + public $metadata = array(); + + public function __construct($s, $m = array()) + { + if ($s instanceof TP_yyToken) { + $this->string = $s->string; + $this->metadata = $s->metadata; + } else { + $this->string = (string) $s; + if ($m instanceof TP_yyToken) { + $this->metadata = $m->metadata; + } elseif (is_array($m)) { + $this->metadata = $m; + } + } + } + + public function __toString() + { + return $this->string; + } + + public function offsetExists($offset) + { + return isset($this->metadata[ $offset ]); + } + + public function offsetGet($offset) + { + return $this->metadata[ $offset ]; + } + + public function offsetSet($offset, $value) + { + if ($offset === null) { + if (isset($value[ 0 ])) { + $x = ($value instanceof TP_yyToken) ? $value->metadata : $value; + $this->metadata = array_merge($this->metadata, $x); + + return; + } + $offset = count($this->metadata); + } + if ($value === null) { + return; + } + if ($value instanceof TP_yyToken) { + if ($value->metadata) { + $this->metadata[ $offset ] = $value->metadata; + } + } elseif ($value) { + $this->metadata[ $offset ] = $value; + } + } + + public function offsetUnset($offset) + { + unset($this->metadata[ $offset ]); + } +} + +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"; + + const Err3 = "PHP in template not allowed. Use SmartyBC to enable it"; + + /** + * result status + * + * @var bool + */ + public $successful = true; + + /** + * return value + * + * @var mixed + */ + public $retvalue = 0; + + /** + * @var + */ + public $yymajor; + + /** + * last index of array variable + * + * @var mixed + */ + public $last_index; + + /** + * last variable name + * + * @var string + */ + public $last_variable; + + /** + * root parse tree buffer + * + * @var Smarty_Internal_ParseTree + */ + public $root_buffer; + + /** + * current parse tree object + * + * @var Smarty_Internal_ParseTree + */ + public $current_buffer; + + /** + * lexer object + * + * @var Smarty_Internal_Templatelexer + */ + public $lex; + + /** + * internal error flag + * + * @var bool + */ + private $internalError = false; + + /** + * {strip} status + * + * @var bool + */ + public $strip = false; + + /** + * compiler object + * + * @var Smarty_Internal_TemplateCompilerBase + */ + public $compiler = null; + + /** + * smarty object + * + * @var Smarty + */ + public $smarty = null; + + /** + * template object + * + * @var Smarty_Internal_Template + */ + public $template = null; + + /** + * block nesting level + * + * @var int + */ + public $block_nesting_level = 0; + + /** + * security object + * + * @var Smarty_Security + */ + public $security = null; + + /** + * template prefix array + * + * @var \Smarty_Internal_ParseTree[] + */ + public $template_prefix = array(); + + /** + * security object + * + * @var \Smarty_Internal_ParseTree[] + */ + public $template_postfix = array(); + + /** + * constructor + * + * @param Smarty_Internal_Templatelexer $lex + * @param Smarty_Internal_TemplateCompilerBase $compiler + */ + function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler) + { + $this->lex = $lex; + $this->compiler = $compiler; + $this->template = $this->compiler->template; + $this->smarty = $this->template->smarty; + $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false; + $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template(); + } + + /** + * insert PHP code in current buffer + * + * @param string $code + */ + public function insertPhpCode($code) + { + $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code)); + } + + /** + * merge PHP code with prefix code and return parse tree tag object + * + * @param string $code + * + * @return Smarty_Internal_ParseTree_Tag + */ + public function mergePrefixCode($code) + { + $tmp = ''; + foreach ($this->compiler->prefix_code as $preCode) { + $tmp .= $preCode; + } + $this->compiler->prefix_code = array(); + $tmp .= $code; + return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true)); + } + + const TP_VERT = 1; + + const TP_COLON = 2; + + const TP_PHP = 3; + + const TP_TEXT = 4; + + const TP_STRIPON = 5; + + const TP_STRIPOFF = 6; + + const TP_LITERALSTART = 7; + + const TP_LITERALEND = 8; + + const TP_LITERAL = 9; + + const TP_RDEL = 10; + + const TP_SIMPELOUTPUT = 11; + + const TP_LDEL = 12; + + const TP_DOLLARID = 13; + + const TP_EQUAL = 14; + + const TP_SIMPLETAG = 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_SMARTYBLOCKCHILDPARENT = 30; + + const TP_CLOSETAG = 31; + + const TP_LDELSLASH = 32; + + const TP_ATTR = 33; + + const TP_INTEGER = 34; + + const TP_COMMA = 35; + + const TP_OPENP = 36; + + const TP_CLOSEP = 37; + + const TP_MATH = 38; + + const TP_UNIMATH = 39; + + const TP_ISIN = 40; + + const TP_QMARK = 41; + + const TP_NOT = 42; + + const TP_TYPECAST = 43; + + const TP_HEX = 44; + + const TP_DOT = 45; + + const TP_INSTANCEOF = 46; + + const TP_SINGLEQUOTESTRING = 47; + + const TP_DOUBLECOLON = 48; + + const TP_NAMESPACE = 49; + + const TP_AT = 50; + + const TP_HATCH = 51; + + const TP_OPENB = 52; + + const TP_CLOSEB = 53; + + const TP_DOLLAR = 54; + + const TP_LOGOP = 55; + + const TP_SLOGOP = 56; + + const TP_TLOGOP = 57; + + const TP_SINGLECOND = 58; + + const TP_QUOTE = 59; + + const TP_BACKTICK = 60; + + const YY_NO_ACTION = 532; + + const YY_ACCEPT_ACTION = 531; + + const YY_ERROR_ACTION = 530; + + const YY_SZ_ACTTAB = 2114; + + static public $yy_action = array(268, 8, 132, 210, 245, 197, 183, 228, 7, 84, 176, 264, 275, 302, 112, 44, 36, 278, + 233, 136, 305, 221, 281, 203, 237, 26, 234, 202, 41, 104, 189, 39, 42, 256, 213, + 216, 224, 78, 207, 129, 82, 1, 316, 297, 102, 268, 8, 133, 79, 245, 80, 302, 228, + 7, 84, 330, 299, 82, 272, 112, 297, 273, 325, 233, 285, 305, 221, 214, 231, 34, 26, + 3, 101, 41, 230, 78, 39, 42, 256, 213, 35, 239, 314, 207, 300, 82, 1, 13, 297, 333, + 268, 8, 135, 79, 245, 201, 302, 228, 7, 84, 35, 85, 322, 109, 112, 29, 196, 13, + 233, 269, 305, 221, 237, 231, 249, 26, 136, 104, 41, 219, 78, 39, 42, 256, 213, + 459, 239, 267, 207, 355, 82, 1, 459, 297, 446, 268, 8, 135, 79, 245, 193, 302, 228, + 7, 84, 35, 446, 297, 28, 112, 247, 263, 13, 233, 82, 305, 221, 297, 231, 309, 26, + 185, 292, 41, 298, 78, 39, 42, 256, 213, 27, 239, 237, 207, 232, 82, 1, 104, 297, + 459, 268, 8, 135, 79, 245, 195, 459, 228, 7, 84, 446, 297, 283, 11, 112, 25, 188, + 282, 233, 236, 305, 221, 446, 204, 294, 26, 32, 318, 41, 90, 210, 39, 42, 256, 213, + 174, 239, 137, 207, 402, 82, 1, 210, 297, 9, 268, 8, 136, 79, 245, 201, 223, 228, + 7, 84, 402, 142, 235, 225, 112, 22, 227, 402, 233, 166, 305, 221, 35, 231, 27, 33, + 210, 101, 41, 13, 210, 39, 42, 256, 213, 361, 239, 302, 207, 399, 82, 1, 210, 297, + 101, 268, 8, 135, 79, 245, 201, 402, 228, 7, 84, 399, 235, 297, 109, 112, 447, 78, + 399, 233, 319, 305, 221, 402, 194, 172, 26, 279, 447, 41, 402, 307, 39, 42, 256, + 213, 182, 239, 16, 207, 296, 82, 1, 210, 297, 101, 268, 8, 131, 79, 245, 201, 357, + 228, 7, 84, 283, 11, 475, 475, 112, 282, 303, 475, 233, 24, 305, 221, 35, 231, 175, + 4, 279, 271, 41, 13, 109, 39, 42, 256, 213, 181, 239, 178, 207, 12, 82, 1, 16, 297, + 274, 268, 8, 135, 79, 245, 200, 475, 228, 7, 84, 475, 475, 283, 11, 112, 475, 189, + 282, 233, 210, 305, 221, 20, 231, 38, 26, 179, 292, 41, 148, 446, 39, 42, 256, 213, + 229, 239, 180, 207, 332, 82, 1, 446, 297, 190, 268, 8, 134, 79, 245, 201, 215, 228, + 7, 84, 168, 16, 188, 243, 112, 104, 189, 303, 233, 140, 305, 221, 325, 231, 255, + 26, 177, 214, 41, 218, 312, 39, 42, 256, 213, 277, 239, 128, 207, 101, 82, 1, 92, + 297, 2, 268, 8, 136, 79, 245, 201, 23, 228, 7, 84, 210, 108, 251, 184, 112, 297, + 304, 289, 233, 367, 305, 221, 137, 231, 315, 33, 220, 5, 41, 9, 5, 39, 42, 256, + 213, 35, 239, 189, 207, 113, 82, 311, 13, 297, 106, 446, 214, 212, 79, 116, 72, + 114, 258, 260, 261, 222, 102, 446, 214, 257, 280, 187, 308, 334, 270, 206, 242, + 152, 299, 210, 128, 83, 262, 250, 252, 253, 176, 332, 211, 329, 268, 8, 151, 143, + 245, 189, 178, 228, 7, 84, 210, 265, 332, 332, 112, 188, 21, 311, 233, 153, 305, + 221, 214, 212, 17, 122, 67, 114, 164, 141, 189, 13, 102, 149, 266, 257, 280, 183, + 332, 332, 270, 206, 242, 332, 299, 295, 44, 36, 278, 235, 311, 208, 279, 145, 169, + 214, 212, 91, 122, 67, 114, 189, 320, 332, 167, 102, 146, 139, 257, 280, 94, 171, + 159, 270, 206, 242, 332, 299, 210, 38, 311, 189, 332, 155, 209, 214, 212, 317, 122, + 53, 107, 123, 232, 332, 189, 102, 291, 400, 257, 280, 6, 217, 276, 270, 206, 242, + 311, 299, 297, 158, 313, 214, 212, 400, 122, 49, 107, 154, 117, 332, 400, 102, 30, + 446, 257, 280, 248, 332, 173, 270, 206, 242, 279, 299, 324, 446, 186, 292, 332, 95, + 279, 268, 10, 326, 170, 245, 88, 87, 228, 7, 84, 279, 138, 89, 279, 112, 86, 309, + 311, 233, 115, 305, 221, 214, 212, 254, 122, 67, 114, 105, 303, 163, 165, 102, 303, + 93, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 303, 303, 303, 286, 19, 311, + 205, 303, 303, 303, 214, 212, 303, 116, 72, 114, 303, 43, 40, 37, 102, 303, 303, + 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 324, 327, 323, 288, 287, 303, + 303, 268, 10, 326, 331, 245, 303, 303, 228, 7, 84, 303, 303, 303, 303, 112, 303, + 303, 311, 233, 303, 305, 221, 214, 212, 303, 122, 70, 114, 303, 303, 303, 303, 102, + 303, 303, 257, 280, 303, 283, 11, 270, 206, 242, 282, 299, 303, 311, 303, 290, 19, + 303, 214, 212, 35, 122, 54, 114, 303, 303, 303, 13, 102, 162, 303, 257, 280, 183, + 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, 303, 214, 212, 303, 122, 68, + 114, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242, + 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 100, 73, 114, 303, 303, 303, 303, + 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, + 303, 303, 214, 212, 303, 122, 77, 114, 303, 303, 303, 303, 102, 147, 303, 257, 280, + 183, 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, 303, 214, 212, 303, 122, + 76, 114, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242, + 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 99, 71, 114, 303, 303, 303, 303, + 102, 161, 303, 257, 280, 183, 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, + 303, 214, 212, 303, 122, 47, 114, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, + 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 59, + 114, 303, 303, 303, 303, 102, 150, 303, 257, 280, 183, 303, 303, 270, 206, 242, + 332, 299, 311, 44, 36, 278, 303, 214, 198, 303, 118, 55, 114, 303, 303, 303, 303, + 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, + 303, 303, 214, 212, 303, 122, 69, 114, 303, 303, 303, 303, 102, 160, 303, 257, 280, + 183, 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, 303, 214, 97, 303, 81, + 48, 103, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242, + 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 57, 114, 303, 303, 303, 303, + 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, + 303, 303, 214, 212, 303, 122, 65, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, + 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 96, 303, 81, + 46, 103, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, + 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 111, 50, 114, 303, 303, 303, 303, + 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, + 303, 303, 214, 212, 303, 98, 61, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, + 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 199, 303, + 122, 56, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, + 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 51, 114, 303, 303, 303, + 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, + 303, 303, 303, 214, 212, 303, 122, 58, 114, 303, 303, 303, 303, 102, 303, 303, 257, + 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, + 303, 122, 74, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, + 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 62, 114, 303, 303, + 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, + 303, 303, 303, 303, 214, 212, 303, 122, 60, 114, 303, 303, 303, 303, 102, 303, 303, + 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, + 212, 303, 122, 45, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, + 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 64, 114, 303, + 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, + 311, 303, 303, 303, 303, 214, 212, 303, 122, 75, 114, 303, 303, 303, 303, 102, 303, + 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, + 214, 212, 303, 122, 63, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, + 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 66, 114, + 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 412, 412, 270, 206, 242, 303, + 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 53, 114, 303, 303, 303, 303, 102, + 303, 303, 257, 280, 210, 303, 303, 270, 206, 242, 303, 299, 446, 301, 412, 412, + 412, 303, 531, 52, 259, 260, 261, 222, 446, 303, 214, 303, 303, 35, 303, 412, 412, + 412, 412, 303, 13, 303, 303, 303, 303, 43, 40, 37, 210, 303, 303, 311, 303, 303, + 303, 303, 214, 212, 210, 130, 303, 114, 327, 323, 288, 287, 102, 303, 303, 303, + 241, 31, 303, 35, 270, 206, 242, 303, 299, 303, 13, 303, 303, 35, 303, 43, 40, 37, + 303, 303, 13, 303, 303, 303, 303, 43, 40, 37, 303, 303, 303, 311, 327, 323, 288, + 287, 214, 212, 210, 124, 303, 114, 327, 323, 288, 287, 102, 192, 303, 303, 310, + 303, 303, 303, 270, 206, 242, 311, 299, 226, 303, 303, 214, 212, 303, 120, 303, + 114, 475, 475, 303, 28, 102, 475, 459, 43, 40, 37, 303, 303, 270, 206, 242, 303, + 299, 303, 303, 303, 303, 303, 303, 311, 327, 323, 288, 287, 214, 212, 303, 126, + 303, 114, 459, 303, 303, 459, 102, 475, 303, 459, 226, 303, 303, 303, 270, 206, + 242, 303, 299, 475, 475, 226, 18, 303, 475, 459, 303, 303, 303, 303, 475, 475, 303, + 303, 226, 475, 459, 283, 11, 303, 303, 303, 282, 475, 475, 303, 303, 303, 475, 459, + 303, 303, 35, 459, 144, 303, 459, 303, 475, 13, 459, 303, 303, 303, 459, 303, 303, + 459, 311, 475, 303, 459, 321, 214, 212, 303, 119, 459, 114, 303, 459, 303, 475, + 102, 459, 303, 303, 303, 303, 303, 303, 270, 206, 242, 303, 299, 311, 210, 14, 303, + 303, 214, 212, 303, 127, 303, 114, 303, 284, 303, 303, 102, 129, 303, 303, 303, + 303, 102, 303, 270, 206, 242, 311, 299, 210, 303, 293, 214, 212, 299, 121, 303, + 114, 311, 43, 40, 37, 102, 214, 212, 303, 125, 303, 114, 303, 270, 206, 242, 102, + 299, 156, 327, 323, 288, 287, 210, 270, 206, 242, 210, 299, 43, 40, 37, 210, 303, + 303, 303, 244, 303, 303, 303, 303, 303, 303, 110, 303, 303, 327, 323, 288, 287, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 43, 40, 37, 210, 43, 40, 37, 210, + 303, 43, 40, 37, 240, 210, 303, 303, 191, 327, 323, 288, 287, 327, 323, 288, 287, + 303, 327, 323, 288, 287, 303, 306, 303, 303, 303, 303, 303, 303, 303, 303, 43, 40, + 37, 303, 43, 40, 37, 210, 303, 238, 43, 40, 37, 303, 303, 303, 303, 327, 323, 288, + 287, 327, 323, 288, 287, 15, 303, 327, 323, 288, 287, 303, 303, 303, 475, 475, 303, + 303, 303, 475, 459, 210, 303, 246, 43, 40, 37, 210, 303, 303, 303, 303, 303, 475, + 475, 283, 11, 303, 475, 459, 282, 327, 323, 288, 287, 303, 303, 303, 459, 303, 35, + 459, 157, 475, 303, 459, 303, 13, 43, 40, 37, 303, 303, 303, 43, 40, 37, 459, 303, + 303, 459, 303, 475, 328, 459, 327, 323, 288, 287, 303, 303, 327, 323, 288, 287, + 303, 406, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 406, 303, 406, 303, + 303, 406, 303, 303, 303, 303, 303, 303, 406, 303, 406, 303, 406, 303, 303, 303, + 303, 303, 303, 303, 235,); + + static public $yy_lookahead = array(11, 12, 13, 1, 15, 16, 76, 18, 19, 20, 7, 8, 9, 22, 25, 85, 86, 87, 29, 13, 31, + 32, 16, 34, 75, 36, 77, 78, 39, 80, 100, 42, 43, 44, 45, 71, 47, 46, 49, 75, 51, + 52, 53, 54, 80, 11, 12, 13, 59, 15, 16, 22, 18, 19, 20, 49, 92, 51, 66, 25, 54, + 69, 65, 29, 30, 31, 32, 70, 34, 14, 36, 35, 17, 39, 16, 46, 42, 43, 44, 45, 26, + 47, 53, 49, 10, 51, 52, 33, 54, 53, 11, 12, 13, 59, 15, 16, 22, 18, 19, 20, 26, + 104, 105, 48, 25, 12, 13, 33, 29, 16, 31, 32, 75, 34, 77, 36, 13, 80, 39, 16, + 46, 42, 43, 44, 45, 45, 47, 34, 49, 10, 51, 52, 52, 54, 36, 11, 12, 13, 59, 15, + 16, 22, 18, 19, 20, 26, 48, 54, 14, 25, 13, 34, 33, 29, 51, 31, 32, 54, 34, 94, + 36, 96, 97, 39, 97, 46, 42, 43, 44, 45, 14, 47, 75, 49, 77, 51, 52, 80, 54, 45, + 11, 12, 13, 59, 15, 16, 52, 18, 19, 20, 36, 54, 11, 12, 25, 21, 100, 16, 29, 45, + 31, 32, 48, 34, 16, 36, 14, 53, 39, 35, 1, 42, 43, 44, 45, 93, 47, 45, 49, 10, + 51, 52, 1, 54, 52, 11, 12, 13, 59, 15, 16, 50, 18, 19, 20, 26, 27, 45, 50, 25, + 12, 13, 33, 29, 16, 31, 32, 26, 34, 14, 36, 1, 17, 39, 33, 1, 42, 43, 44, 45, + 10, 47, 22, 49, 10, 51, 52, 1, 54, 17, 11, 12, 13, 59, 15, 16, 10, 18, 19, 20, + 26, 45, 54, 48, 25, 36, 46, 33, 29, 53, 31, 32, 26, 34, 93, 36, 95, 48, 39, 33, + 60, 42, 43, 44, 45, 81, 47, 35, 49, 37, 51, 52, 1, 54, 17, 11, 12, 13, 59, 15, + 16, 10, 18, 19, 20, 11, 12, 11, 12, 25, 16, 101, 16, 29, 14, 31, 32, 26, 34, 93, + 36, 95, 22, 39, 33, 48, 42, 43, 44, 45, 81, 47, 76, 49, 41, 51, 52, 35, 54, 37, + 11, 12, 13, 59, 15, 16, 50, 18, 19, 20, 11, 12, 11, 12, 25, 16, 100, 16, 29, 1, + 31, 32, 28, 34, 2, 36, 96, 97, 39, 72, 36, 42, 43, 44, 45, 17, 47, 76, 49, 82, + 51, 52, 48, 54, 16, 11, 12, 13, 59, 15, 16, 50, 18, 19, 20, 75, 35, 100, 37, 25, + 80, 100, 101, 29, 13, 31, 32, 65, 34, 37, 36, 13, 70, 39, 16, 91, 42, 43, 44, + 45, 16, 47, 98, 49, 17, 51, 52, 36, 54, 36, 11, 12, 13, 59, 15, 16, 12, 18, 19, + 20, 1, 48, 4, 76, 25, 54, 16, 105, 29, 10, 31, 32, 45, 34, 53, 36, 17, 36, 39, + 52, 36, 42, 43, 44, 45, 26, 47, 100, 49, 16, 51, 65, 33, 54, 80, 36, 70, 71, 59, + 73, 74, 75, 64, 65, 66, 67, 80, 48, 70, 83, 84, 76, 98, 91, 88, 89, 90, 72, 92, + 1, 98, 16, 3, 4, 5, 6, 7, 82, 102, 103, 11, 12, 72, 72, 15, 100, 76, 18, 19, 20, + 1, 16, 82, 82, 25, 100, 28, 65, 29, 51, 31, 32, 70, 71, 26, 73, 74, 75, 72, 72, + 100, 33, 80, 72, 10, 83, 84, 76, 82, 82, 88, 89, 90, 82, 92, 16, 85, 86, 87, 45, + 65, 99, 95, 72, 51, 70, 71, 76, 73, 74, 75, 100, 53, 82, 93, 80, 72, 13, 83, 84, + 76, 93, 72, 88, 89, 90, 82, 92, 1, 2, 65, 100, 82, 72, 99, 70, 71, 53, 73, 74, + 75, 16, 77, 82, 100, 80, 16, 10, 83, 84, 36, 14, 34, 88, 89, 90, 65, 92, 54, 72, + 13, 70, 71, 26, 73, 74, 75, 72, 77, 82, 33, 80, 23, 36, 83, 84, 82, 82, 72, 88, + 89, 90, 95, 92, 4, 48, 96, 97, 82, 81, 95, 11, 12, 13, 93, 15, 80, 80, 18, 19, + 20, 95, 80, 80, 95, 25, 80, 94, 65, 29, 79, 31, 32, 70, 71, 8, 73, 74, 75, 68, + 106, 93, 93, 80, 106, 93, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 106, 106, + 106, 59, 60, 65, 99, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 38, 39, 40, + 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 4, 55, 56, 57, 58, + 106, 106, 11, 12, 13, 103, 15, 106, 106, 18, 19, 20, 106, 106, 106, 106, 25, + 106, 106, 65, 29, 106, 31, 32, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, + 106, 106, 83, 84, 106, 11, 12, 88, 89, 90, 16, 92, 106, 65, 106, 59, 60, 106, + 70, 71, 26, 73, 74, 75, 106, 106, 106, 33, 80, 72, 106, 83, 84, 76, 106, 106, + 88, 89, 90, 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, + 106, 80, 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, + 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, + 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, + 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, 106, 106, 88, 89, 90, 82, 92, + 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 100, 106, + 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, + 73, 74, 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, 106, 106, 88, 89, 90, + 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, + 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, + 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, 106, 106, + 88, 89, 90, 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, + 106, 80, 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, + 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, + 106, 106, 88, 89, 90, 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, + 106, 106, 106, 80, 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, + 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, + 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, + 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, + 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, + 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, + 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, + 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, + 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, + 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, + 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, + 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, + 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, + 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, + 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, + 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, + 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, + 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, + 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, + 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, + 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, + 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, + 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, + 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, + 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, + 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, + 80, 106, 106, 83, 84, 106, 1, 2, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, + 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 1, 106, 106, + 88, 89, 90, 106, 92, 36, 10, 38, 39, 40, 106, 62, 63, 64, 65, 66, 67, 48, 106, + 70, 106, 106, 26, 106, 55, 56, 57, 58, 106, 33, 106, 106, 106, 106, 38, 39, 40, + 1, 106, 106, 65, 106, 106, 106, 106, 70, 71, 1, 73, 106, 75, 55, 56, 57, 58, 80, + 106, 106, 106, 84, 24, 106, 26, 88, 89, 90, 106, 92, 106, 33, 106, 106, 26, 106, + 38, 39, 40, 106, 106, 33, 106, 106, 106, 106, 38, 39, 40, 106, 106, 106, 65, 55, + 56, 57, 58, 70, 71, 1, 73, 106, 75, 55, 56, 57, 58, 80, 10, 106, 106, 84, 106, + 106, 106, 88, 89, 90, 65, 92, 2, 106, 106, 70, 71, 106, 73, 106, 75, 11, 12, + 106, 14, 80, 16, 17, 38, 39, 40, 106, 106, 88, 89, 90, 106, 92, 106, 106, 106, + 106, 106, 106, 65, 55, 56, 57, 58, 70, 71, 106, 73, 106, 75, 45, 106, 106, 48, + 80, 50, 106, 52, 2, 106, 106, 106, 88, 89, 90, 106, 92, 11, 12, 2, 14, 106, 16, + 17, 106, 106, 106, 106, 11, 12, 106, 106, 2, 16, 17, 11, 12, 106, 106, 106, 16, + 11, 12, 106, 106, 106, 16, 17, 106, 106, 26, 45, 28, 106, 48, 106, 50, 33, 52, + 106, 106, 106, 45, 106, 106, 48, 65, 50, 106, 52, 53, 70, 71, 106, 73, 45, 75, + 106, 48, 106, 50, 80, 52, 106, 106, 106, 106, 106, 106, 88, 89, 90, 106, 92, 65, + 1, 2, 106, 106, 70, 71, 106, 73, 106, 75, 106, 71, 106, 106, 80, 75, 106, 106, + 106, 106, 80, 106, 88, 89, 90, 65, 92, 1, 106, 89, 70, 71, 92, 73, 106, 75, 65, + 38, 39, 40, 80, 70, 71, 106, 73, 106, 75, 106, 88, 89, 90, 80, 92, 27, 55, 56, + 57, 58, 1, 88, 89, 90, 1, 92, 38, 39, 40, 1, 106, 106, 106, 10, 106, 106, 106, + 106, 106, 106, 21, 106, 106, 55, 56, 57, 58, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 38, 39, 40, 1, 38, 39, 40, 1, 106, 38, 39, 40, 10, 1, 106, 106, + 10, 55, 56, 57, 58, 55, 56, 57, 58, 106, 55, 56, 57, 58, 106, 60, 106, 106, 106, + 106, 106, 106, 106, 106, 38, 39, 40, 106, 38, 39, 40, 1, 106, 37, 38, 39, 40, + 106, 106, 106, 106, 55, 56, 57, 58, 55, 56, 57, 58, 2, 106, 55, 56, 57, 58, 106, + 106, 106, 11, 12, 106, 106, 106, 16, 17, 1, 106, 37, 38, 39, 40, 1, 106, 106, + 106, 106, 106, 11, 12, 11, 12, 106, 16, 17, 16, 55, 56, 57, 58, 106, 106, 106, + 45, 106, 26, 48, 28, 50, 106, 52, 106, 33, 38, 39, 40, 106, 106, 106, 38, 39, + 40, 45, 106, 106, 48, 106, 50, 53, 52, 55, 56, 57, 58, 106, 106, 55, 56, 57, 58, + 106, 10, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21, 106, 23, 106, + 106, 26, 106, 106, 106, 106, 106, 106, 33, 106, 35, 106, 37, 106, 106, 106, 106, + 106, 106, 106, 45,); + + const YY_SHIFT_USE_DFLT = - 12; + + const YY_SHIFT_MAX = 238; + + static public $yy_shift_ofst = array(519, 349, 79, 349, 304, 79, 79, 304, 34, - 11, 34, 79, 394, 79, 79, 124, 79, + 169, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 259, 79, 79, 79, 79, 79, 79, 169, + 79, 214, 214, 439, 439, 439, 439, 439, 439, 1617, 1577, 1627, 1627, 1627, 1627, + 1627, 519, 1944, 1978, 2012, 1903, 1938, 1677, 1836, 1934, 1863, 1898, 1894, + 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 695, + 695, 6, 660, 459, 311, 103, 221, 411, 745, 1766, 2016, 783, 783, 411, 221, 411, + 427, 221, 607, 74, 119, 209, 266, 254, 228, 181, 55, 314, 3, 314, 235, 418, + 418, 584, 250, 528, 378, 297, 54, 518, 54, 539, 2, 2, 2, 2, 2, 2, 2, 2, 2, 252, + 252, - 12, 1697, 1759, 1748, 1995, 1772, 2014, 93, 361, 359, 134, 54, 137, 54, + 137, 54, 54, 54, 54, 54, 54, 54, 54, 80, 54, 54, 137, 137, 54, 54, 54, 54, 54, + 172, 54, 172, 444, 172, 320, 80, 172, 172, 172, 54, 172, 172, 687, 594, 2, 252, + 2, 382, 382, 2, 2, 252, 252, 2, - 12, - 12, - 12, - 12, - 12, 1550, 2068, 617, + 316, 154, 29, 240, 354, 98, 174, 236, 192, 272, 413, 249, 322, 381, 188, 36, + - 9, 598, 554, 424, 533, 525, 441, 498, 505, 473, 458, 450, 421, 559, 610, 594, + 627, 605, 564, 534, 392, 388, 629, 117, 58, 156, 313,); + + const YY_REDUCE_USE_DFLT = - 71; + + const YY_REDUCE_MAX = 192; + + static public $yy_reduce_ofst = array(1530, 426, 482, 656, 545, 515, 623, 571, 1017, 961, 1101, 1325, 933, 793, 849, + 821, 1465, 1157, 1129, 1185, 1073, 989, 1045, 1241, 1381, 1437, 1493, 1409, + 1269, 1297, 1353, 1213, 708, 737, 905, 877, 765, 1606, 1556, 1632, 1808, 1797, + 1771, 1666, 1743, 886, 491, 830, 491, 746, 942, 998, 438, - 70, - 70, - 70, + - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, + - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, 1777, - 3, 524, 460, + - 36, 511, - 51, 362, 487, 575, 567, 586, 37, 445, 97, 65, 317, 321, 541, 541, + 276, 276, 276, 414, 246, 290, 246, - 8, 201, 290, 344, 422, 340, 276, 461, + 387, 290, 486, 276, 530, 276, 276, 276, 276, 276, 435, 276, 276, 276, 276, + 570, 290, 276, 122, 122, 122, 122, 122, 122, 602, 589, 122, 122, 574, 606, + 574, 603, 574, 574, 574, 574, 574, 574, 574, 574, 581, 574, 574, 597, 596, + 574, 574, 574, 574, 574, 593, 574, 593, 609, 593, 611, 608, 593, 593, 593, + 574, 593, 593, 631, 612, 96, 67, 96, 230, 230, 96, 96, 67, 67, 96, 269, 224, + 588, 508, 501,); + + static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 11, 12, 15, 18, 19, 20, 25, 29, 31, 32,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 42, + 43, 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 53, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 42, + 43, 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 52, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 54, 59,), + array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43, + 44, 45, 47, 49, 51, 54, 59,), + array(1, 24, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(1, 10, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,), + array(3, 4, 5, 6, 7, 11, 12, 15, 18, 19, 20, 25, 29, 31, 32,), + array(1, 37, 38, 39, 40, 55, 56, 57, 58,), + array(1, 37, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 53, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58, 60,), + array(1, 10, 38, 39, 40, 55, 56, 57, 58,), + array(1, 10, 38, 39, 40, 55, 56, 57, 58,), + array(1, 2, 38, 39, 40, 55, 56, 57, 58,), + array(1, 10, 38, 39, 40, 55, 56, 57, 58,), + array(1, 27, 38, 39, 40, 55, 56, 57, 58,), + array(1, 10, 38, 39, 40, 55, 56, 57, 58,), + array(1, 21, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), + array(1, 38, 39, 40, 55, 56, 57, 58,), array(38, 39, 40, 55, 56, 57, 58,), + array(38, 39, 40, 55, 56, 57, 58,), array(13, 16, 49, 51, 54,), + array(4, 11, 12, 13, 15, 18, 19, 20, 25, 29, 31, 32, 59, 60,), + array(1, 10, 17, 26, 33, 36, 48,), array(1, 10, 26, 33,), + array(13, 16, 51, 54,), array(1, 26, 33,), array(13, 36, 54,), + array(4, 11, 12, 13, 15, 18, 19, 20, 25, 29, 31, 32, 59, 60,), + array(11, 12, 16, 26, 28, 33,), array(11, 12, 16, 26, 28, 33,), + array(11, 12, 16, 26, 33,), array(11, 12, 16, 26, 33,), array(13, 36, 54,), + array(1, 26, 33,), array(13, 36, 54,), array(17, 45, 52,), + array(1, 26, 33,), array(1, 2,), array(10, 22, 26, 33, 46,), + array(10, 22, 26, 33, 46,), array(1, 10, 26, 27, 33,), + array(1, 10, 26, 33,), array(1, 10, 26, 33,), array(12, 13, 16, 54,), + array(11, 12, 16, 50,), array(14, 17, 48,), array(11, 12, 16,), + array(7, 8, 9,), array(11, 12, 16,), array(14, 17, 48,), array(13, 16,), + array(13, 16,), array(13, 54,), array(1, 10,), array(26, 33,), + array(1, 17,), array(17, 48,), array(26, 33,), array(1, 28,), + array(26, 33,), array(1, 53,), array(1,), array(1,), array(1,), array(1,), + array(1,), array(1,), array(1,), array(1,), array(1,), array(17,), + array(17,), array(), array(2, 11, 12, 14, 16, 17, 45, 48, 50, 52,), + array(2, 11, 12, 16, 17, 45, 48, 50, 52, 53,), + array(2, 11, 12, 14, 16, 17, 45, 48, 50, 52,), + array(2, 11, 12, 16, 17, 45, 48, 50, 52,), + array(2, 11, 12, 16, 17, 45, 48, 50, 52,), + array(11, 12, 16, 17, 45, 48, 50, 52,), array(12, 13, 16, 34, 54,), + array(11, 12, 16, 50,), array(11, 12, 16,), array(14, 45, 52,), + array(26, 33,), array(13, 54,), array(26, 33,), array(13, 54,), + array(26, 33,), array(26, 33,), array(26, 33,), array(26, 33,), + array(26, 33,), array(26, 33,), array(26, 33,), array(26, 33,), + array(45, 52,), array(26, 33,), array(26, 33,), array(13, 54,), + array(13, 54,), array(26, 33,), array(26, 33,), array(26, 33,), + array(26, 33,), array(26, 33,), array(45, 52,), array(26, 33,), + array(45, 52,), array(12, 36,), array(45, 52,), array(14, 22,), + array(45, 52,), array(45, 52,), array(45, 52,), array(45, 52,), + array(26, 33,), array(45, 52,), array(45, 52,), array(8,), array(36,), + array(1,), array(17,), array(1,), array(2,), array(2,), array(1,), + array(1,), array(17,), array(17,), array(1,), array(), array(), array(), + array(), array(), array(1, 2, 36, 38, 39, 40, 48, 55, 56, 57, 58,), + array(10, 21, 23, 26, 33, 35, 37, 45,), array(10, 14, 26, 33, 36, 48,), + array(11, 12, 16, 50,), array(36, 45, 48, 53,), array(22, 46, 53,), + array(22, 46, 60,), array(28, 36, 48,), array(36, 48,), array(21, 35,), + array(45, 53,), array(14, 45,), array(35, 37,), array(36, 48,), + array(36, 48,), array(35, 37,), array(35, 37,), array(16, 50,), + array(35, 53,), array(22, 46,), array(34,), array(10,), array(16,), + array(51,), array(16,), array(36,), array(51,), array(16,), array(16,), + array(4,), array(16,), array(53,), array(16,), array(16,), array(36,), + array(13,), array(16,), array(53,), array(45,), array(37,), array(16,), + array(23,), array(34,), array(16,), array(14,), array(41,), 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(),); + + static public $yy_default = array(338, 515, 494, 530, 530, 494, 494, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 396, 530, 396, + 359, 372, 362, 396, 335, 530, 530, 530, 530, 530, 530, 530, 530, 401, 530, 530, + 377, 517, 492, 493, 418, 516, 403, 401, 518, 398, 407, 408, 423, 422, 530, 530, + 434, 410, 530, 396, 530, 530, 396, 396, 396, 396, 530, 396, 530, 506, 396, 386, + 424, 424, 410, 410, 410, 530, 459, 449, 459, 530, 459, 449, 530, 530, 530, 410, + 396, 390, 449, 396, 410, 374, 410, 417, 426, 425, 410, 392, 421, 414, 413, 427, + 503, 449, 501, 448, 448, 448, 448, 448, 448, 530, 461, 459, 475, 382, 530, 381, + 530, 369, 366, 364, 368, 360, 363, 358, 370, 452, 384, 356, 530, 530, 385, 375, + 380, 379, 373, 455, 376, 484, 459, 487, 530, 454, 453, 486, 485, 383, 456, 457, + 350, 459, 443, 481, 387, 495, 496, 416, 391, 507, 504, 393, 500, 500, 500, 459, + 459, 434, 430, 434, 460, 434, 424, 424, 434, 434, 530, 430, 430, 530, 530, 444, + 530, 530, 530, 530, 424, 530, 530, 530, 530, 530, 505, 530, 530, 530, 342, 530, + 439, 530, 530, 475, 530, 530, 530, 430, 530, 530, 404, 432, 530, 530, 436, 439, + 480, 502, 440, 490, 465, 365, 436, 475, 394, 405, 343, 344, 345, 346, 347, 409, + 429, 411, 337, 336, 339, 340, 341, 431, 348, 397, 353, 464, 354, 463, 435, 378, + 351, 349, 489, 352, 433, 462, 419, 477, 415, 446, 478, 479, 438, 388, 519, 511, + 510, 521, 520, 412, 482, 437, 498, 497, 491, 476, 483, 451, 526, 527, 428, 499, + 450, 389, 524, 523, 488, 458, 420, 442, 445, 371, 471, 468, 474, 467, 466, 469, + 472, 470, 522, 509, 529, 528, 525, 508, 473, 513, 447, 514, 395, 512, 441,); + + const YYNOCODE = 107; + + const YYSTACKDEPTH = 500; + + const YYNSTATE = 335; + + const YYNRULE = 195; + + 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', 'PHP', 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART', + 'LITERALEND', 'LITERAL', 'RDEL', 'SIMPELOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL', + 'SIMPLETAG', 'ID', 'PTR', 'LDELMAKENOCACHE', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', + 'TO', 'STEP', 'LDELFOREACH', 'SPACE', 'AS', 'APTR', 'LDELSETFILTER', + 'SMARTYBLOCKCHILDPARENT', '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', 'QUOTE', 'BACKTICK', + 'error', 'start', 'template', 'template_element', 'smartytag', 'literal', + 'text_content', 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes', + 'value', 'expr', 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction', + 'varvar', 'modparameters', 'attribute', 'ternary', 'array', 'tlop', 'lop', 'scond', + 'function', 'ns1', 'doublequoted_with_quotes', 'static_class_access', 'object', + 'arrayindex', 'indexdef', 'varvarele', 'objectchain', 'objectelement', 'method', + 'params', 'modifier', 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', + 'doublequotedcontent',); + + public static $yyRuleName = array('start ::= template', 'template ::= template_element', + 'template ::= template template_element', 'template ::=', + 'template_element ::= smartytag', 'template_element ::= literal', + 'template_element ::= PHP', 'template_element ::= text_content', + 'text_content ::= TEXT', 'text_content ::= text_content TEXT', + 'template_element ::= STRIPON', 'template_element ::= STRIPOFF', + 'literal ::= LITERALSTART LITERALEND', + 'literal ::= LITERALSTART literal_elements LITERALEND', + 'literal_elements ::= literal_elements literal_element', 'literal_elements ::=', + 'literal_element ::= literal', 'literal_element ::= LITERAL', + 'smartytag ::= tag RDEL', 'smartytag ::= SIMPELOUTPUT', 'tag ::= LDEL variable', + 'tag ::= LDEL variable attributes', 'tag ::= LDEL value', + 'tag ::= LDEL value attributes', 'tag ::= LDEL expr', + 'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value', + 'tag ::= LDEL DOLLARID EQUAL expr', 'tag ::= LDEL DOLLARID EQUAL expr attributes', + 'tag ::= LDEL varindexed EQUAL expr attributes', 'smartytag ::= SIMPLETAG', + 'tag ::= LDEL ID attributes', 'tag ::= LDEL ID', + 'tag ::= LDEL ID modifierlist attributes', 'tag ::= LDEL ID PTR ID attributes', + 'tag ::= LDEL ID PTR ID modifierlist attributes', + 'tag ::= 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 attributes', + 'tag ::= LDELFOREACH SPACE value AS varvar attributes', + 'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes', + 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', + 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', + 'tag ::= LDELSETFILTER ID modparameters', + 'tag ::= LDELSETFILTER ID modparameters modifierlist', + 'tag ::= LDEL SMARTYBLOCKCHILDPARENT', 'smartytag ::= CLOSETAG', + 'tag ::= LDELSLASH ID', 'tag ::= LDELSLASH ID modifierlist', + 'tag ::= LDELSLASH ID PTR ID', 'tag ::= LDELSLASH ID PTR ID modifierlist', + 'attributes ::= attributes attribute', 'attributes ::= attribute', + 'attributes ::=', 'attribute ::= SPACE ID EQUAL ID', 'attribute ::= ATTR expr', + 'attribute ::= ATTR value', 'attribute ::= SPACE ID', 'attribute ::= SPACE expr', + 'attribute ::= SPACE value', 'attribute ::= SPACE INTEGER EQUAL expr', + 'statements ::= statement', 'statements ::= statements COMMA statement', + 'statement ::= DOLLARID EQUAL INTEGER', 'statement ::= DOLLARID EQUAL expr', + 'statement ::= varindexed EQUAL expr', 'statement ::= OPENP statement CLOSEP', + 'expr ::= value', 'expr ::= ternary', 'expr ::= DOLLARID COLON ID', + 'expr ::= expr MATH value', 'expr ::= expr UNIMATH value', 'expr ::= array', + 'expr ::= expr modifierlist', 'expr ::= expr 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 ::= ns1 DOUBLECOLON static_class_access', 'ns1 ::= ID', + 'ns1 ::= NAMESPACE', 'variable ::= DOLLARID', 'variable ::= varindexed', + 'variable ::= varvar AT ID', 'variable ::= object', 'variable ::= HATCH ID HATCH', + 'variable ::= HATCH ID HATCH arrayindex', 'variable ::= HATCH variable HATCH', + 'variable ::= HATCH variable HATCH arrayindex', + 'varindexed ::= DOLLARID arrayindex', 'varindexed ::= varvar arrayindex', + 'arrayindex ::= arrayindex indexdef', 'arrayindex ::=', + 'indexdef ::= DOT DOLLARID', 'indexdef ::= DOT varvar', + 'indexdef ::= DOT varvar AT ID', 'indexdef ::= DOT ID', + 'indexdef ::= DOT INTEGER', 'indexdef ::= DOT LDEL expr RDEL', + 'indexdef ::= OPENB ID CLOSEB', 'indexdef ::= OPENB ID DOT ID CLOSEB', + 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB', + 'indexdef ::= OPENB INTEGER CLOSEB', 'indexdef ::= OPENB DOLLARID CLOSEB', + 'indexdef ::= OPENB variable CLOSEB', 'indexdef ::= OPENB value CLOSEB', + 'indexdef ::= OPENB expr CLOSEB', 'indexdef ::= OPENB CLOSEB', + 'varvar ::= DOLLARID', 'varvar ::= DOLLAR', 'varvar ::= varvar varvarele', + 'varvarele ::= ID', 'varvarele ::= SIMPELOUTPUT', 'varvarele ::= LDEL expr RDEL', + 'object ::= varindexed objectchain', 'objectchain ::= objectelement', + 'objectchain ::= objectchain objectelement', + 'objectelement ::= PTR ID arrayindex', 'objectelement ::= PTR varvar arrayindex', + 'objectelement ::= PTR LDEL expr RDEL arrayindex', + 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', + 'objectelement ::= PTR method', 'function ::= ns1 OPENP params CLOSEP', + 'method ::= ID OPENP params CLOSEP', 'method ::= DOLLARID OPENP params CLOSEP', + 'params ::= params COMMA expr', 'params ::= expr', 'params ::=', + 'modifierlist ::= modifierlist modifier modparameters', + 'modifierlist ::= modifier modparameters', 'modifier ::= VERT AT ID', + 'modifier ::= VERT ID', 'modparameters ::= modparameters modparameter', + 'modparameters ::=', 'modparameter ::= COLON value', + 'modparameter ::= COLON array', 'static_class_access ::= method', + 'static_class_access ::= method objectchain', 'static_class_access ::= ID', + 'static_class_access ::= DOLLARID arrayindex', + 'static_class_access ::= DOLLARID arrayindex objectchain', 'lop ::= LOGOP', + 'lop ::= SLOGOP', 'tlop ::= TLOGOP', 'scond ::= SINGLECOND', + 'array ::= OPENB arrayelements CLOSEB', 'arrayelements ::= arrayelement', + 'arrayelements ::= arrayelements COMMA arrayelement', 'arrayelements ::=', + 'arrayelement ::= value APTR expr', 'arrayelement ::= ID APTR expr', + 'arrayelement ::= expr', 'doublequoted_with_quotes ::= QUOTE QUOTE', + 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE', + 'doublequoted ::= doublequoted doublequotedcontent', + 'doublequoted ::= doublequotedcontent', + 'doublequotedcontent ::= BACKTICK variable BACKTICK', + 'doublequotedcontent ::= BACKTICK expr BACKTICK', + 'doublequotedcontent ::= DOLLARID', 'doublequotedcontent ::= LDEL variable RDEL', + 'doublequotedcontent ::= LDEL expr RDEL', 'doublequotedcontent ::= smartytag', + 'doublequotedcontent ::= TEXT',); + + public function tokenName($tokenType) + { + if ($tokenType === 0) { + return 'End of Input'; + } + if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { + return $this->yyTokenName[ $tokenType ]; + } 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 207 "../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 => 1), array(0 => 63, 1 => 2), + array(0 => 63, 1 => 0), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), + array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), array(0 => 67, 1 => 1), + array(0 => 67, 1 => 2), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), + array(0 => 66, 1 => 2), array(0 => 66, 1 => 3), array(0 => 68, 1 => 2), + array(0 => 68, 1 => 0), array(0 => 69, 1 => 1), array(0 => 69, 1 => 1), + array(0 => 65, 1 => 2), array(0 => 65, 1 => 1), array(0 => 70, 1 => 2), + array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), + array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), + array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), array(0 => 70, 1 => 5), + array(0 => 65, 1 => 1), array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), + array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), array(0 => 70, 1 => 6), + array(0 => 70, 1 => 2), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), + array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 8), + array(0 => 79, 1 => 2), array(0 => 79, 1 => 1), array(0 => 70, 1 => 5), + array(0 => 70, 1 => 7), array(0 => 70, 1 => 2), array(0 => 70, 1 => 6), + array(0 => 70, 1 => 8), array(0 => 70, 1 => 6), array(0 => 70, 1 => 8), + array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), array(0 => 70, 1 => 2), + array(0 => 65, 1 => 1), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), + array(0 => 70, 1 => 4), array(0 => 70, 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 => 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 => 2), array(0 => 74, 1 => 3), array(0 => 74, 1 => 3), + array(0 => 74, 1 => 2), array(0 => 74, 1 => 3), array(0 => 74, 1 => 3), + array(0 => 83, 1 => 7), array(0 => 83, 1 => 7), array(0 => 73, 1 => 1), + array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), + array(0 => 73, 1 => 2), array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), + array(0 => 73, 1 => 3), array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), + array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), + array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1), + array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1), + array(0 => 73, 1 => 2), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), + array(0 => 89, 1 => 1), array(0 => 89, 1 => 1), array(0 => 71, 1 => 1), + array(0 => 71, 1 => 1), array(0 => 71, 1 => 3), array(0 => 71, 1 => 1), + array(0 => 71, 1 => 3), array(0 => 71, 1 => 4), array(0 => 71, 1 => 3), + array(0 => 71, 1 => 4), array(0 => 75, 1 => 2), array(0 => 75, 1 => 2), + array(0 => 93, 1 => 2), array(0 => 93, 1 => 0), array(0 => 94, 1 => 2), + array(0 => 94, 1 => 2), array(0 => 94, 1 => 4), array(0 => 94, 1 => 2), + array(0 => 94, 1 => 2), array(0 => 94, 1 => 4), array(0 => 94, 1 => 3), + array(0 => 94, 1 => 5), array(0 => 94, 1 => 3), array(0 => 94, 1 => 3), + array(0 => 94, 1 => 3), array(0 => 94, 1 => 3), array(0 => 94, 1 => 3), + array(0 => 94, 1 => 3), array(0 => 94, 1 => 2), array(0 => 80, 1 => 1), + array(0 => 80, 1 => 1), array(0 => 80, 1 => 2), array(0 => 95, 1 => 1), + array(0 => 95, 1 => 1), array(0 => 95, 1 => 3), array(0 => 92, 1 => 2), + array(0 => 96, 1 => 1), array(0 => 96, 1 => 2), array(0 => 97, 1 => 3), + array(0 => 97, 1 => 3), array(0 => 97, 1 => 5), array(0 => 97, 1 => 6), + array(0 => 97, 1 => 2), array(0 => 88, 1 => 4), array(0 => 98, 1 => 4), + array(0 => 98, 1 => 4), array(0 => 99, 1 => 3), array(0 => 99, 1 => 1), + array(0 => 99, 1 => 0), array(0 => 76, 1 => 3), array(0 => 76, 1 => 2), + array(0 => 100, 1 => 3), array(0 => 100, 1 => 2), array(0 => 81, 1 => 2), + array(0 => 81, 1 => 0), array(0 => 101, 1 => 2), array(0 => 101, 1 => 2), + array(0 => 91, 1 => 1), array(0 => 91, 1 => 2), array(0 => 91, 1 => 1), + array(0 => 91, 1 => 2), array(0 => 91, 1 => 3), array(0 => 86, 1 => 1), + array(0 => 86, 1 => 1), array(0 => 85, 1 => 1), array(0 => 87, 1 => 1), + array(0 => 84, 1 => 3), array(0 => 102, 1 => 1), array(0 => 102, 1 => 3), + array(0 => 102, 1 => 0), array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), + array(0 => 103, 1 => 1), array(0 => 90, 1 => 2), array(0 => 90, 1 => 3), + array(0 => 104, 1 => 2), array(0 => 104, 1 => 1), array(0 => 105, 1 => 3), + array(0 => 105, 1 => 3), array(0 => 105, 1 => 1), array(0 => 105, 1 => 3), + array(0 => 105, 1 => 3), array(0 => 105, 1 => 1), array(0 => 105, 1 => 1),); + + public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 16 => 8, 17 => 8, + 43 => 8, 66 => 8, 67 => 8, 75 => 8, 76 => 8, 80 => 8, 89 => 8, 94 => 8, 95 => 8, + 100 => 8, 104 => 8, 105 => 8, 109 => 8, 111 => 8, 116 => 8, 178 => 8, 183 => 8, + 9 => 9, 10 => 10, 11 => 11, 12 => 12, 15 => 12, 13 => 13, 74 => 13, 14 => 14, + 90 => 14, 92 => 14, 93 => 14, 123 => 14, 18 => 18, 19 => 19, 20 => 20, 22 => 20, + 24 => 20, 21 => 21, 23 => 21, 25 => 21, 26 => 26, 27 => 26, 28 => 28, 29 => 29, + 30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, 36 => 36, 37 => 37, + 38 => 38, 40 => 38, 39 => 39, 41 => 41, 42 => 42, 44 => 44, 45 => 45, 46 => 46, + 47 => 47, 49 => 47, 48 => 48, 50 => 48, 51 => 51, 52 => 52, 53 => 53, 54 => 54, + 55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, 69 => 60, 158 => 60, + 162 => 60, 166 => 60, 167 => 60, 61 => 61, 159 => 61, 165 => 61, 62 => 62, + 63 => 63, 64 => 63, 65 => 65, 143 => 65, 68 => 68, 70 => 70, 71 => 71, 72 => 71, + 73 => 73, 77 => 77, 78 => 78, 79 => 78, 81 => 81, 108 => 81, 82 => 82, 83 => 83, + 84 => 84, 85 => 85, 86 => 86, 87 => 87, 88 => 88, 91 => 91, 96 => 96, 97 => 97, + 98 => 98, 99 => 99, 101 => 101, 102 => 102, 103 => 102, 106 => 106, 107 => 107, + 110 => 110, 112 => 112, 113 => 113, 114 => 114, 115 => 115, 117 => 117, + 118 => 118, 119 => 119, 120 => 120, 121 => 121, 122 => 122, 124 => 124, + 180 => 124, 125 => 125, 126 => 126, 127 => 127, 128 => 128, 129 => 129, + 130 => 130, 138 => 130, 131 => 131, 132 => 132, 133 => 133, 134 => 133, + 136 => 133, 137 => 133, 135 => 135, 139 => 139, 140 => 140, 141 => 141, + 184 => 141, 142 => 142, 144 => 144, 145 => 145, 146 => 146, 147 => 147, + 148 => 148, 149 => 149, 150 => 150, 151 => 151, 152 => 152, 153 => 153, + 154 => 154, 155 => 155, 156 => 156, 157 => 157, 160 => 160, 161 => 161, + 163 => 163, 164 => 164, 168 => 168, 169 => 169, 170 => 170, 171 => 171, + 172 => 172, 173 => 173, 174 => 174, 175 => 175, 176 => 176, 177 => 177, + 179 => 179, 181 => 181, 182 => 182, 185 => 185, 186 => 186, 187 => 187, + 188 => 188, 189 => 188, 191 => 188, 190 => 190, 192 => 192, 193 => 193, + 194 => 194,); + + #line 218 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r0() + { + $this->root_buffer->prepend_array($this, $this->template_prefix); + $this->root_buffer->append_array($this, $this->template_postfix); + $this->_retvalue = $this->root_buffer->to_smarty_php($this); + } + + #line 228 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r1() + { + if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { + $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); + } + } + + #line 235 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r2() + { + if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { + // because of possible code injection + $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); + } + } + + #line 249 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r4() + { + if ($this->compiler->has_code) { + $this->_retvalue = $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor); + } else { + $this->_retvalue = null; + } + $this->compiler->has_variable_string = false; + $this->block_nesting_level = count($this->compiler->_tag_stack); + } + + #line 260 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r5() + { + $this->_retvalue = new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 264 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r6() + { + $code = $this->compiler->compileTag('private_php', + array(array('code' => $this->yystack[ $this->yyidx + 0 ]->minor), + array('type' => $this->lex->phpType)), array()); + if ($this->compiler->has_code && !empty($code)) { + $tmp = ''; + foreach ($this->compiler->prefix_code as $code) { + $tmp .= $code; + } + $this->compiler->prefix_code = array(); + $this->_retvalue = + new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true)); + } else { + $this->_retvalue = null; + } + } + + #line 275 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r7() + { + $this->_retvalue = $this->compiler->processText($this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 279 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r8() + { + $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 283 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r9() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 288 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r10() + { + $this->strip = true; + } + + #line 292 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r11() + { + $this->strip = false; + } + + #line 297 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r12() + { + $this->_retvalue = ''; + } + + #line 301 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r13() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; + } + + #line 305 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r14() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 321 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r18() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; + } + + #line 327 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r19() + { + $var = + trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), + ' $'); + if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { + $this->_retvalue = $this->compiler->compileTag('private_print_expression', array('nocache'), + array('value' => $this->compiler->compileVariable('\'' . + $match[ 1 ] . + '\''))); + } else { + $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), + array('value' => $this->compiler->compileVariable('\'' . + $var . + '\''))); + } + } + + #line 337 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r20() + { + $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), + array('value' => $this->yystack[ $this->yyidx + 0 ]->minor)); + } + + #line 341 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r21() + { + $this->_retvalue = + $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, + array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor)); + } + + #line 364 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r26() + { + $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[ $this->yyidx + + 0 ]->minor), + array('var' => '\'' . + substr($this->yystack[ $this->yyidx + + - 2 ]->minor, + 1) . '\''))); + } + + #line 372 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r28() + { + $this->_retvalue = $this->compiler->compileTag('assign', + array_merge(array(array('value' => $this->yystack[ $this->yyidx + + - 1 ]->minor), + array('var' => '\'' . + substr($this->yystack[ $this->yyidx + + - 3 ]->minor, + 1) . '\'')), + $this->yystack[ $this->yyidx + 0 ]->minor)); + } + + #line 376 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r29() + { + $this->_retvalue = $this->compiler->compileTag('assign', + array_merge(array(array('value' => $this->yystack[ $this->yyidx + + - 1 ]->minor), + array('var' => $this->yystack[ $this->yyidx + + - 3 ]->minor[ 'var' ])), + $this->yystack[ $this->yyidx + 0 ]->minor), + array('smarty_internal_index' => $this->yystack[ $this->yyidx + + - 3 ]->minor[ 'smarty_internal_index' ])); + } + + #line 381 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r30() + { + $tag = + trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length)); + if ($tag == 'strip') { + $this->strip = true; + $this->_retvalue = null;; + } else { + if (defined($tag)) { + if ($this->security) { + $this->security->isTrustedConstant($tag, $this->compiler); + } + $this->_retvalue = + $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag)); + } else { + if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { + $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array("'nocache'")); + } else { + $this->_retvalue = $this->compiler->compileTag($tag, array()); + } + } + } + } + + #line 403 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r31() + { + 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 413 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r32() + { + 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 426 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r33() + { + 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 438 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r34() + { + $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 443 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r35() + { + $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 448 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r36() + { + $this->_retvalue = $this->compiler->compileTag('make_nocache', array(array('var' => '\'' . + substr($this->yystack[ $this->yyidx + + 0 ]->minor, + 1) . '\''))); + } + + #line 453 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r37() + { + $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); + $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), + array('if condition' => $this->yystack[ $this->yyidx + + 0 ]->minor)); + } + + #line 458 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r38() + { + $tag = trim(substr($this->yystack[ $this->yyidx + - 2 ]->minor, $this->lex->ldel_length)); + $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, + $this->yystack[ $this->yyidx + 0 ]->minor, + array('if condition' => $this->yystack[ $this->yyidx + + - 1 ]->minor)); + } + + #line 463 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r39() + { + $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); + $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), + array('if condition' => $this->yystack[ $this->yyidx + + 0 ]->minor)); + } + + #line 474 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r41() + { + $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, + array(array('start' => $this->yystack[ $this->yyidx + + - 6 ]->minor), + array('ifexp' => $this->yystack[ $this->yyidx + + - 4 ]->minor), + array('var' => $this->yystack[ $this->yyidx + + - 2 ]->minor), + array('step' => $this->yystack[ $this->yyidx + + - 1 ]->minor))), + 1); + } + + #line 478 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r42() + { + $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 486 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r44() + { + $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, + array(array('start' => $this->yystack[ $this->yyidx + + - 3 ]->minor), + array('to' => $this->yystack[ $this->yyidx + + - 1 ]->minor))), + 0); + } + + #line 490 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r45() + { + $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, + array(array('start' => $this->yystack[ $this->yyidx + + - 5 ]->minor), + array('to' => $this->yystack[ $this->yyidx + + - 3 ]->minor), + array('step' => $this->yystack[ $this->yyidx + + - 1 ]->minor))), + 0); + } + + #line 495 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r46() + { + $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 500 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r47() + { + $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, + array(array('from' => $this->yystack[ $this->yyidx + + - 3 ]->minor), + array('item' => $this->yystack[ $this->yyidx + + - 1 ]->minor)))); + } + + #line 504 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r48() + { + $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, + array(array('from' => $this->yystack[ $this->yyidx + + - 5 ]->minor), + array('item' => $this->yystack[ $this->yyidx + + - 1 ]->minor), + array('key' => $this->yystack[ $this->yyidx + + - 3 ]->minor)))); + } + + #line 517 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r51() + { + $this->_retvalue = $this->compiler->compileTag('setfilter', array(), + array('modifier_list' => array(array_merge(array($this->yystack[ $this->yyidx + + - 1 ]->minor), + $this->yystack[ $this->yyidx + + 0 ]->minor)))); + } + + #line 521 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r52() + { + $this->_retvalue = $this->compiler->compileTag('setfilter', array(), + array('modifier_list' => array_merge(array(array_merge(array($this->yystack[ $this->yyidx + + - 2 ]->minor), + $this->yystack[ $this->yyidx + + - 1 ]->minor)), + $this->yystack[ $this->yyidx + + 0 ]->minor))); + } + + #line 526 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r53() + { + $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.'); + if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') { + // {$smarty.block.child} + $this->_retvalue = $this->compiler->compileTag('block_child', array());; + } else { + // {$smarty.block.parent} + $this->_retvalue = $this->compiler->compileTag('block_parent', array());; + } + } + + #line 539 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r54() + { + $tag = + trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), + ' /'); + if ($tag == 'strip') { + $this->strip = false; + $this->_retvalue = null; + } else { + $this->_retvalue = $this->compiler->compileTag($tag . 'close', array()); + } + } + + #line 548 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r55() + { + $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array()); + } + + #line 552 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r56() + { + $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor . 'close', array(), + array('modifier_list' => $this->yystack[ $this->yyidx + + 0 ]->minor)); + } + + #line 557 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r57() + { + $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor . 'close', array(), + array('object_method' => $this->yystack[ $this->yyidx + + 0 ]->minor)); + } + + #line 561 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r58() + { + $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor . 'close', array(), + array('object_method' => $this->yystack[ $this->yyidx + + - 1 ]->minor, + 'modifier_list' => $this->yystack[ $this->yyidx + + 0 ]->minor)); + } + + #line 569 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r59() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; + $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 575 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r60() + { + $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 580 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r61() + { + $this->_retvalue = array(); + } + + #line 585 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r62() + { + if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { + if ($this->security) { + $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); + } + $this->_retvalue = + array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); + } else { + $this->_retvalue = + array($this->yystack[ $this->yyidx + - 2 ]->minor => '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . + '\''); + } + } + + #line 596 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r63() + { + $this->_retvalue = + array(trim($this->yystack[ $this->yyidx + - 1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx + + 0 ]->minor); + } + + #line 604 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r65() + { + $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; + } + + #line 616 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r68() + { + $this->_retvalue = + array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 629 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r70() + { + $this->yystack[ $this->yyidx + - 2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor; + $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor; + } + + #line 634 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r71() + { + $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'', + 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 641 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r73() + { + $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor, + 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 665 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r77() + { + $this->_retvalue = + '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '://' . + $this->yystack[ $this->yyidx + 0 ]->minor . '\')'; + } + + #line 670 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r78() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + - 2 ]->minor . trim($this->yystack[ $this->yyidx + - 1 ]->minor) . + $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 684 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r81() + { + $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), + array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor, + 'modifierlist' => $this->yystack[ $this->yyidx + + 0 ]->minor)); + } + + #line 690 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r82() + { + $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 694 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r83() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . + $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 698 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r84() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; + } + + #line 702 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r85() + { + $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . + $this->yystack[ $this->yyidx + 0 ]->minor . ')'; + } + + #line 706 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r86() + { + $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',(array)' . + $this->yystack[ $this->yyidx + 0 ]->minor . ')'; + } + + #line 714 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r87() + { + $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 718 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r88() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->yystack[ $this->yyidx + - 2 ]->minor . ' : ' . + $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 733 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r91() + { + $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 754 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r96() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + - 2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 758 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r97() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.'; + } + + #line 762 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r98() + { + $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 767 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r99() + { + 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 784 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r101() + { + $this->_retvalue = "(" . $this->yystack[ $this->yyidx + - 1 ]->minor . ")"; + } + + #line 788 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r102() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . + $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 806 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r106() + { + $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 817 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r107() + { + $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 834 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r110() + { + 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 853 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r112() + { + $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 864 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r113() + { + $this->_retvalue = + $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''); + } + + #line 867 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r114() + { + 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 880 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r115() + { + $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[ $this->yyidx + - 2 ]->minor . ']->' . + $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 890 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r117() + { + $this->_retvalue = + $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 1 ]->minor . "'"); + } + + #line 894 "../smarty/lexer/smarty_internal_templateparser.y" + 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 898 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r119() + { + $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 1 ]->minor); + } + + #line 902 "../smarty/lexer/smarty_internal_templateparser.y" + 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 906 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r121() + { + $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'', + 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 909 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r122() + { + $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 1 ]->minor, + 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 922 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r124() + { + return; + } + + #line 928 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r125() + { + $this->_retvalue = + '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') . + ']'; + } + + #line 931 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r126() + { + $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']'; + } + + #line 935 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r127() + { + $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . '->' . + $this->yystack[ $this->yyidx + 0 ]->minor . ']'; + } + + #line 939 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r128() + { + $this->_retvalue = "['" . $this->yystack[ $this->yyidx + 0 ]->minor . "']"; + } + + #line 943 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r129() + { + $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; + } + + #line 948 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r130() + { + $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; + } + + #line 953 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r131() + { + $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . + $this->yystack[ $this->yyidx + + - 1 ]->minor . + '\'][\'index\']') . + ']'; + } + + #line 957 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r132() + { + $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . + $this->yystack[ $this->yyidx + + - 3 ]->minor . + '\'][\'' . + $this->yystack[ $this->yyidx + + - 1 ]->minor . + '\']') . ']'; + } + + #line 960 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r133() + { + $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; + } + + #line 966 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r135() + { + $this->_retvalue = '[' . $this->compiler->compileVariable('\'' . + substr($this->yystack[ $this->yyidx + - 1 ]->minor, + 1) . '\'') . ']';; + } + + #line 982 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r139() + { + $this->_retvalue = '[]'; + } + + #line 992 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r140() + { + $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''; + } + + #line 996 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r141() + { + $this->_retvalue = "''"; + } + + #line 1001 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r142() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + - 1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1009 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r144() + { + $var = + trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), + ' $'); + $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\''); + } + + #line 1015 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r145() + { + $this->_retvalue = '(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; + } + + #line 1022 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r146() + { + 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 1031 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r147() + { + $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1036 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r148() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1041 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r149() + { + 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 1048 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r150() + { + 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 1055 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r151() + { + if ($this->security) { + $this->compiler->trigger_template_error(self::Err2); + } + $this->_retvalue = + '->{' . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; + } + + #line 1062 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r152() + { + 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 1070 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r153() + { + $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1078 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r154() + { + $this->_retvalue = $this->compiler->compilePHPFunctionCall($this->yystack[ $this->yyidx + - 3 ]->minor, + $this->yystack[ $this->yyidx + - 1 ]->minor); + } + + #line 1086 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r155() + { + 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 1093 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r156() + { + 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 1104 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r157() + { + $this->_retvalue = + array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor)); + } + + #line 1121 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r160() + { + $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 1125 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r161() + { + $this->_retvalue = + array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor)); + } + + #line 1133 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r163() + { + $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 1141 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r164() + { + $this->_retvalue = + array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 1160 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r168() + { + $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method'); + } + + #line 1165 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r169() + { + $this->_retvalue = + array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method'); + } + + #line 1170 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r170() + { + $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, ''); + } + + #line 1175 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r171() + { + $this->_retvalue = + array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); + } + + #line 1180 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r172() + { + $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor, + $this->yystack[ $this->yyidx + - 1 ]->minor . + $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); + } + + #line 1186 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r173() + { + $this->_retvalue = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' '; + } + + #line 1190 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r174() + { + 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 1209 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r175() + { + 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 1222 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r176() + { + 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 1236 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r177() + { + $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; + } + + #line 1244 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r179() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1252 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r181() + { + $this->_retvalue = + $this->yystack[ $this->yyidx + - 2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1256 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r182() + { + $this->_retvalue = + '\'' . $this->yystack[ $this->yyidx + - 2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor; + } + + #line 1272 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r185() + { + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor->to_smarty_php($this); + } + + #line 1277 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r186() + { + $this->yystack[ $this->yyidx + - 1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); + $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; + } + + #line 1282 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r187() + { + $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 1286 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r188() + { + $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + - 1 ]->minor); + } + + #line 1294 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r190() + { + $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' . + substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . + '\']->value'); + } + + #line 1302 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r192() + { + $this->_retvalue = + new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'); + } + + #line 1306 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r193() + { + $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor); + } + + #line 1310 "../smarty/lexer/smarty_internal_templateparser.y" + function yy_r194() + { + $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 200 "../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 193 "../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/library/Smarty/libs/sysplugins/smarty_internal_testinstall.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php index 72d9a5211..7cb575573 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_testinstall.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php @@ -20,9 +20,10 @@ class Smarty_Internal_TestInstall * diagnose Smarty setup * If $errors is secified, the diagnostic report will be appended to the array, rather than being output. * - * @param array $errors array to push results into rather than outputting them + * @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 + * @return bool status, true if everything is fine, false else */ public static function testInstall(Smarty $smarty, &$errors = null) { @@ -358,151 +359,146 @@ class Smarty_Internal_TestInstall // test if sysplugins are available $source = SMARTY_SYSPLUGINS_DIR; if (is_dir($source)) { - $expectedSysplugins = array('smartycompilerexception.php' => true, - 'smartyexception.php' => true, - 'smarty_cacheresource.php' => true, - 'smarty_cacheresource_custom.php' => true, - 'smarty_cacheresource_keyvaluestore.php' => true, - 'smarty_data.php' => true, - 'smarty_internal_cacheresource_file.php' => true, - 'smarty_internal_compilebase.php' => true, - 'smarty_internal_compile_append.php' => true, - 'smarty_internal_compile_assign.php' => true, - 'smarty_internal_compile_block.php' => true, - 'smarty_internal_compile_break.php' => true, - 'smarty_internal_compile_call.php' => true, - 'smarty_internal_compile_capture.php' => true, - 'smarty_internal_compile_config_load.php' => true, - 'smarty_internal_compile_continue.php' => true, - 'smarty_internal_compile_debug.php' => true, - 'smarty_internal_compile_eval.php' => true, - 'smarty_internal_compile_extends.php' => true, - 'smarty_internal_compile_for.php' => true, - 'smarty_internal_compile_foreach.php' => true, - 'smarty_internal_compile_function.php' => true, - 'smarty_internal_compile_if.php' => true, - 'smarty_internal_compile_include.php' => true, - 'smarty_internal_compile_include_php.php' => true, - 'smarty_internal_compile_insert.php' => true, - 'smarty_internal_compile_ldelim.php' => true, - 'smarty_internal_compile_nocache.php' => true, - 'smarty_internal_compile_private_block_plugin.php' => true, - 'smarty_internal_compile_private_foreachsection.php' => true, - 'smarty_internal_compile_private_function_plugin.php' => true, - 'smarty_internal_compile_private_modifier.php' => true, + $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_break.php' => true, + 'smarty_internal_compile_call.php' => true, + 'smarty_internal_compile_capture.php' => true, + 'smarty_internal_compile_config_load.php' => true, + 'smarty_internal_compile_continue.php' => true, + 'smarty_internal_compile_debug.php' => true, + 'smarty_internal_compile_eval.php' => true, + 'smarty_internal_compile_extends.php' => true, + 'smarty_internal_compile_for.php' => true, + 'smarty_internal_compile_foreach.php' => true, + 'smarty_internal_compile_function.php' => true, + 'smarty_internal_compile_if.php' => true, + 'smarty_internal_compile_include.php' => true, + 'smarty_internal_compile_include_php.php' => true, + 'smarty_internal_compile_insert.php' => true, + 'smarty_internal_compile_ldelim.php' => true, + 'smarty_internal_compile_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_php.php' => true, - 'smarty_internal_compile_private_print_expression.php' => true, - 'smarty_internal_compile_private_registered_block.php' => true, - 'smarty_internal_compile_private_registered_function.php' => true, - 'smarty_internal_compile_private_special_variable.php' => true, - 'smarty_internal_compile_rdelim.php' => true, - 'smarty_internal_compile_section.php' => true, - 'smarty_internal_compile_setfilter.php' => true, - 'smarty_internal_compile_shared_inheritance.php' => true, - 'smarty_internal_compile_while.php' => true, - 'smarty_internal_configfilelexer.php' => true, - 'smarty_internal_configfileparser.php' => true, - 'smarty_internal_config_file_compiler.php' => true, - 'smarty_internal_data.php' => true, - 'smarty_internal_debug.php' => true, - 'smarty_internal_extension_clear.php' => true, - 'smarty_internal_extension_handler.php' => true, - 'smarty_internal_method_addautoloadfilters.php' => true, - 'smarty_internal_method_adddefaultmodifiers.php' => true, - 'smarty_internal_method_append.php' => true, - 'smarty_internal_method_appendbyref.php' => true, - 'smarty_internal_method_assignbyref.php' => true, - 'smarty_internal_method_assignglobal.php' => true, - 'smarty_internal_method_clearallassign.php' => true, - 'smarty_internal_method_clearallcache.php' => true, - 'smarty_internal_method_clearassign.php' => true, - 'smarty_internal_method_clearcache.php' => true, - 'smarty_internal_method_clearcompiledtemplate.php' => true, - 'smarty_internal_method_clearconfig.php' => true, - 'smarty_internal_method_compileallconfig.php' => true, - 'smarty_internal_method_compilealltemplates.php' => true, - 'smarty_internal_method_configload.php' => true, - 'smarty_internal_method_createdata.php' => true, - 'smarty_internal_method_getautoloadfilters.php' => true, - 'smarty_internal_method_getconfigvars.php' => true, - 'smarty_internal_method_getdebugtemplate.php' => true, - 'smarty_internal_method_getdefaultmodifiers.php' => true, - 'smarty_internal_method_getregisteredobject.php' => true, - 'smarty_internal_method_getstreamvariable.php' => true, - 'smarty_internal_method_gettags.php' => true, - 'smarty_internal_method_gettemplatevars.php' => true, - 'smarty_internal_method_loadfilter.php' => true, - 'smarty_internal_method_loadplugin.php' => true, - 'smarty_internal_method_mustcompile.php' => true, - 'smarty_internal_method_registercacheresource.php' => true, - 'smarty_internal_method_registerclass.php' => true, - 'smarty_internal_method_registerdefaultconfighandler.php' => true, - 'smarty_internal_method_registerdefaultpluginhandler.php' => true, + 'smarty_internal_compile_private_object_function.php' => true, + 'smarty_internal_compile_private_php.php' => true, + 'smarty_internal_compile_private_print_expression.php' => true, + 'smarty_internal_compile_private_registered_block.php' => true, + 'smarty_internal_compile_private_registered_function.php' => true, + 'smarty_internal_compile_private_special_variable.php' => true, + 'smarty_internal_compile_rdelim.php' => true, + 'smarty_internal_compile_section.php' => true, + 'smarty_internal_compile_setfilter.php' => true, + 'smarty_internal_compile_shared_inheritance.php' => true, + 'smarty_internal_compile_while.php' => true, + 'smarty_internal_configfilelexer.php' => true, + 'smarty_internal_configfileparser.php' => true, + 'smarty_internal_config_file_compiler.php' => true, + 'smarty_internal_data.php' => true, 'smarty_internal_debug.php' => true, + 'smarty_internal_extension_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_loadfilter.php' => true, + 'smarty_internal_method_loadplugin.php' => true, + 'smarty_internal_method_mustcompile.php' => true, + 'smarty_internal_method_registercacheresource.php' => true, + 'smarty_internal_method_registerclass.php' => true, + 'smarty_internal_method_registerdefaultconfighandler.php' => true, + 'smarty_internal_method_registerdefaultpluginhandler.php' => true, 'smarty_internal_method_registerdefaulttemplatehandler.php' => true, - 'smarty_internal_method_registerfilter.php' => true, - 'smarty_internal_method_registerobject.php' => true, - 'smarty_internal_method_registerplugin.php' => true, - 'smarty_internal_method_registerresource.php' => true, - 'smarty_internal_method_setautoloadfilters.php' => true, - 'smarty_internal_method_setdebugtemplate.php' => true, - 'smarty_internal_method_setdefaultmodifiers.php' => true, - 'smarty_internal_method_unloadfilter.php' => true, - 'smarty_internal_method_unregistercacheresource.php' => true, - 'smarty_internal_method_unregisterfilter.php' => true, - 'smarty_internal_method_unregisterobject.php' => true, - 'smarty_internal_method_unregisterplugin.php' => true, - 'smarty_internal_method_unregisterresource.php' => true, - 'smarty_internal_nocache_insert.php' => true, - 'smarty_internal_parsetree.php' => true, - 'smarty_internal_parsetree_code.php' => true, - 'smarty_internal_parsetree_dq.php' => true, - 'smarty_internal_parsetree_dqcontent.php' => true, - 'smarty_internal_parsetree_tag.php' => true, - 'smarty_internal_parsetree_template.php' => true, - 'smarty_internal_parsetree_text.php' => true, - 'smarty_internal_resource_eval.php' => true, - 'smarty_internal_resource_extends.php' => true, - 'smarty_internal_resource_file.php' => true, - 'smarty_internal_resource_php.php' => true, - 'smarty_internal_resource_registered.php' => true, - 'smarty_internal_resource_stream.php' => true, - 'smarty_internal_resource_string.php' => true, - 'smarty_internal_runtime_cachemodify.php' => true, - 'smarty_internal_runtime_codeframe.php' => true, - 'smarty_internal_runtime_filterhandler.php' => true, - 'smarty_internal_runtime_foreach.php' => true, - 'smarty_internal_runtime_getincludepath.php' => true, - 'smarty_internal_runtime_hhvm.php' => true, - 'smarty_internal_runtime_inheritance.php' => true, - 'smarty_internal_runtime_subtemplate.php' => true, - 'smarty_internal_runtime_tplfunction.php' => true, - 'smarty_internal_runtime_updatecache.php' => true, - 'smarty_internal_runtime_updatescope.php' => true, - 'smarty_internal_runtime_validatecompiled.php' => true, - 'smarty_internal_runtime_var.php' => true, - 'smarty_internal_runtime_writefile.php' => true, - 'smarty_internal_smartytemplatecompiler.php' => true, - 'smarty_internal_template.php' => true, - 'smarty_internal_templatebase.php' => true, - 'smarty_internal_templatecompilerbase.php' => true, - 'smarty_internal_templatelexer.php' => true, - 'smarty_internal_templateparser.php' => true, - 'smarty_internal_testinstall.php' => true, - 'smarty_internal_undefined.php' => true, - 'smarty_resource.php' => true, - 'smarty_resource_custom.php' => true, - 'smarty_resource_recompiled.php' => true, - 'smarty_resource_uncompiled.php' => true, - 'smarty_security.php' => true, - 'smarty_template_cached.php' => true, - 'smarty_template_compiled.php' => true, - 'smarty_template_config.php' => true, - 'smarty_template_resource_base.php' => true, - 'smarty_template_source.php' => true, - 'smarty_undefined_variable.php' => true, - 'smarty_variable.php' => true,); + 'smarty_internal_method_registerfilter.php' => true, + 'smarty_internal_method_registerobject.php' => true, + 'smarty_internal_method_registerplugin.php' => true, + 'smarty_internal_method_registerresource.php' => true, + 'smarty_internal_method_setautoloadfilters.php' => true, + 'smarty_internal_method_setdebugtemplate.php' => true, + 'smarty_internal_method_setdefaultmodifiers.php' => true, + 'smarty_internal_method_unloadfilter.php' => true, + 'smarty_internal_method_unregistercacheresource.php' => true, + 'smarty_internal_method_unregisterfilter.php' => true, + 'smarty_internal_method_unregisterobject.php' => true, + 'smarty_internal_method_unregisterplugin.php' => true, + 'smarty_internal_method_unregisterresource.php' => true, + 'smarty_internal_nocache_insert.php' => true, + 'smarty_internal_parsetree.php' => true, + 'smarty_internal_parsetree_code.php' => true, + 'smarty_internal_parsetree_dq.php' => true, + 'smarty_internal_parsetree_dqcontent.php' => true, + 'smarty_internal_parsetree_tag.php' => true, + 'smarty_internal_parsetree_template.php' => true, + 'smarty_internal_parsetree_text.php' => true, + 'smarty_internal_resource_eval.php' => true, + 'smarty_internal_resource_extends.php' => true, + 'smarty_internal_resource_file.php' => true, + 'smarty_internal_resource_php.php' => true, + 'smarty_internal_resource_registered.php' => true, + 'smarty_internal_resource_stream.php' => true, + 'smarty_internal_resource_string.php' => true, + 'smarty_internal_runtime_cachemodify.php' => true, + 'smarty_internal_runtime_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()) { @@ -540,30 +536,28 @@ class Smarty_Internal_TestInstall $source = SMARTY_PLUGINS_DIR; if (is_dir($source)) { $expectedPlugins = - array('block.textformat.php' => true, 'function.counter.php' => true, - 'function.cycle.php' => true, 'function.fetch.php' => true, - 'function.html_checkboxes.php' => true, 'function.html_image.php' => true, - 'function.html_options.php' => true, 'function.html_radios.php' => true, - 'function.html_select_date.php' => true, 'function.html_select_time.php' => true, - 'function.html_table.php' => true, 'function.mailto.php' => true, - 'function.math.php' => true, 'modifier.capitalize.php' => true, - 'modifier.date_format.php' => true, 'modifier.debug_print_var.php' => true, - 'modifier.escape.php' => true, 'modifier.regex_replace.php' => true, - 'modifier.replace.php' => true, 'modifier.spacify.php' => true, - 'modifier.truncate.php' => true, 'modifiercompiler.cat.php' => true, - 'modifiercompiler.count_characters.php' => true, 'modifiercompiler.count_paragraphs.php' => true, - 'modifiercompiler.count_sentences.php' => true, 'modifiercompiler.count_words.php' => true, - 'modifiercompiler.default.php' => true, 'modifiercompiler.escape.php' => true, - 'modifiercompiler.from_charset.php' => true, 'modifiercompiler.indent.php' => true, - 'modifiercompiler.lower.php' => true, 'modifiercompiler.noprint.php' => true, - 'modifiercompiler.string_format.php' => true, 'modifiercompiler.strip.php' => true, - 'modifiercompiler.strip_tags.php' => true, 'modifiercompiler.to_charset.php' => true, - 'modifiercompiler.unescape.php' => true, 'modifiercompiler.upper.php' => true, - 'modifiercompiler.wordwrap.php' => true, 'outputfilter.trimwhitespace.php' => true, - 'shared.escape_special_chars.php' => true, 'shared.literal_compiler_param.php' => true, - 'shared.make_timestamp.php' => true, 'shared.mb_str_replace.php' => true, - 'shared.mb_unicode.php' => true, 'shared.mb_wordwrap.php' => true, - 'variablefilter.htmlspecialchars.php' => true,); + array('block.textformat.php' => true, 'function.counter.php' => true, 'function.cycle.php' => true, + 'function.fetch.php' => true, 'function.html_checkboxes.php' => true, + 'function.html_image.php' => true, 'function.html_options.php' => true, + 'function.html_radios.php' => true, 'function.html_select_date.php' => true, + 'function.html_select_time.php' => true, 'function.html_table.php' => true, + 'function.mailto.php' => true, 'function.math.php' => true, 'modifier.capitalize.php' => true, + 'modifier.date_format.php' => true, 'modifier.debug_print_var.php' => true, + 'modifier.escape.php' => true, 'modifier.regex_replace.php' => true, + 'modifier.replace.php' => true, 'modifier.spacify.php' => true, 'modifier.truncate.php' => true, + 'modifiercompiler.cat.php' => true, 'modifiercompiler.count_characters.php' => true, + 'modifiercompiler.count_paragraphs.php' => true, 'modifiercompiler.count_sentences.php' => true, + 'modifiercompiler.count_words.php' => true, 'modifiercompiler.default.php' => true, + 'modifiercompiler.escape.php' => true, 'modifiercompiler.from_charset.php' => true, + 'modifiercompiler.indent.php' => true, 'modifiercompiler.lower.php' => true, + 'modifiercompiler.noprint.php' => true, 'modifiercompiler.string_format.php' => true, + 'modifiercompiler.strip.php' => true, 'modifiercompiler.strip_tags.php' => true, + 'modifiercompiler.to_charset.php' => true, 'modifiercompiler.unescape.php' => true, + 'modifiercompiler.upper.php' => true, 'modifiercompiler.wordwrap.php' => true, + 'outputfilter.trimwhitespace.php' => true, 'shared.escape_special_chars.php' => true, + 'shared.literal_compiler_param.php' => true, 'shared.make_timestamp.php' => true, + 'shared.mb_str_replace.php' => true, 'shared.mb_unicode.php' => true, + 'shared.mb_wordwrap.php' => true, 'variablefilter.htmlspecialchars.php' => true,); $iterator = new DirectoryIterator($source); foreach ($iterator as $file) { if (!$file->isDot()) { diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php new file mode 100644 index 000000000..d6f4bf62e --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php @@ -0,0 +1,68 @@ +<?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"); + } + } +}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_resource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php index 93d9fa7a3..ea673ead1 100644 --- a/library/Smarty/libs/sysplugins/smarty_resource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php @@ -13,6 +13,10 @@ * * @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 { @@ -35,12 +39,12 @@ abstract class Smarty_Resource * * @var array */ - public static $sysplugins = array('file' => 'smarty_internal_resource_file.php', - 'string' => 'smarty_internal_resource_string.php', + 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'); + 'stream' => 'smarty_internal_resource_stream.php', + 'eval' => 'smarty_internal_resource_eval.php', + 'php' => 'smarty_internal_resource_php.php'); /** * Flag if resource does implement populateCompiledFilepath() method @@ -50,27 +54,6 @@ abstract class Smarty_Resource public $hasCompiledHandler = false; /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = 'Smarty_Internal_Templatelexer'; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = 'Smarty_Internal_Templateparser'; - - /** * Load template's source into current template object * * @param Smarty_Template_Source $source source object @@ -131,7 +114,7 @@ abstract class Smarty_Resource */ public function getBasename(Smarty_Template_Source $source) { - return null; + return basename(preg_replace('![^\w]+!', '_', $source->name)); } /** @@ -146,28 +129,28 @@ abstract class Smarty_Resource public static function load(Smarty $smarty, $type) { // try smarty's cache - if (isset($smarty->_cache['resource_handlers'][$type])) { - return $smarty->_cache['resource_handlers'][$type]; + if (isset($smarty->_cache[ 'resource_handlers' ][ $type ])) { + return $smarty->_cache[ 'resource_handlers' ][ $type ]; } // try registered resource - if (isset($smarty->registered_resources[$type])) { - return $smarty->_cache['resource_handlers'][$type] = - $smarty->registered_resources[$type] instanceof Smarty_Resource ? $smarty->registered_resources[$type] : - new Smarty_Internal_Resource_Registered(); + if (isset($smarty->registered_resources[ $type ])) { + return $smarty->_cache[ 'resource_handlers' ][ $type ] = + $smarty->registered_resources[ $type ] instanceof Smarty_Resource ? + $smarty->registered_resources[ $type ] : new Smarty_Internal_Resource_Registered(); } // try sysplugins dir - if (isset(self::$sysplugins[$type])) { + if (isset(self::$sysplugins[ $type ])) { $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type); - return $smarty->_cache['resource_handlers'][$type] = new $_resource_class(); + return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class(); } // try plugins dir $_resource_class = 'Smarty_Resource_' . ucfirst($type); if ($smarty->loadPlugin($_resource_class)) { if (class_exists($_resource_class, false)) { - return $smarty->_cache['resource_handlers'][$type] = new $_resource_class(); + return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class(); } else { $smarty->registerResource($type, array("smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp", @@ -184,7 +167,7 @@ abstract class Smarty_Resource if (is_object($smarty->security_policy)) { $smarty->security_policy->isTrustedStream($type); } - return $smarty->_cache['resource_handlers'][$type] = new Smarty_Internal_Resource_Stream(); + return $smarty->_cache[ 'resource_handlers' ][ $type ] = new Smarty_Internal_Resource_Stream(); } // TODO: try default_(template|config)_handler @@ -205,8 +188,8 @@ abstract class Smarty_Resource 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])); + $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 @@ -226,16 +209,16 @@ abstract class Smarty_Resource */ public static function getUniqueTemplateName($obj, $template_resource) { - $smarty = $obj->_objType == 2 ? $obj->smarty : $obj; + $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->_objType == 2 && $_file_is_dotted && + $_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 = dirname($obj->source->filepath) . DS . $name; + $name = $smarty->_realpath(dirname($obj->parent->source->filepath) . $smarty->ds . $name); } return $resource->buildUniqueResourceName($smarty, $name); } @@ -246,7 +229,8 @@ abstract class Smarty_Resource * * @return bool */ - public function checkTimestamps() { + public function checkTimestamps() + { return true; } diff --git a/library/Smarty/libs/sysplugins/smarty_resource_custom.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php index 619f2d6f0..619f2d6f0 100644 --- a/library/Smarty/libs/sysplugins/smarty_resource_custom.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php new file mode 100644 index 000000000..7e51d1b1d --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php @@ -0,0 +1,92 @@ +<?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 + */ + 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 new file mode 100644 index 000000000..554f3aea3 --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php @@ -0,0 +1,49 @@ +<?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/library/Smarty/libs/sysplugins/smarty_security.php b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php index 9d48bcb21..4f75f7529 100644 --- a/library/Smarty/libs/sysplugins/smarty_security.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php @@ -258,6 +258,8 @@ class Smarty_Security public function __construct($smarty) { $this->smarty = $smarty; + $this->smarty->_cache[ 'template_dir_new' ] = true; + $this->smarty->_cache[ 'config_dir_new' ] = true; } /** @@ -316,25 +318,25 @@ class Smarty_Security */ public function isTrustedStaticClassAccess($class_name, $params, $compiler) { - if (!isset($params[2])) { + if (!isset($params[ 2 ])) { // fall back return $this->isTrustedStaticClass($class_name, $compiler); } - if ($params[2] == 'method') { + if ($params[ 2 ] == 'method') { $allowed = $this->trusted_static_methods; - $name = substr($params[0], 0, strpos($params[0], '(')); + $name = substr($params[ 0 ], 0, strpos($params[ 0 ], '(')); } else { $allowed = $this->trusted_static_properties; // strip '$' - $name = substr($params[0], 1); + $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])) + if (isset($allowed[ $class_name ]) && + (empty($allowed[ $class_name ]) || in_array($name, $allowed[ $class_name ])) ) { return true; } @@ -377,11 +379,11 @@ class Smarty_Security public function isTrustedTag($tag_name, $compiler) { // check for internal always required tags - if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', - 'private_function_plugin', 'private_object_block_function', - 'private_object_function', 'private_registered_function', - 'private_registered_block', 'private_special_variable', - 'private_print_expression', 'private_modifier'))) { + if (in_array($tag_name, + array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', + 'private_object_block_function', 'private_object_function', 'private_registered_function', + 'private_registered_block', 'private_special_variable', 'private_print_expression', + 'private_modifier'))) { return true; } // check security settings @@ -414,7 +416,8 @@ class Smarty_Security 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); + $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? @@ -440,14 +443,16 @@ class Smarty_Security if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) { return true; } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", null, true); + $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) + !in_array($modifier_name, $this->disabled_modifiers) ) { return true; } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", null, true); + $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? @@ -467,7 +472,7 @@ class Smarty_Security return true; } if (!empty($this->trusted_constants)) { - if (!in_array($const, $this->trusted_constants)) { + if (!in_array(strtolower($const), $this->trusted_constants)) { $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted"); return false; } @@ -510,55 +515,55 @@ class Smarty_Security { if ($this->_include_path_status !== $this->smarty->use_include_path) { foreach ($this->_include_dir as $directory) { - unset($this->_resource_dir[$directory]); + unset($this->_resource_dir[ $directory ]); } if ($this->smarty->use_include_path) { $this->_include_dir = array(); $_dirs = $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty); foreach ($_dirs as $directory) { $this->_include_dir[] = $directory; - $this->_resource_dir[$directory] = true; + $this->_resource_dir[ $directory ] = true; } } $this->_include_path_status = $this->smarty->use_include_path; } if ($isConfig !== true && - (!isset($this->smarty->_cache['template_dir_new']) || $this->smarty->_cache['template_dir_new']) + (!isset($this->smarty->_cache[ 'template_dir_new' ]) || $this->smarty->_cache[ 'template_dir_new' ]) ) { $_dir = $this->smarty->getTemplateDir(); if ($this->_template_dir !== $_dir) { foreach ($this->_template_dir as $directory) { - unset($this->_resource_dir[$directory]); + unset($this->_resource_dir[ $directory ]); } foreach ($_dir as $directory) { - $this->_resource_dir[$directory] = true; + $this->_resource_dir[ $directory ] = true; } $this->_template_dir = $_dir; } - $this->smarty->_cache['template_dir_new'] = false; + $this->smarty->_cache[ 'template_dir_new' ] = false; } if ($isConfig !== false && - (!isset($this->smarty->_cache['config_dir_new']) || $this->smarty->_cache['config_dir_new']) + (!isset($this->smarty->_cache[ 'config_dir_new' ]) || $this->smarty->_cache[ 'config_dir_new' ]) ) { $_dir = $this->smarty->getConfigDir(); if ($this->_config_dir !== $_dir) { foreach ($this->_config_dir as $directory) { - unset($this->_resource_dir[$directory]); + unset($this->_resource_dir[ $directory ]); } foreach ($_dir as $directory) { - $this->_resource_dir[$directory] = true; + $this->_resource_dir[ $directory ] = true; } $this->_config_dir = $_dir; } - $this->smarty->_cache['config_dir_new'] = false; + $this->smarty->_cache[ 'config_dir_new' ] = false; } if ($this->_secure_dir !== (array) $this->secure_dir) { foreach ($this->_secure_dir as $directory) { - unset($this->_resource_dir[$directory]); + unset($this->_resource_dir[ $directory ]); } foreach ((array) $this->secure_dir as $directory) { - $directory = $this->smarty->_realpath($directory . DS, true); - $this->_resource_dir[$directory] = true; + $directory = $this->smarty->_realpath($directory . DIRECTORY_SEPARATOR, true); + $this->_resource_dir[ $directory ] = true; } $this->_secure_dir = (array) $this->secure_dir; } @@ -581,8 +586,8 @@ class Smarty_Security public function isTrustedUri($uri) { $_uri = parse_url($uri); - if (!empty($_uri['scheme']) && !empty($_uri['host'])) { - $_uri = $_uri['scheme'] . '://' . $_uri['host']; + 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; @@ -613,41 +618,16 @@ class Smarty_Security $this->_trusted_dir = $this->trusted_dir; foreach ((array) $this->trusted_dir as $directory) { - $directory = $this->smarty->_realpath($directory . DS, true); - $this->_php_resource_dir[$directory] = true; + $directory = $this->smarty->_realpath($directory . DIRECTORY_SEPARATOR, true); + $this->_php_resource_dir[ $directory ] = true; } } - $this->_php_resource_dir = $this->_checkDir($this->smarty->_realpath($filepath, true), $this->_php_resource_dir); + $this->_php_resource_dir = + $this->_checkDir($this->smarty->_realpath($filepath, true), $this->_php_resource_dir); return true; } - - /** - * Start template processing - * - * @param $template - * - * @throws SmartyException - */ - public function startTemplate($template) - { - if ($this->max_template_nesting > 0 && $this->_current_template_nesting ++ >= $this->max_template_nesting) { - throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'"); - } - } - - /** - * Exit template processing - * - * @internal param $template - */ - public function exitTemplate() - { - if ($this->max_template_nesting > 0) { - $this->_current_template_nesting --; - } - } - + /** * Check if file is inside a valid directory * @@ -659,13 +639,13 @@ class Smarty_Security */ private function _checkDir($filepath, $dirs) { - $directory = dirname($filepath) . DS; + $directory = dirname($filepath) . DIRECTORY_SEPARATOR; $_directory = array(); while (true) { // remember the directory to add it to _resource_dir in case we're successful - $_directory[$directory] = true; + $_directory[ $directory ] = true; // test if the directory is trusted - if (isset($dirs[$directory])) { + if (isset($dirs[ $directory ])) { // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup $dirs = array_merge($dirs, $_directory); @@ -676,7 +656,7 @@ class Smarty_Security break; } // bubble up one level - $directory = preg_replace('#[\\\/][^\\\/]+[\\\/]$#', DS, $directory); + $directory = preg_replace('#[\\\/][^\\\/]+[\\\/]$#', DIRECTORY_SEPARATOR, $directory); } // give up @@ -712,4 +692,39 @@ class Smarty_Security } return; } + /** + * Start template processing + * + * @param $template + * + * @throws SmartyException + */ + public function startTemplate($template) + { + if ($this->max_template_nesting > 0 && $this->_current_template_nesting ++ >= $this->max_template_nesting) { + throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'"); + } + } + + /** + * Exit template processing + * + */ + public function endTemplate() + { + if ($this->max_template_nesting > 0) { + $this->_current_template_nesting --; + } + } + + /** + * Register callback functions call at start/end of template rendering + * + * @param \Smarty_Internal_Template $template + */ + public function registerCallBacks(Smarty_Internal_Template $template) + { + $template->startRenderCallbacks[] = array($this, 'startTemplate'); + $template->endRenderCallbacks[] = array($this, 'endTemplate'); + } } diff --git a/library/Smarty/libs/sysplugins/smarty_template_cached.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_cached.php index cecf42986..58f0daf28 100644 --- a/library/Smarty/libs/sysplugins/smarty_template_cached.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_template_cached.php @@ -73,6 +73,13 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base 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 @@ -99,7 +106,7 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base $_template->cached->handler->populate($_template->cached, $_template); // caching enabled ? if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || - $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->handler->recompiled + $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->handler->recompiled ) { $_template->cached->valid = false; } @@ -118,6 +125,9 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base { 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) { @@ -234,7 +244,7 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base * * @param Smarty_Internal_Template $_template template object * - * @return string content + * @return string|false content */ public function read(Smarty_Internal_Template $_template) { diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php new file mode 100644 index 000000000..18f9d562c --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php @@ -0,0 +1,255 @@ +<?php + +/** + * Smarty Resource Data Object + * Meta Data Container for Template Files + * + * @package Smarty + * @subpackage TemplateResources + * @author Rodney Rehm + * @property string $content compiled content + */ +class Smarty_Template_Compiled extends Smarty_Template_Resource_Base +{ + + /** + * nocache hash + * + * @var string|null + */ + public $nocache_hash = null; + + /** + * get a Compiled Object of this source + * + * @param Smarty_Internal_Template $_template template object + * + * @return Smarty_Template_Compiled compiled object + */ + static function load($_template) + { + $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 ? $smarty->ds : '^'); + } + // if use_sub_dirs, break file into directories + if ($smarty->use_sub_dirs) { + $this->filepath .= $source->uid[ 0 ] . $source->uid[ 1 ] . $smarty->ds . $source->uid[ 2 ] . + $source->uid[ 3 ] . $smarty->ds . $source->uid[ 4 ] . $source->uid[ 5 ] . $smarty->ds; + } + $this->filepath .= $source->uid . '_'; + if ($source->isConfig) { + $this->filepath .= (int) $smarty->config_read_hidden + (int) $smarty->config_booleanize * 2 + + (int) $smarty->config_overwrite * 4; + } else { + $this->filepath .= (int) $smarty->merge_compiled_includes + (int) $smarty->escape_html * 2 + + (($smarty->merge_compiled_includes && $source->type === 'extends') ? + (int) $smarty->extends_recursion * 4 : 0); + } + $this->filepath .= '.' . $source->type; + $basename = $source->handler->getBasename($source); + if (!empty($basename)) { + $this->filepath .= '.' . $basename; + } + if ($_template->caching) { + $this->filepath .= '.cache'; + } + $this->filepath .= '.php'; + $this->timestamp = $this->exists = is_file($this->filepath); + if ($this->exists) { + $this->timestamp = filemtime($this->filepath); + } + } + + /** + * load compiled template or compile from source + * + * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template + * + * @throws Exception + */ + public function process(Smarty_Internal_Template $_smarty_tpl) + { + $source = &$_smarty_tpl->source; + $smarty = &$_smarty_tpl->smarty; + if ($source->handler->recompiled) { + $source->handler->process($_smarty_tpl); + } elseif (!$source->handler->uncompiled) { + if (!$this->exists || $smarty->force_compile || + ($smarty->compile_check && $source->getTimeStamp() > $this->getTimeStamp()) + ) { + $this->compileTemplateSource($_smarty_tpl); + $compileCheck = $smarty->compile_check; + $smarty->compile_check = false; + $this->loadCompiledTemplate($_smarty_tpl); + $smarty->compile_check = $compileCheck; + } else { + $_smarty_tpl->mustCompile = true; + @include($this->filepath); + if ($_smarty_tpl->mustCompile) { + $this->compileTemplateSource($_smarty_tpl); + $compileCheck = $smarty->compile_check; + $smarty->compile_check = false; + $this->loadCompiledTemplate($_smarty_tpl); + $smarty->compile_check = $compileCheck; + } + } + $_smarty_tpl->_subTemplateRegister(); + $this->processed = true; + } + } + + /** + * 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') && 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); + } + } + + /** + * render compiled template code + * + * @param Smarty_Internal_Template $_template + * + * @return string + * @throws Exception + */ + public function render(Smarty_Internal_Template $_template) + { + // checks if template exists + if (!$_template->source->exists) { + $type = $_template->source->isConfig ? 'config' : 'template'; + throw new SmartyException("Unable to load {$type} '{$_template->source->type}:{$_template->source->name}'"); + } + if ($_template->smarty->debugging) { + if (!isset($_template->smarty->_debug)) { + $_template->smarty->_debug = new Smarty_Internal_Debug(); + } + $_template->smarty->_debug->start_render($_template); + } + if (!$this->processed) { + $this->process($_template); + } + if (isset($_template->cached)) { + $_template->cached->file_dependency = + array_merge($_template->cached->file_dependency, $this->file_dependency); + } + if ($_template->source->handler->uncompiled) { + $_template->source->handler->renderUncompiled($_template->source, $_template); + } else { + $this->getRenderedTemplateCode($_template); + } + if ($_template->caching && $this->has_nocache_code) { + $_template->cached->hashes[ $this->nocache_hash ] = true; + } + if ($_template->smarty->debugging) { + $_template->smarty->_debug->end_render($_template); + } + } + + /** + * 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 + $saved_timestamp = $_template->source->handler->recompiled ? false : $this->getTimeStamp(); + if ($saved_timestamp) { + 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) { + touch($this->filepath, $saved_timestamp); + } + unset($_template->compiler); + throw $e; + } + // release compiler object to free memory + unset($_template->compiler); + } + + /** + * Write compiled code by handler + * + * @param Smarty_Internal_Template $_template template object + * @param string $code compiled code + * + * @return boolean success + */ + public function write(Smarty_Internal_Template $_template, $code) + { + if (!$_template->source->handler->recompiled) { + if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) { + $this->timestamp = $this->exists = is_file($this->filepath); + if ($this->exists) { + $this->timestamp = filemtime($this->filepath); + return true; + } + } + return false; + } + return true; + } + + /** + * Read compiled content from handler + * + * @param Smarty_Internal_Template $_template template object + * + * @return string content + */ + public function read(Smarty_Internal_Template $_template) + { + if (!$_template->source->handler->recompiled) { + return file_get_contents($this->filepath); + } + return isset($this->content) ? $this->content : false; + } +} diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php new file mode 100644 index 000000000..44cdba6fd --- /dev/null +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php @@ -0,0 +1,99 @@ +<?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/library/Smarty/libs/sysplugins/smarty_template_resource_base.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php index 0911feb8d..6cc008a10 100644 --- a/library/Smarty/libs/sysplugins/smarty_template_resource_base.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php @@ -19,9 +19,9 @@ abstract class Smarty_Template_Resource_Base /** * Compiled Timestamp * - * @var integer + * @var integer|bool */ - public $timestamp = null; + public $timestamp = false; /** * Compiled Existence @@ -87,54 +87,57 @@ abstract class Smarty_Template_Resource_Base 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 string $unifunc function with template code + * @param \Smarty_Internal_Template $_template + * @param string $unifunc function with template code * - * @return string * @throws \Exception */ public function getRenderedTemplateCode(Smarty_Internal_Template $_template, $unifunc = null) { - $unifunc = isset($unifunc) ? $unifunc : $this->unifunc; + $smarty = &$_template->smarty; + $_template->isRenderingCache = $this->isCache; $level = ob_get_level(); try { - if (empty($unifunc) || !is_callable($unifunc)) { - throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'"); + if (!isset($unifunc)) { + $unifunc = $this->unifunc; } - if (isset($_template->smarty->security_policy)) { - $_template->smarty->security_policy->startTemplate($_template); + if (empty($unifunc) || !function_exists($unifunc)) { + throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'"); } - // - // render compiled or saved template code - // - if (!isset($_template->_cache['capture_stack'])) { - $_template->_cache['capture_stack'] = array(); + if ($_template->startRenderCallbacks) { + foreach ($_template->startRenderCallbacks as $callback) { + call_user_func($callback, $_template); + } } - $_saved_capture_level = count($_template->_cache['capture_stack']); $unifunc($_template); - // any unclosed {capture} tags ? - if ($_saved_capture_level != count($_template->_cache['capture_stack'])) { - $_template->capture_error(); - } - if (isset($_template->smarty->security_policy)) { - $_template->smarty->security_policy->exitTemplate(); + foreach ($_template->endRenderCallbacks as $callback) { + call_user_func($callback, $_template); } - return null; + $_template->isRenderingCache = false; } catch (Exception $e) { + $_template->isRenderingCache = false; while (ob_get_level() > $level) { ob_end_clean(); } - if (isset($_template->smarty->security_policy)) { - $_template->smarty->security_policy->exitTemplate(); + if (isset($smarty->security_policy)) { + $smarty->security_policy->endTemplate(); } throw $e; } @@ -147,8 +150,8 @@ abstract class Smarty_Template_Resource_Base */ public function getTimeStamp() { - if ($this->exists && !isset($this->timestamp)) { - $this->timestamp = @filemtime($this->filepath); + if ($this->exists && !$this->timestamp) { + $this->timestamp = filemtime($this->filepath); } return $this->timestamp; } diff --git a/library/Smarty/libs/sysplugins/smarty_template_source.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_source.php index be5b62809..fdb3deaa8 100644 --- a/library/Smarty/libs/sysplugins/smarty_template_source.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_template_source.php @@ -40,13 +40,6 @@ class Smarty_Template_Source public $name = null; /** - * Unique Resource Name - * - * @var string - */ - public $unique_resource = null; - - /** * Source Filepath * * @var string @@ -103,18 +96,32 @@ class Smarty_Template_Source public $isConfig = false; /** - * cache for Smarty_Template_Compiled instances + * Template source content eventually set by default handler * - * @var Smarty_Template_Compiled[] + * @var string */ - public $compileds = array(); + public $content = null; /** - * Template source content eventually set by default handler + * Name of the Class to compile this resource's contents with * * @var string */ - public $content = null; + 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 @@ -126,9 +133,11 @@ class Smarty_Template_Source * @param string $name resource name * */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name) + public function __construct(Smarty $smarty, $resource, $type, $name) { - $this->handler = $handler; // Note: prone to circular references + $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; @@ -154,95 +163,29 @@ class Smarty_Template_Source $template_resource = $_template->template_resource; } if (empty($template_resource)) { - throw new SmartyException('Missing template name'); + 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]; + $type = $match[ 1 ]; + $name = $match[ 2 ]; } else { // no resource given, use default // or single character before the colon is not a resource type, but part of the filepath $type = $smarty->default_resource_type; $name = $template_resource; } - - $handler = isset($smarty->_cache['resource_handlers'][$type]) ? - $smarty->_cache['resource_handlers'][$type] : - Smarty_Resource::load($smarty, $type); - // if resource is not recompiling and resource name is not dotted we can check the source cache - if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled && - !(isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/')) - ) { - $unique_resource = $handler->buildUniqueResourceName($smarty, $name); - if (isset($smarty->_cache['source_objects'][$unique_resource])) { - return $smarty->_cache['source_objects'][$unique_resource]; - } - } else { - $unique_resource = null; - } // create new source object - $source = new Smarty_Template_Source($handler, $smarty, $template_resource, $type, $name); - $handler->populate($source, $_template); + $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); - } - // on recompiling resources we are done - if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled) { - // may by we have already $unique_resource - $is_relative = false; - if (!isset($unique_resource)) { - $is_relative = isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/') && - ($type == 'file' || - (isset($_template->parent->source) && $_template->parent->source->type == 'extends')); - $unique_resource = - $handler->buildUniqueResourceName($smarty, $is_relative ? $source->filepath . $name : $name); - } - $source->unique_resource = $unique_resource; - // save in runtime cache if not relative - if (!$is_relative) { - $smarty->_cache['source_objects'][$unique_resource] = $source; - } + $source->handler->populate($source, $_template); } return $source; } /** - * render the uncompiled source - * - * @param Smarty_Internal_Template $_template template object - * - * @return string - * @throws \Exception - */ - public function renderUncompiled(Smarty_Internal_Template $_template) - { - $this->handler->renderUncompiled($_template->source, $_template); - } - - /** - * Render uncompiled source - * - * @param \Smarty_Internal_Template $_template - */ - public function render(Smarty_Internal_Template $_template) - { - if ($_template->source->handler->uncompiled) { - if ($_template->smarty->debugging) { - $_template->smarty->_debug->start_render($_template); - } - $this->handler->renderUncompiled($_template->source, $_template); - if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) { - $_template->parent->tpl_function = - array_merge($_template->parent->tpl_function, $_template->tpl_function); - } - if ($_template->smarty->debugging) { - $_template->smarty->_debug->end_render($_template); - } - } - } - - /** * Get source time stamp * * @return int diff --git a/library/Smarty/libs/sysplugins/smarty_undefined_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php index 88bc6f68c..88bc6f68c 100644 --- a/library/Smarty/libs/sysplugins/smarty_undefined_variable.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php diff --git a/library/Smarty/libs/sysplugins/smarty_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php index a6504b18f..0b17bc7cf 100644 --- a/library/Smarty/libs/sysplugins/smarty_variable.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php @@ -15,6 +15,7 @@ class Smarty_Variable * @var mixed */ public $value = null; + /** * if true any output of this variable will be not cached * diff --git a/library/Smarty/libs/sysplugins/smartycompilerexception.php b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php index 4d5d77875..763bab159 100644 --- a/library/Smarty/libs/sysplugins/smartycompilerexception.php +++ b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php @@ -18,18 +18,21 @@ class SmartyCompilerException extends SmartyException * @type int|null */ public $line = null; + /** * The template source snippet relating to the error * * @type string|null */ public $source = null; + /** * The raw text of the error message * * @type string|null */ public $desc = null; + /** * The resource identifier or template name * diff --git a/library/Smarty/libs/sysplugins/smartyexception.php b/vendor/smarty/smarty/libs/sysplugins/smartyexception.php index 3da16c276..431d8f8e9 100644 --- a/library/Smarty/libs/sysplugins/smartyexception.php +++ b/vendor/smarty/smarty/libs/sysplugins/smartyexception.php @@ -1,4 +1,5 @@ <?php + /** * Smarty exception class * diff --git a/view/de/hmessages.po b/view/de/hmessages.po index 85fb8ca4e..e7c962bbd 100644 --- a/view/de/hmessages.po +++ b/view/de/hmessages.po @@ -25,8 +25,8 @@ msgid "" msgstr "" "Project-Id-Version: Redmatrix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-19 12:01+0200\n" -"PO-Revision-Date: 2017-10-21 11:21+0000\n" +"POT-Creation-Date: 2017-12-13 12:54+0100\n" +"PO-Revision-Date: 2017-12-19 11:56+0000\n" "Last-Translator: Phellmes <forum@suschka.de>\n" "Language-Team: German (http://www.transifex.com/Friendica/red-matrix/language/de/)\n" "MIME-Version: 1.0\n" @@ -35,168 +35,169 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../Zotlabs/Access/Permissions.php:53 +#: ../../Zotlabs/Access/Permissions.php:56 msgid "Can view my channel stream and posts" msgstr "Kann meinen Kanal-Stream und meine Beiträge sehen" -#: ../../Zotlabs/Access/Permissions.php:54 +#: ../../Zotlabs/Access/Permissions.php:57 msgid "Can send me their channel stream and posts" msgstr "Kann mir die Beiträge aus seinem/ihrem Kanal schicken" -#: ../../Zotlabs/Access/Permissions.php:55 +#: ../../Zotlabs/Access/Permissions.php:58 msgid "Can view my default channel profile" msgstr "Kann mein Standardprofil sehen" -#: ../../Zotlabs/Access/Permissions.php:56 +#: ../../Zotlabs/Access/Permissions.php:59 msgid "Can view my connections" msgstr "Kann meine Verbindungen sehen" -#: ../../Zotlabs/Access/Permissions.php:57 +#: ../../Zotlabs/Access/Permissions.php:60 msgid "Can view my file storage and photos" msgstr "Kann meine Datei- und Bilderordner sehen" -#: ../../Zotlabs/Access/Permissions.php:58 +#: ../../Zotlabs/Access/Permissions.php:61 msgid "Can upload/modify my file storage and photos" msgstr "Kann in meine Datei- und Bilderordner hochladen/ändern" -#: ../../Zotlabs/Access/Permissions.php:59 +#: ../../Zotlabs/Access/Permissions.php:62 msgid "Can view my channel webpages" msgstr "Kann die Webseiten meines Kanals sehen" -#: ../../Zotlabs/Access/Permissions.php:60 +#: ../../Zotlabs/Access/Permissions.php:63 msgid "Can view my wiki pages" msgstr "Kann meine Wiki-Seiten sehen" -#: ../../Zotlabs/Access/Permissions.php:61 +#: ../../Zotlabs/Access/Permissions.php:64 msgid "Can create/edit my channel webpages" msgstr "Kann Webseiten in meinem Kanal erstellen/ändern" -#: ../../Zotlabs/Access/Permissions.php:62 +#: ../../Zotlabs/Access/Permissions.php:65 msgid "Can write to my wiki pages" msgstr "Kann meine Wiki-Seiten bearbeiten" -#: ../../Zotlabs/Access/Permissions.php:63 +#: ../../Zotlabs/Access/Permissions.php:66 msgid "Can post on my channel (wall) page" msgstr "Kann auf meiner Kanal-Seite (\"wall\") Beiträge veröffentlichen" -#: ../../Zotlabs/Access/Permissions.php:64 +#: ../../Zotlabs/Access/Permissions.php:67 msgid "Can comment on or like my posts" msgstr "Darf meine Beiträge kommentieren und mögen/nicht mögen" -#: ../../Zotlabs/Access/Permissions.php:65 +#: ../../Zotlabs/Access/Permissions.php:68 msgid "Can send me private mail messages" msgstr "Kann mir private Nachrichten schicken" -#: ../../Zotlabs/Access/Permissions.php:66 +#: ../../Zotlabs/Access/Permissions.php:69 msgid "Can like/dislike profiles and profile things" msgstr "Kann Profile und Profilsachen mögen/nicht mögen" -#: ../../Zotlabs/Access/Permissions.php:67 +#: ../../Zotlabs/Access/Permissions.php:70 msgid "Can forward to all my channel connections via @+ mentions in posts" msgstr "Kann an alle meine Verbindungen via @-Erwähnungen Nachrichten weiterleiten" -#: ../../Zotlabs/Access/Permissions.php:68 +#: ../../Zotlabs/Access/Permissions.php:71 msgid "Can chat with me" msgstr "Kann mit mir chatten" -#: ../../Zotlabs/Access/Permissions.php:69 +#: ../../Zotlabs/Access/Permissions.php:72 msgid "Can source my public posts in derived channels" msgstr "Kann meine öffentlichen Beiträge als Quellen für Kanäle verwenden" -#: ../../Zotlabs/Access/Permissions.php:70 +#: ../../Zotlabs/Access/Permissions.php:73 msgid "Can administer my channel" msgstr "Kann meinen Kanal administrieren" -#: ../../Zotlabs/Access/PermissionRoles.php:248 +#: ../../Zotlabs/Access/PermissionRoles.php:265 msgid "Social Networking" msgstr "Soziales Netzwerk" -#: ../../Zotlabs/Access/PermissionRoles.php:249 +#: ../../Zotlabs/Access/PermissionRoles.php:266 msgid "Social - Mostly Public" msgstr "Soziales Netzwerk - Weitgehend öffentlich" -#: ../../Zotlabs/Access/PermissionRoles.php:250 +#: ../../Zotlabs/Access/PermissionRoles.php:267 msgid "Social - Restricted" msgstr "Soziales Netzwerk - Beschränkt" -#: ../../Zotlabs/Access/PermissionRoles.php:251 +#: ../../Zotlabs/Access/PermissionRoles.php:268 msgid "Social - Private" msgstr "Soziales Netzwerk - Privat" -#: ../../Zotlabs/Access/PermissionRoles.php:254 +#: ../../Zotlabs/Access/PermissionRoles.php:271 msgid "Community Forum" msgstr "Forum" -#: ../../Zotlabs/Access/PermissionRoles.php:255 +#: ../../Zotlabs/Access/PermissionRoles.php:272 msgid "Forum - Mostly Public" msgstr "Forum - Weitgehend öffentlich" -#: ../../Zotlabs/Access/PermissionRoles.php:256 +#: ../../Zotlabs/Access/PermissionRoles.php:273 msgid "Forum - Restricted" msgstr "Forum - Beschränkt" -#: ../../Zotlabs/Access/PermissionRoles.php:257 +#: ../../Zotlabs/Access/PermissionRoles.php:274 msgid "Forum - Private" msgstr "Forum - Privat" -#: ../../Zotlabs/Access/PermissionRoles.php:260 +#: ../../Zotlabs/Access/PermissionRoles.php:277 msgid "Feed Republish" msgstr "Teilen von Feeds" -#: ../../Zotlabs/Access/PermissionRoles.php:261 +#: ../../Zotlabs/Access/PermissionRoles.php:278 msgid "Feed - Mostly Public" msgstr "Feeds - Weitgehend öffentlich" -#: ../../Zotlabs/Access/PermissionRoles.php:262 +#: ../../Zotlabs/Access/PermissionRoles.php:279 msgid "Feed - Restricted" msgstr "Feeds - Beschränkt" -#: ../../Zotlabs/Access/PermissionRoles.php:265 +#: ../../Zotlabs/Access/PermissionRoles.php:282 msgid "Special Purpose" msgstr "Für besondere Zwecke" -#: ../../Zotlabs/Access/PermissionRoles.php:266 +#: ../../Zotlabs/Access/PermissionRoles.php:283 msgid "Special - Celebrity/Soapbox" msgstr "Speziell - Mitteilungs-Kanal (keine Kommentare)" -#: ../../Zotlabs/Access/PermissionRoles.php:267 +#: ../../Zotlabs/Access/PermissionRoles.php:284 msgid "Special - Group Repository" msgstr "Speziell - Gruppenarchiv" -#: ../../Zotlabs/Access/PermissionRoles.php:270 +#: ../../Zotlabs/Access/PermissionRoles.php:287 #: ../../Zotlabs/Module/Cdav.php:1182 ../../Zotlabs/Module/New_channel.php:132 -#: ../../Zotlabs/Module/Settings/Channel.php:467 +#: ../../Zotlabs/Module/Settings/Channel.php:474 #: ../../Zotlabs/Module/Connedit.php:936 ../../Zotlabs/Module/Profiles.php:798 -#: ../../Zotlabs/Module/Register.php:213 ../../include/selectors.php:49 +#: ../../Zotlabs/Module/Register.php:221 ../../include/selectors.php:49 #: ../../include/selectors.php:66 ../../include/selectors.php:104 -#: ../../include/selectors.php:140 ../../include/event.php:1297 -#: ../../include/event.php:1304 ../../include/connections.php:689 +#: ../../include/selectors.php:140 ../../include/event.php:1308 +#: ../../include/event.php:1315 ../../include/connections.php:689 #: ../../include/connections.php:696 msgid "Other" msgstr "Andere" -#: ../../Zotlabs/Access/PermissionRoles.php:271 +#: ../../Zotlabs/Access/PermissionRoles.php:288 msgid "Custom/Expert Mode" msgstr "Benutzerdefiniert/Expertenmodus" -#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Editlayout.php:31 -#: ../../Zotlabs/Module/Connect.php:17 +#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Articles.php:29 +#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Connect.php:17 #: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Hcard.php:12 #: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Profile.php:20 #: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Editwebpage.php:32 #: ../../Zotlabs/Module/Cards.php:29 ../../Zotlabs/Module/Webpages.php:33 -#: ../../Zotlabs/Module/Filestorage.php:51 ../../include/channel.php:1163 +#: ../../Zotlabs/Module/Filestorage.php:51 ../../include/channel.php:1198 msgid "Requested profile is not available." msgstr "Das angefragte Profil ist nicht verfügbar." #: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80 #: ../../Zotlabs/Module/Invite.php:17 ../../Zotlabs/Module/Invite.php:94 -#: ../../Zotlabs/Module/Editlayout.php:67 +#: ../../Zotlabs/Module/Articles.php:68 ../../Zotlabs/Module/Editlayout.php:67 #: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Channel.php:110 #: ../../Zotlabs/Module/Channel.php:248 ../../Zotlabs/Module/Channel.php:288 #: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Locs.php:87 #: ../../Zotlabs/Module/Mitem.php:115 ../../Zotlabs/Module/Events.php:271 -#: ../../Zotlabs/Module/Appman.php:82 ../../Zotlabs/Module/Regmod.php:21 +#: ../../Zotlabs/Module/Appman.php:86 ../../Zotlabs/Module/Regmod.php:21 +#: ../../Zotlabs/Module/Article_edit.php:51 #: ../../Zotlabs/Module/New_channel.php:77 #: ../../Zotlabs/Module/New_channel.php:104 #: ../../Zotlabs/Module/Sharedwithme.php:16 ../../Zotlabs/Module/Setup.php:209 @@ -208,19 +209,19 @@ msgstr "Das angefragte Profil ist nicht verfügbar." #: ../../Zotlabs/Module/Mood.php:116 ../../Zotlabs/Module/Connections.php:29 #: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Bookmarks.php:64 #: ../../Zotlabs/Module/Photos.php:69 ../../Zotlabs/Module/Wiki.php:50 -#: ../../Zotlabs/Module/Wiki.php:273 ../../Zotlabs/Module/Wiki.php:388 +#: ../../Zotlabs/Module/Wiki.php:273 ../../Zotlabs/Module/Wiki.php:400 #: ../../Zotlabs/Module/Pdledit.php:29 ../../Zotlabs/Module/Poke.php:149 -#: ../../Zotlabs/Module/Profile_photo.php:288 -#: ../../Zotlabs/Module/Profile_photo.php:301 -#: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Item.php:223 -#: ../../Zotlabs/Module/Item.php:240 ../../Zotlabs/Module/Item.php:250 -#: ../../Zotlabs/Module/Item.php:1102 ../../Zotlabs/Module/Page.php:34 -#: ../../Zotlabs/Module/Page.php:125 ../../Zotlabs/Module/Connedit.php:389 +#: ../../Zotlabs/Module/Profile_photo.php:294 +#: ../../Zotlabs/Module/Profile_photo.php:307 +#: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Item.php:228 +#: ../../Zotlabs/Module/Item.php:245 ../../Zotlabs/Module/Item.php:255 +#: ../../Zotlabs/Module/Item.php:1085 ../../Zotlabs/Module/Page.php:34 +#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Connedit.php:389 #: ../../Zotlabs/Module/Chat.php:100 ../../Zotlabs/Module/Chat.php:105 #: ../../Zotlabs/Module/Menu.php:78 ../../Zotlabs/Module/Layouts.php:71 #: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89 -#: ../../Zotlabs/Module/Group.php:13 ../../Zotlabs/Module/Profiles.php:198 -#: ../../Zotlabs/Module/Profiles.php:635 +#: ../../Zotlabs/Module/Defperms.php:173 ../../Zotlabs/Module/Group.php:13 +#: ../../Zotlabs/Module/Profiles.php:198 ../../Zotlabs/Module/Profiles.php:635 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 #: ../../Zotlabs/Module/Editwebpage.php:107 @@ -228,32 +229,32 @@ msgstr "Das angefragte Profil ist nicht verfügbar." #: ../../Zotlabs/Module/Cards.php:68 ../../Zotlabs/Module/Webpages.php:118 #: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 #: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Sources.php:74 -#: ../../Zotlabs/Module/Like.php:181 ../../Zotlabs/Module/Suggest.php:28 +#: ../../Zotlabs/Module/Like.php:184 ../../Zotlabs/Module/Suggest.php:28 #: ../../Zotlabs/Module/Message.php:18 ../../Zotlabs/Module/Mail.php:146 #: ../../Zotlabs/Module/Register.php:77 #: ../../Zotlabs/Module/Cover_photo.php:281 #: ../../Zotlabs/Module/Cover_photo.php:294 -#: ../../Zotlabs/Module/Display.php:343 ../../Zotlabs/Module/Network.php:15 +#: ../../Zotlabs/Module/Display.php:404 ../../Zotlabs/Module/Network.php:15 #: ../../Zotlabs/Module/Filestorage.php:15 #: ../../Zotlabs/Module/Filestorage.php:70 #: ../../Zotlabs/Module/Filestorage.php:85 -#: ../../Zotlabs/Module/Filestorage.php:112 ../../Zotlabs/Module/Common.php:38 +#: ../../Zotlabs/Module/Filestorage.php:117 ../../Zotlabs/Module/Common.php:38 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 #: ../../Zotlabs/Module/Service_limits.php:11 #: ../../Zotlabs/Module/Rate.php:113 ../../Zotlabs/Module/Card_edit.php:51 #: ../../Zotlabs/Module/Notifications.php:11 -#: ../../Zotlabs/Lib/Chatroom.php:137 ../../Zotlabs/Web/WebServer.php:169 +#: ../../Zotlabs/Lib/Chatroom.php:133 ../../Zotlabs/Web/WebServer.php:169 #: ../../addon/keepout/keepout.php:36 ../../addon/openid/Mod_Id.php:53 #: ../../addon/gitwiki/Mod_Gitwiki.php:196 #: ../../addon/gitwiki/Mod_Gitwiki.php:292 ../../addon/pumpio/pumpio.php:40 -#: ../../include/attach.php:144 ../../include/attach.php:191 -#: ../../include/attach.php:255 ../../include/attach.php:269 -#: ../../include/attach.php:276 ../../include/attach.php:344 -#: ../../include/attach.php:358 ../../include/attach.php:365 -#: ../../include/attach.php:443 ../../include/attach.php:924 -#: ../../include/attach.php:998 ../../include/attach.php:1163 -#: ../../include/items.php:3489 ../../include/photos.php:28 +#: ../../include/attach.php:150 ../../include/attach.php:197 +#: ../../include/attach.php:270 ../../include/attach.php:284 +#: ../../include/attach.php:293 ../../include/attach.php:366 +#: ../../include/attach.php:380 ../../include/attach.php:387 +#: ../../include/attach.php:469 ../../include/attach.php:1008 +#: ../../include/attach.php:1082 ../../include/attach.php:1247 +#: ../../include/items.php:3633 ../../include/photos.php:27 msgid "Permission denied." msgstr "Berechtigung verweigert." @@ -280,58 +281,60 @@ msgstr "Erstellt" msgid "Edited" msgstr "Geändert" -#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Cdav.php:1185 -#: ../../Zotlabs/Module/New_channel.php:147 +#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Articles.php:96 +#: ../../Zotlabs/Module/Cdav.php:1185 ../../Zotlabs/Module/New_channel.php:147 #: ../../Zotlabs/Module/Connedit.php:939 ../../Zotlabs/Module/Menu.php:118 #: ../../Zotlabs/Module/Layouts.php:185 ../../Zotlabs/Module/Profiles.php:801 #: ../../Zotlabs/Module/Cards.php:96 ../../Zotlabs/Module/Webpages.php:239 -#: ../../Zotlabs/Storage/Browser.php:229 ../../Zotlabs/Storage/Browser.php:335 -#: ../../Zotlabs/Widget/Cdav.php:127 ../../Zotlabs/Widget/Cdav.php:164 +#: ../../Zotlabs/Storage/Browser.php:273 ../../Zotlabs/Storage/Browser.php:379 +#: ../../Zotlabs/Widget/Cdav.php:128 ../../Zotlabs/Widget/Cdav.php:165 msgid "Create" msgstr "Erstelle" #: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Editlayout.php:114 +#: ../../Zotlabs/Module/Article_edit.php:99 #: ../../Zotlabs/Module/Admin/Profs.php:154 #: ../../Zotlabs/Module/Settings/Oauth.php:149 #: ../../Zotlabs/Module/Thing.php:261 ../../Zotlabs/Module/Editblock.php:114 #: ../../Zotlabs/Module/Connections.php:260 #: ../../Zotlabs/Module/Connections.php:297 #: ../../Zotlabs/Module/Connections.php:317 ../../Zotlabs/Module/Wiki.php:202 -#: ../../Zotlabs/Module/Wiki.php:346 ../../Zotlabs/Module/Menu.php:112 +#: ../../Zotlabs/Module/Wiki.php:358 ../../Zotlabs/Module/Menu.php:112 #: ../../Zotlabs/Module/Layouts.php:193 #: ../../Zotlabs/Module/Editwebpage.php:142 #: ../../Zotlabs/Module/Webpages.php:240 ../../Zotlabs/Module/Editpost.php:85 #: ../../Zotlabs/Module/Card_edit.php:99 ../../Zotlabs/Lib/Apps.php:399 -#: ../../Zotlabs/Lib/ThreadItem.php:111 ../../Zotlabs/Storage/Browser.php:239 -#: ../../Zotlabs/Widget/Cdav.php:125 ../../Zotlabs/Widget/Cdav.php:161 +#: ../../Zotlabs/Lib/ThreadItem.php:121 ../../Zotlabs/Storage/Browser.php:285 +#: ../../Zotlabs/Widget/Cdav.php:126 ../../Zotlabs/Widget/Cdav.php:162 #: ../../addon/gitwiki/Mod_Gitwiki.php:151 -#: ../../addon/gitwiki/Mod_Gitwiki.php:252 ../../include/channel.php:1262 -#: ../../include/channel.php:1266 ../../include/menu.php:113 +#: ../../addon/gitwiki/Mod_Gitwiki.php:252 ../../include/channel.php:1297 +#: ../../include/channel.php:1301 ../../include/menu.php:113 msgid "Edit" msgstr "Bearbeiten" -#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1049 +#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1102 #: ../../Zotlabs/Module/Layouts.php:194 ../../Zotlabs/Module/Webpages.php:241 -#: ../../Zotlabs/Widget/Cdav.php:123 ../../include/conversation.php:1346 +#: ../../Zotlabs/Widget/Cdav.php:124 ../../include/conversation.php:1363 msgid "Share" msgstr "Teilen" #: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Editlayout.php:138 #: ../../Zotlabs/Module/Cdav.php:897 ../../Zotlabs/Module/Cdav.php:1187 +#: ../../Zotlabs/Module/Article_edit.php:129 #: ../../Zotlabs/Module/Admin/Accounts.php:173 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:155 #: ../../Zotlabs/Module/Settings/Oauth.php:150 #: ../../Zotlabs/Module/Thing.php:262 ../../Zotlabs/Module/Editblock.php:139 #: ../../Zotlabs/Module/Connections.php:268 -#: ../../Zotlabs/Module/Photos.php:1150 ../../Zotlabs/Module/Connedit.php:654 +#: ../../Zotlabs/Module/Photos.php:1203 ../../Zotlabs/Module/Connedit.php:654 #: ../../Zotlabs/Module/Connedit.php:941 ../../Zotlabs/Module/Group.php:179 #: ../../Zotlabs/Module/Profiles.php:803 #: ../../Zotlabs/Module/Editwebpage.php:167 #: ../../Zotlabs/Module/Webpages.php:242 #: ../../Zotlabs/Module/Card_edit.php:129 ../../Zotlabs/Lib/Apps.php:400 -#: ../../Zotlabs/Lib/ThreadItem.php:131 ../../Zotlabs/Storage/Browser.php:240 -#: ../../include/conversation.php:674 ../../include/conversation.php:717 +#: ../../Zotlabs/Lib/ThreadItem.php:141 ../../Zotlabs/Storage/Browser.php:286 +#: ../../include/conversation.php:690 ../../include/conversation.php:733 msgid "Delete" msgstr "Löschen" @@ -414,7 +417,7 @@ msgstr "3. Klicke auf [Verbinden]" #: ../../Zotlabs/Module/Invite.php:151 ../../Zotlabs/Module/Locs.php:121 #: ../../Zotlabs/Module/Mitem.php:243 ../../Zotlabs/Module/Events.php:493 -#: ../../Zotlabs/Module/Appman.php:148 +#: ../../Zotlabs/Module/Appman.php:152 #: ../../Zotlabs/Module/Import_items.php:129 #: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:349 #: ../../Zotlabs/Module/Connect.php:98 @@ -424,59 +427,60 @@ msgstr "3. Klicke auf [Verbinden]" #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Channels.php:147 #: ../../Zotlabs/Module/Admin/Themes.php:158 -#: ../../Zotlabs/Module/Admin/Site.php:273 +#: ../../Zotlabs/Module/Admin/Site.php:277 #: ../../Zotlabs/Module/Admin/Profs.php:157 #: ../../Zotlabs/Module/Admin/Account_edit.php:74 #: ../../Zotlabs/Module/Admin/Security.php:104 #: ../../Zotlabs/Module/Settings/Permcats.php:110 -#: ../../Zotlabs/Module/Settings/Channel.php:480 +#: ../../Zotlabs/Module/Settings/Channel.php:489 #: ../../Zotlabs/Module/Settings/Features.php:47 #: ../../Zotlabs/Module/Settings/Tokens.php:168 #: ../../Zotlabs/Module/Settings/Account.php:118 #: ../../Zotlabs/Module/Settings/Featured.php:52 -#: ../../Zotlabs/Module/Settings/Display.php:207 +#: ../../Zotlabs/Module/Settings/Display.php:209 #: ../../Zotlabs/Module/Settings/Oauth.php:87 #: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374 -#: ../../Zotlabs/Module/Import.php:529 ../../Zotlabs/Module/Cal.php:343 -#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Photos.php:659 -#: ../../Zotlabs/Module/Photos.php:1029 ../../Zotlabs/Module/Photos.php:1069 -#: ../../Zotlabs/Module/Photos.php:1187 ../../Zotlabs/Module/Wiki.php:206 -#: ../../Zotlabs/Module/Pdledit.php:94 ../../Zotlabs/Module/Poke.php:200 -#: ../../Zotlabs/Module/Connedit.php:904 ../../Zotlabs/Module/Chat.php:196 -#: ../../Zotlabs/Module/Chat.php:242 ../../Zotlabs/Module/Pconfig.php:107 +#: ../../Zotlabs/Module/Import.php:529 ../../Zotlabs/Module/Cal.php:345 +#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Photos.php:1082 +#: ../../Zotlabs/Module/Photos.php:1122 ../../Zotlabs/Module/Photos.php:1240 +#: ../../Zotlabs/Module/Wiki.php:206 ../../Zotlabs/Module/Pdledit.php:98 +#: ../../Zotlabs/Module/Poke.php:200 ../../Zotlabs/Module/Connedit.php:904 +#: ../../Zotlabs/Module/Chat.php:196 ../../Zotlabs/Module/Chat.php:242 +#: ../../Zotlabs/Module/Pconfig.php:107 ../../Zotlabs/Module/Defperms.php:249 #: ../../Zotlabs/Module/Group.php:87 ../../Zotlabs/Module/Profiles.php:726 #: ../../Zotlabs/Module/Sources.php:114 ../../Zotlabs/Module/Sources.php:149 #: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Mail.php:431 -#: ../../Zotlabs/Module/Filestorage.php:155 ../../Zotlabs/Module/Rate.php:166 -#: ../../Zotlabs/Lib/ThreadItem.php:743 +#: ../../Zotlabs/Module/Filestorage.php:160 ../../Zotlabs/Module/Rate.php:166 +#: ../../Zotlabs/Lib/ThreadItem.php:754 #: ../../Zotlabs/Widget/Eventstools.php:16 -#: ../../Zotlabs/Widget/Wiki_pages.php:61 +#: ../../Zotlabs/Widget/Wiki_pages.php:40 +#: ../../Zotlabs/Widget/Wiki_pages.php:97 #: ../../view/theme/redbasic_c/php/config.php:95 #: ../../view/theme/redbasic/php/config.php:93 -#: ../../addon/skeleton/skeleton.php:65 ../../addon/gnusoc/gnusoc.php:269 +#: ../../addon/skeleton/skeleton.php:65 ../../addon/gnusoc/gnusoc.php:273 #: ../../addon/planets/planets.php:153 #: ../../addon/openclipatar/openclipatar.php:53 #: ../../addon/wppost/wppost.php:113 ../../addon/nsfw/nsfw.php:92 #: ../../addon/ijpost/ijpost.php:89 ../../addon/dwpost/dwpost.php:89 -#: ../../addon/mailhost/mailhost.php:40 #: ../../addon/likebanner/likebanner.php:57 #: ../../addon/redphotos/redphotos.php:136 ../../addon/irc/irc.php:53 #: ../../addon/ljpost/ljpost.php:86 ../../addon/startpage/startpage.php:113 -#: ../../addon/diaspora/diaspora.php:807 +#: ../../addon/diaspora/diaspora.php:816 #: ../../addon/gitwiki/Mod_Gitwiki.php:155 -#: ../../addon/rainbowtag/rainbowtag.php:85 ../../addon/visage/visage.php:170 -#: ../../addon/nsabait/nsabait.php:161 ../../addon/mailtest/mailtest.php:100 +#: ../../addon/rainbowtag/rainbowtag.php:85 ../../addon/hzfiles/hzfiles.php:84 +#: ../../addon/visage/visage.php:170 ../../addon/nsabait/nsabait.php:161 +#: ../../addon/mailtest/mailtest.php:100 #: ../../addon/openstreetmap/openstreetmap.php:168 #: ../../addon/rtof/rtof.php:101 ../../addon/jappixmini/jappixmini.php:371 #: ../../addon/superblock/superblock.php:120 ../../addon/nofed/nofed.php:80 #: ../../addon/redred/redred.php:119 ../../addon/logrot/logrot.php:35 -#: ../../addon/frphotos/frphotos.php:96 ../../addon/pubcrawl/pubcrawl.php:1049 +#: ../../addon/frphotos/frphotos.php:96 ../../addon/pubcrawl/pubcrawl.php:1053 #: ../../addon/chords/Mod_Chords.php:60 ../../addon/libertree/libertree.php:85 #: ../../addon/flattrwidget/flattrwidget.php:124 #: ../../addon/statusnet/statusnet.php:322 #: ../../addon/statusnet/statusnet.php:380 #: ../../addon/statusnet/statusnet.php:432 -#: ../../addon/statusnet/statusnet.php:899 ../../addon/twitter/twitter.php:217 +#: ../../addon/statusnet/statusnet.php:900 ../../addon/twitter/twitter.php:217 #: ../../addon/twitter/twitter.php:259 #: ../../addon/smileybutton/smileybutton.php:219 #: ../../addon/piwik/piwik.php:95 ../../addon/pageheader/pageheader.php:48 @@ -486,7 +490,24 @@ msgstr "3. Klicke auf [Verbinden]" msgid "Submit" msgstr "Absenden" +#: ../../Zotlabs/Module/Articles.php:38 ../../Zotlabs/Module/Cards.php:38 +#: ../../Zotlabs/Module/Cards.php:178 ../../Zotlabs/Lib/Apps.php:224 +#: ../../include/conversation.php:1890 ../../include/features.php:122 +#: ../../include/nav.php:490 +msgid "Cards" +msgstr "Karten" + +#: ../../Zotlabs/Module/Articles.php:95 +msgid "Add Article" +msgstr "Artikel hinzufügen" + +#: ../../Zotlabs/Module/Articles.php:178 ../../include/nav.php:501 +msgid "Articles" +msgstr "Artikel" + #: ../../Zotlabs/Module/Editlayout.php:79 +#: ../../Zotlabs/Module/Article_edit.php:17 +#: ../../Zotlabs/Module/Article_edit.php:33 #: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95 #: ../../Zotlabs/Module/Editwebpage.php:80 #: ../../Zotlabs/Module/Editpost.php:24 ../../Zotlabs/Module/Card_edit.php:17 @@ -508,13 +529,14 @@ msgstr "Layout-Beschreibung (optional)" msgid "Edit Layout" msgstr "Layout bearbeiten" -#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Subthread.php:62 -#: ../../Zotlabs/Module/Import_items.php:120 ../../Zotlabs/Module/Group.php:74 +#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Subthread.php:86 +#: ../../Zotlabs/Module/Import_items.php:120 +#: ../../Zotlabs/Module/Cloud.php:111 ../../Zotlabs/Module/Group.php:74 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:68 -#: ../../Zotlabs/Module/Like.php:283 ../../Zotlabs/Web/WebServer.php:168 -#: ../../addon/redphotos/redphotos.php:119 +#: ../../Zotlabs/Module/Like.php:295 ../../Zotlabs/Web/WebServer.php:168 +#: ../../addon/redphotos/redphotos.php:119 ../../addon/hzfiles/hzfiles.php:73 #: ../../addon/frphotos/frphotos.php:81 ../../addon/redfiles/redfiles.php:109 -#: ../../include/items.php:346 +#: ../../include/items.php:358 msgid "Permission denied" msgstr "Keine Berechtigung" @@ -526,7 +548,7 @@ msgstr "Ungültiger Profil-Identifikator" msgid "Profile Visibility Editor" msgstr "Profil-Sichtbarkeits-Editor" -#: ../../Zotlabs/Module/Profperm.php:113 ../../include/channel.php:1585 +#: ../../Zotlabs/Module/Profperm.php:113 ../../include/channel.php:1633 msgid "Profile" msgstr "Profil" @@ -553,11 +575,11 @@ msgstr "Zusammenfassung:" #: ../../Zotlabs/Module/Cdav.php:786 ../../Zotlabs/Module/Cdav.php:787 #: ../../Zotlabs/Module/Cdav.php:794 ../../Zotlabs/Module/Embedphotos.php:146 -#: ../../Zotlabs/Module/Photos.php:764 ../../Zotlabs/Module/Photos.php:1220 -#: ../../Zotlabs/Lib/Apps.php:727 ../../Zotlabs/Lib/Apps.php:805 -#: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Widget/Portfolio.php:86 -#: ../../Zotlabs/Widget/Album.php:84 ../../addon/pubcrawl/as.php:841 -#: ../../include/conversation.php:1143 +#: ../../Zotlabs/Module/Photos.php:817 ../../Zotlabs/Module/Photos.php:1273 +#: ../../Zotlabs/Lib/Apps.php:744 ../../Zotlabs/Lib/Apps.php:822 +#: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Widget/Portfolio.php:95 +#: ../../Zotlabs/Widget/Album.php:84 ../../addon/pubcrawl/as.php:842 +#: ../../include/conversation.php:1160 msgid "Unknown" msgstr "Unbekannt" @@ -594,7 +616,7 @@ msgid "End date and time" msgstr "Enddatum und -zeit" #: ../../Zotlabs/Module/Cdav.php:871 ../../Zotlabs/Module/Events.php:473 -#: ../../Zotlabs/Module/Appman.php:138 ../../Zotlabs/Module/Rbmark.php:101 +#: ../../Zotlabs/Module/Appman.php:142 ../../Zotlabs/Module/Rbmark.php:101 #: ../../addon/rendezvous/rendezvous.php:173 msgid "Description" msgstr "Beschreibung" @@ -607,20 +629,20 @@ msgid "Location" msgstr "Ort" #: ../../Zotlabs/Module/Cdav.php:879 ../../Zotlabs/Module/Events.php:689 -#: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Cal.php:337 -#: ../../Zotlabs/Module/Cal.php:344 ../../Zotlabs/Module/Photos.php:918 +#: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Cal.php:339 +#: ../../Zotlabs/Module/Cal.php:346 ../../Zotlabs/Module/Photos.php:971 msgid "Previous" msgstr "Voriges" #: ../../Zotlabs/Module/Cdav.php:880 ../../Zotlabs/Module/Events.php:690 #: ../../Zotlabs/Module/Events.php:699 ../../Zotlabs/Module/Setup.php:263 -#: ../../Zotlabs/Module/Cal.php:338 ../../Zotlabs/Module/Cal.php:345 -#: ../../Zotlabs/Module/Photos.php:927 +#: ../../Zotlabs/Module/Cal.php:340 ../../Zotlabs/Module/Cal.php:347 +#: ../../Zotlabs/Module/Photos.php:980 msgid "Next" msgstr "Nächste" #: ../../Zotlabs/Module/Cdav.php:881 ../../Zotlabs/Module/Events.php:700 -#: ../../Zotlabs/Module/Cal.php:346 +#: ../../Zotlabs/Module/Cal.php:348 msgid "Today" msgstr "Heute" @@ -668,14 +690,13 @@ msgstr "Alles löschen" #: ../../Zotlabs/Module/Admin/Plugins.php:423 #: ../../Zotlabs/Module/Settings/Oauth.php:88 #: ../../Zotlabs/Module/Settings/Oauth.php:114 -#: ../../Zotlabs/Module/Wiki.php:333 ../../Zotlabs/Module/Wiki.php:363 +#: ../../Zotlabs/Module/Wiki.php:345 ../../Zotlabs/Module/Wiki.php:375 #: ../../Zotlabs/Module/Connedit.php:942 ../../Zotlabs/Module/Fbrowser.php:66 #: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Profiles.php:804 #: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Module/Tagrm.php:15 -#: ../../Zotlabs/Module/Tagrm.php:138 ../../addon/js_upload/js_upload.php:46 -#: ../../addon/gitwiki/Mod_Gitwiki.php:244 -#: ../../addon/gitwiki/Mod_Gitwiki.php:267 ../../include/conversation.php:1369 -#: ../../include/conversation.php:1418 +#: ../../Zotlabs/Module/Tagrm.php:138 ../../addon/gitwiki/Mod_Gitwiki.php:244 +#: ../../addon/gitwiki/Mod_Gitwiki.php:267 ../../include/conversation.php:1386 +#: ../../include/conversation.php:1435 msgid "Cancel" msgstr "Abbrechen" @@ -689,8 +710,8 @@ msgstr "Entschuldigung, aber das Bearbeiten von wiederkehrenden Veranstaltungen #: ../../Zotlabs/Module/Settings/Oauth.php:89 #: ../../Zotlabs/Module/Settings/Oauth.php:115 #: ../../Zotlabs/Module/Wiki.php:209 ../../Zotlabs/Module/Connedit.php:924 -#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Lib/NativeWikiPage.php:554 -#: ../../Zotlabs/Storage/Browser.php:234 +#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Lib/NativeWikiPage.php:558 +#: ../../Zotlabs/Storage/Browser.php:280 #: ../../Zotlabs/Widget/Wiki_page_history.php:22 #: ../../addon/rendezvous/rendezvous.php:172 #: ../../addon/gitwiki/Mod_Gitwiki.php:158 @@ -716,7 +737,7 @@ msgstr "Telefon" #: ../../Zotlabs/Module/Connedit.php:928 ../../Zotlabs/Module/Profiles.php:790 #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 ../../addon/rtof/rtof.php:93 -#: ../../addon/redred/redred.php:107 ../../include/network.php:1706 +#: ../../addon/redred/redred.php:107 ../../include/network.php:1769 msgid "Email" msgstr "E-Mail" @@ -743,19 +764,19 @@ msgid "Note" msgstr "Hinweis" #: ../../Zotlabs/Module/Cdav.php:1179 ../../Zotlabs/Module/Connedit.php:933 -#: ../../Zotlabs/Module/Profiles.php:795 ../../include/event.php:1290 +#: ../../Zotlabs/Module/Profiles.php:795 ../../include/event.php:1301 #: ../../include/connections.php:682 msgid "Mobile" msgstr "Mobil" #: ../../Zotlabs/Module/Cdav.php:1180 ../../Zotlabs/Module/Connedit.php:934 -#: ../../Zotlabs/Module/Profiles.php:796 ../../include/event.php:1291 +#: ../../Zotlabs/Module/Profiles.php:796 ../../include/event.php:1302 #: ../../include/connections.php:683 msgid "Home" msgstr "Home" #: ../../Zotlabs/Module/Cdav.php:1181 ../../Zotlabs/Module/Connedit.php:935 -#: ../../Zotlabs/Module/Profiles.php:797 ../../include/event.php:1294 +#: ../../Zotlabs/Module/Profiles.php:797 ../../include/event.php:1305 #: ../../include/connections.php:686 msgid "Work" msgstr "Arbeit" @@ -898,9 +919,13 @@ msgid "" " please import or restore these in date order (oldest first)." msgstr "Diese Inhalts-Sicherungen können wiederhergestellt werden, indem Du <a href=\"%1$s\">%2$s</a> auf jeglichem Hub besuchst, der diesen Kanal enthält. Das funktioniert am besten, wenn Du dabei die zeitliche Reihenfolge einhältst, also die Sicherungen für den ältesten Zeitraum zuerst importierst." -#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Photos.php:490 +#: ../../Zotlabs/Module/Hq.php:136 +msgid "Welcome to hubzilla!" +msgstr "Willkommen bei Hubzilla!" + +#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Photos.php:540 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Directory.php:63 -#: ../../Zotlabs/Module/Display.php:21 +#: ../../Zotlabs/Module/Directory.php:68 ../../Zotlabs/Module/Display.php:30 #: ../../Zotlabs/Module/Viewconnections.php:23 msgid "Public access denied." msgstr "Öffentlichen Zugriff verweigert." @@ -908,7 +933,7 @@ msgstr "Öffentlichen Zugriff verweigert." #: ../../Zotlabs/Module/Search.php:44 ../../Zotlabs/Module/Connections.php:313 #: ../../Zotlabs/Lib/Apps.php:250 ../../Zotlabs/Widget/Sitesearch.php:31 #: ../../include/text.php:1029 ../../include/text.php:1041 -#: ../../include/acl_selectors.php:213 ../../include/nav.php:204 +#: ../../include/acl_selectors.php:213 ../../include/nav.php:211 msgid "Search" msgstr "Suche" @@ -922,8 +947,8 @@ msgstr "Beiträge mit Schlagwort: %s" msgid "Search results for: %s" msgstr "Suchergebnisse für: %s" -#: ../../Zotlabs/Module/Pubstream.php:38 -#: ../../Zotlabs/Widget/Notifications.php:128 +#: ../../Zotlabs/Module/Pubstream.php:81 +#: ../../Zotlabs/Widget/Notifications.php:129 msgid "Public Stream" msgstr "Öffentlicher Beitrags-Stream" @@ -979,14 +1004,23 @@ msgstr "Wenn möglich, lösche einen Klon, indem Du Dich auf dem jeweiligen Hub msgid "Use this form to drop the location if the hub is no longer operating." msgstr "Benutze dieses Formular zum Löschen eines Klons, wenn es den Hub nicht mehr gibt." -#: ../../Zotlabs/Module/Apporder.php:39 -msgid "Change Order of Navigation Apps" -msgstr "App-Reihenfolge in der Navigation ändern" +#: ../../Zotlabs/Module/Apporder.php:44 +msgid "Change Order of Pinned Navbar Apps" +msgstr "Reihenfolge der in der Navigation angepinnten Apps ändern" -#: ../../Zotlabs/Module/Apporder.php:40 +#: ../../Zotlabs/Module/Apporder.php:44 +msgid "Change Order of App Tray Apps" +msgstr "Reihenfolge der Apps im App-Menü ändern" + +#: ../../Zotlabs/Module/Apporder.php:45 msgid "" -"Use arrows to move the corresponding app up or down in the display list" -msgstr "Benutze die Pfeiltasten, um die jeweilige App in der Anzeigeliste auf- oder abwärts zu bewegen." +"Use arrows to move the corresponding app left (top) or right (bottom) in the" +" navbar" +msgstr "Benutze die Pfeil-Knöpfe, um die jeweilige App in der Navigationsleiste nach links (oben) oder rechts (unten) zu bewegen" + +#: ../../Zotlabs/Module/Apporder.php:45 +msgid "Use arrows to move the corresponding app up or down in the app tray" +msgstr "Benutze die Pfeil-Knöpfe, um die jeweilige App im App-Menü nach oben oder unten zu bewegen" #: ../../Zotlabs/Module/Mitem.php:28 ../../Zotlabs/Module/Menu.php:144 msgid "Menu not found." @@ -1014,7 +1048,7 @@ msgid "Menu Item Permissions" msgstr "Zugriffsrechte des Menü-Elements" #: ../../Zotlabs/Module/Mitem.php:154 ../../Zotlabs/Module/Mitem.php:231 -#: ../../Zotlabs/Module/Settings/Channel.php:513 +#: ../../Zotlabs/Module/Settings/Channel.php:522 msgid "(click to open/close)" msgstr "(zum öffnen/schließen anklicken)" @@ -1038,17 +1072,17 @@ msgstr "Magic-Auth verwenden, falls verfügbar" #: ../../Zotlabs/Module/Mitem.php:240 ../../Zotlabs/Module/Mitem.php:241 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Removeme.php:63 -#: ../../Zotlabs/Module/Admin/Site.php:237 -#: ../../Zotlabs/Module/Settings/Channel.php:298 -#: ../../Zotlabs/Module/Settings/Display.php:103 -#: ../../Zotlabs/Module/Api.php:97 ../../Zotlabs/Module/Photos.php:644 +#: ../../Zotlabs/Module/Admin/Site.php:240 +#: ../../Zotlabs/Module/Settings/Channel.php:305 +#: ../../Zotlabs/Module/Settings/Display.php:105 +#: ../../Zotlabs/Module/Api.php:97 ../../Zotlabs/Module/Photos.php:697 #: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Wiki.php:219 #: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Connedit.php:779 #: ../../Zotlabs/Module/Menu.php:100 ../../Zotlabs/Module/Menu.php:157 -#: ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Filestorage.php:150 -#: ../../Zotlabs/Module/Filestorage.php:158 -#: ../../Zotlabs/Storage/Browser.php:351 ../../boot.php:1644 +#: ../../Zotlabs/Module/Defperms.php:180 ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Module/Filestorage.php:155 +#: ../../Zotlabs/Module/Filestorage.php:163 +#: ../../Zotlabs/Storage/Browser.php:394 ../../boot.php:1669 #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic_c/php/config.php:115 #: ../../view/theme/redbasic/php/config.php:98 @@ -1089,16 +1123,17 @@ msgstr "Nein" #: ../../Zotlabs/Module/Mitem.php:240 ../../Zotlabs/Module/Mitem.php:241 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Removeme.php:63 -#: ../../Zotlabs/Module/Admin/Site.php:239 -#: ../../Zotlabs/Module/Settings/Channel.php:298 -#: ../../Zotlabs/Module/Settings/Display.php:103 -#: ../../Zotlabs/Module/Api.php:96 ../../Zotlabs/Module/Photos.php:644 +#: ../../Zotlabs/Module/Admin/Site.php:242 +#: ../../Zotlabs/Module/Settings/Channel.php:305 +#: ../../Zotlabs/Module/Settings/Display.php:105 +#: ../../Zotlabs/Module/Api.php:96 ../../Zotlabs/Module/Photos.php:697 #: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Wiki.php:219 #: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Menu.php:100 -#: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Filestorage.php:150 -#: ../../Zotlabs/Module/Filestorage.php:158 -#: ../../Zotlabs/Storage/Browser.php:351 ../../boot.php:1644 +#: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Defperms.php:180 +#: ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Module/Filestorage.php:155 +#: ../../Zotlabs/Module/Filestorage.php:163 +#: ../../Zotlabs/Storage/Browser.php:394 ../../boot.php:1669 #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic_c/php/config.php:115 #: ../../view/theme/redbasic/php/config.php:98 @@ -1240,9 +1275,9 @@ msgstr "Titel und Startzeit des Termins sind erforderlich." msgid "Event not found." msgstr "Termin nicht gefunden." -#: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Tagger.php:51 -#: ../../Zotlabs/Module/Like.php:372 ../../include/conversation.php:119 -#: ../../include/text.php:1941 ../../include/event.php:1145 +#: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Tagger.php:73 +#: ../../Zotlabs/Module/Like.php:384 ../../include/conversation.php:119 +#: ../../include/text.php:1941 ../../include/event.php:1153 msgid "event" msgstr "Termin" @@ -1251,9 +1286,9 @@ msgid "Edit event title" msgstr "Termintitel bearbeiten" #: ../../Zotlabs/Module/Events.php:460 ../../Zotlabs/Module/Events.php:465 -#: ../../Zotlabs/Module/Appman.php:136 ../../Zotlabs/Module/Appman.php:137 +#: ../../Zotlabs/Module/Appman.php:140 ../../Zotlabs/Module/Appman.php:141 #: ../../Zotlabs/Module/Profiles.php:748 ../../Zotlabs/Module/Profiles.php:752 -#: ../../include/datetime.php:259 +#: ../../include/datetime.php:265 msgid "Required" msgstr "Benötigt" @@ -1303,13 +1338,13 @@ msgstr "Beschreibung bearbeiten" msgid "Edit Location" msgstr "Ort bearbeiten" -#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1070 -#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/ThreadItem.php:753 -#: ../../include/conversation.php:1313 +#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1123 +#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/ThreadItem.php:764 +#: ../../include/conversation.php:1330 msgid "Preview" msgstr "Vorschau" -#: ../../Zotlabs/Module/Events.php:479 ../../include/conversation.php:1385 +#: ../../Zotlabs/Module/Events.php:479 ../../include/conversation.php:1402 msgid "Permission settings" msgstr "Berechtigungs-Einstellungen" @@ -1321,7 +1356,7 @@ msgstr "Zeitzone:" msgid "Advanced Options" msgstr "Weitere Optionen" -#: ../../Zotlabs/Module/Events.php:605 ../../Zotlabs/Module/Cal.php:264 +#: ../../Zotlabs/Module/Events.php:605 ../../Zotlabs/Module/Cal.php:266 msgid "l, F j" msgstr "l, j. F" @@ -1333,7 +1368,7 @@ msgstr "Termin bearbeiten" msgid "Delete event" msgstr "Termin löschen" -#: ../../Zotlabs/Module/Events.php:660 ../../Zotlabs/Module/Cal.php:313 +#: ../../Zotlabs/Module/Events.php:660 ../../Zotlabs/Module/Cal.php:315 #: ../../include/text.php:1760 msgid "Link to Source" msgstr "Link zur Quelle" @@ -1342,16 +1377,16 @@ msgstr "Link zur Quelle" msgid "calendar" msgstr "Kalender" -#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:336 +#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:338 msgid "Edit Event" msgstr "Termin bearbeiten" -#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:336 +#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:338 msgid "Create Event" msgstr "Termin anlegen" -#: ../../Zotlabs/Module/Events.php:691 ../../Zotlabs/Module/Cal.php:339 -#: ../../include/channel.php:1588 +#: ../../Zotlabs/Module/Events.php:691 ../../Zotlabs/Module/Cal.php:341 +#: ../../include/channel.php:1636 msgid "Export" msgstr "Exportieren" @@ -1371,47 +1406,47 @@ msgstr "App installiert." msgid "Malformed app." msgstr "Fehlerhafte App." -#: ../../Zotlabs/Module/Appman.php:125 +#: ../../Zotlabs/Module/Appman.php:129 msgid "Embed code" msgstr "Code einbetten" -#: ../../Zotlabs/Module/Appman.php:131 +#: ../../Zotlabs/Module/Appman.php:135 msgid "Edit App" msgstr "App bearbeiten" -#: ../../Zotlabs/Module/Appman.php:131 +#: ../../Zotlabs/Module/Appman.php:135 msgid "Create App" msgstr "App erstellen" -#: ../../Zotlabs/Module/Appman.php:136 +#: ../../Zotlabs/Module/Appman.php:140 msgid "Name of app" msgstr "Name der App" -#: ../../Zotlabs/Module/Appman.php:137 +#: ../../Zotlabs/Module/Appman.php:141 msgid "Location (URL) of app" msgstr "Ort (URL) der App" -#: ../../Zotlabs/Module/Appman.php:139 +#: ../../Zotlabs/Module/Appman.php:143 msgid "Photo icon URL" msgstr "URL zum Icon" -#: ../../Zotlabs/Module/Appman.php:139 +#: ../../Zotlabs/Module/Appman.php:143 msgid "80 x 80 pixels - optional" msgstr "80 x 80 Pixel – optional" -#: ../../Zotlabs/Module/Appman.php:140 +#: ../../Zotlabs/Module/Appman.php:144 msgid "Categories (optional, comma separated list)" msgstr "Kategorien (optional, kommagetrennte Liste)" -#: ../../Zotlabs/Module/Appman.php:141 +#: ../../Zotlabs/Module/Appman.php:145 msgid "Version ID" msgstr "Versions-ID" -#: ../../Zotlabs/Module/Appman.php:142 +#: ../../Zotlabs/Module/Appman.php:146 msgid "Price of app" msgstr "Preis der App" -#: ../../Zotlabs/Module/Appman.php:143 +#: ../../Zotlabs/Module/Appman.php:147 msgid "Location (URL) to purchase app" msgstr "Ort (URL), um die App zu kaufen" @@ -1423,30 +1458,55 @@ msgstr "Bitte melde dich an." msgid "Hub not found." msgstr "Server nicht gefunden." -#: ../../Zotlabs/Module/Subthread.php:87 ../../Zotlabs/Module/Tagger.php:47 -#: ../../Zotlabs/Module/Like.php:370 +#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Tagger.php:69 +#: ../../Zotlabs/Module/Like.php:382 #: ../../addon/redphotos/redphotohelper.php:71 -#: ../../addon/diaspora/Receiver.php:1424 ../../addon/pubcrawl/as.php:1288 +#: ../../addon/diaspora/Receiver.php:1433 ../../addon/pubcrawl/as.php:1295 #: ../../include/conversation.php:116 ../../include/text.php:1938 msgid "photo" msgstr "Foto" -#: ../../Zotlabs/Module/Subthread.php:87 ../../Zotlabs/Module/Like.php:370 -#: ../../addon/diaspora/Receiver.php:1424 ../../addon/pubcrawl/as.php:1288 +#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Like.php:382 +#: ../../addon/diaspora/Receiver.php:1433 ../../addon/pubcrawl/as.php:1295 #: ../../include/conversation.php:144 ../../include/text.php:1944 msgid "status" msgstr "Status" -#: ../../Zotlabs/Module/Subthread.php:118 +#: ../../Zotlabs/Module/Subthread.php:142 #, php-format msgid "%1$s is following %2$s's %3$s" msgstr "%1$s folgt nun %2$ss %3$s" -#: ../../Zotlabs/Module/Subthread.php:120 +#: ../../Zotlabs/Module/Subthread.php:144 #, php-format msgid "%1$s stopped following %2$s's %3$s" msgstr "%1$s folgt %2$ss %3$s nicht mehr" +#: ../../Zotlabs/Module/Article_edit.php:44 ../../Zotlabs/Module/Cal.php:62 +#: ../../Zotlabs/Module/Chanview.php:96 ../../Zotlabs/Module/Page.php:75 +#: ../../Zotlabs/Module/Wall_upload.php:31 ../../Zotlabs/Module/Block.php:41 +#: ../../Zotlabs/Module/Card_edit.php:44 +msgid "Channel not found." +msgstr "Kanal nicht gefunden." + +#: ../../Zotlabs/Module/Article_edit.php:101 +#: ../../Zotlabs/Module/Editblock.php:116 ../../Zotlabs/Module/Chat.php:207 +#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Mail.php:288 +#: ../../Zotlabs/Module/Mail.php:430 ../../Zotlabs/Module/Card_edit.php:101 +#: ../../include/conversation.php:1278 +msgid "Insert web link" +msgstr "Link einfügen" + +#: ../../Zotlabs/Module/Article_edit.php:117 +#: ../../Zotlabs/Module/Editblock.php:129 +#: ../../Zotlabs/Module/Card_edit.php:117 ../../include/conversation.php:1398 +msgid "Title (optional)" +msgstr "Titel (optional)" + +#: ../../Zotlabs/Module/Article_edit.php:128 +msgid "Edit Article" +msgstr "Artikel bearbeiten" + #: ../../Zotlabs/Module/Import_items.php:48 ../../Zotlabs/Module/Import.php:64 msgid "Nothing to import." msgstr "Nichts zu importieren." @@ -1492,22 +1552,22 @@ msgid "You have created %1$.0f of %2$.0f allowed channels." msgstr "Du hast %1$.0f von maximal %2$.0f erlaubten Kanälen eingerichtet." #: ../../Zotlabs/Module/New_channel.php:134 -#: ../../Zotlabs/Module/Register.php:237 +#: ../../Zotlabs/Module/Register.php:249 msgid "Name or caption" msgstr "Name oder Titel" #: ../../Zotlabs/Module/New_channel.php:134 -#: ../../Zotlabs/Module/Register.php:237 +#: ../../Zotlabs/Module/Register.php:249 msgid "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\"" msgstr "Beispiele: „Horst Weidinger“, „Lisa und ihr Meerschweinchen“, „Fußball“, „Segelflieger-Forum“ " #: ../../Zotlabs/Module/New_channel.php:136 -#: ../../Zotlabs/Module/Register.php:239 +#: ../../Zotlabs/Module/Register.php:251 msgid "Choose a short nickname" msgstr "Wähle einen kurzen Spitznamen" #: ../../Zotlabs/Module/New_channel.php:136 -#: ../../Zotlabs/Module/Register.php:239 +#: ../../Zotlabs/Module/Register.php:251 #, php-format msgid "" "Your nickname will be used to create an easy to remember channel address " @@ -1515,17 +1575,17 @@ msgid "" msgstr "Dein Spitzname wird verwendet, um eine leicht zu merkende Kanal-Adresse (ähnlich einer E-Mail-Adresse) zu erzeugen, die Du mit anderen austauschen kannst, z.B. nickname%s" #: ../../Zotlabs/Module/New_channel.php:137 -#: ../../Zotlabs/Module/Register.php:240 +#: ../../Zotlabs/Module/Register.php:252 msgid "Channel role and privacy" msgstr "Kanaltyp und Privatspäre-Einstellungen" #: ../../Zotlabs/Module/New_channel.php:137 -#: ../../Zotlabs/Module/Register.php:240 +#: ../../Zotlabs/Module/Register.php:252 msgid "Select a channel role with your privacy requirements." msgstr "Wähle einen passenden Kanaltyp mit den zugehörigen Voreinstellungen zur Privatsphäre." #: ../../Zotlabs/Module/New_channel.php:137 -#: ../../Zotlabs/Module/Register.php:240 +#: ../../Zotlabs/Module/Register.php:252 msgid "Read more about roles" msgstr "Mehr Informationen über Rollen" @@ -1587,7 +1647,7 @@ msgid "" msgstr "Standardmäßig wird der Kanal nur auf diesem Server gelöscht, seine Klone verbleiben im Netzwerk" #: ../../Zotlabs/Module/Removeme.php:64 -#: ../../Zotlabs/Module/Settings/Channel.php:580 +#: ../../Zotlabs/Module/Settings/Channel.php:593 msgid "Remove Channel" msgstr "Kanal löschen" @@ -1600,12 +1660,12 @@ msgid "NEW" msgstr "NEU" #: ../../Zotlabs/Module/Sharedwithme.php:107 -#: ../../Zotlabs/Storage/Browser.php:236 ../../include/text.php:1394 +#: ../../Zotlabs/Storage/Browser.php:282 ../../include/text.php:1394 msgid "Size" msgstr "Größe" #: ../../Zotlabs/Module/Sharedwithme.php:108 -#: ../../Zotlabs/Storage/Browser.php:237 +#: ../../Zotlabs/Storage/Browser.php:283 msgid "Last Modified" msgstr "Zuletzt geändert" @@ -2193,10 +2253,10 @@ msgstr "Versuche, diesen Updateschritt automatisch auszuführen" #: ../../Zotlabs/Module/Admin/Plugins.php:259 #: ../../Zotlabs/Module/Admin/Themes.php:72 ../../Zotlabs/Module/Thing.php:89 -#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:33 -#: ../../Zotlabs/Module/Display.php:347 +#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:46 +#: ../../Zotlabs/Module/Display.php:408 #: ../../Zotlabs/Module/Filestorage.php:24 ../../Zotlabs/Module/Admin.php:62 -#: ../../include/items.php:3410 +#: ../../include/items.php:3546 msgid "Item not found." msgstr "Element nicht gefunden." @@ -2227,7 +2287,7 @@ msgstr "Aktivieren" #: ../../Zotlabs/Module/Admin/Channels.php:145 #: ../../Zotlabs/Module/Admin/Themes.php:122 #: ../../Zotlabs/Module/Admin/Themes.php:156 -#: ../../Zotlabs/Module/Admin/Site.php:271 +#: ../../Zotlabs/Module/Admin/Site.php:275 #: ../../Zotlabs/Module/Admin/Security.php:86 #: ../../Zotlabs/Module/Admin.php:136 msgid "Administration" @@ -2246,8 +2306,8 @@ msgstr "Umschalten" #: ../../Zotlabs/Module/Admin/Plugins.php:344 #: ../../Zotlabs/Module/Admin/Themes.php:125 ../../Zotlabs/Lib/Apps.php:236 -#: ../../Zotlabs/Widget/Settings_menu.php:133 ../../include/nav.php:132 -#: ../../include/nav.php:217 +#: ../../Zotlabs/Widget/Settings_menu.php:133 ../../include/nav.php:139 +#: ../../include/nav.php:224 msgid "Settings" msgstr "Einstellungen" @@ -2331,7 +2391,7 @@ msgid "Switch branch" msgstr "Zweig/Branch wechseln" #: ../../Zotlabs/Module/Admin/Plugins.php:455 -#: ../../Zotlabs/Module/Photos.php:967 ../../Zotlabs/Module/Tagrm.php:137 +#: ../../Zotlabs/Module/Photos.php:1020 ../../Zotlabs/Module/Tagrm.php:137 #: ../../addon/superblock/superblock.php:116 msgid "Remove" msgstr "Entfernen" @@ -2354,7 +2414,7 @@ msgstr[1] "%s Konten gelöscht" msgid "Account not found" msgstr "Konto nicht gefunden" -#: ../../Zotlabs/Module/Admin/Accounts.php:90 ../../include/channel.php:2357 +#: ../../Zotlabs/Module/Admin/Accounts.php:90 ../../include/channel.php:2456 #, php-format msgid "Account '%s' deleted" msgstr "Konto '%s' gelöscht" @@ -2393,7 +2453,7 @@ msgid "No registrations." msgstr "Keine Registrierungen." #: ../../Zotlabs/Module/Admin/Accounts.php:171 -#: ../../Zotlabs/Module/Connections.php:282 ../../include/conversation.php:716 +#: ../../Zotlabs/Module/Connections.php:282 ../../include/conversation.php:732 msgid "Approve" msgstr "Genehmigen" @@ -2415,7 +2475,7 @@ msgstr "Freigeben" msgid "ID" msgstr "ID" -#: ../../Zotlabs/Module/Admin/Accounts.php:182 ../../include/group.php:288 +#: ../../Zotlabs/Module/Admin/Accounts.php:182 ../../include/group.php:284 msgid "All Channels" msgstr "Alle Kanäle" @@ -2550,7 +2610,7 @@ msgid "Disallow Code" msgstr "Code sperren" #: ../../Zotlabs/Module/Admin/Channels.php:154 -#: ../../include/conversation.php:1791 ../../include/nav.php:399 +#: ../../include/conversation.php:1808 ../../include/nav.php:410 msgid "Channel" msgstr "Kanal" @@ -2595,394 +2655,412 @@ msgstr "[Experimentell]" msgid "[Unsupported]" msgstr "[Nicht unterstützt]" -#: ../../Zotlabs/Module/Admin/Site.php:144 +#: ../../Zotlabs/Module/Admin/Site.php:147 msgid "Site settings updated." msgstr "Site-Einstellungen aktualisiert." -#: ../../Zotlabs/Module/Admin/Site.php:170 +#: ../../Zotlabs/Module/Admin/Site.php:173 #: ../../view/theme/redbasic_c/php/config.php:15 -#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:2943 +#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:2968 msgid "Default" msgstr "Standard" -#: ../../Zotlabs/Module/Admin/Site.php:181 -#: ../../Zotlabs/Module/Settings/Display.php:137 +#: ../../Zotlabs/Module/Admin/Site.php:184 +#: ../../Zotlabs/Module/Settings/Display.php:139 #, php-format msgid "%s - (Incompatible)" msgstr "%s - (Inkompatibel)" -#: ../../Zotlabs/Module/Admin/Site.php:188 -#: ../../Zotlabs/Module/Settings/Display.php:151 +#: ../../Zotlabs/Module/Admin/Site.php:191 +#: ../../Zotlabs/Module/Settings/Display.php:153 msgid "mobile" msgstr "mobil" -#: ../../Zotlabs/Module/Admin/Site.php:190 +#: ../../Zotlabs/Module/Admin/Site.php:193 msgid "experimental" msgstr "experimentell" -#: ../../Zotlabs/Module/Admin/Site.php:192 +#: ../../Zotlabs/Module/Admin/Site.php:195 msgid "unsupported" msgstr "nicht unterstützt" -#: ../../Zotlabs/Module/Admin/Site.php:238 +#: ../../Zotlabs/Module/Admin/Site.php:241 msgid "Yes - with approval" msgstr "Ja - mit Zustimmung" -#: ../../Zotlabs/Module/Admin/Site.php:244 +#: ../../Zotlabs/Module/Admin/Site.php:247 msgid "My site is not a public server" msgstr "Mein Server ist kein öffentlicher Server" -#: ../../Zotlabs/Module/Admin/Site.php:245 +#: ../../Zotlabs/Module/Admin/Site.php:248 msgid "My site has paid access only" msgstr "Meine Seite hat nur bezahlten Zugriff" -#: ../../Zotlabs/Module/Admin/Site.php:246 +#: ../../Zotlabs/Module/Admin/Site.php:249 msgid "My site has free access only" msgstr "Meine Seite hat nur freien Zugriff" -#: ../../Zotlabs/Module/Admin/Site.php:247 +#: ../../Zotlabs/Module/Admin/Site.php:250 msgid "My site offers free accounts with optional paid upgrades" msgstr "Mein Server bietet kostenlose Konten mit der Möglichkeit zu bezahlten Upgrades" -#: ../../Zotlabs/Module/Admin/Site.php:258 +#: ../../Zotlabs/Module/Admin/Site.php:262 msgid "Beginner/Basic" msgstr "Anfänger/Basis" -#: ../../Zotlabs/Module/Admin/Site.php:259 +#: ../../Zotlabs/Module/Admin/Site.php:263 msgid "Novice - not skilled but willing to learn" msgstr "Anfänger - unerfahren, aber bereit zu lernen" -#: ../../Zotlabs/Module/Admin/Site.php:260 +#: ../../Zotlabs/Module/Admin/Site.php:264 msgid "Intermediate - somewhat comfortable" msgstr "Fortgeschritten - relativ komfortabel" -#: ../../Zotlabs/Module/Admin/Site.php:261 +#: ../../Zotlabs/Module/Admin/Site.php:265 msgid "Advanced - very comfortable" msgstr "Fortgeschritten - sehr komfortabel" -#: ../../Zotlabs/Module/Admin/Site.php:262 +#: ../../Zotlabs/Module/Admin/Site.php:266 msgid "Expert - I can write computer code" msgstr "Experte - Ich kann Computercode schreiben" -#: ../../Zotlabs/Module/Admin/Site.php:263 +#: ../../Zotlabs/Module/Admin/Site.php:267 msgid "Wizard - I probably know more than you do" msgstr "Zauberer - ich kann wahrscheinlich mehr als Du" -#: ../../Zotlabs/Module/Admin/Site.php:272 ../../Zotlabs/Widget/Admin.php:22 +#: ../../Zotlabs/Module/Admin/Site.php:276 ../../Zotlabs/Widget/Admin.php:22 msgid "Site" msgstr "Seite" -#: ../../Zotlabs/Module/Admin/Site.php:274 -#: ../../Zotlabs/Module/Register.php:251 +#: ../../Zotlabs/Module/Admin/Site.php:278 +#: ../../Zotlabs/Module/Register.php:263 msgid "Registration" msgstr "Registrierung" -#: ../../Zotlabs/Module/Admin/Site.php:275 +#: ../../Zotlabs/Module/Admin/Site.php:279 msgid "File upload" msgstr "Dateiupload" -#: ../../Zotlabs/Module/Admin/Site.php:276 +#: ../../Zotlabs/Module/Admin/Site.php:280 msgid "Policies" msgstr "Richtlinien" -#: ../../Zotlabs/Module/Admin/Site.php:277 +#: ../../Zotlabs/Module/Admin/Site.php:281 #: ../../include/contact_widgets.php:16 msgid "Advanced" msgstr "Fortgeschritten" -#: ../../Zotlabs/Module/Admin/Site.php:281 -#: ../../addon/statusnet/statusnet.php:890 +#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../addon/statusnet/statusnet.php:891 msgid "Site name" msgstr "Seitenname" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:287 msgid "Site default technical skill level" msgstr "Standard-Qualifikationsstufe der Website" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:287 msgid "Used to provide a member experience matched to technical comfort level" msgstr "Dies wird verwendet, um eine Benutzererfahrung passend zur technischen Qualifikationsstufe zu bieten." -#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Lock the technical skill level setting" msgstr "Sperre die technische Qualifikationsstufe" -#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Members can set their own technical comfort level by default" msgstr "Benutzer können standardmäßig ihre eigene technische Qualifikationsstufe einstellen" -#: ../../Zotlabs/Module/Admin/Site.php:287 +#: ../../Zotlabs/Module/Admin/Site.php:291 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../Zotlabs/Module/Admin/Site.php:288 +#: ../../Zotlabs/Module/Admin/Site.php:292 msgid "Administrator Information" msgstr "Administrator-Informationen" -#: ../../Zotlabs/Module/Admin/Site.php:288 +#: ../../Zotlabs/Module/Admin/Site.php:292 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Kontaktinformationen für Administratoren des Servers. Wird auf der siteinfo-Seite angezeigt. BBCode kann verwendet werden." -#: ../../Zotlabs/Module/Admin/Site.php:289 +#: ../../Zotlabs/Module/Admin/Site.php:293 #: ../../Zotlabs/Module/Siteinfo.php:22 msgid "Site Information" msgstr "Seiteninformationen" -#: ../../Zotlabs/Module/Admin/Site.php:289 +#: ../../Zotlabs/Module/Admin/Site.php:293 msgid "" "Publicly visible description of this site. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Öffentlich sichtbare Beschreibung dieses Servers. Wird auf der siteinfo-Seite angezeigt. BBCode kann hier verwendet werden." -#: ../../Zotlabs/Module/Admin/Site.php:290 +#: ../../Zotlabs/Module/Admin/Site.php:294 msgid "System language" msgstr "System-Sprache" -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Site.php:295 msgid "System theme" msgstr "System-Design" -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Site.php:295 msgid "" "Default system theme - may be over-ridden by user profiles - <a href='#' " "id='cnftheme'>change theme settings</a>" msgstr "Standard-System-Design – kann durch Nutzerprofile überschieben werden – <a href='#' id='cnftheme'>Design-Einstellungen ändern</a>" -#: ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Module/Admin/Site.php:296 msgid "Mobile system theme" msgstr "System-Design für mobile Geräte:" -#: ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Module/Admin/Site.php:296 msgid "Theme for mobile devices" msgstr "Theme für mobile Geräte" -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Admin/Site.php:298 msgid "Allow Feeds as Connections" msgstr "Feeds als Verbindungen erlauben" -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Admin/Site.php:298 msgid "(Heavy system resource usage)" msgstr "(führt zu hoher Systemlast)" -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:299 msgid "Maximum image size" msgstr "Maximale Bildgröße" -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:299 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Maximale Größe hochgeladener Bilder in Bytes. Standard ist 0 (keine Einschränkung)." -#: ../../Zotlabs/Module/Admin/Site.php:296 +#: ../../Zotlabs/Module/Admin/Site.php:300 msgid "Does this site allow new member registration?" msgstr "Erlaubt dieser Server die Registrierung neuer Nutzer?" -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../Zotlabs/Module/Admin/Site.php:301 msgid "Invitation only" msgstr "Nur mit Einladung" -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../Zotlabs/Module/Admin/Site.php:301 msgid "" "Only allow new member registrations with an invitation code. Above register " "policy must be set to Yes." msgstr "Erlaube die Neuregistrierung von Mitglieder nur mit einem Einladungscode. Die Registrierungs-Politik muss oben auf Ja gesetzt werden." -#: ../../Zotlabs/Module/Admin/Site.php:298 +#: ../../Zotlabs/Module/Admin/Site.php:302 msgid "Which best describes the types of account offered by this hub?" msgstr "Was ist die passendste Beschreibung der Konten auf diesem Hub?" -#: ../../Zotlabs/Module/Admin/Site.php:299 +#: ../../Zotlabs/Module/Admin/Site.php:303 msgid "Register text" msgstr "Registrierungstext" -#: ../../Zotlabs/Module/Admin/Site.php:299 +#: ../../Zotlabs/Module/Admin/Site.php:303 msgid "Will be displayed prominently on the registration page." msgstr "Wird gut sichtbar auf der Registrierungs-Seite angezeigt." -#: ../../Zotlabs/Module/Admin/Site.php:300 +#: ../../Zotlabs/Module/Admin/Site.php:304 msgid "Site homepage to show visitors (default: login box)" msgstr "Homepage des Hubs, die Besuchern angezeigt wird (Voreinstellung: Anmeldemaske)" -#: ../../Zotlabs/Module/Admin/Site.php:300 +#: ../../Zotlabs/Module/Admin/Site.php:304 msgid "" "example: 'public' to show public stream, 'page/sys/home' to show a system " "webpage called 'home' or 'include:home.html' to include a file." msgstr "Beispiele: 'public', um den Stream aller öffentlichen Beiträge anzuzeigen, 'page/sys/home', um eine System-Webseite namens 'home' anzuzeigen, 'include:home.html', um eine Datei einzufügen." -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:305 msgid "Preserve site homepage URL" msgstr "Homepage-URL schützen" -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:305 msgid "" "Present the site homepage in a frame at the original location instead of " "redirecting" msgstr "Zeigt die Homepage an der Original-URL in einem Frame an, statt auf die eigentliche Adresse der Seite umzuleiten." -#: ../../Zotlabs/Module/Admin/Site.php:302 +#: ../../Zotlabs/Module/Admin/Site.php:306 msgid "Accounts abandoned after x days" msgstr "Konten gelten nach X Tagen als unbenutzt" -#: ../../Zotlabs/Module/Admin/Site.php:302 +#: ../../Zotlabs/Module/Admin/Site.php:306 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "Verschwende keine Systemressourcen auf das Pollen von externen Seiten, wenn das Konto nicht mehr benutzt wird. Trage hier 0 für kein zeitliches Limit." -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:307 msgid "Allowed friend domains" msgstr "Erlaubte Domains für Kontakte" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:307 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Liste der Domains, die für Freundschaften erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben." -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:308 msgid "Verify Email Addresses" msgstr "E-Mail-Adressen überprüfen" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:308 msgid "" "Check to verify email addresses used in account registration (recommended)." msgstr "Aktivieren, um die Überprüfung von E-Mail-Adressen bei der Registrierung von Benutzerkonten zu aktivieren (empfohlen)." -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:309 msgid "Force publish" msgstr "Veröffentlichung erzwingen" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:309 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Die Veröffentlichung aller Profile dieses Servers im Verzeichnis erzwingen." -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:310 msgid "Import Public Streams" msgstr "Öffentliche Beiträge importieren" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:310 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "Öffentliche Beiträge von anderen Servern importieren und zur Verfügung stellen. Warnung: Diese Inhalte sind nicht moderiert." -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:311 msgid "Login on Homepage" msgstr "Log-in auf der Startseite" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:311 msgid "" "Present a login box to visitors on the home page if no other content has " "been configured." msgstr "Zeigt Besuchern der Homepage eine Anmeldemaske, falls keine anderen Inhalte konfiguriert wurden." -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:312 msgid "Enable context help" msgstr "Kontext-Hilfe aktivieren" -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:312 msgid "" "Display contextual help for the current page when the help button is " "pressed." msgstr "Zeigt Kontext-sensitive Hilfe für die aktuelle Seite an, wenn der Hilfe-Knopf geklickt wird." -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:314 msgid "Reply-to email address for system generated email." msgstr "Antwortadresse (reply-to) für Emails, die vom System generiert wurden." -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:315 msgid "Sender (From) email address for system generated email." msgstr "Absenderadresse (from) für Emails, die vom System generiert wurden." -#: ../../Zotlabs/Module/Admin/Site.php:312 +#: ../../Zotlabs/Module/Admin/Site.php:316 msgid "Name of email sender for system generated email." msgstr "Name des Versenders von Emails, die vom System generiert wurden." -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:318 msgid "Directory Server URL" msgstr "Verzeichnisserver-URL" -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:318 msgid "Default directory server" msgstr "Standard-Verzeichnisserver" -#: ../../Zotlabs/Module/Admin/Site.php:316 +#: ../../Zotlabs/Module/Admin/Site.php:320 msgid "Proxy user" msgstr "Proxy Benutzer" -#: ../../Zotlabs/Module/Admin/Site.php:317 +#: ../../Zotlabs/Module/Admin/Site.php:321 msgid "Proxy URL" msgstr "Proxy URL" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:322 msgid "Network timeout" msgstr "Netzwerk-Timeout" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:322 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Wert in Sekunden. 0 für unbegrenzt (nicht empfohlen)." -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:323 msgid "Delivery interval" msgstr "Auslieferung Intervall" -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:323 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 "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared Hosts, 2-3 für VPS, 0-1 für große dedizierte Server." -#: ../../Zotlabs/Module/Admin/Site.php:320 +#: ../../Zotlabs/Module/Admin/Site.php:324 msgid "Deliveries per process" msgstr "Zustellungen pro Prozess" -#: ../../Zotlabs/Module/Admin/Site.php:320 +#: ../../Zotlabs/Module/Admin/Site.php:324 msgid "" "Number of deliveries to attempt in a single operating system process. Adjust" " if necessary to tune system performance. Recommend: 1-5." msgstr "Anzahl der Zustellungen, die innerhalb eines einzelnen Betriebssystemprozesses versucht werden. Anpassen, falls nötig, um die System-Performance zu verbessern. Empfehlung: 1-5." -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:325 +msgid "Queue Threshold" +msgstr "Warteschlangen-Grenzwert" + +#: ../../Zotlabs/Module/Admin/Site.php:325 +msgid "" +"Always defer immediate delivery if queue contains more than this number of " +"entries." +msgstr "Unmittelbare Zustellung immer verzögern, wenn die Warteschlange mehr als diese Anzahl von Einträgen enthält." + +#: ../../Zotlabs/Module/Admin/Site.php:326 msgid "Poll interval" msgstr "Abfrageintervall" -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:326 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "Verzögere Hintergrundprozesse um diese Anzahl Sekunden, um die Systemlast zu reduzieren. Bei 0 wird das Auslieferungsintervall verwendet." -#: ../../Zotlabs/Module/Admin/Site.php:322 +#: ../../Zotlabs/Module/Admin/Site.php:327 msgid "Path to ImageMagick convert program" msgstr "Pfad zum ImageMagick-Programm convert" -#: ../../Zotlabs/Module/Admin/Site.php:322 +#: ../../Zotlabs/Module/Admin/Site.php:327 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 "Wenn gesetzt, dann verwende dieses Programm zum Erzeugen von Vorschaubildern großer Fotos (>4000 Pixel in beiden Richtungen), anderenfalls kann Speicherüberlauf auftreten. Beispiel: /usr/bin/convert" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:328 +msgid "Allow SVG thumbnails in file browser" +msgstr "Erlaube SVG-Vorschaubilder im Dateibrowser" + +#: ../../Zotlabs/Module/Admin/Site.php:328 +msgid "WARNING: SVG images may contain malicious code." +msgstr "Warnung: SVG-Grafiken können Schadcode enthalten." + +#: ../../Zotlabs/Module/Admin/Site.php:329 msgid "Maximum Load Average" msgstr "Maximales Load Average" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:329 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "Maximale Systemlast, bevor Verteil- und Empfangsprozesse verschoben werden – Standard 50" -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "Expiration period in days for imported (grid/network) content" msgstr "Setze den Zeitraum (in Tagen), ab wann importierte (aus dem Netzwerk) Inhalte ablaufen sollen" -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "0 for no expiration of imported content" msgstr "0 = keine Löschung importierter Inhalte" @@ -3261,19 +3339,19 @@ msgstr "Name der Berechtigungsrolle" #: ../../Zotlabs/Module/Settings/Permcats.php:103 #: ../../Zotlabs/Module/Settings/Tokens.php:161 -#: ../../Zotlabs/Module/Connedit.php:908 +#: ../../Zotlabs/Module/Connedit.php:908 ../../Zotlabs/Module/Defperms.php:250 msgid "My Settings" msgstr "Meine Einstellungen" #: ../../Zotlabs/Module/Settings/Permcats.php:105 #: ../../Zotlabs/Module/Settings/Tokens.php:163 -#: ../../Zotlabs/Module/Connedit.php:903 +#: ../../Zotlabs/Module/Connedit.php:903 ../../Zotlabs/Module/Defperms.php:248 msgid "inherited" msgstr "geerbt" #: ../../Zotlabs/Module/Settings/Permcats.php:108 #: ../../Zotlabs/Module/Settings/Tokens.php:166 -#: ../../Zotlabs/Module/Connedit.php:910 +#: ../../Zotlabs/Module/Connedit.php:910 ../../Zotlabs/Module/Defperms.php:253 msgid "Individual Permissions" msgstr "Individuelle Zugriffsrechte" @@ -3287,18 +3365,19 @@ msgid "" " settings here." msgstr "Einige Berechtigungen werden möglicherweise von den globalen <a href=\"settings\">Sicherheits- und Privatsphäre-Einstellungen</a> dieses Kanals vererbt. Diese haben eine höhere Priorität als die Einstellungen an der Verbindung und können hier nicht verändert werden." -#: ../../Zotlabs/Module/Settings/Channel.php:62 -#: ../../Zotlabs/Module/Settings/Channel.php:66 -#: ../../Zotlabs/Module/Settings/Channel.php:67 -#: ../../Zotlabs/Module/Settings/Channel.php:70 -#: ../../Zotlabs/Module/Settings/Channel.php:81 +#: ../../Zotlabs/Module/Settings/Channel.php:64 +#: ../../Zotlabs/Module/Settings/Channel.php:68 +#: ../../Zotlabs/Module/Settings/Channel.php:69 +#: ../../Zotlabs/Module/Settings/Channel.php:72 +#: ../../Zotlabs/Module/Settings/Channel.php:83 #: ../../Zotlabs/Module/Connedit.php:711 ../../Zotlabs/Widget/Affinity.php:28 -#: ../../include/selectors.php:123 ../../include/channel.php:423 -#: ../../include/channel.php:424 ../../include/channel.php:431 +#: ../../include/selectors.php:123 ../../include/channel.php:437 +#: ../../include/channel.php:438 ../../include/channel.php:445 msgid "Friends" msgstr "Freunde" -#: ../../Zotlabs/Module/Settings/Channel.php:255 +#: ../../Zotlabs/Module/Settings/Channel.php:262 +#: ../../Zotlabs/Module/Defperms.php:103 #: ../../addon/rendezvous/rendezvous.php:82 #: ../../addon/openstreetmap/openstreetmap.php:184 #: ../../addon/msgfooter/msgfooter.php:54 ../../addon/logrot/logrot.php:54 @@ -3307,388 +3386,403 @@ msgstr "Freunde" msgid "Settings updated." msgstr "Einstellungen aktualisiert." -#: ../../Zotlabs/Module/Settings/Channel.php:316 +#: ../../Zotlabs/Module/Settings/Channel.php:323 msgid "Nobody except yourself" msgstr "Niemand außer Dir selbst" -#: ../../Zotlabs/Module/Settings/Channel.php:317 +#: ../../Zotlabs/Module/Settings/Channel.php:324 msgid "Only those you specifically allow" msgstr "Nur die, denen Du es explizit erlaubst" -#: ../../Zotlabs/Module/Settings/Channel.php:318 +#: ../../Zotlabs/Module/Settings/Channel.php:325 msgid "Approved connections" msgstr "Angenommene Verbindungen" -#: ../../Zotlabs/Module/Settings/Channel.php:319 +#: ../../Zotlabs/Module/Settings/Channel.php:326 msgid "Any connections" msgstr "Beliebige Verbindungen" -#: ../../Zotlabs/Module/Settings/Channel.php:320 +#: ../../Zotlabs/Module/Settings/Channel.php:327 msgid "Anybody on this website" msgstr "Jeder auf dieser Website" -#: ../../Zotlabs/Module/Settings/Channel.php:321 +#: ../../Zotlabs/Module/Settings/Channel.php:328 msgid "Anybody in this network" msgstr "Alle $Projectname-Mitglieder" -#: ../../Zotlabs/Module/Settings/Channel.php:322 +#: ../../Zotlabs/Module/Settings/Channel.php:329 msgid "Anybody authenticated" msgstr "Jeder authentifizierte" -#: ../../Zotlabs/Module/Settings/Channel.php:323 +#: ../../Zotlabs/Module/Settings/Channel.php:330 msgid "Anybody on the internet" msgstr "Jeder im Internet" -#: ../../Zotlabs/Module/Settings/Channel.php:399 +#: ../../Zotlabs/Module/Settings/Channel.php:406 msgid "Publish your default profile in the network directory" msgstr "Standard-Profil im Netzwerk-Verzeichnis veröffentlichen" -#: ../../Zotlabs/Module/Settings/Channel.php:404 +#: ../../Zotlabs/Module/Settings/Channel.php:411 msgid "Allow us to suggest you as a potential friend to new members?" msgstr "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?" -#: ../../Zotlabs/Module/Settings/Channel.php:408 -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Settings/Channel.php:415 +#: ../../Zotlabs/Module/Profile_photo.php:443 #: ../../Zotlabs/Module/Cover_photo.php:365 msgid "or" msgstr "oder" -#: ../../Zotlabs/Module/Settings/Channel.php:413 +#: ../../Zotlabs/Module/Settings/Channel.php:420 msgid "Your channel address is" msgstr "Deine Kanal-Adresse lautet" -#: ../../Zotlabs/Module/Settings/Channel.php:416 +#: ../../Zotlabs/Module/Settings/Channel.php:423 msgid "Your files/photos are accessible via WebDAV at" msgstr "Deine Dateien/Fotos sind via WebDAV verfügbar auf" -#: ../../Zotlabs/Module/Settings/Channel.php:478 +#: ../../Zotlabs/Module/Settings/Channel.php:487 msgid "Channel Settings" msgstr "Kanal-Einstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:485 +#: ../../Zotlabs/Module/Settings/Channel.php:494 msgid "Basic Settings" msgstr "Grundeinstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:486 -#: ../../include/channel.php:1473 +#: ../../Zotlabs/Module/Settings/Channel.php:495 +#: ../../include/channel.php:1521 msgid "Full Name:" msgstr "Voller Name:" -#: ../../Zotlabs/Module/Settings/Channel.php:487 +#: ../../Zotlabs/Module/Settings/Channel.php:496 #: ../../Zotlabs/Module/Settings/Account.php:119 msgid "Email Address:" msgstr "Email Adresse:" -#: ../../Zotlabs/Module/Settings/Channel.php:488 +#: ../../Zotlabs/Module/Settings/Channel.php:497 msgid "Your Timezone:" msgstr "Ihre Zeitzone:" -#: ../../Zotlabs/Module/Settings/Channel.php:489 +#: ../../Zotlabs/Module/Settings/Channel.php:498 msgid "Default Post Location:" msgstr "Standardstandort:" -#: ../../Zotlabs/Module/Settings/Channel.php:489 +#: ../../Zotlabs/Module/Settings/Channel.php:498 msgid "Geographical location to display on your posts" msgstr "Geografischer Ort, der bei Deinen Beiträgen angezeigt werden soll" -#: ../../Zotlabs/Module/Settings/Channel.php:490 +#: ../../Zotlabs/Module/Settings/Channel.php:499 msgid "Use Browser Location:" msgstr "Standort des Browsers verwenden:" -#: ../../Zotlabs/Module/Settings/Channel.php:492 +#: ../../Zotlabs/Module/Settings/Channel.php:501 msgid "Adult Content" msgstr "Nicht jugendfreie Inhalte" -#: ../../Zotlabs/Module/Settings/Channel.php:492 +#: ../../Zotlabs/Module/Settings/Channel.php:501 msgid "" "This channel frequently or regularly publishes adult content. (Please tag " "any adult material and/or nudity with #NSFW)" msgstr "Dieser Kanal veröffentlicht regelmäßig Inhalte, die für Minderjährige ungeeignet sind. (Bitte markiere solche Inhalte mit dem Schlagwort #NSFW)" -#: ../../Zotlabs/Module/Settings/Channel.php:494 +#: ../../Zotlabs/Module/Settings/Channel.php:503 msgid "Security and Privacy Settings" msgstr "Sicherheits- und Datenschutz-Einstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:496 +#: ../../Zotlabs/Module/Settings/Channel.php:505 msgid "Your permissions are already configured. Click to view/adjust" msgstr "Deine Zugriffsrechte sind schon konfiguriert. Klicke hier, um sie zu betrachten oder zu ändern" -#: ../../Zotlabs/Module/Settings/Channel.php:498 +#: ../../Zotlabs/Module/Settings/Channel.php:507 msgid "Hide my online presence" msgstr "Meine Online-Präsenz verbergen" -#: ../../Zotlabs/Module/Settings/Channel.php:498 +#: ../../Zotlabs/Module/Settings/Channel.php:507 msgid "Prevents displaying in your profile that you are online" msgstr "Verhindert die Anzeige Deines Online-Status in deinem Profil" -#: ../../Zotlabs/Module/Settings/Channel.php:500 +#: ../../Zotlabs/Module/Settings/Channel.php:509 msgid "Simple Privacy Settings:" msgstr "Einfache Privatsphäre-Einstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:501 +#: ../../Zotlabs/Module/Settings/Channel.php:510 msgid "" "Very Public - <em>extremely permissive (should be used with caution)</em>" msgstr "Komplett offen – <em>extrem ungeschützt (mit großer Vorsicht verwenden!)</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:502 +#: ../../Zotlabs/Module/Settings/Channel.php:511 msgid "" "Typical - <em>default public, privacy when desired (similar to social " "network permissions but with improved privacy)</em>" msgstr "Typisch – <em>Standard öffentlich, Privatsphäre, wo sie erwünscht ist (ähnlich den Einstellungen in sozialen Netzwerken, aber mit besser geschützter Privatsphäre)</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:503 +#: ../../Zotlabs/Module/Settings/Channel.php:512 msgid "Private - <em>default private, never open or public</em>" msgstr "Privat – <em>Standard privat, nie offen oder öffentlich</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:504 +#: ../../Zotlabs/Module/Settings/Channel.php:513 msgid "Blocked - <em>default blocked to/from everybody</em>" msgstr "Blockiert – <em>Alle standardmäßig blockiert</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:506 +#: ../../Zotlabs/Module/Settings/Channel.php:515 msgid "Allow others to tag your posts" msgstr "Erlaube anderen, Deine Beiträge zu verschlagworten" -#: ../../Zotlabs/Module/Settings/Channel.php:506 +#: ../../Zotlabs/Module/Settings/Channel.php:515 msgid "" "Often used by the community to retro-actively flag inappropriate content" msgstr "Wird oft von der Community genutzt um rückwirkend anstößigen Inhalt zu markieren" -#: ../../Zotlabs/Module/Settings/Channel.php:508 +#: ../../Zotlabs/Module/Settings/Channel.php:517 msgid "Channel Permission Limits" msgstr "Kanal-Berechtigungslimits" -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 msgid "Expire other channel content after this many days" msgstr "Den Inhalt anderer Kanäle nach dieser Anzahl Tage verfallen lassen" -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 msgid "0 or blank to use the website limit." msgstr "0 oder leer lassen, um den voreingestellten Wert der Webseite zu verwenden." -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 #, php-format msgid "This website expires after %d days." msgstr "Diese Webseite läuft nach %d Tagen ab." -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 msgid "This website does not expire imported content." msgstr "Diese Webseite lässt importierte Inhalte nicht verfallen." -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 msgid "The website limit takes precedence if lower than your limit." msgstr "Das Verfallslimit der Webseite hat Vorrang, wenn es niedriger als Deines hier ist." -#: ../../Zotlabs/Module/Settings/Channel.php:511 +#: ../../Zotlabs/Module/Settings/Channel.php:520 msgid "Maximum Friend Requests/Day:" msgstr "Maximale Kontaktanfragen pro Tag:" -#: ../../Zotlabs/Module/Settings/Channel.php:511 +#: ../../Zotlabs/Module/Settings/Channel.php:520 msgid "May reduce spam activity" msgstr "Kann die Spam-Aktivität verringern" -#: ../../Zotlabs/Module/Settings/Channel.php:512 +#: ../../Zotlabs/Module/Settings/Channel.php:521 msgid "Default Privacy Group" msgstr "Standard-Gruppe" -#: ../../Zotlabs/Module/Settings/Channel.php:514 +#: ../../Zotlabs/Module/Settings/Channel.php:523 msgid "Use my default audience setting for the type of object published" msgstr "Verwende Deine eingestellte Standard-Zielgruppe des jeweiligen Inhaltstyps" -#: ../../Zotlabs/Module/Settings/Channel.php:521 +#: ../../Zotlabs/Module/Settings/Channel.php:524 +msgid "Profile to assign new connections" +msgstr "Profil, welches neuen Verbindungen zugewiesen wird" + +#: ../../Zotlabs/Module/Settings/Channel.php:533 msgid "Channel permissions category:" msgstr "Zugriffsrechte-Kategorie des Kanals:" -#: ../../Zotlabs/Module/Settings/Channel.php:522 +#: ../../Zotlabs/Module/Settings/Channel.php:534 msgid "Default Permissions Group" msgstr "Standard-Berechtigungsgruppe" -#: ../../Zotlabs/Module/Settings/Channel.php:528 +#: ../../Zotlabs/Module/Settings/Channel.php:540 msgid "Maximum private messages per day from unknown people:" msgstr "Maximale Anzahl privater Nachrichten pro Tag von unbekannten Leuten:" -#: ../../Zotlabs/Module/Settings/Channel.php:528 +#: ../../Zotlabs/Module/Settings/Channel.php:540 msgid "Useful to reduce spamming" msgstr "Nützlich, um Spam zu verringern" -#: ../../Zotlabs/Module/Settings/Channel.php:531 +#: ../../Zotlabs/Module/Settings/Channel.php:543 msgid "Notification Settings" msgstr "Benachrichtigungs-Einstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:532 +#: ../../Zotlabs/Module/Settings/Channel.php:544 msgid "By default post a status message when:" msgstr "Sende standardmäßig Status-Nachrichten, wenn:" -#: ../../Zotlabs/Module/Settings/Channel.php:533 +#: ../../Zotlabs/Module/Settings/Channel.php:545 msgid "accepting a friend request" msgstr "Du eine Verbindungsanfrage annimmst" -#: ../../Zotlabs/Module/Settings/Channel.php:534 +#: ../../Zotlabs/Module/Settings/Channel.php:546 msgid "joining a forum/community" msgstr "Du einem Forum beitrittst" -#: ../../Zotlabs/Module/Settings/Channel.php:535 +#: ../../Zotlabs/Module/Settings/Channel.php:547 msgid "making an <em>interesting</em> profile change" msgstr "Du eine <em>interessante</em> Änderung an Deinem Profil vornimmst" -#: ../../Zotlabs/Module/Settings/Channel.php:536 +#: ../../Zotlabs/Module/Settings/Channel.php:548 msgid "Send a notification email when:" msgstr "Eine E-Mail-Benachrichtigung senden, wenn:" -#: ../../Zotlabs/Module/Settings/Channel.php:537 +#: ../../Zotlabs/Module/Settings/Channel.php:549 msgid "You receive a connection request" msgstr "Du eine Verbindungsanfrage erhältst" -#: ../../Zotlabs/Module/Settings/Channel.php:538 +#: ../../Zotlabs/Module/Settings/Channel.php:550 msgid "Your connections are confirmed" msgstr "Eine Verbindung bestätigt wurde" -#: ../../Zotlabs/Module/Settings/Channel.php:539 +#: ../../Zotlabs/Module/Settings/Channel.php:551 msgid "Someone writes on your profile wall" msgstr "Jemand auf Deine Pinnwand schreibt" -#: ../../Zotlabs/Module/Settings/Channel.php:540 +#: ../../Zotlabs/Module/Settings/Channel.php:552 msgid "Someone writes a followup comment" msgstr "Jemand einen Beitrag kommentiert" -#: ../../Zotlabs/Module/Settings/Channel.php:541 +#: ../../Zotlabs/Module/Settings/Channel.php:553 msgid "You receive a private message" msgstr "Du eine private Nachricht erhältst" -#: ../../Zotlabs/Module/Settings/Channel.php:542 +#: ../../Zotlabs/Module/Settings/Channel.php:554 msgid "You receive a friend suggestion" msgstr "Du einen Kontaktvorschlag erhältst" -#: ../../Zotlabs/Module/Settings/Channel.php:543 +#: ../../Zotlabs/Module/Settings/Channel.php:555 msgid "You are tagged in a post" msgstr "Du in einem Beitrag erwähnt wurdest" -#: ../../Zotlabs/Module/Settings/Channel.php:544 +#: ../../Zotlabs/Module/Settings/Channel.php:556 msgid "You are poked/prodded/etc. in a post" msgstr "Du in einem Beitrag angestupst/geknufft/o.ä. wurdest" -#: ../../Zotlabs/Module/Settings/Channel.php:546 +#: ../../Zotlabs/Module/Settings/Channel.php:558 msgid "Someone likes your post/comment" msgstr "Jemand mag Ihren Beitrag/Kommentar" -#: ../../Zotlabs/Module/Settings/Channel.php:549 +#: ../../Zotlabs/Module/Settings/Channel.php:561 msgid "Show visual notifications including:" msgstr "Visuelle Benachrichtigungen anzeigen für:" -#: ../../Zotlabs/Module/Settings/Channel.php:551 +#: ../../Zotlabs/Module/Settings/Channel.php:563 msgid "Unseen grid activity" msgstr "Ungesehene Netzwerk-Aktivität" -#: ../../Zotlabs/Module/Settings/Channel.php:552 +#: ../../Zotlabs/Module/Settings/Channel.php:564 msgid "Unseen channel activity" msgstr "Ungesehene Kanal-Aktivität" -#: ../../Zotlabs/Module/Settings/Channel.php:553 +#: ../../Zotlabs/Module/Settings/Channel.php:565 msgid "Unseen private messages" msgstr "Ungelesene persönliche Nachrichten" -#: ../../Zotlabs/Module/Settings/Channel.php:553 -#: ../../Zotlabs/Module/Settings/Channel.php:558 -#: ../../Zotlabs/Module/Settings/Channel.php:559 -#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/Settings/Channel.php:565 +#: ../../Zotlabs/Module/Settings/Channel.php:570 +#: ../../Zotlabs/Module/Settings/Channel.php:571 +#: ../../Zotlabs/Module/Settings/Channel.php:572 #: ../../addon/jappixmini/jappixmini.php:343 msgid "Recommended" msgstr "Empfohlen" -#: ../../Zotlabs/Module/Settings/Channel.php:554 +#: ../../Zotlabs/Module/Settings/Channel.php:566 msgid "Upcoming events" msgstr "Baldige Termine" -#: ../../Zotlabs/Module/Settings/Channel.php:555 +#: ../../Zotlabs/Module/Settings/Channel.php:567 msgid "Events today" msgstr "Heutige Termine" -#: ../../Zotlabs/Module/Settings/Channel.php:556 +#: ../../Zotlabs/Module/Settings/Channel.php:568 msgid "Upcoming birthdays" msgstr "Baldige Geburtstage" -#: ../../Zotlabs/Module/Settings/Channel.php:556 +#: ../../Zotlabs/Module/Settings/Channel.php:568 msgid "Not available in all themes" msgstr "Nicht in allen Designs verfügbar" -#: ../../Zotlabs/Module/Settings/Channel.php:557 +#: ../../Zotlabs/Module/Settings/Channel.php:569 msgid "System (personal) notifications" msgstr "System – (persönliche) Benachrichtigungen" -#: ../../Zotlabs/Module/Settings/Channel.php:558 +#: ../../Zotlabs/Module/Settings/Channel.php:570 msgid "System info messages" msgstr "System – Info-Nachrichten" -#: ../../Zotlabs/Module/Settings/Channel.php:559 +#: ../../Zotlabs/Module/Settings/Channel.php:571 msgid "System critical alerts" msgstr "System – kritische Warnungen" -#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/Settings/Channel.php:572 msgid "New connections" msgstr "Neue Verbindungen" -#: ../../Zotlabs/Module/Settings/Channel.php:561 +#: ../../Zotlabs/Module/Settings/Channel.php:573 msgid "System Registrations" msgstr "System – Registrierungen" -#: ../../Zotlabs/Module/Settings/Channel.php:562 +#: ../../Zotlabs/Module/Settings/Channel.php:574 msgid "Unseen shared files" msgstr "Ungesehene geteilte Dateien" -#: ../../Zotlabs/Module/Settings/Channel.php:563 +#: ../../Zotlabs/Module/Settings/Channel.php:575 msgid "Unseen public activity" msgstr "Ungesehene öffentliche Aktivität" -#: ../../Zotlabs/Module/Settings/Channel.php:564 +#: ../../Zotlabs/Module/Settings/Channel.php:576 +msgid "Email notification hub (hostname)" +msgstr "Hub für E-Mail-Benachrichtigungen (Hostname)" + +#: ../../Zotlabs/Module/Settings/Channel.php:576 +#, 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 "Wenn Dein Kanal auf mehreren Hubs geklont ist, setze die Einstellung auf deinen bevorzugten Hub. Dies verhindert Mehrfachzustellung von E-Mail-Benachrichtigungen. Beispiel: %s" + +#: ../../Zotlabs/Module/Settings/Channel.php:577 msgid "" "Also show new wall posts, private messages and connections under Notices" msgstr "Neue Pinnwand-Nachrichten, private Nachrichten und Verbindungen unter Benachrichtigungen anzeigen" -#: ../../Zotlabs/Module/Settings/Channel.php:566 +#: ../../Zotlabs/Module/Settings/Channel.php:579 msgid "Notify me of events this many days in advance" msgstr "Benachrichtige mich zu Terminen so viele Tage im Voraus" -#: ../../Zotlabs/Module/Settings/Channel.php:566 +#: ../../Zotlabs/Module/Settings/Channel.php:579 msgid "Must be greater than 0" msgstr "Muss größer als 0 sein" -#: ../../Zotlabs/Module/Settings/Channel.php:572 +#: ../../Zotlabs/Module/Settings/Channel.php:585 msgid "Advanced Account/Page Type Settings" msgstr "Erweiterte Account- und Seitenart-Einstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:573 +#: ../../Zotlabs/Module/Settings/Channel.php:586 msgid "Change the behaviour of this account for special situations" msgstr "Ändere das Verhalten dieses Accounts unter speziellen Umständen" -#: ../../Zotlabs/Module/Settings/Channel.php:575 +#: ../../Zotlabs/Module/Settings/Channel.php:588 msgid "Miscellaneous Settings" msgstr "Sonstige Einstellungen" -#: ../../Zotlabs/Module/Settings/Channel.php:576 +#: ../../Zotlabs/Module/Settings/Channel.php:589 msgid "Default photo upload folder" msgstr "Voreingestellter Ordner für hochgeladene Fotos" -#: ../../Zotlabs/Module/Settings/Channel.php:576 -#: ../../Zotlabs/Module/Settings/Channel.php:577 +#: ../../Zotlabs/Module/Settings/Channel.php:589 +#: ../../Zotlabs/Module/Settings/Channel.php:590 msgid "%Y - current year, %m - current month" msgstr "%Y - aktuelles Jahr, %m - aktueller Monat" -#: ../../Zotlabs/Module/Settings/Channel.php:577 +#: ../../Zotlabs/Module/Settings/Channel.php:590 msgid "Default file upload folder" msgstr "Voreingestellter Ordner für hochgeladene Dateien" -#: ../../Zotlabs/Module/Settings/Channel.php:579 +#: ../../Zotlabs/Module/Settings/Channel.php:592 msgid "Personal menu to display in your channel pages" msgstr "Eigenes Menü zur Anzeige auf den Seiten deines Kanals" -#: ../../Zotlabs/Module/Settings/Channel.php:581 +#: ../../Zotlabs/Module/Settings/Channel.php:594 msgid "Remove this channel." msgstr "Diesen Kanal löschen" -#: ../../Zotlabs/Module/Settings/Channel.php:582 +#: ../../Zotlabs/Module/Settings/Channel.php:595 msgid "Firefox Share $Projectname provider" msgstr "$Projectname-Provider für Firefox Share" -#: ../../Zotlabs/Module/Settings/Channel.php:583 +#: ../../Zotlabs/Module/Settings/Channel.php:596 msgid "Start calendar week on Monday" msgstr "Beginne die kalendarische Woche am Montag" @@ -3842,116 +3936,124 @@ msgstr "Beziehungsgrad-Schieberegler-Einstellungen" msgid "Feature/Addon Settings" msgstr "Funktions-/Addon-Einstellungen" -#: ../../Zotlabs/Module/Settings/Display.php:145 +#: ../../Zotlabs/Module/Settings/Display.php:147 msgid "No special theme for mobile devices" msgstr "Kein spezielles Design für mobile Geräte" -#: ../../Zotlabs/Module/Settings/Display.php:148 +#: ../../Zotlabs/Module/Settings/Display.php:150 #, php-format msgid "%s - (Experimental)" msgstr "%s – (experimentell)" -#: ../../Zotlabs/Module/Settings/Display.php:202 +#: ../../Zotlabs/Module/Settings/Display.php:204 msgid "Display Settings" msgstr "Anzeige-Einstellungen" -#: ../../Zotlabs/Module/Settings/Display.php:203 +#: ../../Zotlabs/Module/Settings/Display.php:205 msgid "Theme Settings" msgstr "Design-Einstellungen" -#: ../../Zotlabs/Module/Settings/Display.php:204 +#: ../../Zotlabs/Module/Settings/Display.php:206 msgid "Custom Theme Settings" msgstr "Benutzerdefinierte Design-Einstellungen" -#: ../../Zotlabs/Module/Settings/Display.php:205 +#: ../../Zotlabs/Module/Settings/Display.php:207 msgid "Content Settings" msgstr "Inhaltseinstellungen" -#: ../../Zotlabs/Module/Settings/Display.php:211 +#: ../../Zotlabs/Module/Settings/Display.php:213 msgid "Display Theme:" msgstr "Anzeige-Design:" -#: ../../Zotlabs/Module/Settings/Display.php:212 +#: ../../Zotlabs/Module/Settings/Display.php:214 msgid "Select scheme" msgstr "Schema wählen" -#: ../../Zotlabs/Module/Settings/Display.php:214 +#: ../../Zotlabs/Module/Settings/Display.php:216 msgid "Mobile Theme:" msgstr "Design für mobile Geräte:" -#: ../../Zotlabs/Module/Settings/Display.php:215 +#: ../../Zotlabs/Module/Settings/Display.php:217 msgid "Preload images before rendering the page" msgstr "Bilder im voraus laden, bevor die Seite angezeigt wird" -#: ../../Zotlabs/Module/Settings/Display.php:215 +#: ../../Zotlabs/Module/Settings/Display.php:217 msgid "" "The subjective page load time will be longer but the page will be ready when" " displayed" msgstr "Die empfundene Ladezeit wird sich erhöhen, aber dafür ist das Layout stabil, sobald eine Seite angezeigt wird" -#: ../../Zotlabs/Module/Settings/Display.php:216 +#: ../../Zotlabs/Module/Settings/Display.php:218 msgid "Enable user zoom on mobile devices" msgstr "Zoom auf Mobilgeräten aktivieren" -#: ../../Zotlabs/Module/Settings/Display.php:217 +#: ../../Zotlabs/Module/Settings/Display.php:219 msgid "Update browser every xx seconds" msgstr "Browser alle xx Sekunden aktualisieren" -#: ../../Zotlabs/Module/Settings/Display.php:217 +#: ../../Zotlabs/Module/Settings/Display.php:219 msgid "Minimum of 10 seconds, no maximum" msgstr "Minimum 10 Sekunden, kein Maximum" -#: ../../Zotlabs/Module/Settings/Display.php:218 +#: ../../Zotlabs/Module/Settings/Display.php:220 msgid "Maximum number of conversations to load at any time:" msgstr "Maximale Anzahl von Unterhaltungen, die auf einmal geladen werden sollen:" -#: ../../Zotlabs/Module/Settings/Display.php:218 +#: ../../Zotlabs/Module/Settings/Display.php:220 msgid "Maximum of 100 items" msgstr "Maximum: 100 Beiträge" -#: ../../Zotlabs/Module/Settings/Display.php:219 +#: ../../Zotlabs/Module/Settings/Display.php:221 msgid "Show emoticons (smilies) as images" msgstr "Emoticons (Smilies) als Bilder anzeigen" -#: ../../Zotlabs/Module/Settings/Display.php:220 +#: ../../Zotlabs/Module/Settings/Display.php:222 +msgid "Provide channel menu in navigation bar" +msgstr "Kanal-Menü in der Navigationsleiste zur Verfügung stellen" + +#: ../../Zotlabs/Module/Settings/Display.php:222 +msgid "Default: channel menu located in app menu" +msgstr "Voreinstellung: Kanal-Menü ist im App-Menü integriert" + +#: ../../Zotlabs/Module/Settings/Display.php:223 msgid "Manual conversation updates" msgstr "Manuelle Konversationsaktualisierung" -#: ../../Zotlabs/Module/Settings/Display.php:220 +#: ../../Zotlabs/Module/Settings/Display.php:223 msgid "Default is on, turning this off may increase screen jumping" msgstr "Voreinstellung ist An, dies abzuschalten kann das unerwartete Springen der Seitenanzeige erhöhen." -#: ../../Zotlabs/Module/Settings/Display.php:221 +#: ../../Zotlabs/Module/Settings/Display.php:224 msgid "Link post titles to source" msgstr "Beitragstitel zum Originalbeitrag verlinken" -#: ../../Zotlabs/Module/Settings/Display.php:222 +#: ../../Zotlabs/Module/Settings/Display.php:225 msgid "System Page Layout Editor - (advanced)" msgstr "System-Seitenlayout-Editor (für Experten)" -#: ../../Zotlabs/Module/Settings/Display.php:225 +#: ../../Zotlabs/Module/Settings/Display.php:228 msgid "Use blog/list mode on channel page" msgstr "Blog-/Listenmodus auf der Kanalseite verwenden" -#: ../../Zotlabs/Module/Settings/Display.php:225 -#: ../../Zotlabs/Module/Settings/Display.php:226 +#: ../../Zotlabs/Module/Settings/Display.php:228 +#: ../../Zotlabs/Module/Settings/Display.php:229 msgid "(comments displayed separately)" msgstr "(Kommentare werden separat angezeigt)" -#: ../../Zotlabs/Module/Settings/Display.php:226 +#: ../../Zotlabs/Module/Settings/Display.php:229 msgid "Use blog/list mode on grid page" msgstr "Blog-/Listenmodus auf der Netzwerkseite verwenden" -#: ../../Zotlabs/Module/Settings/Display.php:227 +#: ../../Zotlabs/Module/Settings/Display.php:230 msgid "Channel page max height of content (in pixels)" msgstr "Maximale Höhe von Beitragsblöcken auf der Kanalseite (in Pixeln)" -#: ../../Zotlabs/Module/Settings/Display.php:227 -#: ../../Zotlabs/Module/Settings/Display.php:228 +#: ../../Zotlabs/Module/Settings/Display.php:230 +#: ../../Zotlabs/Module/Settings/Display.php:231 msgid "click to expand content exceeding this height" msgstr "Blöcke, deren Inhalt diese Höhe überschreitet, können per Klick vergrößert werden." -#: ../../Zotlabs/Module/Settings/Display.php:228 +#: ../../Zotlabs/Module/Settings/Display.php:231 msgid "Grid page max height of content (in pixels)" msgstr "Maximale Höhe (in Pixel) des Inhalts der Netzwerkseite" @@ -3975,7 +4077,7 @@ msgstr "Name der Anwendung" #: ../../Zotlabs/Module/Settings/Oauth.php:90 #: ../../Zotlabs/Module/Settings/Oauth.php:116 -#: ../../addon/statusnet/statusnet.php:893 ../../addon/twitter/twitter.php:775 +#: ../../addon/statusnet/statusnet.php:894 ../../addon/twitter/twitter.php:775 msgid "Consumer Key" msgstr "Consumer Key" @@ -3986,7 +4088,7 @@ msgstr "Automatisch erzeugt – ändern, falls erwünscht. Maximale Länge 20" #: ../../Zotlabs/Module/Settings/Oauth.php:91 #: ../../Zotlabs/Module/Settings/Oauth.php:117 -#: ../../addon/statusnet/statusnet.php:892 ../../addon/twitter/twitter.php:776 +#: ../../addon/statusnet/statusnet.php:893 ../../addon/twitter/twitter.php:776 msgid "Consumer Secret" msgstr "Consumer Secret" @@ -4032,24 +4134,25 @@ msgid "Remove authorization" msgstr "Authorisierung aufheben" #: ../../Zotlabs/Module/Embedphotos.php:140 -#: ../../Zotlabs/Module/Photos.php:758 ../../Zotlabs/Module/Photos.php:1297 -#: ../../Zotlabs/Widget/Portfolio.php:78 ../../Zotlabs/Widget/Album.php:78 +#: ../../Zotlabs/Module/Photos.php:811 ../../Zotlabs/Module/Photos.php:1350 +#: ../../Zotlabs/Widget/Portfolio.php:87 ../../Zotlabs/Widget/Album.php:78 msgid "View Photo" msgstr "Foto ansehen" #: ../../Zotlabs/Module/Embedphotos.php:156 -#: ../../Zotlabs/Module/Photos.php:789 ../../Zotlabs/Widget/Portfolio.php:97 +#: ../../Zotlabs/Module/Photos.php:842 ../../Zotlabs/Widget/Portfolio.php:108 #: ../../Zotlabs/Widget/Album.php:95 msgid "Edit Album" msgstr "Album bearbeiten" #: ../../Zotlabs/Module/Embedphotos.php:158 -#: ../../Zotlabs/Module/Photos.php:791 ../../Zotlabs/Module/Photos.php:1328 -#: ../../Zotlabs/Module/Profile_photo.php:431 +#: ../../Zotlabs/Module/Photos.php:712 ../../Zotlabs/Module/Photos.php:844 +#: ../../Zotlabs/Module/Photos.php:1381 +#: ../../Zotlabs/Module/Profile_photo.php:437 #: ../../Zotlabs/Module/Cover_photo.php:361 -#: ../../Zotlabs/Storage/Browser.php:230 ../../Zotlabs/Storage/Browser.php:337 -#: ../../Zotlabs/Widget/Cdav.php:132 ../../Zotlabs/Widget/Cdav.php:168 -#: ../../Zotlabs/Widget/Portfolio.php:99 ../../Zotlabs/Widget/Album.php:97 +#: ../../Zotlabs/Storage/Browser.php:274 ../../Zotlabs/Storage/Browser.php:381 +#: ../../Zotlabs/Widget/Cdav.php:133 ../../Zotlabs/Widget/Cdav.php:169 +#: ../../Zotlabs/Widget/Portfolio.php:110 ../../Zotlabs/Widget/Album.php:97 msgid "Upload" msgstr "Hochladen" @@ -4111,9 +4214,9 @@ msgid "URL for photo of thing (optional)" msgstr "URL eines Fotos der Sache (optional)" #: ../../Zotlabs/Module/Thing.php:314 ../../Zotlabs/Module/Thing.php:367 -#: ../../Zotlabs/Module/Photos.php:649 ../../Zotlabs/Module/Photos.php:1018 +#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Photos.php:1071 #: ../../Zotlabs/Module/Connedit.php:676 ../../Zotlabs/Module/Chat.php:235 -#: ../../Zotlabs/Module/Filestorage.php:142 +#: ../../Zotlabs/Module/Filestorage.php:147 #: ../../include/acl_selectors.php:218 msgid "Permissions" msgstr "Berechtigungen" @@ -4123,12 +4226,12 @@ msgid "Add Thing to your Profile" msgstr "Die Sache Deinem Profil hinzufügen" #: ../../Zotlabs/Module/Notify.php:61 -#: ../../Zotlabs/Module/Notifications.php:38 +#: ../../Zotlabs/Module/Notifications.php:57 msgid "No more system notifications." msgstr "Keine System-Benachrichtigungen mehr." #: ../../Zotlabs/Module/Notify.php:65 -#: ../../Zotlabs/Module/Notifications.php:42 +#: ../../Zotlabs/Module/Notifications.php:61 msgid "System Notifications" msgstr "System-Benachrichtigungen" @@ -4146,7 +4249,7 @@ msgid "No channel. Import failed." msgstr "Kein Kanal. Import fehlgeschlagen." #: ../../Zotlabs/Module/Import.php:481 -#: ../../addon/diaspora/import_diaspora.php:142 +#: ../../addon/diaspora/import_diaspora.php:139 msgid "Import completed." msgstr "Import abgeschlossen." @@ -4211,30 +4314,24 @@ msgstr "Dieser Vorgang kann einige Minuten dauern. Bitte sende das Formular nur msgid "Authentication failed." msgstr "Authentifizierung fehlgeschlagen." -#: ../../Zotlabs/Module/Rmagic.php:75 ../../boot.php:1640 -#: ../../include/channel.php:2204 +#: ../../Zotlabs/Module/Rmagic.php:75 ../../boot.php:1665 +#: ../../include/channel.php:2301 msgid "Remote Authentication" msgstr "Entfernte Authentifizierung" -#: ../../Zotlabs/Module/Rmagic.php:76 ../../include/channel.php:2205 +#: ../../Zotlabs/Module/Rmagic.php:76 ../../include/channel.php:2302 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "Deine Kanal-Adresse (z. B. channel@example.com)" -#: ../../Zotlabs/Module/Rmagic.php:77 ../../include/channel.php:2206 +#: ../../Zotlabs/Module/Rmagic.php:77 ../../include/channel.php:2303 msgid "Authenticate" msgstr "Authentifizieren" -#: ../../Zotlabs/Module/Cal.php:62 ../../Zotlabs/Module/Chanview.php:96 -#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Wall_upload.php:31 -#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Card_edit.php:44 -msgid "Channel not found." -msgstr "Kanal nicht gefunden." - #: ../../Zotlabs/Module/Cal.php:69 msgid "Permissions denied." msgstr "Berechtigung verweigert." -#: ../../Zotlabs/Module/Cal.php:342 ../../include/text.php:2312 +#: ../../Zotlabs/Module/Cal.php:344 ../../include/text.php:2312 msgid "Import" msgstr "Import" @@ -4260,18 +4357,6 @@ msgstr "Möchtest Du dieser Anwendung erlauben, Deine Nachrichten und Kontakte a msgid "Item not available." msgstr "Element nicht verfügbar." -#: ../../Zotlabs/Module/Editblock.php:116 ../../Zotlabs/Module/Chat.php:207 -#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Mail.php:288 -#: ../../Zotlabs/Module/Mail.php:430 ../../Zotlabs/Module/Card_edit.php:101 -#: ../../include/conversation.php:1261 -msgid "Insert web link" -msgstr "Link einfügen" - -#: ../../Zotlabs/Module/Editblock.php:129 -#: ../../Zotlabs/Module/Card_edit.php:117 ../../include/conversation.php:1381 -msgid "Title (optional)" -msgstr "Titel (optional)" - #: ../../Zotlabs/Module/Editblock.php:138 msgid "Edit Block" msgstr "Block bearbeiten" @@ -4292,7 +4377,7 @@ msgstr "Apps verwalten" msgid "Create new app" msgstr "Neue App erstellen" -#: ../../Zotlabs/Module/Mood.php:67 ../../include/conversation.php:256 +#: ../../Zotlabs/Module/Mood.php:67 ../../include/conversation.php:268 #, php-format msgctxt "mood" msgid "%1$s is %2$s" @@ -4331,7 +4416,8 @@ msgstr "Archiviert/Unerreichbar" #: ../../Zotlabs/Module/Connections.php:74 #: ../../Zotlabs/Module/Connections.php:83 ../../Zotlabs/Module/Menu.php:116 -#: ../../include/conversation.php:1697 +#: ../../Zotlabs/Module/Notifications.php:52 +#: ../../include/conversation.php:1714 msgid "New" msgstr "Neu" @@ -4342,7 +4428,7 @@ msgid "All" msgstr "Alle" #: ../../Zotlabs/Module/Connections.php:133 -#: ../../Zotlabs/Widget/Notifications.php:80 +#: ../../Zotlabs/Widget/Notifications.php:82 msgid "New Connections" msgstr "Neue Verbindungen" @@ -4433,7 +4519,7 @@ msgid "Recent activity" msgstr "Kürzliche Aktivitäten" #: ../../Zotlabs/Module/Connections.php:309 ../../Zotlabs/Lib/Apps.php:229 -#: ../../include/text.php:959 ../../include/nav.php:107 +#: ../../include/text.php:959 ../../include/nav.php:114 msgid "Connections" msgstr "Verbindungen" @@ -4446,8 +4532,8 @@ msgid "Connections search" msgstr "Verbindung suchen" #: ../../Zotlabs/Module/Connections.php:316 -#: ../../Zotlabs/Module/Directory.php:391 -#: ../../Zotlabs/Module/Directory.php:396 ../../include/contact_widgets.php:23 +#: ../../Zotlabs/Module/Directory.php:396 +#: ../../Zotlabs/Module/Directory.php:401 ../../include/contact_widgets.php:23 msgid "Find" msgstr "Finde" @@ -4511,238 +4597,238 @@ msgstr "Album nicht gefunden." msgid "Delete Album" msgstr "Album löschen" -#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1030 +#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1083 msgid "Delete Photo" msgstr "Foto löschen" -#: ../../Zotlabs/Module/Photos.php:501 +#: ../../Zotlabs/Module/Photos.php:551 msgid "No photos selected" msgstr "Keine Fotos ausgewählt" -#: ../../Zotlabs/Module/Photos.php:550 +#: ../../Zotlabs/Module/Photos.php:600 msgid "Access to this item is restricted." msgstr "Der Zugriff auf dieses Foto ist eingeschränkt." -#: ../../Zotlabs/Module/Photos.php:593 +#: ../../Zotlabs/Module/Photos.php:646 #, php-format msgid "%1$.2f MB of %2$.2f MB photo storage used." msgstr "%1$.2f MB von %2$.2f MB Foto-Speicher belegt." -#: ../../Zotlabs/Module/Photos.php:596 +#: ../../Zotlabs/Module/Photos.php:649 #, php-format msgid "%1$.2f MB photo storage used." msgstr "%1$.2f MB Foto-Speicher belegt." -#: ../../Zotlabs/Module/Photos.php:638 +#: ../../Zotlabs/Module/Photos.php:691 msgid "Upload Photos" msgstr "Fotos hochladen" -#: ../../Zotlabs/Module/Photos.php:642 +#: ../../Zotlabs/Module/Photos.php:695 msgid "Enter an album name" msgstr "Namen für ein neues Album eingeben" -#: ../../Zotlabs/Module/Photos.php:643 +#: ../../Zotlabs/Module/Photos.php:696 msgid "or select an existing album (doubleclick)" msgstr "oder ein bereits vorhandenes auswählen (Doppelklick)" -#: ../../Zotlabs/Module/Photos.php:644 +#: ../../Zotlabs/Module/Photos.php:697 msgid "Create a status post for this upload" msgstr "Einen Statusbeitrag für diesen Upload erzeugen" -#: ../../Zotlabs/Module/Photos.php:645 +#: ../../Zotlabs/Module/Photos.php:698 msgid "Caption (optional):" msgstr "Beschriftung (optional):" -#: ../../Zotlabs/Module/Photos.php:646 +#: ../../Zotlabs/Module/Photos.php:699 msgid "Description (optional):" msgstr "Beschreibung (optional):" -#: ../../Zotlabs/Module/Photos.php:732 +#: ../../Zotlabs/Module/Photos.php:785 msgid "Show Newest First" msgstr "Neueste zuerst anzeigen" -#: ../../Zotlabs/Module/Photos.php:734 +#: ../../Zotlabs/Module/Photos.php:787 msgid "Show Oldest First" msgstr "Älteste zuerst anzeigen" -#: ../../Zotlabs/Module/Photos.php:839 +#: ../../Zotlabs/Module/Photos.php:892 msgid "Permission denied. Access to this item may be restricted." msgstr "Berechtigung verweigert. Der Zugriff ist wahrscheinlich eingeschränkt worden." -#: ../../Zotlabs/Module/Photos.php:841 +#: ../../Zotlabs/Module/Photos.php:894 msgid "Photo not available" msgstr "Foto nicht verfügbar" -#: ../../Zotlabs/Module/Photos.php:899 +#: ../../Zotlabs/Module/Photos.php:952 msgid "Use as profile photo" msgstr "Als Profilfoto verwenden" -#: ../../Zotlabs/Module/Photos.php:900 +#: ../../Zotlabs/Module/Photos.php:953 msgid "Use as cover photo" msgstr "Als Titelbild verwenden" -#: ../../Zotlabs/Module/Photos.php:907 +#: ../../Zotlabs/Module/Photos.php:960 msgid "Private Photo" msgstr "Privates Foto" -#: ../../Zotlabs/Module/Photos.php:922 +#: ../../Zotlabs/Module/Photos.php:975 msgid "View Full Size" msgstr "In voller Größe anzeigen" -#: ../../Zotlabs/Module/Photos.php:1004 +#: ../../Zotlabs/Module/Photos.php:1057 msgid "Edit photo" msgstr "Foto bearbeiten" -#: ../../Zotlabs/Module/Photos.php:1006 +#: ../../Zotlabs/Module/Photos.php:1059 msgid "Rotate CW (right)" msgstr "Drehen im UZS (rechts)" -#: ../../Zotlabs/Module/Photos.php:1007 +#: ../../Zotlabs/Module/Photos.php:1060 msgid "Rotate CCW (left)" msgstr "Drehen gegen UZS (links)" -#: ../../Zotlabs/Module/Photos.php:1010 +#: ../../Zotlabs/Module/Photos.php:1063 msgid "Move photo to album" msgstr "Foto in Album verschieben" -#: ../../Zotlabs/Module/Photos.php:1011 +#: ../../Zotlabs/Module/Photos.php:1064 msgid "Enter a new album name" msgstr "Gib einen Namen für ein neues Album ein" -#: ../../Zotlabs/Module/Photos.php:1012 +#: ../../Zotlabs/Module/Photos.php:1065 msgid "or select an existing one (doubleclick)" msgstr "oder wähle ein bereits vorhandenes aus (Doppelklick)" -#: ../../Zotlabs/Module/Photos.php:1015 +#: ../../Zotlabs/Module/Photos.php:1068 msgid "Caption" msgstr "Bildunterschrift" -#: ../../Zotlabs/Module/Photos.php:1017 +#: ../../Zotlabs/Module/Photos.php:1070 msgid "Add a Tag" msgstr "Schlagwort hinzufügen" -#: ../../Zotlabs/Module/Photos.php:1025 +#: ../../Zotlabs/Module/Photos.php:1078 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" msgstr "Beispiele: @ben, @Karl_Prester, @lieschen@example.com" -#: ../../Zotlabs/Module/Photos.php:1028 +#: ../../Zotlabs/Module/Photos.php:1081 msgid "Flag as adult in album view" msgstr "In der Albumansicht als nicht jugendfrei markieren" -#: ../../Zotlabs/Module/Photos.php:1047 ../../Zotlabs/Lib/ThreadItem.php:271 +#: ../../Zotlabs/Module/Photos.php:1100 ../../Zotlabs/Lib/ThreadItem.php:281 msgid "I like this (toggle)" msgstr "Mir gefällt das (Umschalter)" -#: ../../Zotlabs/Module/Photos.php:1048 ../../Zotlabs/Lib/ThreadItem.php:272 +#: ../../Zotlabs/Module/Photos.php:1101 ../../Zotlabs/Lib/ThreadItem.php:282 msgid "I don't like this (toggle)" msgstr "Mir gefällt das nicht (Umschalter)" -#: ../../Zotlabs/Module/Photos.php:1050 ../../Zotlabs/Lib/ThreadItem.php:416 -#: ../../include/conversation.php:768 +#: ../../Zotlabs/Module/Photos.php:1103 ../../Zotlabs/Lib/ThreadItem.php:427 +#: ../../include/conversation.php:785 msgid "Please wait" msgstr "Bitte warten" -#: ../../Zotlabs/Module/Photos.php:1066 ../../Zotlabs/Module/Photos.php:1184 -#: ../../Zotlabs/Lib/ThreadItem.php:740 +#: ../../Zotlabs/Module/Photos.php:1119 ../../Zotlabs/Module/Photos.php:1237 +#: ../../Zotlabs/Lib/ThreadItem.php:751 msgid "This is you" msgstr "Das bist Du" -#: ../../Zotlabs/Module/Photos.php:1068 ../../Zotlabs/Module/Photos.php:1186 -#: ../../Zotlabs/Lib/ThreadItem.php:742 ../../include/js_strings.php:6 +#: ../../Zotlabs/Module/Photos.php:1121 ../../Zotlabs/Module/Photos.php:1239 +#: ../../Zotlabs/Lib/ThreadItem.php:753 ../../include/js_strings.php:6 msgid "Comment" msgstr "Kommentar" -#: ../../Zotlabs/Module/Photos.php:1084 ../../include/conversation.php:594 +#: ../../Zotlabs/Module/Photos.php:1137 ../../include/conversation.php:618 msgctxt "title" msgid "Likes" msgstr "Gefällt mir" -#: ../../Zotlabs/Module/Photos.php:1084 ../../include/conversation.php:594 +#: ../../Zotlabs/Module/Photos.php:1137 ../../include/conversation.php:618 msgctxt "title" msgid "Dislikes" msgstr "Gefällt mir nicht" -#: ../../Zotlabs/Module/Photos.php:1085 ../../include/conversation.php:595 +#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 msgctxt "title" msgid "Agree" msgstr "Zustimmungen" -#: ../../Zotlabs/Module/Photos.php:1085 ../../include/conversation.php:595 +#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 msgctxt "title" msgid "Disagree" msgstr "Ablehnungen" -#: ../../Zotlabs/Module/Photos.php:1085 ../../include/conversation.php:595 +#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 msgctxt "title" msgid "Abstain" msgstr "Enthaltungen" -#: ../../Zotlabs/Module/Photos.php:1086 ../../include/conversation.php:596 +#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 msgctxt "title" msgid "Attending" msgstr "Zusagen" -#: ../../Zotlabs/Module/Photos.php:1086 ../../include/conversation.php:596 +#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 msgctxt "title" msgid "Not attending" msgstr "Absagen" -#: ../../Zotlabs/Module/Photos.php:1086 ../../include/conversation.php:596 +#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 msgctxt "title" msgid "Might attend" msgstr "Vielleicht" -#: ../../Zotlabs/Module/Photos.php:1103 ../../Zotlabs/Module/Photos.php:1115 -#: ../../Zotlabs/Lib/ThreadItem.php:191 ../../Zotlabs/Lib/ThreadItem.php:203 +#: ../../Zotlabs/Module/Photos.php:1156 ../../Zotlabs/Module/Photos.php:1168 +#: ../../Zotlabs/Lib/ThreadItem.php:201 ../../Zotlabs/Lib/ThreadItem.php:213 msgid "View all" msgstr "Alles anzeigen" -#: ../../Zotlabs/Module/Photos.php:1107 ../../Zotlabs/Lib/ThreadItem.php:195 -#: ../../include/conversation.php:1950 ../../include/channel.php:1491 -#: ../../include/taxonomy.php:520 +#: ../../Zotlabs/Module/Photos.php:1160 ../../Zotlabs/Lib/ThreadItem.php:205 +#: ../../include/conversation.php:1978 ../../include/channel.php:1539 +#: ../../include/taxonomy.php:593 msgctxt "noun" msgid "Like" msgid_plural "Likes" msgstr[0] "Gefällt mir" msgstr[1] "Gefällt mir" -#: ../../Zotlabs/Module/Photos.php:1112 ../../Zotlabs/Lib/ThreadItem.php:200 -#: ../../include/conversation.php:1953 +#: ../../Zotlabs/Module/Photos.php:1165 ../../Zotlabs/Lib/ThreadItem.php:210 +#: ../../include/conversation.php:1981 msgctxt "noun" msgid "Dislike" msgid_plural "Dislikes" msgstr[0] "Gefällt nicht" msgstr[1] "Gefällt nicht" -#: ../../Zotlabs/Module/Photos.php:1212 +#: ../../Zotlabs/Module/Photos.php:1265 msgid "Photo Tools" msgstr "Fotowerkzeuge" -#: ../../Zotlabs/Module/Photos.php:1221 +#: ../../Zotlabs/Module/Photos.php:1274 msgid "In This Photo:" msgstr "Auf diesem Foto:" -#: ../../Zotlabs/Module/Photos.php:1226 +#: ../../Zotlabs/Module/Photos.php:1279 msgid "Map" msgstr "Karte" -#: ../../Zotlabs/Module/Photos.php:1234 ../../Zotlabs/Lib/ThreadItem.php:404 +#: ../../Zotlabs/Module/Photos.php:1287 ../../Zotlabs/Lib/ThreadItem.php:415 msgctxt "noun" msgid "Likes" msgstr "Gefällt mir" -#: ../../Zotlabs/Module/Photos.php:1235 ../../Zotlabs/Lib/ThreadItem.php:405 +#: ../../Zotlabs/Module/Photos.php:1288 ../../Zotlabs/Lib/ThreadItem.php:416 msgctxt "noun" msgid "Dislikes" msgstr "Gefällt nicht" -#: ../../Zotlabs/Module/Photos.php:1240 ../../Zotlabs/Lib/ThreadItem.php:410 +#: ../../Zotlabs/Module/Photos.php:1293 ../../Zotlabs/Lib/ThreadItem.php:421 #: ../../include/acl_selectors.php:220 msgid "Close" msgstr "Schließen" -#: ../../Zotlabs/Module/Photos.php:1312 ../../Zotlabs/Module/Photos.php:1325 -#: ../../Zotlabs/Module/Photos.php:1326 ../../include/photos.php:601 +#: ../../Zotlabs/Module/Photos.php:1365 ../../Zotlabs/Module/Photos.php:1378 +#: ../../Zotlabs/Module/Photos.php:1379 ../../include/photos.php:656 msgid "Recent Photos" msgstr "Neueste Fotos" @@ -4750,7 +4836,8 @@ msgstr "Neueste Fotos" msgid "Profile Unavailable." msgstr "Profil nicht verfügbar." -#: ../../Zotlabs/Module/Wiki.php:44 ../../addon/gitwiki/Mod_Gitwiki.php:42 +#: ../../Zotlabs/Module/Wiki.php:44 ../../Zotlabs/Module/Cloud.php:108 +#: ../../addon/gitwiki/Mod_Gitwiki.php:42 msgid "Not found" msgstr "Nicht gefunden" @@ -4771,7 +4858,7 @@ msgid "Error downloading wiki: " msgstr "Fehler beim Herunterladen des Wiki:" #: ../../Zotlabs/Module/Wiki.php:197 ../../addon/gitwiki/Mod_Gitwiki.php:146 -#: ../../include/conversation.php:1897 ../../include/nav.php:504 +#: ../../include/conversation.php:1925 ../../include/nav.php:526 msgid "Wikis" msgstr "Wikis" @@ -4793,22 +4880,25 @@ msgstr "Name des Wiki" msgid "Content type" msgstr "Inhaltstyp" -#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:336 -#: ../../Zotlabs/Widget/Wiki_pages.php:57 ../../include/text.php:1802 +#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:348 +#: ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1802 +#: ../../include/features.php:378 msgid "Markdown" msgstr "Markdown" -#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:336 -#: ../../Zotlabs/Widget/Wiki_pages.php:57 ../../include/text.php:1800 +#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:348 +#: ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1800 msgid "BBcode" msgstr "BBcode" -#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Widget/Wiki_pages.php:57 -#: ../../include/text.php:1803 +#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1803 msgid "Text" msgstr "Text" -#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:235 +#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:281 #: ../../addon/gitwiki/Mod_Gitwiki.php:159 msgid "Type" msgstr "Typ" @@ -4837,127 +4927,127 @@ msgstr "Wiki nicht gefunden" msgid "Rename page" msgstr "Seite umbenennen" -#: ../../Zotlabs/Module/Wiki.php:296 ../../addon/gitwiki/Mod_Gitwiki.php:214 +#: ../../Zotlabs/Module/Wiki.php:305 ../../addon/gitwiki/Mod_Gitwiki.php:214 msgid "Error retrieving page content" msgstr "Fehler beim Abrufen des Seiteninhalts" -#: ../../Zotlabs/Module/Wiki.php:302 ../../Zotlabs/Module/Wiki.php:304 +#: ../../Zotlabs/Module/Wiki.php:313 ../../Zotlabs/Module/Wiki.php:315 msgid "New page" msgstr "Neue Seite" -#: ../../Zotlabs/Module/Wiki.php:331 ../../addon/gitwiki/Mod_Gitwiki.php:242 +#: ../../Zotlabs/Module/Wiki.php:343 ../../addon/gitwiki/Mod_Gitwiki.php:242 msgid "Revision Comparison" msgstr "Revisionsvergleich" -#: ../../Zotlabs/Module/Wiki.php:332 ../../addon/gitwiki/Mod_Gitwiki.php:243 +#: ../../Zotlabs/Module/Wiki.php:344 ../../addon/gitwiki/Mod_Gitwiki.php:243 msgid "Revert" msgstr "Rückgängig machen" -#: ../../Zotlabs/Module/Wiki.php:339 +#: ../../Zotlabs/Module/Wiki.php:351 msgid "Short description of your changes (optional)" msgstr "Kurze Beschreibung Ihrer Änderungen (optional)" -#: ../../Zotlabs/Module/Wiki.php:346 ../../addon/gitwiki/Mod_Gitwiki.php:252 +#: ../../Zotlabs/Module/Wiki.php:358 ../../addon/gitwiki/Mod_Gitwiki.php:252 msgid "Source" msgstr "Quelle" -#: ../../Zotlabs/Module/Wiki.php:356 ../../addon/gitwiki/Mod_Gitwiki.php:260 +#: ../../Zotlabs/Module/Wiki.php:368 ../../addon/gitwiki/Mod_Gitwiki.php:260 msgid "New page name" msgstr "Neuer Seitenname" -#: ../../Zotlabs/Module/Wiki.php:361 ../../addon/gitwiki/Mod_Gitwiki.php:265 -#: ../../include/conversation.php:1265 +#: ../../Zotlabs/Module/Wiki.php:373 ../../addon/gitwiki/Mod_Gitwiki.php:265 +#: ../../include/conversation.php:1282 msgid "Embed image from photo albums" msgstr "Bild aus Fotoalben einbetten" -#: ../../Zotlabs/Module/Wiki.php:362 ../../addon/gitwiki/Mod_Gitwiki.php:266 -#: ../../include/conversation.php:1368 +#: ../../Zotlabs/Module/Wiki.php:374 ../../addon/gitwiki/Mod_Gitwiki.php:266 +#: ../../include/conversation.php:1385 msgid "Embed an image from your albums" msgstr "Betten Sie ein Bild aus Ihren Alben ein" -#: ../../Zotlabs/Module/Wiki.php:364 ../../addon/gitwiki/Mod_Gitwiki.php:268 -#: ../../include/conversation.php:1370 ../../include/conversation.php:1417 +#: ../../Zotlabs/Module/Wiki.php:376 ../../addon/gitwiki/Mod_Gitwiki.php:268 +#: ../../include/conversation.php:1387 ../../include/conversation.php:1434 msgid "OK" msgstr "Ok" -#: ../../Zotlabs/Module/Wiki.php:365 ../../addon/gitwiki/Mod_Gitwiki.php:269 -#: ../../include/conversation.php:1301 +#: ../../Zotlabs/Module/Wiki.php:377 ../../addon/gitwiki/Mod_Gitwiki.php:269 +#: ../../include/conversation.php:1318 msgid "Choose images to embed" msgstr "Wählen Sie Bilder zum Einbetten aus" -#: ../../Zotlabs/Module/Wiki.php:366 ../../addon/gitwiki/Mod_Gitwiki.php:270 -#: ../../include/conversation.php:1302 +#: ../../Zotlabs/Module/Wiki.php:378 ../../addon/gitwiki/Mod_Gitwiki.php:270 +#: ../../include/conversation.php:1319 msgid "Choose an album" msgstr "Wählen Sie ein Album aus" -#: ../../Zotlabs/Module/Wiki.php:367 ../../addon/gitwiki/Mod_Gitwiki.php:271 +#: ../../Zotlabs/Module/Wiki.php:379 ../../addon/gitwiki/Mod_Gitwiki.php:271 msgid "Choose a different album" msgstr "Wählen Sie ein anderes Album aus" -#: ../../Zotlabs/Module/Wiki.php:368 ../../addon/gitwiki/Mod_Gitwiki.php:272 -#: ../../include/conversation.php:1304 +#: ../../Zotlabs/Module/Wiki.php:380 ../../addon/gitwiki/Mod_Gitwiki.php:272 +#: ../../include/conversation.php:1321 msgid "Error getting album list" msgstr "Fehler beim Holen der Albenliste" -#: ../../Zotlabs/Module/Wiki.php:369 ../../addon/gitwiki/Mod_Gitwiki.php:273 -#: ../../include/conversation.php:1305 +#: ../../Zotlabs/Module/Wiki.php:381 ../../addon/gitwiki/Mod_Gitwiki.php:273 +#: ../../include/conversation.php:1322 msgid "Error getting photo link" msgstr "Fehler beim Holen des Fotolinks" -#: ../../Zotlabs/Module/Wiki.php:370 ../../addon/gitwiki/Mod_Gitwiki.php:274 -#: ../../include/conversation.php:1306 +#: ../../Zotlabs/Module/Wiki.php:382 ../../addon/gitwiki/Mod_Gitwiki.php:274 +#: ../../include/conversation.php:1323 msgid "Error getting album" msgstr "Fehler beim Holen des Albums" -#: ../../Zotlabs/Module/Wiki.php:442 ../../addon/gitwiki/Mod_Gitwiki.php:337 +#: ../../Zotlabs/Module/Wiki.php:458 ../../addon/gitwiki/Mod_Gitwiki.php:337 msgid "Error creating wiki. Invalid name." msgstr "Fehler beim Erstellen des Wiki. Ungültiger Name." -#: ../../Zotlabs/Module/Wiki.php:449 +#: ../../Zotlabs/Module/Wiki.php:465 msgid "A wiki with this name already exists." msgstr "Es existiert bereits ein Wiki mit diesem Namen." -#: ../../Zotlabs/Module/Wiki.php:462 ../../addon/gitwiki/Mod_Gitwiki.php:348 +#: ../../Zotlabs/Module/Wiki.php:478 ../../addon/gitwiki/Mod_Gitwiki.php:348 msgid "Wiki created, but error creating Home page." msgstr "Das Wiki wurde erzeugt, aber es gab einen Fehler bei der Erstellung der Startseite" -#: ../../Zotlabs/Module/Wiki.php:469 ../../addon/gitwiki/Mod_Gitwiki.php:353 +#: ../../Zotlabs/Module/Wiki.php:485 ../../addon/gitwiki/Mod_Gitwiki.php:353 msgid "Error creating wiki" msgstr "Fehler beim Erstellen des Wiki" -#: ../../Zotlabs/Module/Wiki.php:492 +#: ../../Zotlabs/Module/Wiki.php:508 msgid "Error updating wiki. Invalid name." msgstr "Fehler beim Aktualisieren des Wikis. Ungültiger Name." -#: ../../Zotlabs/Module/Wiki.php:512 +#: ../../Zotlabs/Module/Wiki.php:528 msgid "Error updating wiki" msgstr "Fehler beim Aktualisieren des Wikis" -#: ../../Zotlabs/Module/Wiki.php:527 +#: ../../Zotlabs/Module/Wiki.php:543 msgid "Wiki delete permission denied." msgstr "Wiki-Löschberechtigung verweigert." -#: ../../Zotlabs/Module/Wiki.php:537 +#: ../../Zotlabs/Module/Wiki.php:553 msgid "Error deleting wiki" msgstr "Fehler beim Löschen des Wiki" -#: ../../Zotlabs/Module/Wiki.php:565 ../../addon/gitwiki/Mod_Gitwiki.php:400 +#: ../../Zotlabs/Module/Wiki.php:586 ../../addon/gitwiki/Mod_Gitwiki.php:400 msgid "New page created" msgstr "Neue Seite erstellt" -#: ../../Zotlabs/Module/Wiki.php:686 +#: ../../Zotlabs/Module/Wiki.php:707 msgid "Cannot delete Home" msgstr "Kann die Startseite nicht löschen" -#: ../../Zotlabs/Module/Wiki.php:750 +#: ../../Zotlabs/Module/Wiki.php:771 msgid "Current Revision" msgstr "Aktuelle Revision" -#: ../../Zotlabs/Module/Wiki.php:750 +#: ../../Zotlabs/Module/Wiki.php:771 msgid "Selected Revision" msgstr "Ausgewählte Revision" -#: ../../Zotlabs/Module/Wiki.php:800 +#: ../../Zotlabs/Module/Wiki.php:821 msgid "You must be authenticated." msgstr "Sie müssen authenzifiziert sein." @@ -4973,7 +5063,7 @@ msgstr "Layout aktualisiert." msgid "Feature disabled." msgstr "Funktion deaktiviert." -#: ../../Zotlabs/Module/Pdledit.php:47 ../../Zotlabs/Module/Pdledit.php:88 +#: ../../Zotlabs/Module/Pdledit.php:47 ../../Zotlabs/Module/Pdledit.php:90 msgid "Edit System Page Description" msgstr "Systemseitenbeschreibung bearbeiten" @@ -4985,24 +5075,28 @@ msgstr "(geändert)" msgid "Reset" msgstr "Zurücksetzen" -#: ../../Zotlabs/Module/Pdledit.php:83 +#: ../../Zotlabs/Module/Pdledit.php:85 msgid "Layout not found." msgstr "Layout nicht gefunden." -#: ../../Zotlabs/Module/Pdledit.php:89 +#: ../../Zotlabs/Module/Pdledit.php:91 msgid "Module Name:" msgstr "Modulname:" -#: ../../Zotlabs/Module/Pdledit.php:90 +#: ../../Zotlabs/Module/Pdledit.php:92 msgid "Layout Help" msgstr "Layout-Hilfe" -#: ../../Zotlabs/Module/Pdledit.php:91 +#: ../../Zotlabs/Module/Pdledit.php:93 msgid "Edit another layout" msgstr "Ein weiteres Layout bearbeiten" +#: ../../Zotlabs/Module/Pdledit.php:94 +msgid "System layout" +msgstr "System-Layout" + #: ../../Zotlabs/Module/Poke.php:182 ../../Zotlabs/Lib/Apps.php:248 -#: ../../include/conversation.php:1075 +#: ../../include/conversation.php:1092 msgid "Poke" msgstr "Anstupsen" @@ -5036,8 +5130,8 @@ msgid "Image uploaded but image cropping failed." msgstr "Bild hochgeladen, aber das Zurechtschneiden schlug fehl." #: ../../Zotlabs/Module/Profile_photo.php:115 -#: ../../Zotlabs/Module/Profile_photo.php:234 -#: ../../include/photo/photo_driver.php:710 +#: ../../Zotlabs/Module/Profile_photo.php:240 +#: ../../include/photo/photo_driver.php:740 msgid "Profile Photos" msgstr "Profilfotos" @@ -5046,80 +5140,80 @@ msgstr "Profilfotos" msgid "Image resize failed." msgstr "Bild-Anpassung fehlgeschlagen." -#: ../../Zotlabs/Module/Profile_photo.php:204 +#: ../../Zotlabs/Module/Profile_photo.php:210 #: ../../addon/openclipatar/openclipatar.php:298 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Leere den Browser Cache oder nutze Umschalten-Neu Laden, falls das neue Foto nicht sofort angezeigt wird." -#: ../../Zotlabs/Module/Profile_photo.php:211 -#: ../../Zotlabs/Module/Cover_photo.php:173 ../../include/photos.php:156 +#: ../../Zotlabs/Module/Profile_photo.php:217 +#: ../../Zotlabs/Module/Cover_photo.php:173 ../../include/photos.php:195 msgid "Unable to process image" msgstr "Kann Bild nicht verarbeiten" -#: ../../Zotlabs/Module/Profile_photo.php:246 +#: ../../Zotlabs/Module/Profile_photo.php:252 #: ../../Zotlabs/Module/Cover_photo.php:197 msgid "Image upload failed." msgstr "Hochladen des Bilds fehlgeschlagen." -#: ../../Zotlabs/Module/Profile_photo.php:265 +#: ../../Zotlabs/Module/Profile_photo.php:271 #: ../../Zotlabs/Module/Cover_photo.php:214 msgid "Unable to process image." msgstr "Kann Bild nicht verarbeiten." -#: ../../Zotlabs/Module/Profile_photo.php:326 -#: ../../Zotlabs/Module/Profile_photo.php:373 +#: ../../Zotlabs/Module/Profile_photo.php:332 +#: ../../Zotlabs/Module/Profile_photo.php:379 #: ../../Zotlabs/Module/Cover_photo.php:307 #: ../../Zotlabs/Module/Cover_photo.php:322 msgid "Photo not available." msgstr "Foto nicht verfügbar." -#: ../../Zotlabs/Module/Profile_photo.php:428 +#: ../../Zotlabs/Module/Profile_photo.php:434 #: ../../Zotlabs/Module/Cover_photo.php:358 msgid "Upload File:" msgstr "Datei hochladen:" -#: ../../Zotlabs/Module/Profile_photo.php:429 +#: ../../Zotlabs/Module/Profile_photo.php:435 #: ../../Zotlabs/Module/Cover_photo.php:359 msgid "Select a profile:" msgstr "Wähle ein Profil:" -#: ../../Zotlabs/Module/Profile_photo.php:430 +#: ../../Zotlabs/Module/Profile_photo.php:436 msgid "Use Photo for Profile" msgstr "Foto für Profil verwenden" -#: ../../Zotlabs/Module/Profile_photo.php:430 +#: ../../Zotlabs/Module/Profile_photo.php:436 msgid "Upload Profile Photo" msgstr "Lade neues Profilfoto hoch" -#: ../../Zotlabs/Module/Profile_photo.php:431 +#: ../../Zotlabs/Module/Profile_photo.php:437 #: ../../addon/openclipatar/openclipatar.php:182 #: ../../addon/openclipatar/openclipatar.php:194 msgid "Use" msgstr "Verwenden" -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Profile_photo.php:443 #: ../../Zotlabs/Module/Cover_photo.php:365 msgid "skip this step" msgstr "diesen Schritt überspringen" -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Profile_photo.php:443 #: ../../Zotlabs/Module/Cover_photo.php:365 msgid "select a photo from your photo albums" msgstr "ein Foto aus meinen Fotoalben" -#: ../../Zotlabs/Module/Profile_photo.php:456 +#: ../../Zotlabs/Module/Profile_photo.php:462 #: ../../Zotlabs/Module/Cover_photo.php:381 msgid "Crop Image" msgstr "Bild zuschneiden" -#: ../../Zotlabs/Module/Profile_photo.php:457 +#: ../../Zotlabs/Module/Profile_photo.php:463 #: ../../Zotlabs/Module/Cover_photo.php:382 msgid "Please adjust the image cropping for optimum viewing." msgstr "Bitte schneide das Bild für eine optimale Anzeige passend zu." -#: ../../Zotlabs/Module/Profile_photo.php:459 +#: ../../Zotlabs/Module/Profile_photo.php:465 #: ../../Zotlabs/Module/Cover_photo.php:384 msgid "Done Editing" msgstr "Bearbeitung fertigstellen" @@ -5132,65 +5226,65 @@ msgstr "Abwesend" msgid "Online" msgstr "Online" -#: ../../Zotlabs/Module/Item.php:185 +#: ../../Zotlabs/Module/Item.php:193 msgid "Unable to locate original post." msgstr "Originalbeitrag nicht gefunden." -#: ../../Zotlabs/Module/Item.php:470 +#: ../../Zotlabs/Module/Item.php:475 msgid "Empty post discarded." msgstr "Leeren Beitrag verworfen." -#: ../../Zotlabs/Module/Item.php:870 +#: ../../Zotlabs/Module/Item.php:853 msgid "Duplicate post suppressed." msgstr "Doppelter Beitrag unterdrückt." -#: ../../Zotlabs/Module/Item.php:1015 +#: ../../Zotlabs/Module/Item.php:998 msgid "System error. Post not saved." msgstr "Systemfehler. Beitrag nicht gespeichert." -#: ../../Zotlabs/Module/Item.php:1051 +#: ../../Zotlabs/Module/Item.php:1034 msgid "Your comment is awaiting approval." msgstr "Dein Kommentar muss noch bestätigt werden." -#: ../../Zotlabs/Module/Item.php:1156 +#: ../../Zotlabs/Module/Item.php:1139 msgid "Unable to obtain post information from database." msgstr "Beitragsinformationen können nicht aus der Datenbank abgerufen werden." -#: ../../Zotlabs/Module/Item.php:1163 +#: ../../Zotlabs/Module/Item.php:1168 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "Du hast die maximale Anzahl von %1$.0f Beiträgen erreicht." -#: ../../Zotlabs/Module/Item.php:1170 +#: ../../Zotlabs/Module/Item.php:1175 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "Du hast die maximale Anzahl von %1$.0f Webseiten erreicht." -#: ../../Zotlabs/Module/Ping.php:318 +#: ../../Zotlabs/Module/Ping.php:311 msgid "sent you a private message" msgstr "hat Dir eine private Nachricht geschickt" -#: ../../Zotlabs/Module/Ping.php:369 +#: ../../Zotlabs/Module/Ping.php:360 msgid "added your channel" msgstr "hat deinen Kanal hinzugefügt" -#: ../../Zotlabs/Module/Ping.php:393 +#: ../../Zotlabs/Module/Ping.php:384 msgid "requires approval" msgstr "Zustimmung erforderlich" -#: ../../Zotlabs/Module/Ping.php:403 +#: ../../Zotlabs/Module/Ping.php:394 msgid "g A l F d" msgstr "l, d. F, G:i \\U\\h\\r" -#: ../../Zotlabs/Module/Ping.php:421 +#: ../../Zotlabs/Module/Ping.php:412 msgid "[today]" msgstr "[Heute]" -#: ../../Zotlabs/Module/Ping.php:430 +#: ../../Zotlabs/Module/Ping.php:421 msgid "posted an event" msgstr "hat einen Termin veröffentlicht" -#: ../../Zotlabs/Module/Ping.php:463 +#: ../../Zotlabs/Module/Ping.php:454 msgid "shared a file with you" msgstr "hat eine Datei mit Dir geteilt" @@ -5198,14 +5292,14 @@ msgstr "hat eine Datei mit Dir geteilt" msgid "Invalid item." msgstr "Ungültiges Element." -#: ../../Zotlabs/Module/Page.php:128 ../../Zotlabs/Module/Block.php:77 -#: ../../Zotlabs/Module/Display.php:120 -#: ../../Zotlabs/Lib/NativeWikiPage.php:515 ../../Zotlabs/Web/Router.php:158 +#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Block.php:77 +#: ../../Zotlabs/Module/Display.php:133 +#: ../../Zotlabs/Lib/NativeWikiPage.php:519 ../../Zotlabs/Web/Router.php:168 #: ../../include/help.php:81 msgid "Page not found." msgstr "Seite nicht gefunden." -#: ../../Zotlabs/Module/Page.php:165 +#: ../../Zotlabs/Module/Page.php:173 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," @@ -5215,7 +5309,7 @@ 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/Connedit.php:79 +#: ../../Zotlabs/Module/Connedit.php:79 ../../Zotlabs/Module/Defperms.php:59 msgid "Could not access contact record." msgstr "Konnte nicht auf den Kontakteintrag zugreifen." @@ -5255,7 +5349,7 @@ msgstr "Verbindung wurde gelöscht." #: ../../Zotlabs/Module/Connedit.php:594 ../../Zotlabs/Lib/Apps.php:241 #: ../../addon/openclipatar/openclipatar.php:57 -#: ../../include/conversation.php:1015 ../../include/nav.php:141 +#: ../../include/conversation.php:1032 ../../include/nav.php:148 msgid "View Profile" msgstr "Profil ansehen" @@ -5423,17 +5517,17 @@ msgid "" "not supported by their network." msgstr "Diese Verbindung ist von diesem Standort aus unerreichbar. Standort Unabhängigkeit wird vom anderen Netzwerk nicht unterstützt." -#: ../../Zotlabs/Module/Connedit.php:867 +#: ../../Zotlabs/Module/Connedit.php:867 ../../Zotlabs/Module/Defperms.php:238 #: ../../Zotlabs/Widget/Settings_menu.php:109 msgid "Connection Default Permissions" msgstr "Standardzugriffsrechte für neue Verbindungen:" -#: ../../Zotlabs/Module/Connedit.php:867 ../../include/items.php:3974 +#: ../../Zotlabs/Module/Connedit.php:867 ../../include/items.php:4134 #, php-format msgid "Connection: %s" msgstr "Verbindung: %s" -#: ../../Zotlabs/Module/Connedit.php:868 +#: ../../Zotlabs/Module/Connedit.php:868 ../../Zotlabs/Module/Defperms.php:239 msgid "Apply these permissions automatically" msgstr "Diese Berechtigungen automatisch anwenden" @@ -5441,11 +5535,11 @@ msgstr "Diese Berechtigungen automatisch anwenden" msgid "Connection requests will be approved without your interaction" msgstr "Verbindungsanfragen werden sofort bestätigt, ohne dass Deine aktive Zustimmung erforderlich ist." -#: ../../Zotlabs/Module/Connedit.php:869 +#: ../../Zotlabs/Module/Connedit.php:869 ../../Zotlabs/Module/Defperms.php:240 msgid "Permission role" msgstr "Berechtigungsrolle" -#: ../../Zotlabs/Module/Connedit.php:870 +#: ../../Zotlabs/Module/Connedit.php:870 ../../Zotlabs/Module/Defperms.php:241 msgid "Add permission role" msgstr "Berechtigungsrolle hinzufügen" @@ -5457,7 +5551,7 @@ msgstr "Die Hauptadresse der Verbindung ist" msgid "Available locations:" msgstr "Verfügbare Klone:" -#: ../../Zotlabs/Module/Connedit.php:883 +#: ../../Zotlabs/Module/Connedit.php:883 ../../Zotlabs/Module/Defperms.php:245 msgid "" "The permissions indicated on this page will be applied to all new " "connections." @@ -5558,13 +5652,13 @@ msgid "Bookmark this room" msgstr "Lesezeichen für diesen Raum setzen" #: ../../Zotlabs/Module/Chat.php:205 ../../Zotlabs/Module/Mail.php:241 -#: ../../Zotlabs/Module/Mail.php:362 ../../include/conversation.php:1296 +#: ../../Zotlabs/Module/Mail.php:362 ../../include/conversation.php:1313 msgid "Please enter a link URL:" msgstr "Gib eine URL ein:" #: ../../Zotlabs/Module/Chat.php:206 ../../Zotlabs/Module/Mail.php:294 -#: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Lib/ThreadItem.php:757 -#: ../../include/conversation.php:1415 +#: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Lib/ThreadItem.php:768 +#: ../../include/conversation.php:1432 msgid "Encrypt text" msgstr "Text verschlüsseln" @@ -5598,13 +5692,13 @@ msgid "min" msgstr "min" #: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:242 -#: ../../include/conversation.php:1814 ../../include/nav.php:422 +#: ../../include/conversation.php:1831 ../../include/nav.php:433 msgid "Photos" msgstr "Fotos" #: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:237 -#: ../../Zotlabs/Storage/Browser.php:225 ../../include/conversation.php:1822 -#: ../../include/nav.php:430 +#: ../../Zotlabs/Storage/Browser.php:269 ../../include/conversation.php:1839 +#: ../../include/nav.php:441 msgid "Files" msgstr "Dateien" @@ -5701,7 +5795,7 @@ msgid "Layouts" msgstr "Layouts" #: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:245 -#: ../../include/nav.php:201 ../../include/nav.php:301 +#: ../../include/nav.php:208 ../../include/nav.php:312 #: ../../include/help.php:68 ../../include/help.php:74 msgid "Help" msgstr "Hilfe" @@ -5718,17 +5812,25 @@ msgstr "Layout-Beschreibung" msgid "Download PDL file" msgstr "PDL-Datei herunterladen" -#: ../../Zotlabs/Module/Tagger.php:55 ../../include/markdown.php:141 -#: ../../include/bbcode.php:333 +#: ../../Zotlabs/Module/Cloud.php:114 +msgid "Unknown error" +msgstr "Unbekannter Fehler" + +#: ../../Zotlabs/Module/Tagger.php:48 +msgid "Post not found." +msgstr "Beitrag nicht gefunden." + +#: ../../Zotlabs/Module/Tagger.php:77 ../../include/markdown.php:160 +#: ../../include/bbcode.php:335 msgid "post" msgstr "Beitrag" -#: ../../Zotlabs/Module/Tagger.php:57 ../../include/conversation.php:146 +#: ../../Zotlabs/Module/Tagger.php:79 ../../include/conversation.php:146 #: ../../include/text.php:1946 msgid "comment" msgstr "Kommentar" -#: ../../Zotlabs/Module/Tagger.php:95 +#: ../../Zotlabs/Module/Tagger.php:117 #, php-format msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "%1$s hat %2$ss %3$s mit %4$s verschlagwortet" @@ -5748,6 +5850,21 @@ msgid "" " to correctly use this feature." msgstr "Warnung: Einige Einstellungen können Deinen Kanal funktionsunfähig machen. Bitte verlasse diese Seite, es sei denn Du bist vertraut damit, wie dieses Feature korrekt verwendet wird." +#: ../../Zotlabs/Module/Defperms.php:239 +msgid "" +"If enabled, connection requests will be approved without your interaction" +msgstr "Ist dies aktiviert, werden Verbindungsanfragen ohne Deine aktive Zustimmung bestätigt." + +#: ../../Zotlabs/Module/Defperms.php:246 +msgid "Automatic approval settings" +msgstr "Einstellungen für automatische Bestätigung" + +#: ../../Zotlabs/Module/Defperms.php:254 +msgid "" +"Some individual permissions may have been preset or locked based on your " +"channel type and privacy settings." +msgstr "Einige individuelle Berechtigungen können basierend auf Deinen Kanal- und Privatsphäre-Einstellungen vorbelegt oder gesperrt sein." + #: ../../Zotlabs/Module/Group.php:24 msgid "Privacy group created." msgstr "Gruppe wurde erstellt." @@ -5757,7 +5874,7 @@ msgid "Could not create privacy group." msgstr "Gruppe konnte nicht erstellt werden." #: ../../Zotlabs/Module/Group.php:42 ../../Zotlabs/Module/Group.php:143 -#: ../../include/items.php:3941 +#: ../../include/items.php:4101 msgid "Privacy group not found." msgstr "Gruppe nicht gefunden." @@ -5892,7 +6009,7 @@ msgid "View this profile" msgstr "Dieses Profil ansehen" #: ../../Zotlabs/Module/Profiles.php:728 ../../Zotlabs/Module/Profiles.php:827 -#: ../../include/channel.php:1284 +#: ../../include/channel.php:1320 msgid "Edit visibility" msgstr "Sichtbarkeit bearbeiten" @@ -5904,7 +6021,7 @@ msgstr "Profilwerkzeuge" msgid "Change cover photo" msgstr "Titelbild ändern" -#: ../../Zotlabs/Module/Profiles.php:731 ../../include/channel.php:1255 +#: ../../Zotlabs/Module/Profiles.php:731 ../../include/channel.php:1290 msgid "Change profile photo" msgstr "Profilfoto ändern" @@ -5924,7 +6041,7 @@ msgstr "Dieses Profil löschen" msgid "Add profile things" msgstr "Sachen zum Profil hinzufügen" -#: ../../Zotlabs/Module/Profiles.php:736 ../../include/conversation.php:1688 +#: ../../Zotlabs/Module/Profiles.php:736 ../../include/conversation.php:1705 msgid "Personal" msgstr "Persönlich" @@ -5932,7 +6049,7 @@ msgstr "Persönlich" msgid "Relation" msgstr "Beziehung" -#: ../../Zotlabs/Module/Profiles.php:739 ../../include/datetime.php:55 +#: ../../Zotlabs/Module/Profiles.php:739 ../../include/datetime.php:58 msgid "Miscellaneous" msgstr "Verschiedenes" @@ -6069,12 +6186,12 @@ msgstr "Meine anderen Kanäle" msgid "Communications" msgstr "Kommunikation" -#: ../../Zotlabs/Module/Profiles.php:823 ../../include/channel.php:1280 +#: ../../Zotlabs/Module/Profiles.php:823 ../../include/channel.php:1316 msgid "Profile Image" msgstr "Profilfoto:" -#: ../../Zotlabs/Module/Profiles.php:833 ../../include/channel.php:1262 -#: ../../include/nav.php:144 +#: ../../Zotlabs/Module/Profiles.php:833 ../../include/channel.php:1297 +#: ../../include/nav.php:151 msgid "Edit Profiles" msgstr "Profile bearbeiten" @@ -6091,7 +6208,7 @@ msgid "Create a new channel" msgstr "Neuen Kanal anlegen" #: ../../Zotlabs/Module/Manage.php:170 ../../Zotlabs/Lib/Apps.php:234 -#: ../../include/nav.php:129 ../../include/nav.php:215 +#: ../../include/nav.php:136 ../../include/nav.php:222 msgid "Channel Manager" msgstr "Kanal-Manager" @@ -6125,12 +6242,6 @@ msgstr "%d neue Vorstellungen" msgid "Delegated Channel" msgstr "Delegierte Kanäle" -#: ../../Zotlabs/Module/Cards.php:38 ../../Zotlabs/Module/Cards.php:178 -#: ../../Zotlabs/Lib/Apps.php:224 ../../include/conversation.php:1873 -#: ../../include/features.php:122 ../../include/nav.php:479 -msgid "Cards" -msgstr "Karten" - #: ../../Zotlabs/Module/Cards.php:95 msgid "Add Card" msgstr "Karte hinzufügen" @@ -6151,7 +6262,7 @@ msgstr "Seitenname" msgid "Administrator" msgstr "Administrator" -#: ../../Zotlabs/Module/Siteinfo.php:26 ../../Zotlabs/Module/Register.php:221 +#: ../../Zotlabs/Module/Siteinfo.php:26 ../../Zotlabs/Module/Register.php:229 msgid "Terms of Service" msgstr "Nutzungsbedingungen" @@ -6186,7 +6297,7 @@ msgid "No ratings" msgstr "Keine Bewertungen" #: ../../Zotlabs/Module/Ratings.php:97 ../../Zotlabs/Module/Pubsites.php:35 -#: ../../include/conversation.php:1065 +#: ../../include/conversation.php:1082 msgid "Ratings" msgstr "Bewertungen" @@ -6219,7 +6330,7 @@ msgid "Export selected" msgstr "Exportieren ausgewählt" #: ../../Zotlabs/Module/Webpages.php:237 ../../Zotlabs/Lib/Apps.php:238 -#: ../../include/conversation.php:1884 ../../include/nav.php:491 +#: ../../include/conversation.php:1912 ../../include/nav.php:513 msgid "Webpages" msgstr "Webseiten" @@ -6261,13 +6372,13 @@ msgid "" " password." msgstr "Innerhalb von 48 Stunden nach einer Änderung des Konto-Passworts können Kanäle nicht umbenannt werden." -#: ../../Zotlabs/Module/Changeaddr.php:46 ../../include/channel.php:209 -#: ../../include/channel.php:579 +#: ../../Zotlabs/Module/Changeaddr.php:46 ../../include/channel.php:214 +#: ../../include/channel.php:599 msgid "Reserved nickname. Please choose another." msgstr "Reservierter Kurzname. Bitte wähle einen anderen." -#: ../../Zotlabs/Module/Changeaddr.php:51 ../../include/channel.php:214 -#: ../../include/channel.php:584 +#: ../../Zotlabs/Module/Changeaddr.php:51 ../../include/channel.php:219 +#: ../../include/channel.php:604 msgid "" "Nickname has unsupported characters or is already being used on this site." msgstr "Der Spitzname enthält nicht-unterstütze Zeichen oder wird bereits auf dieser Seite genutzt." @@ -6353,7 +6464,8 @@ msgstr "Mail zugestellt" msgid "Delivery report for %1$s" msgstr "Zustellungsbericht für %1$s" -#: ../../Zotlabs/Module/Dreport.php:151 ../../Zotlabs/Widget/Wiki_pages.php:60 +#: ../../Zotlabs/Module/Dreport.php:151 ../../Zotlabs/Widget/Wiki_pages.php:39 +#: ../../Zotlabs/Widget/Wiki_pages.php:96 msgid "Options" msgstr "Optionen" @@ -6378,7 +6490,7 @@ msgid "*" msgstr "*" #: ../../Zotlabs/Module/Sources.php:96 -#: ../../Zotlabs/Widget/Settings_menu.php:125 ../../include/features.php:218 +#: ../../Zotlabs/Widget/Settings_menu.php:125 ../../include/features.php:228 msgid "Channel Sources" msgstr "Kanal-Quellen" @@ -6434,200 +6546,200 @@ msgstr "Quelle gelöscht" msgid "Unable to remove source." msgstr "Konnte die Quelle nicht löschen." -#: ../../Zotlabs/Module/Like.php:19 +#: ../../Zotlabs/Module/Like.php:22 msgid "Like/Dislike" msgstr "Mögen/Nicht mögen" -#: ../../Zotlabs/Module/Like.php:24 +#: ../../Zotlabs/Module/Like.php:27 msgid "This action is restricted to members." msgstr "Diese Aktion kann nur von Mitgliedern ausgeführt werden." -#: ../../Zotlabs/Module/Like.php:25 +#: ../../Zotlabs/Module/Like.php:28 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 "Um fortzufahren <a href=\"rmagic\">melde Dich bitte mit Deiner $Projectname-ID an</a> oder <a href=\"register\">registriere Dich als neues $Projectname-Mitglied</a>." -#: ../../Zotlabs/Module/Like.php:105 ../../Zotlabs/Module/Like.php:131 -#: ../../Zotlabs/Module/Like.php:169 +#: ../../Zotlabs/Module/Like.php:108 ../../Zotlabs/Module/Like.php:134 +#: ../../Zotlabs/Module/Like.php:172 msgid "Invalid request." msgstr "Ungültige Anfrage." -#: ../../Zotlabs/Module/Like.php:117 ../../include/conversation.php:122 +#: ../../Zotlabs/Module/Like.php:120 ../../include/conversation.php:122 msgid "channel" msgstr "Kanal" -#: ../../Zotlabs/Module/Like.php:146 +#: ../../Zotlabs/Module/Like.php:149 msgid "thing" msgstr "Sache" -#: ../../Zotlabs/Module/Like.php:192 +#: ../../Zotlabs/Module/Like.php:195 msgid "Channel unavailable." msgstr "Kanal nicht vorhanden." -#: ../../Zotlabs/Module/Like.php:240 +#: ../../Zotlabs/Module/Like.php:243 msgid "Previous action reversed." msgstr "Die vorherige Aktion wurde rückgängig gemacht." -#: ../../Zotlabs/Module/Like.php:423 ../../addon/diaspora/Receiver.php:1453 -#: ../../addon/pubcrawl/as.php:1323 ../../include/conversation.php:160 +#: ../../Zotlabs/Module/Like.php:435 ../../addon/diaspora/Receiver.php:1462 +#: ../../addon/pubcrawl/as.php:1330 ../../include/conversation.php:160 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s gefällt %2$ss %3$s" -#: ../../Zotlabs/Module/Like.php:425 ../../addon/pubcrawl/as.php:1325 +#: ../../Zotlabs/Module/Like.php:437 ../../addon/pubcrawl/as.php:1332 #: ../../include/conversation.php:163 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s gefällt %2$ss %3$s nicht" -#: ../../Zotlabs/Module/Like.php:427 +#: ../../Zotlabs/Module/Like.php:439 #, php-format msgid "%1$s agrees with %2$s's %3$s" msgstr "%1$s stimmt %2$ss %3$s zu" -#: ../../Zotlabs/Module/Like.php:429 +#: ../../Zotlabs/Module/Like.php:441 #, php-format msgid "%1$s doesn't agree with %2$s's %3$s" msgstr "%1$s lehnt %2$ss %3$s ab" -#: ../../Zotlabs/Module/Like.php:431 +#: ../../Zotlabs/Module/Like.php:443 #, php-format msgid "%1$s abstains from a decision on %2$s's %3$s" msgstr "%1$s enthält sich zu %2$ss %3$s" -#: ../../Zotlabs/Module/Like.php:433 +#: ../../Zotlabs/Module/Like.php:445 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "%1$s nimmt an %2$ss %3$s teil" -#: ../../Zotlabs/Module/Like.php:435 +#: ../../Zotlabs/Module/Like.php:447 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "%1$s nimmt an %2$ss %3$s nicht teil" -#: ../../Zotlabs/Module/Like.php:437 +#: ../../Zotlabs/Module/Like.php:449 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "%1$s nimmt vielleicht an %2$ss %3$s teil" -#: ../../Zotlabs/Module/Like.php:547 +#: ../../Zotlabs/Module/Like.php:561 msgid "Action completed." msgstr "Aktion durchgeführt." -#: ../../Zotlabs/Module/Like.php:548 +#: ../../Zotlabs/Module/Like.php:562 msgid "Thank you." msgstr "Vielen Dank." -#: ../../Zotlabs/Module/Directory.php:245 +#: ../../Zotlabs/Module/Directory.php:250 #, php-format msgid "%d rating" msgid_plural "%d ratings" msgstr[0] "%d Bewertung" msgstr[1] "%d Bewertungen" -#: ../../Zotlabs/Module/Directory.php:256 +#: ../../Zotlabs/Module/Directory.php:261 msgid "Gender: " msgstr "Geschlecht:" -#: ../../Zotlabs/Module/Directory.php:258 +#: ../../Zotlabs/Module/Directory.php:263 msgid "Status: " msgstr "Status:" -#: ../../Zotlabs/Module/Directory.php:260 +#: ../../Zotlabs/Module/Directory.php:265 msgid "Homepage: " msgstr "Webseite:" -#: ../../Zotlabs/Module/Directory.php:309 ../../include/channel.php:1516 +#: ../../Zotlabs/Module/Directory.php:314 ../../include/channel.php:1564 msgid "Age:" msgstr "Alter:" -#: ../../Zotlabs/Module/Directory.php:314 ../../include/channel.php:1352 -#: ../../include/event.php:52 ../../include/event.php:84 +#: ../../Zotlabs/Module/Directory.php:319 ../../include/channel.php:1392 +#: ../../include/event.php:53 ../../include/event.php:85 msgid "Location:" msgstr "Ort:" -#: ../../Zotlabs/Module/Directory.php:320 +#: ../../Zotlabs/Module/Directory.php:325 msgid "Description:" msgstr "Beschreibung:" -#: ../../Zotlabs/Module/Directory.php:325 ../../include/channel.php:1532 +#: ../../Zotlabs/Module/Directory.php:330 ../../include/channel.php:1580 msgid "Hometown:" msgstr "Heimatstadt:" -#: ../../Zotlabs/Module/Directory.php:327 ../../include/channel.php:1540 +#: ../../Zotlabs/Module/Directory.php:332 ../../include/channel.php:1588 msgid "About:" msgstr "Über:" -#: ../../Zotlabs/Module/Directory.php:328 ../../Zotlabs/Module/Suggest.php:56 +#: ../../Zotlabs/Module/Directory.php:333 ../../Zotlabs/Module/Suggest.php:56 #: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Widget/Suggestions.php:44 -#: ../../include/conversation.php:1035 ../../include/channel.php:1337 +#: ../../include/conversation.php:1052 ../../include/channel.php:1377 #: ../../include/connections.php:111 msgid "Connect" msgstr "Verbinden" -#: ../../Zotlabs/Module/Directory.php:329 +#: ../../Zotlabs/Module/Directory.php:334 msgid "Public Forum:" msgstr "Öffentliches Forum:" -#: ../../Zotlabs/Module/Directory.php:332 +#: ../../Zotlabs/Module/Directory.php:337 msgid "Keywords: " msgstr "Schlüsselwörter:" -#: ../../Zotlabs/Module/Directory.php:335 +#: ../../Zotlabs/Module/Directory.php:340 msgid "Don't suggest" msgstr "Nicht vorschlagen" -#: ../../Zotlabs/Module/Directory.php:337 -msgid "Common connections:" -msgstr "Gemeinsame Verbindungen:" +#: ../../Zotlabs/Module/Directory.php:342 +msgid "Common connections (estimated):" +msgstr "Gemeinsame Verbindungen (geschätzt):" -#: ../../Zotlabs/Module/Directory.php:386 +#: ../../Zotlabs/Module/Directory.php:391 msgid "Global Directory" msgstr "Globales Verzeichnis" -#: ../../Zotlabs/Module/Directory.php:386 +#: ../../Zotlabs/Module/Directory.php:391 msgid "Local Directory" msgstr "Lokales Verzeichnis" -#: ../../Zotlabs/Module/Directory.php:392 +#: ../../Zotlabs/Module/Directory.php:397 msgid "Finding:" msgstr "Ergebnisse:" -#: ../../Zotlabs/Module/Directory.php:395 ../../Zotlabs/Module/Suggest.php:64 +#: ../../Zotlabs/Module/Directory.php:400 ../../Zotlabs/Module/Suggest.php:64 #: ../../include/contact_widgets.php:24 msgid "Channel Suggestions" msgstr "Kanal-Vorschläge" -#: ../../Zotlabs/Module/Directory.php:397 +#: ../../Zotlabs/Module/Directory.php:402 msgid "next page" msgstr "nächste Seite" -#: ../../Zotlabs/Module/Directory.php:397 +#: ../../Zotlabs/Module/Directory.php:402 msgid "previous page" msgstr "vorherige Seite" -#: ../../Zotlabs/Module/Directory.php:398 +#: ../../Zotlabs/Module/Directory.php:403 msgid "Sort options" msgstr "Sortieroptionen" -#: ../../Zotlabs/Module/Directory.php:399 +#: ../../Zotlabs/Module/Directory.php:404 msgid "Alphabetic" msgstr "alphabetisch" -#: ../../Zotlabs/Module/Directory.php:400 +#: ../../Zotlabs/Module/Directory.php:405 msgid "Reverse Alphabetic" msgstr "Entgegengesetzt alphabetisch" -#: ../../Zotlabs/Module/Directory.php:401 +#: ../../Zotlabs/Module/Directory.php:406 msgid "Newest to Oldest" msgstr "Neueste zuerst" -#: ../../Zotlabs/Module/Directory.php:402 +#: ../../Zotlabs/Module/Directory.php:407 msgid "Oldest to Newest" msgstr "Älteste zuerst" -#: ../../Zotlabs/Module/Directory.php:419 +#: ../../Zotlabs/Module/Directory.php:424 msgid "No entries (some entries may be hidden)." msgstr "Keine Einträge gefunden (einige könnten versteckt sein)." @@ -6710,7 +6822,7 @@ msgid "Subject:" msgstr "Betreff:" #: ../../Zotlabs/Module/Mail.php:287 ../../Zotlabs/Module/Mail.php:429 -#: ../../include/conversation.php:1365 +#: ../../include/conversation.php:1382 msgid "Attach file" msgstr "Datei anhängen" @@ -6719,7 +6831,7 @@ msgid "Send" msgstr "Absenden" #: ../../Zotlabs/Module/Mail.php:292 ../../Zotlabs/Module/Mail.php:434 -#: ../../include/conversation.php:1410 +#: ../../include/conversation.php:1427 msgid "Set expiration date" msgstr "Verfallsdatum" @@ -6795,28 +6907,28 @@ msgstr "Software" msgid "Rate" msgstr "Bewerten" -#: ../../Zotlabs/Module/Impel.php:41 ../../include/bbcode.php:263 +#: ../../Zotlabs/Module/Impel.php:43 ../../include/bbcode.php:263 msgid "webpage" msgstr "Webseite" -#: ../../Zotlabs/Module/Impel.php:46 ../../include/bbcode.php:269 +#: ../../Zotlabs/Module/Impel.php:48 ../../include/bbcode.php:269 msgid "block" msgstr "Block" -#: ../../Zotlabs/Module/Impel.php:51 ../../include/bbcode.php:266 +#: ../../Zotlabs/Module/Impel.php:53 ../../include/bbcode.php:266 msgid "layout" msgstr "Layout" -#: ../../Zotlabs/Module/Impel.php:58 ../../include/bbcode.php:272 +#: ../../Zotlabs/Module/Impel.php:60 ../../include/bbcode.php:272 msgid "menu" msgstr "Menü" -#: ../../Zotlabs/Module/Impel.php:181 +#: ../../Zotlabs/Module/Impel.php:183 #, php-format msgid "%s element installed" msgstr "Element für %s installiert" -#: ../../Zotlabs/Module/Impel.php:184 +#: ../../Zotlabs/Module/Impel.php:186 #, php-format msgid "%s element installation failed" msgstr "Installation des Elements %s fehlgeschlagen" @@ -6845,7 +6957,7 @@ msgstr "Gib einen Ordnernamen ein" msgid "or select an existing folder (doubleclick)" msgstr "oder wähle einen vorhanden Ordner aus (Doppelklick)" -#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Lib/ThreadItem.php:141 +#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Lib/ThreadItem.php:151 msgid "Save to Folder" msgstr "In Ordner speichern" @@ -6867,82 +6979,86 @@ msgstr "Bitte stimme den Nutzungsbedingungen zu. Registrierung fehlgeschlagen." msgid "Passwords do not match." msgstr "Passwörter stimmen nicht überein." -#: ../../Zotlabs/Module/Register.php:131 +#: ../../Zotlabs/Module/Register.php:127 ../../Zotlabs/Module/Register.php:137 msgid "" "Registration successful. Please check your email for validation " "instructions." msgstr "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet." -#: ../../Zotlabs/Module/Register.php:137 +#: ../../Zotlabs/Module/Register.php:135 +msgid "Registration successful. Continue to create your first channel..." +msgstr "Registrierung erfolgreich. Fahre fort, indem Du Deinen ersten Kanal anlegst..." + +#: ../../Zotlabs/Module/Register.php:144 msgid "Your registration is pending approval by the site owner." msgstr "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden." -#: ../../Zotlabs/Module/Register.php:140 +#: ../../Zotlabs/Module/Register.php:147 msgid "Your registration can not be processed." msgstr "Deine Registrierung konnte nicht verarbeitet werden." -#: ../../Zotlabs/Module/Register.php:184 +#: ../../Zotlabs/Module/Register.php:192 msgid "Registration on this hub is disabled." msgstr "Die Registrierung auf diesem Hub ist nicht möglich." -#: ../../Zotlabs/Module/Register.php:193 +#: ../../Zotlabs/Module/Register.php:201 msgid "Registration on this hub is by approval only." msgstr "Eine Registrierung auf diesem Hub erfordert die Zustimmung durch den Administrator." -#: ../../Zotlabs/Module/Register.php:194 +#: ../../Zotlabs/Module/Register.php:202 msgid "<a href=\"pubsites\">Register at another affiliated hub.</a>" msgstr "<a href=\"pubsites\">Registriere Dich auf einem der anderen verbundenen Hubs.</a>" -#: ../../Zotlabs/Module/Register.php:204 +#: ../../Zotlabs/Module/Register.php:212 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "Die maximale Anzahl täglicher Registrierungen auf diesem Server wurde überschritten. Bitte versuche es morgen noch einmal." -#: ../../Zotlabs/Module/Register.php:227 +#: ../../Zotlabs/Module/Register.php:235 #, php-format msgid "I accept the %s for this website" msgstr "Ich akzeptiere die %s für diese Webseite" -#: ../../Zotlabs/Module/Register.php:229 +#: ../../Zotlabs/Module/Register.php:241 #, php-format -msgid "I am over 13 years of age and accept the %s for this website" -msgstr "Ich bin älter als 13 Jahre und akzeptiere die %s dieser Webseite" +msgid "I am over %s years of age and accept the %s for this website" +msgstr "Ich bin älter als %s Jahre und akzeptiere die %s dieser Website." -#: ../../Zotlabs/Module/Register.php:233 +#: ../../Zotlabs/Module/Register.php:245 msgid "Your email address" msgstr "Ihre E-Mail Adresse" -#: ../../Zotlabs/Module/Register.php:234 +#: ../../Zotlabs/Module/Register.php:246 msgid "Choose a password" msgstr "Passwort" -#: ../../Zotlabs/Module/Register.php:235 +#: ../../Zotlabs/Module/Register.php:247 msgid "Please re-enter your password" msgstr "Bitte gib Dein Passwort noch einmal ein" -#: ../../Zotlabs/Module/Register.php:236 +#: ../../Zotlabs/Module/Register.php:248 msgid "Please enter your invitation code" msgstr "Bitte trage Deinen Einladungs-Code ein" -#: ../../Zotlabs/Module/Register.php:241 +#: ../../Zotlabs/Module/Register.php:253 msgid "no" msgstr "nein" -#: ../../Zotlabs/Module/Register.php:241 +#: ../../Zotlabs/Module/Register.php:253 msgid "yes" msgstr "ja" -#: ../../Zotlabs/Module/Register.php:256 +#: ../../Zotlabs/Module/Register.php:268 msgid "Membership on this site is by invitation only." msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich." -#: ../../Zotlabs/Module/Register.php:268 ../../boot.php:1620 -#: ../../include/nav.php:189 +#: ../../Zotlabs/Module/Register.php:280 ../../boot.php:1645 +#: ../../include/nav.php:196 msgid "Register" msgstr "Registrieren" -#: ../../Zotlabs/Module/Register.php:269 +#: ../../Zotlabs/Module/Register.php:281 msgid "" "This site may require email verification after submitting this form. If you " "are returned to a login page, please check your email for instructions." @@ -6953,30 +7069,30 @@ msgstr "Diese Seite verlangt möglicherweise eine Emailbestätigung nach dem Abs msgid "Cover Photos" msgstr "Cover Foto" -#: ../../Zotlabs/Module/Cover_photo.php:237 ../../include/items.php:4320 +#: ../../Zotlabs/Module/Cover_photo.php:237 ../../include/items.php:4478 msgid "female" msgstr "weiblich" -#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4321 +#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4479 #, php-format msgid "%1$s updated her %2$s" msgstr "%1$s hat ihr %2$s aktualisiert" -#: ../../Zotlabs/Module/Cover_photo.php:239 ../../include/items.php:4322 +#: ../../Zotlabs/Module/Cover_photo.php:239 ../../include/items.php:4480 msgid "male" msgstr "männlich" -#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/items.php:4323 +#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/items.php:4481 #, php-format msgid "%1$s updated his %2$s" msgstr "%1$s hat sein %2$s aktualisiert" -#: ../../Zotlabs/Module/Cover_photo.php:242 ../../include/items.php:4325 +#: ../../Zotlabs/Module/Cover_photo.php:242 ../../include/items.php:4483 #, php-format msgid "%1$s updated their %2$s" msgstr "%1$s hat sein/ihr %2$s aktualisiert" -#: ../../Zotlabs/Module/Cover_photo.php:244 ../../include/channel.php:1980 +#: ../../Zotlabs/Module/Cover_photo.php:244 ../../include/channel.php:2053 msgid "cover photo" msgstr "Cover Foto" @@ -6988,8 +7104,8 @@ msgstr "Cover Foto hochladen" msgid "Documentation Search" msgstr "Suche in der Dokumentation" -#: ../../Zotlabs/Module/Help.php:80 ../../include/conversation.php:1804 -#: ../../include/nav.php:412 +#: ../../Zotlabs/Module/Help.php:80 ../../include/conversation.php:1821 +#: ../../include/nav.php:423 msgid "About" msgstr "Über" @@ -7013,7 +7129,11 @@ msgstr "$Projectname-Dokumentation" msgid "Contents" msgstr "Inhalt" -#: ../../Zotlabs/Module/Display.php:340 +#: ../../Zotlabs/Module/Display.php:349 +msgid "Article" +msgstr "Artikel" + +#: ../../Zotlabs/Module/Display.php:401 msgid "Item has been removed." msgstr "Der Beitrag wurde entfernt." @@ -7033,35 +7153,35 @@ msgstr "Schlagwort zum Entfernen auswählen:" msgid "No such group" msgstr "Gruppe nicht gefunden" -#: ../../Zotlabs/Module/Network.php:136 +#: ../../Zotlabs/Module/Network.php:137 msgid "No such channel" msgstr "Kanal nicht gefunden" -#: ../../Zotlabs/Module/Network.php:141 +#: ../../Zotlabs/Module/Network.php:142 msgid "forum" msgstr "Forum" -#: ../../Zotlabs/Module/Network.php:153 +#: ../../Zotlabs/Module/Network.php:154 msgid "Search Results For:" msgstr "Suchergebnisse für:" -#: ../../Zotlabs/Module/Network.php:221 +#: ../../Zotlabs/Module/Network.php:222 msgid "Privacy group is empty" msgstr "Gruppe ist leer" -#: ../../Zotlabs/Module/Network.php:230 +#: ../../Zotlabs/Module/Network.php:231 msgid "Privacy group: " msgstr "Gruppe:" -#: ../../Zotlabs/Module/Network.php:256 +#: ../../Zotlabs/Module/Network.php:257 msgid "Invalid connection." msgstr "Ungültige Verbindung." -#: ../../Zotlabs/Module/Network.php:275 ../../addon/redred/redred.php:65 +#: ../../Zotlabs/Module/Network.php:276 ../../addon/redred/redred.php:65 msgid "Invalid channel." msgstr "Ungültiger Kanal." -#: ../../Zotlabs/Module/Acl.php:351 +#: ../../Zotlabs/Module/Acl.php:358 msgid "network" msgstr "Netzwerk" @@ -7083,40 +7203,40 @@ msgstr "Zugriff verweigert." msgid "File not found." msgstr "Datei nicht gefunden." -#: ../../Zotlabs/Module/Filestorage.php:137 +#: ../../Zotlabs/Module/Filestorage.php:142 msgid "Edit file permissions" msgstr "Dateiberechtigungen bearbeiten" -#: ../../Zotlabs/Module/Filestorage.php:149 +#: ../../Zotlabs/Module/Filestorage.php:154 msgid "Set/edit permissions" msgstr "Berechtigungen setzen/ändern" -#: ../../Zotlabs/Module/Filestorage.php:150 +#: ../../Zotlabs/Module/Filestorage.php:155 msgid "Include all files and sub folders" msgstr "Alle Dateien und Unterverzeichnisse einbinden" -#: ../../Zotlabs/Module/Filestorage.php:151 +#: ../../Zotlabs/Module/Filestorage.php:156 msgid "Return to file list" msgstr "Zurück zur Dateiliste" -#: ../../Zotlabs/Module/Filestorage.php:153 +#: ../../Zotlabs/Module/Filestorage.php:158 msgid "Copy/paste this code to attach file to a post" msgstr "Diesen Code kopieren und einfügen, um die Datei an einen Beitrag anzuhängen" -#: ../../Zotlabs/Module/Filestorage.php:154 +#: ../../Zotlabs/Module/Filestorage.php:159 msgid "Copy/paste this URL to link file from a web page" msgstr "Diese URL verwenden, um von einer Webseite aus auf die Datei zu verlinken" -#: ../../Zotlabs/Module/Filestorage.php:156 +#: ../../Zotlabs/Module/Filestorage.php:161 msgid "Share this file" msgstr "Diese Datei freigeben" -#: ../../Zotlabs/Module/Filestorage.php:157 +#: ../../Zotlabs/Module/Filestorage.php:162 msgid "Show URL to this file" msgstr "URL zu dieser Datei anzeigen" -#: ../../Zotlabs/Module/Filestorage.php:158 -#: ../../Zotlabs/Storage/Browser.php:351 +#: ../../Zotlabs/Module/Filestorage.php:163 +#: ../../Zotlabs/Storage/Browser.php:394 msgid "Show in your contacts shared folder" msgstr "Im geteilten Ordner Deiner Kontakte anzeigen" @@ -7250,7 +7370,7 @@ msgid "" "Password reset failed." msgstr "Die Anfrage konnte nicht verifiziert werden. (Vielleicht hast Du schon einmal auf den Link in der E-Mail geklickt?) Passwort-Rücksetzung fehlgeschlagen." -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1648 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1673 msgid "Password Reset" msgstr "Zurücksetzen des Kennworts" @@ -7295,8 +7415,8 @@ msgstr "Gib Deine E-Mail-Adresse ein, um Dein Passwort zurücksetzen zu lassen. msgid "Email Address" msgstr "E-Mail Adresse" -#: ../../Zotlabs/Module/Notifications.php:43 -#: ../../Zotlabs/Lib/ThreadItem.php:397 +#: ../../Zotlabs/Module/Notifications.php:62 +#: ../../Zotlabs/Lib/ThreadItem.php:408 msgid "Mark all seen" msgstr "Alle als gelesen markieren" @@ -7348,31 +7468,30 @@ msgstr "Teilen-Knopf für Firefox" msgid "Remote Diagnostics" msgstr "Ferndiagnose" -#: ../../Zotlabs/Lib/Apps.php:232 ../../include/features.php:342 +#: ../../Zotlabs/Lib/Apps.php:232 ../../include/features.php:352 msgid "Suggest Channels" msgstr "Kanäle vorschlagen" -#: ../../Zotlabs/Lib/Apps.php:233 ../../boot.php:1639 -#: ../../include/nav.php:153 ../../include/nav.php:157 +#: ../../Zotlabs/Lib/Apps.php:233 ../../boot.php:1664 +#: ../../include/nav.php:160 ../../include/nav.php:164 msgid "Login" msgstr "Anmelden" -#: ../../Zotlabs/Lib/Apps.php:235 ../../include/nav.php:98 +#: ../../Zotlabs/Lib/Apps.php:235 ../../include/nav.php:105 msgid "Activity" msgstr "Aktivität" -#: ../../Zotlabs/Lib/Apps.php:239 ../../include/conversation.php:1900 -#: ../../include/features.php:95 ../../include/nav.php:507 +#: ../../Zotlabs/Lib/Apps.php:239 ../../include/conversation.php:1928 +#: ../../include/features.php:95 ../../include/nav.php:529 msgid "Wiki" msgstr "Wiki" -#: ../../Zotlabs/Lib/Apps.php:240 ../../include/nav.php:102 +#: ../../Zotlabs/Lib/Apps.php:240 ../../include/nav.php:109 msgid "Channel Home" msgstr "Mein Kanal" -#: ../../Zotlabs/Lib/Apps.php:243 ../../include/conversation.php:1833 -#: ../../include/conversation.php:1836 ../../include/nav.php:124 -#: ../../include/nav.php:441 ../../include/nav.php:444 +#: ../../Zotlabs/Lib/Apps.php:243 ../../include/conversation.php:1850 +#: ../../include/conversation.php:1853 ../../include/nav.php:131 msgid "Events" msgstr "Termine" @@ -7380,7 +7499,7 @@ msgstr "Termine" msgid "Directory" msgstr "Verzeichnis" -#: ../../Zotlabs/Lib/Apps.php:246 ../../include/nav.php:116 +#: ../../Zotlabs/Lib/Apps.php:246 ../../include/nav.php:123 msgid "Mail" msgstr "Mail" @@ -7430,14 +7549,22 @@ msgstr "Kaufen" msgid "Undelete" msgstr "Wieder hergestellt" -#: ../../Zotlabs/Lib/Apps.php:407 +#: ../../Zotlabs/Lib/Apps.php:409 msgid "Add to app-tray" msgstr "Zum App-Menü hinzufügen" -#: ../../Zotlabs/Lib/Apps.php:408 +#: ../../Zotlabs/Lib/Apps.php:410 msgid "Remove from app-tray" msgstr "Aus dem App-Menü entfernen" +#: ../../Zotlabs/Lib/Apps.php:411 +msgid "Pin to navbar" +msgstr "An Navigationsleiste anpinnen" + +#: ../../Zotlabs/Lib/Apps.php:412 +msgid "Unpin from navbar" +msgstr "Von Navigationsleiste entfernen" + #: ../../Zotlabs/Lib/Permcat.php:58 msgctxt "permcat" msgid "default" @@ -7459,71 +7586,71 @@ msgid "publisher" msgstr "Autor" #: ../../Zotlabs/Lib/NativeWikiPage.php:42 -#: ../../Zotlabs/Lib/NativeWikiPage.php:90 +#: ../../Zotlabs/Lib/NativeWikiPage.php:93 msgid "(No Title)" msgstr "(Kein Titel)" -#: ../../Zotlabs/Lib/NativeWikiPage.php:104 +#: ../../Zotlabs/Lib/NativeWikiPage.php:107 msgid "Wiki page create failed." msgstr "Anlegen der Wiki-Seite fehlgeschlagen." -#: ../../Zotlabs/Lib/NativeWikiPage.php:117 +#: ../../Zotlabs/Lib/NativeWikiPage.php:120 msgid "Wiki not found." msgstr "Wiki nicht gefunden." -#: ../../Zotlabs/Lib/NativeWikiPage.php:128 +#: ../../Zotlabs/Lib/NativeWikiPage.php:131 msgid "Destination name already exists" msgstr "Zielname bereits vorhanden" -#: ../../Zotlabs/Lib/NativeWikiPage.php:160 -#: ../../Zotlabs/Lib/NativeWikiPage.php:355 +#: ../../Zotlabs/Lib/NativeWikiPage.php:163 +#: ../../Zotlabs/Lib/NativeWikiPage.php:359 msgid "Page not found" msgstr "Seite nicht gefunden" -#: ../../Zotlabs/Lib/NativeWikiPage.php:191 +#: ../../Zotlabs/Lib/NativeWikiPage.php:194 msgid "Error reading page content" msgstr "Fehler beim Lesen des Seiteninhalts" -#: ../../Zotlabs/Lib/NativeWikiPage.php:347 -#: ../../Zotlabs/Lib/NativeWikiPage.php:396 -#: ../../Zotlabs/Lib/NativeWikiPage.php:463 -#: ../../Zotlabs/Lib/NativeWikiPage.php:504 +#: ../../Zotlabs/Lib/NativeWikiPage.php:350 +#: ../../Zotlabs/Lib/NativeWikiPage.php:400 +#: ../../Zotlabs/Lib/NativeWikiPage.php:467 +#: ../../Zotlabs/Lib/NativeWikiPage.php:508 msgid "Error reading wiki" msgstr "Fehler beim Lesen des Wiki" -#: ../../Zotlabs/Lib/NativeWikiPage.php:384 +#: ../../Zotlabs/Lib/NativeWikiPage.php:388 msgid "Page update failed." msgstr "Seitenaktualisierung fehlgeschlagen." -#: ../../Zotlabs/Lib/NativeWikiPage.php:418 +#: ../../Zotlabs/Lib/NativeWikiPage.php:422 msgid "Nothing deleted" msgstr "Nichts gelöscht" -#: ../../Zotlabs/Lib/NativeWikiPage.php:484 +#: ../../Zotlabs/Lib/NativeWikiPage.php:488 msgid "Compare: object not found." msgstr "Vergleichen: Objekt nicht gefunden." -#: ../../Zotlabs/Lib/NativeWikiPage.php:490 +#: ../../Zotlabs/Lib/NativeWikiPage.php:494 msgid "Page updated" msgstr "Seite aktualisiert" -#: ../../Zotlabs/Lib/NativeWikiPage.php:493 +#: ../../Zotlabs/Lib/NativeWikiPage.php:497 msgid "Untitled" msgstr "Ohne Titel" -#: ../../Zotlabs/Lib/NativeWikiPage.php:499 +#: ../../Zotlabs/Lib/NativeWikiPage.php:503 msgid "Wiki resource_id required for git commit" msgstr "Die resource_id des Wiki wird benötigt für den git commit." -#: ../../Zotlabs/Lib/NativeWikiPage.php:555 +#: ../../Zotlabs/Lib/NativeWikiPage.php:559 #: ../../Zotlabs/Widget/Wiki_page_history.php:23 msgctxt "wiki_history" msgid "Message" msgstr "Nachricht" -#: ../../Zotlabs/Lib/NativeWikiPage.php:593 -#: ../../addon/gitwiki/gitwiki_backend.php:579 ../../include/bbcode.php:672 -#: ../../include/bbcode.php:818 +#: ../../Zotlabs/Lib/NativeWikiPage.php:597 +#: ../../addon/gitwiki/gitwiki_backend.php:579 ../../include/bbcode.php:674 +#: ../../include/bbcode.php:822 msgid "Different viewers will see this text differently" msgstr "Verschiedene Betrachter werden diesen Text unterschiedlich sehen" @@ -7590,23 +7717,23 @@ msgstr "Dies ist Deine Voreinstellung für die Sichtbarkeit Deiner Dateien und F msgid "This is your default setting for the audience of your webpages" msgstr "Dies ist Deine Voreinstellung für die Sichtbarkeit Deiner Webseiten." -#: ../../Zotlabs/Lib/Chatroom.php:27 +#: ../../Zotlabs/Lib/Chatroom.php:23 msgid "Missing room name" msgstr "Der Chatraum hat keinen Namen" -#: ../../Zotlabs/Lib/Chatroom.php:36 +#: ../../Zotlabs/Lib/Chatroom.php:32 msgid "Duplicate room name" msgstr "Name des Chatraums bereits vergeben" -#: ../../Zotlabs/Lib/Chatroom.php:86 ../../Zotlabs/Lib/Chatroom.php:94 +#: ../../Zotlabs/Lib/Chatroom.php:82 ../../Zotlabs/Lib/Chatroom.php:90 msgid "Invalid room specifier." msgstr "Ungültiger Raumbezeichner." -#: ../../Zotlabs/Lib/Chatroom.php:126 +#: ../../Zotlabs/Lib/Chatroom.php:122 msgid "Room not found." msgstr "Chatraum konnte nicht gefunden werden." -#: ../../Zotlabs/Lib/Chatroom.php:147 +#: ../../Zotlabs/Lib/Chatroom.php:143 msgid "Room is full" msgstr "Der Chatraum ist voll" @@ -7832,11 +7959,11 @@ msgstr "Bitte besuche %s um den Vorschlag zu akzeptieren oder abzulehnen." msgid "[$Projectname:Notify]" msgstr "[$Projectname:Benachrichtigung]" -#: ../../Zotlabs/Lib/Enotify.php:789 +#: ../../Zotlabs/Lib/Enotify.php:793 msgid "created a new post" msgstr "Neuer Beitrag wurde erzeugt" -#: ../../Zotlabs/Lib/Enotify.php:790 +#: ../../Zotlabs/Lib/Enotify.php:794 #, php-format msgid "commented on %s's post" msgstr "hat %s's Beitrag kommentiert" @@ -7859,208 +7986,208 @@ msgstr "Aktualisierungsfehler auf %s" msgid "Update %s failed. See error logs." msgstr "Aktualisierung %s fehlgeschlagen. Details in den Fehlerprotokollen." -#: ../../Zotlabs/Lib/ThreadItem.php:97 ../../include/conversation.php:681 +#: ../../Zotlabs/Lib/ThreadItem.php:97 ../../include/conversation.php:697 msgid "Private Message" msgstr "Private Nachricht" -#: ../../Zotlabs/Lib/ThreadItem.php:137 ../../include/conversation.php:673 +#: ../../Zotlabs/Lib/ThreadItem.php:147 ../../include/conversation.php:689 msgid "Select" msgstr "Auswählen" -#: ../../Zotlabs/Lib/ThreadItem.php:162 +#: ../../Zotlabs/Lib/ThreadItem.php:172 msgid "I will attend" msgstr "Ich werde teilnehmen" -#: ../../Zotlabs/Lib/ThreadItem.php:162 +#: ../../Zotlabs/Lib/ThreadItem.php:172 msgid "I will not attend" msgstr "Ich werde nicht teilnehmen" -#: ../../Zotlabs/Lib/ThreadItem.php:162 +#: ../../Zotlabs/Lib/ThreadItem.php:172 msgid "I might attend" msgstr "Ich werde vielleicht teilnehmen" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:182 msgid "I agree" msgstr "Ich stimme zu" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:182 msgid "I disagree" msgstr "Ich lehne ab" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:182 msgid "I abstain" msgstr "Ich enthalte mich" -#: ../../Zotlabs/Lib/ThreadItem.php:228 +#: ../../Zotlabs/Lib/ThreadItem.php:238 msgid "Add Star" msgstr "Stern hinzufügen" -#: ../../Zotlabs/Lib/ThreadItem.php:229 +#: ../../Zotlabs/Lib/ThreadItem.php:239 msgid "Remove Star" msgstr "Stern entfernen" -#: ../../Zotlabs/Lib/ThreadItem.php:230 +#: ../../Zotlabs/Lib/ThreadItem.php:240 msgid "Toggle Star Status" msgstr "Markierungsstatus (Stern) umschalten" -#: ../../Zotlabs/Lib/ThreadItem.php:234 +#: ../../Zotlabs/Lib/ThreadItem.php:244 msgid "starred" msgstr "markiert" -#: ../../Zotlabs/Lib/ThreadItem.php:244 ../../include/conversation.php:688 +#: ../../Zotlabs/Lib/ThreadItem.php:254 ../../include/conversation.php:704 msgid "Message signature validated" msgstr "Signatur überprüft" -#: ../../Zotlabs/Lib/ThreadItem.php:245 ../../include/conversation.php:689 +#: ../../Zotlabs/Lib/ThreadItem.php:255 ../../include/conversation.php:705 msgid "Message signature incorrect" msgstr "Signatur nicht korrekt" -#: ../../Zotlabs/Lib/ThreadItem.php:253 +#: ../../Zotlabs/Lib/ThreadItem.php:263 msgid "Add Tag" msgstr "Tag hinzufügen" -#: ../../Zotlabs/Lib/ThreadItem.php:271 ../../include/taxonomy.php:433 +#: ../../Zotlabs/Lib/ThreadItem.php:281 ../../include/taxonomy.php:506 msgid "like" msgstr "mag" -#: ../../Zotlabs/Lib/ThreadItem.php:272 ../../include/taxonomy.php:434 +#: ../../Zotlabs/Lib/ThreadItem.php:282 ../../include/taxonomy.php:507 msgid "dislike" msgstr "verurteile" -#: ../../Zotlabs/Lib/ThreadItem.php:276 +#: ../../Zotlabs/Lib/ThreadItem.php:286 msgid "Share This" msgstr "Teilen" -#: ../../Zotlabs/Lib/ThreadItem.php:276 +#: ../../Zotlabs/Lib/ThreadItem.php:286 msgid "share" msgstr "Teilen" -#: ../../Zotlabs/Lib/ThreadItem.php:285 +#: ../../Zotlabs/Lib/ThreadItem.php:295 msgid "Delivery Report" msgstr "Zustellungsbericht" -#: ../../Zotlabs/Lib/ThreadItem.php:303 +#: ../../Zotlabs/Lib/ThreadItem.php:313 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d Kommentar" msgstr[1] "%d Kommentare" -#: ../../Zotlabs/Lib/ThreadItem.php:333 ../../Zotlabs/Lib/ThreadItem.php:334 +#: ../../Zotlabs/Lib/ThreadItem.php:343 ../../Zotlabs/Lib/ThreadItem.php:344 #, php-format msgid "View %s's profile - %s" msgstr "Schaue Dir %ss Profil an – %s" -#: ../../Zotlabs/Lib/ThreadItem.php:337 +#: ../../Zotlabs/Lib/ThreadItem.php:347 msgid "to" msgstr "an" -#: ../../Zotlabs/Lib/ThreadItem.php:338 +#: ../../Zotlabs/Lib/ThreadItem.php:348 msgid "via" msgstr "via" -#: ../../Zotlabs/Lib/ThreadItem.php:339 +#: ../../Zotlabs/Lib/ThreadItem.php:349 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: ../../Zotlabs/Lib/ThreadItem.php:340 +#: ../../Zotlabs/Lib/ThreadItem.php:350 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" -#: ../../Zotlabs/Lib/ThreadItem.php:353 ../../include/conversation.php:747 +#: ../../Zotlabs/Lib/ThreadItem.php:363 ../../include/conversation.php:763 #, php-format msgid "from %s" msgstr "via %s" -#: ../../Zotlabs/Lib/ThreadItem.php:356 ../../include/conversation.php:750 +#: ../../Zotlabs/Lib/ThreadItem.php:366 ../../include/conversation.php:766 #, php-format msgid "last edited: %s" msgstr "zuletzt bearbeitet: %s" -#: ../../Zotlabs/Lib/ThreadItem.php:357 ../../include/conversation.php:751 +#: ../../Zotlabs/Lib/ThreadItem.php:367 ../../include/conversation.php:767 #, php-format msgid "Expires: %s" msgstr "Verfällt: %s" -#: ../../Zotlabs/Lib/ThreadItem.php:363 +#: ../../Zotlabs/Lib/ThreadItem.php:374 msgid "Attend" msgstr "Zusagen" -#: ../../Zotlabs/Lib/ThreadItem.php:364 +#: ../../Zotlabs/Lib/ThreadItem.php:375 msgid "Attendance Options" msgstr "Zusageoptionen" -#: ../../Zotlabs/Lib/ThreadItem.php:365 +#: ../../Zotlabs/Lib/ThreadItem.php:376 msgid "Vote" msgstr "Abstimmen" -#: ../../Zotlabs/Lib/ThreadItem.php:366 +#: ../../Zotlabs/Lib/ThreadItem.php:377 msgid "Voting Options" msgstr "Abstimmungsoptionen" -#: ../../Zotlabs/Lib/ThreadItem.php:387 +#: ../../Zotlabs/Lib/ThreadItem.php:398 #: ../../addon/bookmarker/bookmarker.php:38 msgid "Save Bookmarks" msgstr "Favoriten speichern" -#: ../../Zotlabs/Lib/ThreadItem.php:388 +#: ../../Zotlabs/Lib/ThreadItem.php:399 msgid "Add to Calendar" msgstr "Zum Kalender hinzufügen" -#: ../../Zotlabs/Lib/ThreadItem.php:415 ../../include/conversation.php:471 +#: ../../Zotlabs/Lib/ThreadItem.php:426 ../../include/conversation.php:483 msgid "This is an unsaved preview" msgstr "Dies ist eine nicht gespeicherte Vorschau" -#: ../../Zotlabs/Lib/ThreadItem.php:447 ../../include/js_strings.php:7 +#: ../../Zotlabs/Lib/ThreadItem.php:458 ../../include/js_strings.php:7 #, php-format msgid "%s show all" msgstr "%s mehr anzeigen" -#: ../../Zotlabs/Lib/ThreadItem.php:744 ../../include/conversation.php:1360 +#: ../../Zotlabs/Lib/ThreadItem.php:755 ../../include/conversation.php:1377 msgid "Bold" msgstr "Fett" -#: ../../Zotlabs/Lib/ThreadItem.php:745 ../../include/conversation.php:1361 +#: ../../Zotlabs/Lib/ThreadItem.php:756 ../../include/conversation.php:1378 msgid "Italic" msgstr "Kursiv" -#: ../../Zotlabs/Lib/ThreadItem.php:746 ../../include/conversation.php:1362 +#: ../../Zotlabs/Lib/ThreadItem.php:757 ../../include/conversation.php:1379 msgid "Underline" msgstr "Unterstrichen" -#: ../../Zotlabs/Lib/ThreadItem.php:747 ../../include/conversation.php:1363 +#: ../../Zotlabs/Lib/ThreadItem.php:758 ../../include/conversation.php:1380 msgid "Quote" msgstr "Zitat" -#: ../../Zotlabs/Lib/ThreadItem.php:748 ../../include/conversation.php:1364 +#: ../../Zotlabs/Lib/ThreadItem.php:759 ../../include/conversation.php:1381 msgid "Code" msgstr "Code" -#: ../../Zotlabs/Lib/ThreadItem.php:749 +#: ../../Zotlabs/Lib/ThreadItem.php:760 msgid "Image" msgstr "Bild" -#: ../../Zotlabs/Lib/ThreadItem.php:750 +#: ../../Zotlabs/Lib/ThreadItem.php:761 msgid "Attach File" msgstr "Datei anhängen" -#: ../../Zotlabs/Lib/ThreadItem.php:751 +#: ../../Zotlabs/Lib/ThreadItem.php:762 msgid "Insert Link" msgstr "Link einfügen" -#: ../../Zotlabs/Lib/ThreadItem.php:752 +#: ../../Zotlabs/Lib/ThreadItem.php:763 msgid "Video" msgstr "Video" -#: ../../Zotlabs/Lib/ThreadItem.php:762 +#: ../../Zotlabs/Lib/ThreadItem.php:773 msgid "Your full name (required)" msgstr "Ihr vollständiger Name (erforderlich)" -#: ../../Zotlabs/Lib/ThreadItem.php:763 +#: ../../Zotlabs/Lib/ThreadItem.php:774 msgid "Your email address (required)" msgstr "Ihre E-Mail-Adresse (erforderlich)" -#: ../../Zotlabs/Lib/ThreadItem.php:764 +#: ../../Zotlabs/Lib/ThreadItem.php:775 msgid "Your website URL (optional)" msgstr "Ihre Webseiten-URL (optional)" @@ -8076,7 +8203,7 @@ msgstr "Fern-Authentifizierung blockiert. Du bist lokal auf diesem Server angeme msgid "Welcome %s. Remote authentication successful." msgstr "Willkommen %s. Entfernte Authentifizierung erfolgreich." -#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:238 +#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:284 msgid "parent" msgstr "Übergeordnetes Verzeichnis" @@ -8092,7 +8219,8 @@ msgstr "Prinzipal" msgid "Addressbook" msgstr "Adressbuch" -#: ../../Zotlabs/Storage/Browser.php:140 +#: ../../Zotlabs/Storage/Browser.php:140 ../../include/nav.php:452 +#: ../../include/nav.php:455 msgid "Calendar" msgstr "Kalender" @@ -8104,48 +8232,41 @@ msgstr "Posteingang für überwachte Kalender" msgid "Schedule Outbox" msgstr "Postausgang für überwachte Kalender" -#: ../../Zotlabs/Storage/Browser.php:226 +#: ../../Zotlabs/Storage/Browser.php:270 msgid "Total" msgstr "Summe" -#: ../../Zotlabs/Storage/Browser.php:228 +#: ../../Zotlabs/Storage/Browser.php:272 msgid "Shared" msgstr "Geteilt" -#: ../../Zotlabs/Storage/Browser.php:304 +#: ../../Zotlabs/Storage/Browser.php:350 #, php-format msgid "You are using %1$s of your available file storage." msgstr "Sie verwenden %1$s von Ihrem verfügbaren Dateispeicher." -#: ../../Zotlabs/Storage/Browser.php:309 +#: ../../Zotlabs/Storage/Browser.php:355 #, php-format msgid "You are using %1$s of %2$s available file storage. (%3$s%)" msgstr "Sie verwenden %1$s von %2$s verfügbarem Dateispeicher. (%3$s%)" -#: ../../Zotlabs/Storage/Browser.php:320 +#: ../../Zotlabs/Storage/Browser.php:366 msgid "WARNING:" msgstr "WARNUNG:" -#: ../../Zotlabs/Storage/Browser.php:330 -msgid "" -"Please use DAV to upload large (video, audio) files.<br>See <a class=\"zrl\"" -" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop " -"Clients</a>" -msgstr "Bitte verwende DAV, um große Dateien (Audio, Video) hochzuladen.<br>Für weitere Informationen siehe <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>" - -#: ../../Zotlabs/Storage/Browser.php:334 +#: ../../Zotlabs/Storage/Browser.php:378 msgid "Create new folder" msgstr "Neuen Ordner anlegen" -#: ../../Zotlabs/Storage/Browser.php:336 +#: ../../Zotlabs/Storage/Browser.php:380 msgid "Upload file" msgstr "Datei hochladen" -#: ../../Zotlabs/Storage/Browser.php:350 +#: ../../Zotlabs/Storage/Browser.php:393 msgid "Drop files here to immediately upload" msgstr "Dateien zum sofortigen Hochladen hier fallen lassen" -#: ../../Zotlabs/Widget/Forums.php:85 +#: ../../Zotlabs/Widget/Forums.php:99 msgid "Forums" msgstr "Foren" @@ -8161,80 +8282,81 @@ msgstr "Lesen-schreiben" msgid "Read-only" msgstr "Nur Lesen" -#: ../../Zotlabs/Widget/Cdav.php:116 +#: ../../Zotlabs/Widget/Cdav.php:117 msgid "My Calendars" msgstr "Meine Kalender" -#: ../../Zotlabs/Widget/Cdav.php:118 +#: ../../Zotlabs/Widget/Cdav.php:119 msgid "Shared Calendars" msgstr "Geteilte Kalender" -#: ../../Zotlabs/Widget/Cdav.php:122 +#: ../../Zotlabs/Widget/Cdav.php:123 msgid "Share this calendar" msgstr "Diesen Kalender teilen" -#: ../../Zotlabs/Widget/Cdav.php:124 +#: ../../Zotlabs/Widget/Cdav.php:125 msgid "Calendar name and color" msgstr "Kalendername und -farbe" -#: ../../Zotlabs/Widget/Cdav.php:126 +#: ../../Zotlabs/Widget/Cdav.php:127 msgid "Create new calendar" msgstr "Neuen Kalender erstellen" -#: ../../Zotlabs/Widget/Cdav.php:128 +#: ../../Zotlabs/Widget/Cdav.php:129 msgid "Calendar Name" msgstr "Kalendername" -#: ../../Zotlabs/Widget/Cdav.php:129 +#: ../../Zotlabs/Widget/Cdav.php:130 msgid "Calendar Tools" msgstr "Kalenderwerkzeuge" -#: ../../Zotlabs/Widget/Cdav.php:130 +#: ../../Zotlabs/Widget/Cdav.php:131 msgid "Import calendar" msgstr "Kalender importieren" -#: ../../Zotlabs/Widget/Cdav.php:131 +#: ../../Zotlabs/Widget/Cdav.php:132 msgid "Select a calendar to import to" msgstr "Kalender zum Hineinimportieren auswählen" -#: ../../Zotlabs/Widget/Cdav.php:158 +#: ../../Zotlabs/Widget/Cdav.php:159 msgid "Addressbooks" msgstr "Adressbücher" -#: ../../Zotlabs/Widget/Cdav.php:160 +#: ../../Zotlabs/Widget/Cdav.php:161 msgid "Addressbook name" msgstr "Adressbuchname" -#: ../../Zotlabs/Widget/Cdav.php:162 +#: ../../Zotlabs/Widget/Cdav.php:163 msgid "Create new addressbook" msgstr "Neues Adressbuch erstellen" -#: ../../Zotlabs/Widget/Cdav.php:163 +#: ../../Zotlabs/Widget/Cdav.php:164 msgid "Addressbook Name" msgstr "Adressbuchname" -#: ../../Zotlabs/Widget/Cdav.php:165 +#: ../../Zotlabs/Widget/Cdav.php:166 msgid "Addressbook Tools" msgstr "Adressbuchwerkzeuge" -#: ../../Zotlabs/Widget/Cdav.php:166 +#: ../../Zotlabs/Widget/Cdav.php:167 msgid "Import addressbook" msgstr "Adressbuch importieren" -#: ../../Zotlabs/Widget/Cdav.php:167 +#: ../../Zotlabs/Widget/Cdav.php:168 msgid "Select an addressbook to import to" msgstr "Adressbuch zum Hineinimportieren auswählen" -#: ../../Zotlabs/Widget/Appcategories.php:39 -#: ../../Zotlabs/Widget/Tagcloud.php:25 ../../include/contact_widgets.php:91 -#: ../../include/contact_widgets.php:132 ../../include/taxonomy.php:285 -#: ../../include/taxonomy.php:367 ../../include/taxonomy.php:387 +#: ../../Zotlabs/Widget/Appcategories.php:40 +#: ../../Zotlabs/Widget/Tagcloud.php:25 ../../include/contact_widgets.php:97 +#: ../../include/contact_widgets.php:141 ../../include/contact_widgets.php:186 +#: ../../include/taxonomy.php:337 ../../include/taxonomy.php:419 +#: ../../include/taxonomy.php:439 ../../include/taxonomy.php:460 msgid "Categories" msgstr "Kategorien" -#: ../../Zotlabs/Widget/Appcategories.php:42 ../../Zotlabs/Widget/Filer.php:31 -#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:94 -#: ../../include/contact_widgets.php:135 +#: ../../Zotlabs/Widget/Appcategories.php:43 ../../Zotlabs/Widget/Filer.php:31 +#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:100 +#: ../../include/contact_widgets.php:144 ../../include/contact_widgets.php:189 msgid "Everything" msgstr "Alles" @@ -8254,6 +8376,14 @@ msgstr "Kalender importieren" msgid "Suggested Chatrooms" msgstr "Chatraum-Vorschläge" +#: ../../Zotlabs/Widget/Hq_controls.php:14 +msgid "HQ Control Panel" +msgstr "HQ-Einstellungen" + +#: ../../Zotlabs/Widget/Hq_controls.php:17 +msgid "Create a new post" +msgstr "Neuen Beitrag erstellen" + #: ../../Zotlabs/Widget/Mailmenu.php:13 msgid "Private Mail Menu" msgstr "Private Nachrichten" @@ -8262,21 +8392,21 @@ msgstr "Private Nachrichten" msgid "Combined View" msgstr "Kombinierte Anzeige" -#: ../../Zotlabs/Widget/Mailmenu.php:20 ../../include/nav.php:119 +#: ../../Zotlabs/Widget/Mailmenu.php:20 ../../include/nav.php:126 msgid "Inbox" msgstr "Eingang" -#: ../../Zotlabs/Widget/Mailmenu.php:25 ../../include/nav.php:120 +#: ../../Zotlabs/Widget/Mailmenu.php:25 ../../include/nav.php:127 msgid "Outbox" msgstr "Ausgang" -#: ../../Zotlabs/Widget/Mailmenu.php:30 ../../include/nav.php:121 +#: ../../Zotlabs/Widget/Mailmenu.php:30 ../../include/nav.php:128 msgid "New Message" msgstr "Neue Nachricht" #: ../../Zotlabs/Widget/Chatroom_list.php:16 -#: ../../include/conversation.php:1847 ../../include/conversation.php:1850 -#: ../../include/nav.php:455 ../../include/nav.php:458 +#: ../../include/conversation.php:1864 ../../include/conversation.php:1867 +#: ../../include/nav.php:466 ../../include/nav.php:469 msgid "Chatrooms" msgstr "Chaträume" @@ -8338,11 +8468,11 @@ msgstr "Gesendete Nachrichten" msgid "Conversations" msgstr "Konversationen" -#: ../../Zotlabs/Widget/Conversations.php:35 +#: ../../Zotlabs/Widget/Conversations.php:37 msgid "No messages." msgstr "Keine Nachrichten." -#: ../../Zotlabs/Widget/Conversations.php:55 +#: ../../Zotlabs/Widget/Conversations.php:57 msgid "Delete conversation" msgstr "Unterhaltung löschen" @@ -8358,11 +8488,11 @@ msgstr "Foto/Bild" msgid "Remove term" msgstr "Eintrag löschen" -#: ../../Zotlabs/Widget/Savedsearch.php:83 ../../include/features.php:306 +#: ../../Zotlabs/Widget/Savedsearch.php:83 ../../include/features.php:316 msgid "Saved Searches" msgstr "Gespeicherte Suchanfragen" -#: ../../Zotlabs/Widget/Savedsearch.php:84 ../../include/group.php:337 +#: ../../Zotlabs/Widget/Savedsearch.php:84 ../../include/group.php:333 msgid "add" msgstr "hinzufügen" @@ -8370,15 +8500,16 @@ msgstr "hinzufügen" msgid "Notes" msgstr "Notizen" -#: ../../Zotlabs/Widget/Wiki_pages.php:47 ../../addon/gitwiki/gitwiki.php:76 -msgid "Wiki Pages" -msgstr "Wikiseiten" - -#: ../../Zotlabs/Widget/Wiki_pages.php:53 ../../addon/gitwiki/gitwiki.php:81 +#: ../../Zotlabs/Widget/Wiki_pages.php:32 +#: ../../Zotlabs/Widget/Wiki_pages.php:89 ../../addon/gitwiki/gitwiki.php:81 msgid "Add new page" msgstr "Neue Seite hinzufügen" -#: ../../Zotlabs/Widget/Wiki_pages.php:58 ../../addon/gitwiki/gitwiki.php:82 +#: ../../Zotlabs/Widget/Wiki_pages.php:83 ../../addon/gitwiki/gitwiki.php:76 +msgid "Wiki Pages" +msgstr "Wikiseiten" + +#: ../../Zotlabs/Widget/Wiki_pages.php:94 ../../addon/gitwiki/gitwiki.php:82 msgid "Page name" msgstr "Seitenname" @@ -8399,7 +8530,7 @@ msgid "See more..." msgstr "Mehr anzeigen …" #: ../../Zotlabs/Widget/Filer.php:28 ../../include/contact_widgets.php:53 -#: ../../include/features.php:395 +#: ../../include/features.php:414 msgid "Saved Folders" msgstr "Gespeicherte Ordner" @@ -8419,7 +8550,7 @@ msgstr "Warteschlange kontrollieren" msgid "DB updates" msgstr "DB-Aktualisierungen" -#: ../../Zotlabs/Widget/Admin.php:55 ../../include/nav.php:224 +#: ../../Zotlabs/Widget/Admin.php:55 ../../include/nav.php:231 msgid "Admin" msgstr "Administration" @@ -8459,7 +8590,7 @@ msgstr "Kanal exportieren" msgid "Connected apps" msgstr "Verbundene Apps" -#: ../../Zotlabs/Widget/Settings_menu.php:100 ../../include/features.php:158 +#: ../../Zotlabs/Widget/Settings_menu.php:100 ../../include/features.php:168 msgid "Permission Groups" msgstr "Berechtigungsrollen" @@ -8479,165 +8610,170 @@ msgstr "Neue Netzwerk-Aktivitäten" msgid "New Network Activity Notifications" msgstr "Benachrichtigungen für neue Netzwerk-Aktivitäten" -#: ../../Zotlabs/Widget/Notifications.php:20 ../../include/nav.php:99 +#: ../../Zotlabs/Widget/Notifications.php:20 ../../include/nav.php:106 msgid "View your network activity" msgstr "Zeige Deine Netzwerk-Aktivitäten" -#: ../../Zotlabs/Widget/Notifications.php:24 +#: ../../Zotlabs/Widget/Notifications.php:23 msgid "Mark all notifications read" msgstr "Alle Benachrichtigungen als gesehen markieren" -#: ../../Zotlabs/Widget/Notifications.php:32 +#: ../../Zotlabs/Widget/Notifications.php:26 +#: ../../Zotlabs/Widget/Notifications.php:44 +#: ../../Zotlabs/Widget/Notifications.php:139 +msgid "Show new posts only" +msgstr "Zeige nur neue Beiträge" + +#: ../../Zotlabs/Widget/Notifications.php:34 msgid "New Home Activity" msgstr "Neue Kanal-Aktivitäten" -#: ../../Zotlabs/Widget/Notifications.php:33 +#: ../../Zotlabs/Widget/Notifications.php:35 msgid "New Home Activity Notifications" msgstr "Benachrichtigungen für neue Kanal-Aktivitäten" -#: ../../Zotlabs/Widget/Notifications.php:36 +#: ../../Zotlabs/Widget/Notifications.php:38 msgid "View your home activity" msgstr "Zeige Deine Kanal-Aktivitäten" -#: ../../Zotlabs/Widget/Notifications.php:40 +#: ../../Zotlabs/Widget/Notifications.php:41 #: ../../Zotlabs/Widget/Notifications.php:136 msgid "Mark all notifications seen" msgstr "Alle Benachrichtigungen als gesehen markieren" -#: ../../Zotlabs/Widget/Notifications.php:48 +#: ../../Zotlabs/Widget/Notifications.php:52 msgid "New Mails" msgstr "Neue Mails" -#: ../../Zotlabs/Widget/Notifications.php:49 +#: ../../Zotlabs/Widget/Notifications.php:53 msgid "New Mails Notifications" msgstr "Benachrichtigungen für neue Mails" -#: ../../Zotlabs/Widget/Notifications.php:52 +#: ../../Zotlabs/Widget/Notifications.php:56 msgid "View your private mails" msgstr "Zeige Deine persönlichen Mails" -#: ../../Zotlabs/Widget/Notifications.php:56 +#: ../../Zotlabs/Widget/Notifications.php:59 msgid "Mark all messages seen" msgstr "Alle Mails als gelesen markieren" -#: ../../Zotlabs/Widget/Notifications.php:64 +#: ../../Zotlabs/Widget/Notifications.php:67 msgid "New Events" msgstr "Neue Termine" -#: ../../Zotlabs/Widget/Notifications.php:65 +#: ../../Zotlabs/Widget/Notifications.php:68 msgid "New Events Notifications" msgstr "Benachrichtigungen für neue Termine" -#: ../../Zotlabs/Widget/Notifications.php:68 ../../include/nav.php:125 +#: ../../Zotlabs/Widget/Notifications.php:71 ../../include/nav.php:132 msgid "View events" msgstr "Termine ansehen" -#: ../../Zotlabs/Widget/Notifications.php:72 ../../include/nav.php:126 +#: ../../Zotlabs/Widget/Notifications.php:74 ../../include/nav.php:133 msgid "Mark all events seen" msgstr "Markiere alle Termine als gesehen" -#: ../../Zotlabs/Widget/Notifications.php:81 +#: ../../Zotlabs/Widget/Notifications.php:83 msgid "New Connections Notifications" msgstr "Benachrichtigungen für neue Verbindungen" -#: ../../Zotlabs/Widget/Notifications.php:84 +#: ../../Zotlabs/Widget/Notifications.php:86 msgid "View all connections" msgstr "Zeige alle Verbindungen" -#: ../../Zotlabs/Widget/Notifications.php:92 +#: ../../Zotlabs/Widget/Notifications.php:94 msgid "New Files" msgstr "Neue Dateien" -#: ../../Zotlabs/Widget/Notifications.php:93 +#: ../../Zotlabs/Widget/Notifications.php:95 msgid "New Files Notifications" msgstr "Benachrichtigungen für neue Dateien" -#: ../../Zotlabs/Widget/Notifications.php:100 -#: ../../Zotlabs/Widget/Notifications.php:101 ../../include/nav.php:112 +#: ../../Zotlabs/Widget/Notifications.php:102 +#: ../../Zotlabs/Widget/Notifications.php:103 ../../include/nav.php:119 msgid "Notices" msgstr "Benachrichtigungen" -#: ../../Zotlabs/Widget/Notifications.php:104 +#: ../../Zotlabs/Widget/Notifications.php:106 msgid "View all notices" -msgstr "" +msgstr "Alle Notizen ansehen" -#: ../../Zotlabs/Widget/Notifications.php:108 +#: ../../Zotlabs/Widget/Notifications.php:109 msgid "Mark all notices seen" -msgstr "" +msgstr "Alle Notizen als gesehen markieren" -#: ../../Zotlabs/Widget/Notifications.php:118 +#: ../../Zotlabs/Widget/Notifications.php:119 msgid "New Registrations" msgstr "Neue Registrierungen" -#: ../../Zotlabs/Widget/Notifications.php:119 +#: ../../Zotlabs/Widget/Notifications.php:120 msgid "New Registrations Notifications" msgstr "Benachrichtigungen für neue Registrierungen" -#: ../../Zotlabs/Widget/Notifications.php:129 +#: ../../Zotlabs/Widget/Notifications.php:130 msgid "Public Stream Notifications" msgstr "Benachrichtigungen für öffentlichen Beitrags-Stream" -#: ../../Zotlabs/Widget/Notifications.php:132 +#: ../../Zotlabs/Widget/Notifications.php:133 msgid "View the public stream" msgstr "Zeige öffentlichen Beitrags-Stream" -#: ../../Zotlabs/Widget/Notifications.php:143 -#: ../../include/conversation.php:871 ../../include/nav.php:305 -msgid "Loading..." -msgstr "Lädt ..." +#: ../../Zotlabs/Widget/Notifications.php:147 ../../include/nav.php:316 +msgid "Loading" +msgstr "Lädt..." #: ../../util/nconfig.php:34 msgid "Source channel not found." msgstr "Quellkanal nicht gefunden." -#: ../../boot.php:1619 +#: ../../boot.php:1644 msgid "Create an account to access services and applications" msgstr "Erstelle ein Konto, um auf Dienste und Anwendungen zugreifen zu können." -#: ../../boot.php:1638 ../../include/nav.php:138 ../../include/nav.php:167 -#: ../../include/nav.php:184 +#: ../../boot.php:1663 ../../include/nav.php:145 ../../include/nav.php:174 +#: ../../include/nav.php:191 msgid "Logout" msgstr "Abmelden" -#: ../../boot.php:1642 +#: ../../boot.php:1667 msgid "Login/Email" msgstr "Anmelden/E-Mail" -#: ../../boot.php:1643 +#: ../../boot.php:1668 msgid "Password" msgstr "Kennwort" -#: ../../boot.php:1644 +#: ../../boot.php:1669 msgid "Remember me" msgstr "Angaben speichern" -#: ../../boot.php:1647 +#: ../../boot.php:1672 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: ../../boot.php:2191 +#: ../../boot.php:2257 msgid "toggle mobile" msgstr "auf/von mobile Ansicht wechseln" -#: ../../boot.php:2344 +#: ../../boot.php:2419 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Webseiten-SSL-Fehler für %s" -#: ../../boot.php:2349 +#: ../../boot.php:2424 msgid "Website SSL certificate is not valid. Please correct." msgstr "Das SSL-Zertifikat der Website ist nicht gültig. Bitte beheben." -#: ../../boot.php:2468 +#: ../../boot.php:2540 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Cron-Jobs laufen nicht auf %s" -#: ../../boot.php:2473 +#: ../../boot.php:2545 msgid "Cron/Scheduled tasks not running." msgstr "Cron-Aufgaben laufen nicht." -#: ../../boot.php:2474 ../../include/datetime.php:286 +#: ../../boot.php:2546 ../../include/datetime.php:292 msgid "never" msgstr "Nie" @@ -8895,30 +9031,30 @@ msgstr "Eine Einstellung" msgid "Skeleton Settings" msgstr "Skeleton Einstellungen" -#: ../../addon/gnusoc/gnusoc.php:243 +#: ../../addon/gnusoc/gnusoc.php:247 msgid "GNU-Social Protocol Settings updated." msgstr "GNU social Protokoll Einstellungen aktualisiert" -#: ../../addon/gnusoc/gnusoc.php:262 +#: ../../addon/gnusoc/gnusoc.php:266 msgid "" "The GNU-Social protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "Das GNU-Social-Protokoll unterstützt keine Server-unabhängigen Identitäten. Verbindungen, die Du mit diesem Netzwerk eingehst, können von anderen Orten (Klonen) dieses Kanals aus unerreichbar sein." -#: ../../addon/gnusoc/gnusoc.php:265 +#: ../../addon/gnusoc/gnusoc.php:269 msgid "Enable the GNU-Social protocol for this channel" msgstr "Aktiviere das GNU social Protokoll für diesen Kanal" -#: ../../addon/gnusoc/gnusoc.php:269 +#: ../../addon/gnusoc/gnusoc.php:273 msgid "GNU-Social Protocol Settings" msgstr "GNU social Protokoll Einstellungen" -#: ../../addon/gnusoc/gnusoc.php:460 +#: ../../addon/gnusoc/gnusoc.php:464 msgid "Follow" msgstr "Folgen" -#: ../../addon/gnusoc/gnusoc.php:463 +#: ../../addon/gnusoc/gnusoc.php:467 #, php-format msgid "%1$s is now following %2$s" msgstr "%1$s folgt nun %2$s" @@ -8964,8 +9100,8 @@ msgstr "Zurückkehren nach" msgid "Page to load after image selection." msgstr "Die Seite, die nach Auswahl eines Bildes geladen werden soll." -#: ../../addon/openclipatar/openclipatar.php:58 ../../include/channel.php:1266 -#: ../../include/nav.php:146 +#: ../../addon/openclipatar/openclipatar.php:58 ../../include/channel.php:1301 +#: ../../include/nav.php:153 msgid "Edit Profile" msgstr "Profil bearbeiten" @@ -9038,7 +9174,7 @@ msgstr "Unbekannter Fehler. Bitte versuchen Sie es später erneut." msgid "Profile photo updated successfully." msgstr "Profilfoto erfolgreich aktualisiert." -#: ../../addon/zotvi/zot6.php:25 ../../include/zot.php:3983 +#: ../../addon/zotvi/zot6.php:25 ../../include/zot.php:4051 msgid "invalid target signature" msgstr "Ungültige Signatur des Ziels" @@ -9171,38 +9307,6 @@ msgstr "InsaneJournal-Beitragseinstellungen" msgid "Insane Journal Settings saved." msgstr "InsaneJournal-Einstellungen gespeichert." -#: ../../addon/js_upload/js_upload.php:44 -msgid "Upload a file" -msgstr "Datei hochladen" - -#: ../../addon/js_upload/js_upload.php:45 -msgid "Drop files here to upload" -msgstr "Dateien zum Hochladen hier fallen lassen" - -#: ../../addon/js_upload/js_upload.php:47 -msgid "Failed" -msgstr "Fehlgeschlagen" - -#: ../../addon/js_upload/js_upload.php:315 -msgid "No files were uploaded." -msgstr "Es wurden keine Dateien hochgeladen." - -#: ../../addon/js_upload/js_upload.php:322 -msgid "Uploaded file is empty" -msgstr "Hochgeladene Datei ist leer" - -#: ../../addon/js_upload/js_upload.php:335 -msgid "Image exceeds size limit of " -msgstr "Bild überschreitet Größenbeschränkung von " - -#: ../../addon/js_upload/js_upload.php:347 -msgid "File has an invalid extension, it should be one of " -msgstr "Die Datei hat eine ungültige Endung. Erlaubt sind folgende:" - -#: ../../addon/js_upload/js_upload.php:359 -msgid "Upload was cancelled, or server error encountered" -msgstr "Das Hochladen wurde abgebrochen oder es ist ein Serverfehler aufgetreten." - #: ../../addon/dwpost/dwpost.php:42 msgid "Post to Dreamwidth" msgstr "Bei Dreamwidth veröffentlichen" @@ -9227,18 +9331,6 @@ msgstr "Standardmäßig auf auf Dreamwidth posten" msgid "Dreamwidth Post Settings" msgstr "Dreamwidth-Beitragseinstellungen" -#: ../../addon/firefox/firefox.php:23 -msgid "Install Firefox Sharing Tools" -msgstr "Installiere das Firefox Sharing Werkzeug" - -#: ../../addon/firefox/firefox.php:34 -msgid "Share content from Firefox to $Projectname" -msgstr "Inhalte von Firefox nach $Projectname teilen" - -#: ../../addon/firefox/firefox.php:37 -msgid "Install Firefox Sharing Tools to this web browser" -msgstr "Installiere das Firefox Sharing Werkzeug in diesen Webbrowser" - #: ../../addon/dirstats/dirstats.php:94 msgid "Hubzilla Directory Stats" msgstr "Hubzilla-Verzeichnisstatistiken" @@ -9298,22 +9390,6 @@ msgid "" "applies to chatrooms," msgstr "Bitte berücksichtige, dass Diaspora und Friendica Statistiken nur solche einschließen, die **diesem Verzeichnis** bekannt sind, nicht alle im Netzwerk bekannten. Das gilt auch für Chaträume." -#: ../../addon/mailhost/mailhost.php:36 -msgid "Email notification hub" -msgstr "Hub für E-Mail-Benachrichtigungen" - -#: ../../addon/mailhost/mailhost.php:36 -msgid "Hostname" -msgstr "Servername" - -#: ../../addon/mailhost/mailhost.php:40 -msgid "Mailhost Settings" -msgstr "Mailhost-Einstellungen" - -#: ../../addon/mailhost/mailhost.php:54 -msgid "MAILHOST Settings saved." -msgstr "MAILHOST-Einstellungen gespeichert." - #: ../../addon/likebanner/likebanner.php:51 msgid "Your Webbie:" msgstr "Dein Webbie" @@ -9508,12 +9584,12 @@ msgid "Login failed." msgstr "Login fehlgeschlagen." #: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:49 -#: ../../include/selectors.php:66 ../../include/channel.php:1432 +#: ../../include/selectors.php:66 ../../include/channel.php:1480 msgid "Male" msgstr "Männlich" #: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:49 -#: ../../include/selectors.php:66 ../../include/channel.php:1430 +#: ../../include/selectors.php:66 ../../include/channel.php:1478 msgid "Female" msgstr "Weiblich" @@ -9700,39 +9776,39 @@ msgstr "" msgid "declared undying love for" msgstr "" -#: ../../addon/diaspora/diaspora.php:763 +#: ../../addon/diaspora/diaspora.php:772 msgid "Diaspora Protocol Settings updated." msgstr "Diaspora Protokoll Einstellungen aktualisiert" -#: ../../addon/diaspora/diaspora.php:782 +#: ../../addon/diaspora/diaspora.php:791 msgid "" "The Diaspora protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "Das Diaspora-Protokoll unterstützt keine Server-unabhängigen Identitäten. Verbindungen, die Du mit diesem Netzwerk eingehst, können von anderen Orten (Klonen) dieses Kanals aus unerreichbar sein." -#: ../../addon/diaspora/diaspora.php:785 +#: ../../addon/diaspora/diaspora.php:794 msgid "Enable the Diaspora protocol for this channel" msgstr "Das Diaspora Protokoll für diesen Kanal aktivieren" -#: ../../addon/diaspora/diaspora.php:789 +#: ../../addon/diaspora/diaspora.php:798 msgid "Allow any Diaspora member to comment on your public posts" msgstr "Erlaube jedem Diaspora Nutzer deine öffentlichen Beiträge zu kommentieren" -#: ../../addon/diaspora/diaspora.php:793 +#: ../../addon/diaspora/diaspora.php:802 msgid "Prevent your hashtags from being redirected to other sites" msgstr "Verhindern, dass Deine Hashtags zu anderen Seiten umgeleitet werden" -#: ../../addon/diaspora/diaspora.php:797 +#: ../../addon/diaspora/diaspora.php:806 msgid "" "Sign and forward posts and comments with no existing Diaspora signature" msgstr "Signieren und Weiterleiten von Beiträgen und Kommentaren ohne vorhandene Diaspora-Signatur" -#: ../../addon/diaspora/diaspora.php:802 +#: ../../addon/diaspora/diaspora.php:811 msgid "Followed hashtags (comma separated, do not include the #)" msgstr "Verfolgte Hashtags (Komma separierte Liste, ohne die #)" -#: ../../addon/diaspora/diaspora.php:807 +#: ../../addon/diaspora/diaspora.php:816 msgid "Diaspora Protocol Settings" msgstr "Diaspora Protokoll Einstellungen" @@ -9783,19 +9859,19 @@ msgstr "PHP post_max_size (muss größer sein als upload_max_filesize):" #: ../../addon/gravatar/gravatar.php:123 msgid "generic profile image" -msgstr "" +msgstr "generisches Profilbild" #: ../../addon/gravatar/gravatar.php:124 msgid "random geometric pattern" -msgstr "" +msgstr "zufälliges geometrisches Muster" #: ../../addon/gravatar/gravatar.php:125 msgid "monster face" -msgstr "" +msgstr "Monstergesicht" #: ../../addon/gravatar/gravatar.php:126 msgid "computer generated face" -msgstr "" +msgstr "computergeneriertes Gesicht" #: ../../addon/gravatar/gravatar.php:127 msgid "retro arcade style face" @@ -9823,7 +9899,7 @@ msgstr "Einstellungen speichern" #: ../../addon/gravatar/gravatar.php:151 msgid "Default avatar image" -msgstr "" +msgstr "Standard-Avatarbild" #: ../../addon/gravatar/gravatar.php:151 msgid "Select default avatar image if none was found at Gravatar. See README" @@ -9831,7 +9907,7 @@ msgstr "" #: ../../addon/gravatar/gravatar.php:152 msgid "Rating of images" -msgstr "" +msgstr "Bewertungen der Bilder" #: ../../addon/gravatar/gravatar.php:152 msgid "Select the appropriate avatar rating for your site. See README" @@ -9839,6 +9915,26 @@ msgstr "" #: ../../addon/gravatar/gravatar.php:165 msgid "Gravatar settings updated." +msgstr "Gravatar-Einstellungen aktualisiert." + +#: ../../addon/hzfiles/hzfiles.php:79 +msgid "Hubzilla File Storage Import" +msgstr "" + +#: ../../addon/hzfiles/hzfiles.php:80 +msgid "This will import all your cloud files from another server." +msgstr "" + +#: ../../addon/hzfiles/hzfiles.php:81 +msgid "Hubzilla Server base URL" +msgstr "" + +#: ../../addon/hzfiles/hzfiles.php:82 +msgid "Since modified date yyyy-mm-dd" +msgstr "" + +#: ../../addon/hzfiles/hzfiles.php:83 +msgid "Until modified date yyyy-mm-dd" msgstr "" #: ../../addon/visage/visage.php:93 @@ -9987,8 +10083,8 @@ msgstr "Friendica-Passwort" msgid "Hubzilla to Friendica Post Settings" msgstr "Hubzilla-zu-Friendica Beitragseinstellungen" -#: ../../addon/jappixmini/jappixmini.php:305 ../../include/channel.php:1357 -#: ../../include/channel.php:1519 +#: ../../addon/jappixmini/jappixmini.php:305 ../../include/channel.php:1397 +#: ../../include/channel.php:1567 msgid "Status:" msgstr "Status:" @@ -10153,27 +10249,35 @@ msgstr "Friendica-Anmeldebenutzername" msgid "Friendica Login Password" msgstr "Friendica-Anmeldepasswort" -#: ../../addon/pubcrawl/as.php:1076 ../../addon/pubcrawl/as.php:1160 -#: ../../addon/pubcrawl/as.php:1332 ../../include/network.php:1705 +#: ../../addon/pubcrawl/as.php:1077 ../../addon/pubcrawl/as.php:1164 +#: ../../addon/pubcrawl/as.php:1339 ../../include/network.php:1768 msgid "ActivityPub" msgstr "ActivityPub" -#: ../../addon/pubcrawl/pubcrawl.php:1032 +#: ../../addon/pubcrawl/pubcrawl.php:1033 msgid "ActivityPub Protocol Settings updated." msgstr "" -#: ../../addon/pubcrawl/pubcrawl.php:1041 +#: ../../addon/pubcrawl/pubcrawl.php:1042 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/pubcrawl.php:1044 +#: ../../addon/pubcrawl/pubcrawl.php:1045 msgid "Enable the ActivityPub protocol for this channel" msgstr "" -#: ../../addon/pubcrawl/pubcrawl.php:1049 +#: ../../addon/pubcrawl/pubcrawl.php:1048 +msgid "Send multi-media HTML articles" +msgstr "" + +#: ../../addon/pubcrawl/pubcrawl.php:1048 +msgid "Not supported by some microblog services such as Mastodon" +msgstr "" + +#: ../../addon/pubcrawl/pubcrawl.php:1053 msgid "ActivityPub Protocol Settings" msgstr "" @@ -10519,11 +10623,11 @@ msgstr "OAuth Konfiguration löschen" msgid "GNU social Post Settings" msgstr "GNU social Einstellungen" -#: ../../addon/statusnet/statusnet.php:891 +#: ../../addon/statusnet/statusnet.php:892 msgid "API URL" msgstr "API-URL" -#: ../../addon/statusnet/statusnet.php:894 +#: ../../addon/statusnet/statusnet.php:895 msgid "Application name" msgstr "Anwendungsname" @@ -10563,7 +10667,7 @@ msgstr "Sie müssen weiß oder schwarz auswählen." msgid "Error creating new game." msgstr "Fehler beim Erstellen eines neuen Spiels." -#: ../../addon/chess/chess.php:409 ../../include/channel.php:1117 +#: ../../addon/chess/chess.php:409 ../../include/channel.php:1152 msgid "Requested channel is not available." msgstr "Angeforderte Kanal nicht verfügbar." @@ -11242,11 +11346,11 @@ msgstr "Transsexuell" msgid "Hermaphrodite" msgstr "Zwitter" -#: ../../include/selectors.php:49 ../../include/channel.php:1436 +#: ../../include/selectors.php:49 ../../include/channel.php:1484 msgid "Neuter" msgstr "Geschlechtslos" -#: ../../include/selectors.php:49 ../../include/channel.php:1438 +#: ../../include/selectors.php:49 ../../include/channel.php:1486 msgid "Non-specific" msgstr "unklar" @@ -11426,284 +11530,306 @@ msgstr "Interessiert mich nicht" msgid "Ask me" msgstr "Frag mich mal" -#: ../../include/conversation.php:200 +#: ../../include/conversation.php:169 +#, php-format +msgid "likes %1$s's %2$s" +msgstr "" + +#: ../../include/conversation.php:172 +#, php-format +msgid "doesn't like %1$s's %2$s" +msgstr "" + +#: ../../include/conversation.php:212 #, php-format msgid "%1$s is now connected with %2$s" msgstr "%1$s ist jetzt mit %2$s verbunden" -#: ../../include/conversation.php:235 +#: ../../include/conversation.php:247 #, php-format msgid "%1$s poked %2$s" msgstr "%1$s stupste %2$s an" -#: ../../include/conversation.php:239 ../../include/text.php:1104 +#: ../../include/conversation.php:251 ../../include/text.php:1104 #: ../../include/text.php:1109 msgid "poked" msgstr "stupste" -#: ../../include/conversation.php:720 +#: ../../include/conversation.php:736 #, php-format msgid "View %s's profile @ %s" msgstr "%ss Profil auf %s ansehen" -#: ../../include/conversation.php:740 +#: ../../include/conversation.php:756 msgid "Categories:" msgstr "Kategorien:" -#: ../../include/conversation.php:741 +#: ../../include/conversation.php:757 msgid "Filed under:" msgstr "Gespeichert unter:" -#: ../../include/conversation.php:766 +#: ../../include/conversation.php:783 msgid "View in context" msgstr "Im Zusammenhang anschauen" -#: ../../include/conversation.php:867 +#: ../../include/conversation.php:884 msgid "remove" msgstr "lösche" -#: ../../include/conversation.php:872 +#: ../../include/conversation.php:888 +msgid "Loading..." +msgstr "Lädt ..." + +#: ../../include/conversation.php:889 msgid "Delete Selected Items" msgstr "Lösche die ausgewählten Elemente" -#: ../../include/conversation.php:915 +#: ../../include/conversation.php:932 msgid "View Source" msgstr "Quelle anzeigen" -#: ../../include/conversation.php:925 +#: ../../include/conversation.php:942 msgid "Follow Thread" msgstr "Unterhaltung folgen" -#: ../../include/conversation.php:934 +#: ../../include/conversation.php:951 msgid "Unfollow Thread" msgstr "Unterhaltung nicht mehr folgen" -#: ../../include/conversation.php:1025 +#: ../../include/conversation.php:1042 msgid "Activity/Posts" msgstr "Aktivitäten/Beiträge" -#: ../../include/conversation.php:1045 +#: ../../include/conversation.php:1062 msgid "Edit Connection" msgstr "Verbindung bearbeiten" -#: ../../include/conversation.php:1055 +#: ../../include/conversation.php:1072 msgid "Message" msgstr "Nachricht" -#: ../../include/conversation.php:1189 +#: ../../include/conversation.php:1206 #, php-format msgid "%s likes this." msgstr "%s gefällt das." -#: ../../include/conversation.php:1189 +#: ../../include/conversation.php:1206 #, php-format msgid "%s doesn't like this." msgstr "%s gefällt das nicht." -#: ../../include/conversation.php:1193 +#: ../../include/conversation.php:1210 #, 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> gefällt das." msgstr[1] "<span %1$s>%2$d Leuten</span> gefällt das." -#: ../../include/conversation.php:1195 +#: ../../include/conversation.php:1212 #, 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> gefällt das nicht." msgstr[1] "<span %1$s>%2$d Leuten</span> gefällt das nicht." -#: ../../include/conversation.php:1201 +#: ../../include/conversation.php:1218 msgid "and" msgstr "und" -#: ../../include/conversation.php:1204 +#: ../../include/conversation.php:1221 #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" msgstr[0] "" msgstr[1] ", und %d andere" -#: ../../include/conversation.php:1205 +#: ../../include/conversation.php:1222 #, php-format msgid "%s like this." msgstr "%s gefällt das." -#: ../../include/conversation.php:1205 +#: ../../include/conversation.php:1222 #, php-format msgid "%s don't like this." msgstr "%s gefällt das nicht." -#: ../../include/conversation.php:1248 +#: ../../include/conversation.php:1265 msgid "Set your location" msgstr "Standort" -#: ../../include/conversation.php:1249 +#: ../../include/conversation.php:1266 msgid "Clear browser location" msgstr "Browser-Standort löschen" -#: ../../include/conversation.php:1297 +#: ../../include/conversation.php:1314 msgid "Tag term:" msgstr "Schlagwort:" -#: ../../include/conversation.php:1298 +#: ../../include/conversation.php:1315 msgid "Where are you right now?" msgstr "Wo bist Du jetzt grade?" -#: ../../include/conversation.php:1303 +#: ../../include/conversation.php:1320 msgid "Choose a different album..." msgstr "Wählen Sie ein anderes Album aus..." -#: ../../include/conversation.php:1307 +#: ../../include/conversation.php:1324 msgid "Comments enabled" msgstr "Kommentare aktiviert" -#: ../../include/conversation.php:1308 +#: ../../include/conversation.php:1325 msgid "Comments disabled" msgstr "Kommentare deaktiviert" -#: ../../include/conversation.php:1355 +#: ../../include/conversation.php:1372 msgid "Page link name" msgstr "Link zur Seite" -#: ../../include/conversation.php:1358 +#: ../../include/conversation.php:1375 msgid "Post as" msgstr "Veröffentlichen als" -#: ../../include/conversation.php:1372 +#: ../../include/conversation.php:1389 msgid "Toggle voting" msgstr "Umfragewerkzeug aktivieren" -#: ../../include/conversation.php:1375 +#: ../../include/conversation.php:1392 msgid "Disable comments" msgstr "Kommentare deaktivieren" -#: ../../include/conversation.php:1376 +#: ../../include/conversation.php:1393 msgid "Toggle comments" msgstr "Kommentare umschalten" -#: ../../include/conversation.php:1384 +#: ../../include/conversation.php:1401 msgid "Categories (optional, comma-separated list)" msgstr "Kategorien (optional, kommagetrennte Liste)" -#: ../../include/conversation.php:1407 +#: ../../include/conversation.php:1424 msgid "Other networks and post services" msgstr "Andere Netzwerke und Platformen" -#: ../../include/conversation.php:1413 +#: ../../include/conversation.php:1430 msgid "Set publish date" msgstr "Veröffentlichungsdatum festlegen" -#: ../../include/conversation.php:1673 +#: ../../include/conversation.php:1690 msgid "Commented Order" msgstr "Neueste Kommentare" -#: ../../include/conversation.php:1676 +#: ../../include/conversation.php:1693 msgid "Sort by Comment Date" msgstr "Nach Kommentardatum sortiert" -#: ../../include/conversation.php:1680 +#: ../../include/conversation.php:1697 msgid "Posted Order" msgstr "Neueste Beiträge" -#: ../../include/conversation.php:1683 +#: ../../include/conversation.php:1700 msgid "Sort by Post Date" msgstr "Nach Beitragsdatum sortiert" -#: ../../include/conversation.php:1691 +#: ../../include/conversation.php:1708 msgid "Posts that mention or involve you" msgstr "Beiträge mit Beteiligung Deinerseits" -#: ../../include/conversation.php:1700 +#: ../../include/conversation.php:1717 msgid "Activity Stream - by date" msgstr "Activity Stream – nach Datum sortiert" -#: ../../include/conversation.php:1706 +#: ../../include/conversation.php:1723 msgid "Starred" msgstr "Markiert" -#: ../../include/conversation.php:1709 +#: ../../include/conversation.php:1726 msgid "Favourite Posts" msgstr "Markierte Beiträge" -#: ../../include/conversation.php:1716 +#: ../../include/conversation.php:1733 msgid "Spam" msgstr "Spam" -#: ../../include/conversation.php:1719 +#: ../../include/conversation.php:1736 msgid "Posts flagged as SPAM" msgstr "Nachrichten, die als SPAM markiert wurden" -#: ../../include/conversation.php:1794 ../../include/nav.php:402 +#: ../../include/conversation.php:1811 ../../include/nav.php:413 msgid "Status Messages and Posts" msgstr "Statusnachrichten und Beiträge" -#: ../../include/conversation.php:1807 ../../include/nav.php:415 +#: ../../include/conversation.php:1824 ../../include/nav.php:426 msgid "Profile Details" msgstr "Profil-Details" -#: ../../include/conversation.php:1817 ../../include/nav.php:425 -#: ../../include/photos.php:600 +#: ../../include/conversation.php:1834 ../../include/nav.php:436 +#: ../../include/photos.php:655 msgid "Photo Albums" msgstr "Fotoalben" -#: ../../include/conversation.php:1825 ../../include/nav.php:433 +#: ../../include/conversation.php:1842 ../../include/nav.php:444 msgid "Files and Storage" msgstr "Dateien und Speicher" -#: ../../include/conversation.php:1862 ../../include/nav.php:468 +#: ../../include/conversation.php:1879 ../../include/nav.php:479 msgid "Bookmarks" msgstr "Lesezeichen" -#: ../../include/conversation.php:1865 ../../include/nav.php:471 +#: ../../include/conversation.php:1882 ../../include/nav.php:482 msgid "Saved Bookmarks" msgstr "Gespeicherte Lesezeichen" -#: ../../include/conversation.php:1876 ../../include/nav.php:482 +#: ../../include/conversation.php:1893 ../../include/nav.php:493 msgid "View Cards" -msgstr "" +msgstr "Karten anzeigen" + +#: ../../include/conversation.php:1901 +msgid "articles" +msgstr "Artikel" + +#: ../../include/conversation.php:1904 ../../include/nav.php:504 +msgid "View Articles" +msgstr "Artikel anzeigen" -#: ../../include/conversation.php:1887 ../../include/nav.php:494 +#: ../../include/conversation.php:1915 ../../include/nav.php:516 msgid "View Webpages" msgstr "Webseiten anzeigen" -#: ../../include/conversation.php:1956 +#: ../../include/conversation.php:1984 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "Zusage" msgstr[1] "Zusagen" -#: ../../include/conversation.php:1959 +#: ../../include/conversation.php:1987 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "Absage" msgstr[1] "Absagen" -#: ../../include/conversation.php:1962 +#: ../../include/conversation.php:1990 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] " Unentschlossen" msgstr[1] "Unentschlossene" -#: ../../include/conversation.php:1965 +#: ../../include/conversation.php:1993 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "Zustimmung" msgstr[1] "Zustimmungen" -#: ../../include/conversation.php:1968 +#: ../../include/conversation.php:1996 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "Ablehnung" msgstr[1] "Ablehnungen" -#: ../../include/conversation.php:1971 +#: ../../include/conversation.php:1999 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -11981,7 +12107,7 @@ msgstr "Dezember" msgid "Unknown Attachment" msgstr "Unbekannter Anhang" -#: ../../include/text.php:1394 ../../include/feedutils.php:780 +#: ../../include/text.php:1394 ../../include/feedutils.php:825 msgid "unknown" msgstr "unbekannt" @@ -11997,7 +12123,7 @@ msgstr "aus der Datei entfernen" msgid "Download binary/encrypted content" msgstr "Binären/verschlüsselten Inhalt herunterladen" -#: ../../include/text.php:1782 ../../include/language.php:367 +#: ../../include/text.php:1782 ../../include/language.php:364 msgid "default" msgstr "Standard" @@ -12011,15 +12137,15 @@ msgstr "Mit dem Gestaltungswerkzeug kannst Du Deine eigenen Layouts erstellen" #: ../../include/text.php:1801 msgid "HTML" -msgstr "" +msgstr "HTML" #: ../../include/text.php:1804 msgid "Comanche Layout" -msgstr "" +msgstr "Comanche-Layout" #: ../../include/text.php:1809 msgid "PHP" -msgstr "" +msgstr "PHP" #: ../../include/text.php:1818 msgid "Page content type" @@ -12031,7 +12157,7 @@ msgstr "Aktivität" #: ../../include/text.php:2014 msgid "a-z, 0-9, -, and _ only" -msgstr "" +msgstr "nur a-z, 0-9, - und _" #: ../../include/text.php:2285 msgid "Design Tools" @@ -12136,16 +12262,16 @@ msgstr "Lade Freunde ein" msgid "Advanced example: name=fred and country=iceland" msgstr "Fortgeschrittenes Beispiel: name=fred and country=iceland" -#: ../../include/contact_widgets.php:166 +#: ../../include/contact_widgets.php:223 msgid "Common Connections" -msgstr "" +msgstr "Gemeinsame Verbindungen" -#: ../../include/contact_widgets.php:171 +#: ../../include/contact_widgets.php:228 #, php-format msgid "View all %d common connections" -msgstr "" +msgstr "Zeige alle %d gemeinsamen Verbindungen" -#: ../../include/markdown.php:139 ../../include/bbcode.php:337 +#: ../../include/markdown.php:158 ../../include/bbcode.php:339 #, php-format msgid "%1$s wrote the following %2$s %3$s" msgstr "%1$s schrieb den folgenden %2$s %3$s" @@ -12168,7 +12294,7 @@ msgstr "Kanal wurde gelöscht und existiert nicht mehr." #: ../../include/follow.php:156 msgid "Remote channel or protocol unavailable." -msgstr "" +msgstr "Externer Kanal oder Protokoll nicht verfügbar." #: ../../include/follow.php:179 msgid "Channel discovery failed." @@ -12468,385 +12594,385 @@ msgstr "Besuche %1$s's %2$s" msgid "%1$s has an updated %2$s, changing %3$s." msgstr "%1$s hat ein aktualisiertes %2$s, %3$s wurde verändert." -#: ../../include/attach.php:250 ../../include/attach.php:339 +#: ../../include/attach.php:265 ../../include/attach.php:361 msgid "Item was not found." msgstr "Beitrag wurde nicht gefunden." -#: ../../include/attach.php:505 +#: ../../include/attach.php:553 msgid "No source file." msgstr "Keine Quelldatei." -#: ../../include/attach.php:527 +#: ../../include/attach.php:575 msgid "Cannot locate file to replace" msgstr "Kann Datei zum Ersetzen nicht finden" -#: ../../include/attach.php:545 +#: ../../include/attach.php:593 msgid "Cannot locate file to revise/update" msgstr "Kann Datei zum Prüfen/Aktualisieren nicht finden" -#: ../../include/attach.php:680 +#: ../../include/attach.php:734 #, php-format msgid "File exceeds size limit of %d" msgstr "Datei überschreitet das Größen-Limit von %d" -#: ../../include/attach.php:694 +#: ../../include/attach.php:754 #, php-format msgid "You have reached your limit of %1$.0f Mbytes attachment storage." msgstr "Die Größe Deiner Datei-Anhänge hat das Maximum von %1$.0f MByte erreicht." -#: ../../include/attach.php:864 +#: ../../include/attach.php:929 msgid "File upload failed. Possible system limit or action terminated." msgstr "Datei-Upload fehlgeschlagen. Mögliche Systembegrenzung oder abgebrochener Prozess." -#: ../../include/attach.php:877 +#: ../../include/attach.php:948 msgid "Stored file could not be verified. Upload failed." msgstr "Gespeichert Datei konnte nicht verifiziert werden. Upload abgebrochen." -#: ../../include/attach.php:938 ../../include/attach.php:954 +#: ../../include/attach.php:1022 ../../include/attach.php:1038 msgid "Path not available." msgstr "Pfad nicht verfügbar." -#: ../../include/attach.php:1003 ../../include/attach.php:1168 +#: ../../include/attach.php:1087 ../../include/attach.php:1252 msgid "Empty pathname" msgstr "Leere Pfadangabe" -#: ../../include/attach.php:1029 +#: ../../include/attach.php:1113 msgid "duplicate filename or path" msgstr "doppelter Dateiname oder Pfad" -#: ../../include/attach.php:1054 +#: ../../include/attach.php:1138 msgid "Path not found." msgstr "Pfad nicht gefunden." -#: ../../include/attach.php:1122 +#: ../../include/attach.php:1206 msgid "mkdir failed." msgstr "mkdir fehlgeschlagen." -#: ../../include/attach.php:1126 +#: ../../include/attach.php:1210 msgid "database storage failed." msgstr "Speichern in der Datenbank fehlgeschlagen." -#: ../../include/attach.php:1174 +#: ../../include/attach.php:1258 msgid "Empty path" msgstr "Leere Pfadangabe" -#: ../../include/security.php:531 +#: ../../include/security.php:532 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 "Das Security-Token des Formulars war nicht korrekt. Das ist wahrscheinlich passiert, weil das Formular zu lange (>3 Stunden) offen war, bevor es abgeschickt wurde." -#: ../../include/items.php:857 ../../include/items.php:909 +#: ../../include/items.php:885 ../../include/items.php:945 msgid "(Unknown)" msgstr "(Unbekannt)" -#: ../../include/items.php:1093 +#: ../../include/items.php:1129 msgid "Visible to anybody on the internet." msgstr "Für jeden im Internet sichtbar." -#: ../../include/items.php:1095 +#: ../../include/items.php:1131 msgid "Visible to you only." msgstr "Nur für Dich sichtbar." -#: ../../include/items.php:1097 +#: ../../include/items.php:1133 msgid "Visible to anybody in this network." msgstr "Für jedes $Projectname-Mitglied sichtbar." -#: ../../include/items.php:1099 +#: ../../include/items.php:1135 msgid "Visible to anybody authenticated." msgstr "Für jeden sichtbar, der angemeldet ist." -#: ../../include/items.php:1101 +#: ../../include/items.php:1137 #, php-format msgid "Visible to anybody on %s." msgstr "Für jeden auf %s sichtbar." -#: ../../include/items.php:1103 +#: ../../include/items.php:1139 msgid "Visible to all connections." msgstr "Für alle Verbindungen sichtbar." -#: ../../include/items.php:1105 +#: ../../include/items.php:1141 msgid "Visible to approved connections." msgstr "Nur für akzeptierte Verbindungen sichtbar." -#: ../../include/items.php:1107 +#: ../../include/items.php:1143 msgid "Visible to specific connections." msgstr "Sichtbar für bestimmte Verbindungen." -#: ../../include/items.php:3957 +#: ../../include/items.php:4117 msgid "Privacy group is empty." msgstr "Gruppe ist leer." -#: ../../include/items.php:3964 +#: ../../include/items.php:4124 #, php-format msgid "Privacy group: %s" msgstr "Gruppe: %s" -#: ../../include/items.php:3976 +#: ../../include/items.php:4136 msgid "Connection not found." msgstr "Die Verbindung wurde nicht gefunden." -#: ../../include/items.php:4327 +#: ../../include/items.php:4485 msgid "profile photo" msgstr "Profilfoto" -#: ../../include/items.php:4520 +#: ../../include/items.php:4676 #, php-format msgid "[Edited %s]" msgstr "[%s wurde bearbeitet]" -#: ../../include/items.php:4520 +#: ../../include/items.php:4676 msgctxt "edit_activity" msgid "Post" msgstr "Beitrag" -#: ../../include/items.php:4520 +#: ../../include/items.php:4676 msgctxt "edit_activity" msgid "Comment" msgstr "Kommentar" -#: ../../include/channel.php:34 +#: ../../include/channel.php:35 msgid "Unable to obtain identity information from database" msgstr "Kann keine Identitäts-Informationen aus Datenbank beziehen" -#: ../../include/channel.php:69 +#: ../../include/channel.php:68 msgid "Empty name" msgstr "Namensfeld leer" -#: ../../include/channel.php:72 +#: ../../include/channel.php:71 msgid "Name too long" msgstr "Name ist zu lang" -#: ../../include/channel.php:183 +#: ../../include/channel.php:188 msgid "No account identifier" msgstr "Keine Account-Kennung" -#: ../../include/channel.php:195 +#: ../../include/channel.php:200 msgid "Nickname is required." msgstr "Spitzname ist erforderlich." -#: ../../include/channel.php:273 +#: ../../include/channel.php:277 msgid "Unable to retrieve created identity" msgstr "Kann die erstellte Identität nicht empfangen" -#: ../../include/channel.php:359 +#: ../../include/channel.php:373 msgid "Default Profile" msgstr "Standard-Profil" -#: ../../include/channel.php:512 ../../include/channel.php:601 +#: ../../include/channel.php:532 ../../include/channel.php:621 msgid "Unable to retrieve modified identity" msgstr "Geänderte Identität kann nicht empfangen werden" -#: ../../include/channel.php:1263 +#: ../../include/channel.php:1298 msgid "Create New Profile" msgstr "Neues Profil erstellen" -#: ../../include/channel.php:1283 +#: ../../include/channel.php:1319 msgid "Visible to everybody" msgstr "Für jeden sichtbar" -#: ../../include/channel.php:1356 ../../include/channel.php:1475 +#: ../../include/channel.php:1396 ../../include/channel.php:1523 msgid "Gender:" msgstr "Geschlecht:" -#: ../../include/channel.php:1358 ../../include/channel.php:1530 +#: ../../include/channel.php:1398 ../../include/channel.php:1578 msgid "Homepage:" msgstr "Homepage:" -#: ../../include/channel.php:1359 +#: ../../include/channel.php:1399 msgid "Online Now" msgstr "gerade online" -#: ../../include/channel.php:1434 +#: ../../include/channel.php:1482 msgid "Trans" msgstr "" -#: ../../include/channel.php:1480 +#: ../../include/channel.php:1528 msgid "Like this channel" msgstr "Dieser Kanal gefällt mir" -#: ../../include/channel.php:1504 +#: ../../include/channel.php:1552 msgid "j F, Y" msgstr "j. F Y" -#: ../../include/channel.php:1505 +#: ../../include/channel.php:1553 msgid "j F" msgstr "j. F" -#: ../../include/channel.php:1512 +#: ../../include/channel.php:1560 msgid "Birthday:" msgstr "Geburtstag:" -#: ../../include/channel.php:1525 +#: ../../include/channel.php:1573 #, php-format msgid "for %1$d %2$s" msgstr "seit %1$d %2$s" -#: ../../include/channel.php:1528 +#: ../../include/channel.php:1576 msgid "Sexual Preference:" msgstr "Sexuelle Orientierung:" -#: ../../include/channel.php:1534 +#: ../../include/channel.php:1582 msgid "Tags:" msgstr "Schlagworte:" -#: ../../include/channel.php:1536 +#: ../../include/channel.php:1584 msgid "Political Views:" msgstr "Politische Ansichten:" -#: ../../include/channel.php:1538 +#: ../../include/channel.php:1586 msgid "Religion:" msgstr "Religion:" -#: ../../include/channel.php:1542 +#: ../../include/channel.php:1590 msgid "Hobbies/Interests:" msgstr "Hobbys/Interessen:" -#: ../../include/channel.php:1544 +#: ../../include/channel.php:1592 msgid "Likes:" msgstr "Gefällt:" -#: ../../include/channel.php:1546 +#: ../../include/channel.php:1594 msgid "Dislikes:" msgstr "Gefällt nicht:" -#: ../../include/channel.php:1548 +#: ../../include/channel.php:1596 msgid "Contact information and Social Networks:" msgstr "Kontaktinformation und soziale Netzwerke:" -#: ../../include/channel.php:1550 +#: ../../include/channel.php:1598 msgid "My other channels:" msgstr "Meine anderen Kanäle:" -#: ../../include/channel.php:1552 +#: ../../include/channel.php:1600 msgid "Musical interests:" msgstr "Musikalische Interessen:" -#: ../../include/channel.php:1554 +#: ../../include/channel.php:1602 msgid "Books, literature:" msgstr "Bücher, Literatur:" -#: ../../include/channel.php:1556 +#: ../../include/channel.php:1604 msgid "Television:" msgstr "Fernsehen:" -#: ../../include/channel.php:1558 +#: ../../include/channel.php:1606 msgid "Film/dance/culture/entertainment:" msgstr "Film/Tanz/Kultur/Unterhaltung:" -#: ../../include/channel.php:1560 +#: ../../include/channel.php:1608 msgid "Love/Romance:" msgstr "Liebe/Romantik:" -#: ../../include/channel.php:1562 +#: ../../include/channel.php:1610 msgid "Work/employment:" msgstr "Arbeit/Anstellung:" -#: ../../include/channel.php:1564 +#: ../../include/channel.php:1612 msgid "School/education:" msgstr "Schule/Ausbildung:" -#: ../../include/channel.php:1587 +#: ../../include/channel.php:1635 msgid "Like this thing" msgstr "Gefällt mir" -#: ../../include/event.php:22 ../../include/event.php:69 +#: ../../include/event.php:23 ../../include/event.php:70 msgid "l F d, Y \\@ g:i A" msgstr "l, d. F Y, H:i" -#: ../../include/event.php:30 ../../include/event.php:73 +#: ../../include/event.php:31 ../../include/event.php:74 msgid "Starts:" msgstr "Beginnt:" -#: ../../include/event.php:40 ../../include/event.php:77 +#: ../../include/event.php:41 ../../include/event.php:78 msgid "Finishes:" msgstr "Endet:" -#: ../../include/event.php:1008 +#: ../../include/event.php:1011 msgid "This event has been added to your calendar." msgstr "Dieser Termin wurde zu Deinem Kalender hinzugefügt" -#: ../../include/event.php:1208 +#: ../../include/event.php:1220 msgid "Not specified" msgstr "Keine Angabe" -#: ../../include/event.php:1209 +#: ../../include/event.php:1221 msgid "Needs Action" msgstr "Aktion erforderlich" -#: ../../include/event.php:1210 +#: ../../include/event.php:1222 msgid "Completed" msgstr "Abgeschlossen" -#: ../../include/event.php:1211 +#: ../../include/event.php:1223 msgid "In Process" msgstr "In Bearbeitung" -#: ../../include/event.php:1212 +#: ../../include/event.php:1224 msgid "Cancelled" msgstr "gestrichen" -#: ../../include/event.php:1292 ../../include/connections.php:684 +#: ../../include/event.php:1303 ../../include/connections.php:684 msgid "Home, Voice" msgstr "Zuhause, Sprache" -#: ../../include/event.php:1293 ../../include/connections.php:685 +#: ../../include/event.php:1304 ../../include/connections.php:685 msgid "Home, Fax" msgstr "Zuhause, Fax" -#: ../../include/event.php:1295 ../../include/connections.php:687 +#: ../../include/event.php:1306 ../../include/connections.php:687 msgid "Work, Voice" msgstr "Arbeit, Sprache" -#: ../../include/event.php:1296 ../../include/connections.php:688 +#: ../../include/event.php:1307 ../../include/connections.php:688 msgid "Work, Fax" msgstr "Arbeit, Fax" -#: ../../include/network.php:752 +#: ../../include/network.php:761 msgid "view full size" msgstr "In Vollbildansicht anschauen" -#: ../../include/network.php:1700 ../../include/network.php:1701 +#: ../../include/network.php:1763 ../../include/network.php:1764 msgid "Friendica" msgstr "Friendica" -#: ../../include/network.php:1702 +#: ../../include/network.php:1765 msgid "OStatus" msgstr "OStatus" -#: ../../include/network.php:1703 +#: ../../include/network.php:1766 msgid "GNU-Social" msgstr "GNU-Social" -#: ../../include/network.php:1704 +#: ../../include/network.php:1767 msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/network.php:1707 +#: ../../include/network.php:1770 msgid "Diaspora" msgstr "Diaspora" -#: ../../include/network.php:1708 +#: ../../include/network.php:1771 msgid "Facebook" msgstr "Facebook" -#: ../../include/network.php:1709 +#: ../../include/network.php:1772 msgid "Zot" msgstr "Zot!" -#: ../../include/network.php:1710 +#: ../../include/network.php:1773 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/network.php:1711 +#: ../../include/network.php:1774 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/network.php:1712 +#: ../../include/network.php:1775 msgid "MySpace" msgstr "MySpace" -#: ../../include/language.php:380 +#: ../../include/language.php:377 msgid "Select an alternate language" msgstr "Wähle eine alternative Sprache" @@ -12884,24 +13010,24 @@ msgstr "Beitragsberechtigungen %s können nicht geändert werden %s, nachdem der msgid "Cannot locate DNS info for database server '%s'" msgstr "Kann die DNS-Informationen für den Datenbank-Server '%s' nicht finden" -#: ../../include/bbcode.php:194 ../../include/bbcode.php:1102 -#: ../../include/bbcode.php:1105 ../../include/bbcode.php:1110 -#: ../../include/bbcode.php:1113 ../../include/bbcode.php:1116 -#: ../../include/bbcode.php:1119 ../../include/bbcode.php:1124 -#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1132 -#: ../../include/bbcode.php:1135 ../../include/bbcode.php:1138 -#: ../../include/bbcode.php:1141 +#: ../../include/bbcode.php:194 ../../include/bbcode.php:1106 +#: ../../include/bbcode.php:1109 ../../include/bbcode.php:1114 +#: ../../include/bbcode.php:1117 ../../include/bbcode.php:1120 +#: ../../include/bbcode.php:1123 ../../include/bbcode.php:1128 +#: ../../include/bbcode.php:1131 ../../include/bbcode.php:1136 +#: ../../include/bbcode.php:1139 ../../include/bbcode.php:1142 +#: ../../include/bbcode.php:1145 msgid "Image/photo" msgstr "Bild/Foto" -#: ../../include/bbcode.php:233 ../../include/bbcode.php:1152 +#: ../../include/bbcode.php:233 ../../include/bbcode.php:1156 msgid "Encrypted content" msgstr "Verschlüsselter Inhalt" #: ../../include/bbcode.php:249 #, php-format -msgid "Install %s element: " -msgstr "Element %s installieren: " +msgid "Install %1$s element %2$s" +msgstr "" #: ../../include/bbcode.php:253 #, php-format @@ -12914,15 +13040,19 @@ msgstr "Dieser Beitrag beinhaltet ein installierbares %s Element, aber Du hast n msgid "card" msgstr "Karte" -#: ../../include/bbcode.php:414 ../../include/bbcode.php:422 +#: ../../include/bbcode.php:333 +msgid "article" +msgstr "Artikel" + +#: ../../include/bbcode.php:416 ../../include/bbcode.php:424 msgid "Click to open/close" msgstr "Klicke zum Öffnen/Schließen" -#: ../../include/bbcode.php:422 +#: ../../include/bbcode.php:424 msgid "spoiler" msgstr "Spoiler" -#: ../../include/bbcode.php:1090 +#: ../../include/bbcode.php:1094 msgid "$1 wrote:" msgstr "$1 schrieb:" @@ -12942,10 +13072,10 @@ msgstr "Eingebetteter Inhalt" msgid "Embedding disabled" msgstr "Einbetten deaktiviert" -#: ../../include/zid.php:305 +#: ../../include/zid.php:340 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" -msgstr "" +msgstr "OpenWebAuth: %1$s heißt %2$s willkommen" #: ../../include/features.php:54 msgid "General Features" @@ -12999,292 +13129,296 @@ msgstr "Aktiviert ein Werkzeug mit dem Notizen und Erinnerungen gespeichert werd msgid "Create personal planning cards" msgstr "Erstelle persönliche (Notiz-)Karten zur Planung/Koordination oder ähnlichen Zwecken" -#: ../../include/features.php:131 +#: ../../include/features.php:141 msgid "Navigation Channel Select" msgstr "Kanal-Auswahl in der Navigationsleiste" -#: ../../include/features.php:132 +#: ../../include/features.php:142 msgid "Change channels directly from within the navigation dropdown menu" msgstr "Ermöglicht den direkten Wechsel zu anderen Kanälen über das Navigationsmenü" -#: ../../include/features.php:140 +#: ../../include/features.php:150 msgid "Photo Location" msgstr "Aufnahmeort" -#: ../../include/features.php:141 +#: ../../include/features.php:151 msgid "If location data is available on uploaded photos, link this to a map." msgstr "Verlinkt den Aufnahmeort von Fotos (falls verfügbar) auf einer Karte" -#: ../../include/features.php:149 +#: ../../include/features.php:159 msgid "Access Controlled Chatrooms" msgstr "Zugriffskontrollierte Chaträume" -#: ../../include/features.php:150 +#: ../../include/features.php:160 msgid "Provide chatrooms and chat services with access control." msgstr "Bieten Sie Chaträume und Chatdienste mit Zugriffskontrolle an." -#: ../../include/features.php:159 +#: ../../include/features.php:169 msgid "Provide alternate connection permission roles." msgstr "Stelle benutzerdefinierte Berechtigungsrollen für Verbindungen zur Verfügung." -#: ../../include/features.php:167 +#: ../../include/features.php:177 msgid "Smart Birthdays" msgstr "Smarte Geburtstage" -#: ../../include/features.php:168 +#: ../../include/features.php:178 msgid "" "Make birthday events timezone aware in case your friends are scattered " "across the planet." msgstr "Stellt für Geburtstage einen Zeitzonenbezug her, falls deine Freunde über den ganzen Planeten verstreut sind." -#: ../../include/features.php:176 +#: ../../include/features.php:186 msgid "Event Timezone Selection" msgstr "Termin-Zeitzonenauswahl" -#: ../../include/features.php:177 +#: ../../include/features.php:187 msgid "Allow event creation in timezones other than your own." msgstr "Ermögliche das Erstellen von Terminen in anderen Zeitzonen als Deiner eigenen." -#: ../../include/features.php:185 +#: ../../include/features.php:195 msgid "Advanced Directory Search" msgstr "Erweiterte Verzeichnissuche" -#: ../../include/features.php:186 +#: ../../include/features.php:196 msgid "Allows creation of complex directory search queries" msgstr "Ermöglicht die Erstellung komplexer Verzeichnis-Suchabfragen" -#: ../../include/features.php:194 +#: ../../include/features.php:204 msgid "Advanced Theme and Layout Settings" msgstr "Erweiterte Design- und Layout-Einstellungen" -#: ../../include/features.php:195 +#: ../../include/features.php:205 msgid "Allows fine tuning of themes and page layouts" msgstr "Erlaubt die Feineinstellung von Designs und Seitenlayouts" -#: ../../include/features.php:205 +#: ../../include/features.php:215 msgid "Post Composition Features" msgstr "Nachbearbeitungsfunktionen" -#: ../../include/features.php:209 +#: ../../include/features.php:219 msgid "Large Photos" msgstr "Große Fotos" -#: ../../include/features.php:210 +#: ../../include/features.php:220 msgid "" "Include large (1024px) photo thumbnails in posts. If not enabled, use small " "(640px) photo thumbnails" msgstr "Große Vorschaubilder (1024px) in Beiträgen anzeigen. Falls nicht aktiviert, werden kleine Vorschaubilder (640px) verwendet." -#: ../../include/features.php:219 +#: ../../include/features.php:229 msgid "Automatically import channel content from other channels or feeds" msgstr "Ermöglicht den automatischen Import von Inhalten für diesen Kanal von anderen Kanälen oder Feeds" -#: ../../include/features.php:227 +#: ../../include/features.php:237 msgid "Even More Encryption" msgstr "Noch mehr Verschlüsselung" -#: ../../include/features.php:228 +#: ../../include/features.php:238 msgid "" "Allow optional encryption of content end-to-end with a shared secret key" msgstr "Ermöglicht optional die zusätzliche Verschlüsselung von Inhalten (Ende-zu-Ende mit geteiltem Schlüssel)" -#: ../../include/features.php:236 +#: ../../include/features.php:246 msgid "Enable Voting Tools" msgstr "Umfragewerkzeuge aktivieren" -#: ../../include/features.php:237 +#: ../../include/features.php:247 msgid "Provide a class of post which others can vote on" msgstr "Aktiviert die Umfragewerkzeuge, um anderen die Möglichkeit zu geben, einem Beitrag zuzustimmen, ihn abzulehnen oder sich zu enthalten. (Muss im Beitrag selbst noch aktiviert werden.)" -#: ../../include/features.php:245 +#: ../../include/features.php:255 msgid "Disable Comments" msgstr "Kommentare deaktivieren" -#: ../../include/features.php:246 +#: ../../include/features.php:256 msgid "Provide the option to disable comments for a post" msgstr "Ermöglicht, die Kommentarfunktion für einzelne Beiträge abzuschalten" -#: ../../include/features.php:254 +#: ../../include/features.php:264 msgid "Delayed Posting" msgstr "Verzögertes Senden" -#: ../../include/features.php:255 +#: ../../include/features.php:265 msgid "Allow posts to be published at a later date" msgstr "Ermöglicht es, Beiträge zu einem späteren Zeitpunkt zu veröffentlichen" -#: ../../include/features.php:263 +#: ../../include/features.php:273 msgid "Content Expiration" msgstr "Verfall von Inhalten" -#: ../../include/features.php:264 +#: ../../include/features.php:274 msgid "Remove posts/comments and/or private messages at a future time" msgstr "Ermöglicht das automatische Löschen von Beiträgen, Kommentaren und/oder privaten Nachrichten zu einem zukünftigen Datum." -#: ../../include/features.php:272 +#: ../../include/features.php:282 msgid "Suppress Duplicate Posts/Comments" msgstr "Doppelte Beiträge unterdrücken" -#: ../../include/features.php:273 +#: ../../include/features.php:283 msgid "" "Prevent posts with identical content to be published with less than two " "minutes in between submissions." msgstr "Verhindert, dass innerhalb von zwei Minuten Beiträge mit identischem Inhalt veröffentlicht werden." -#: ../../include/features.php:284 +#: ../../include/features.php:294 msgid "Network and Stream Filtering" msgstr "Netzwerk- und Stream-Filter" -#: ../../include/features.php:288 +#: ../../include/features.php:298 msgid "Search by Date" msgstr "Suche nach Datum" -#: ../../include/features.php:289 +#: ../../include/features.php:299 msgid "Ability to select posts by date ranges" msgstr "Möglichkeit, Beiträge nach Zeiträumen auszuwählen" -#: ../../include/features.php:297 ../../include/group.php:332 +#: ../../include/features.php:307 ../../include/group.php:328 msgid "Privacy Groups" msgstr "Gruppen" -#: ../../include/features.php:298 +#: ../../include/features.php:308 msgid "Enable management and selection of privacy groups" msgstr "Auswahl und Verwaltung von Gruppen für Kanäle aktivieren" -#: ../../include/features.php:307 +#: ../../include/features.php:317 msgid "Save search terms for re-use" msgstr "Ermöglicht das Abspeichern von Suchbegriffen zur Wiederverwendung" -#: ../../include/features.php:315 +#: ../../include/features.php:325 msgid "Network Personal Tab" msgstr "Persönlicher Netzwerkreiter" -#: ../../include/features.php:316 +#: ../../include/features.php:326 msgid "Enable tab to display only Network posts that you've interacted on" msgstr "Aktiviert einen Reiter in der Grid-Ansicht, der nur Netzwerk-Beiträge anzeigt, mit denen Du interagiert hast" -#: ../../include/features.php:324 +#: ../../include/features.php:334 msgid "Network New Tab" msgstr "Netzwerkreiter Neu" -#: ../../include/features.php:325 +#: ../../include/features.php:335 msgid "Enable tab to display all new Network activity" msgstr "Aktiviert einen Reiter in der Grid-Ansicht, der alle neuen Netzwerkaktivitäten anzeigt" -#: ../../include/features.php:333 +#: ../../include/features.php:343 msgid "Affinity Tool" msgstr "Beziehungs-Tool" -#: ../../include/features.php:334 +#: ../../include/features.php:344 msgid "Filter stream activity by depth of relationships" msgstr "Aktiviert ein Werkzeug in der Grid-Ansicht, das den Stream nach Grad der Beziehung filtern kann" -#: ../../include/features.php:343 +#: ../../include/features.php:353 msgid "Show friend and connection suggestions" msgstr "Freund- und Verbindungsvorschläge anzeigen" -#: ../../include/features.php:351 +#: ../../include/features.php:361 msgid "Connection Filtering" msgstr "Filter für Verbindungen" -#: ../../include/features.php:352 +#: ../../include/features.php:362 msgid "Filter incoming posts from connections based on keywords/content" msgstr "Ermöglicht die Filterung eingehender Beiträge anhand von Schlüsselwörtern (muss an der Verbindung konfiguriert werden)" -#: ../../include/features.php:364 +#: ../../include/features.php:374 msgid "Post/Comment Tools" msgstr "Beitrag-/Kommentar-Tools" -#: ../../include/features.php:368 +#: ../../include/features.php:379 +msgid "Use markdown for editing posts" +msgstr "Verwende Markdown zum Bearbeiten von Beiträgen" + +#: ../../include/features.php:387 msgid "Community Tagging" msgstr "Gemeinschaftliches Verschlagworten" -#: ../../include/features.php:369 +#: ../../include/features.php:388 msgid "Ability to tag existing posts" msgstr "Ermöglicht das Verschlagworten existierender Beiträge" -#: ../../include/features.php:377 +#: ../../include/features.php:396 msgid "Post Categories" msgstr "Beitrags-Kategorien" -#: ../../include/features.php:378 +#: ../../include/features.php:397 msgid "Add categories to your posts" msgstr "Aktiviert Kategorien für Beiträge" -#: ../../include/features.php:386 +#: ../../include/features.php:405 msgid "Emoji Reactions" msgstr "Emoji Reaktionen" -#: ../../include/features.php:387 +#: ../../include/features.php:406 msgid "Add emoji reaction ability to posts" msgstr "Aktiviert Emoji-Reaktionen für Beiträge" -#: ../../include/features.php:396 +#: ../../include/features.php:415 msgid "Ability to file posts under folders" msgstr "Möglichkeit, Beiträge in Verzeichnissen zu sammeln" -#: ../../include/features.php:404 +#: ../../include/features.php:423 msgid "Dislike Posts" msgstr "Gefällt-mir-nicht-Beiträge" -#: ../../include/features.php:405 +#: ../../include/features.php:424 msgid "Ability to dislike posts/comments" msgstr "Aktiviert die „Gefällt mir nicht“-Schaltfläche" -#: ../../include/features.php:413 +#: ../../include/features.php:432 msgid "Star Posts" msgstr "Beiträge mit Sternchen versehen" -#: ../../include/features.php:414 +#: ../../include/features.php:433 msgid "Ability to mark special posts with a star indicator" msgstr "Ermöglicht die lokale Markierung spezieller Beiträge mit einem Sternchen-Symbol" -#: ../../include/features.php:422 +#: ../../include/features.php:441 msgid "Tag Cloud" msgstr "Schlagwort-Wolke" -#: ../../include/features.php:423 +#: ../../include/features.php:442 msgid "Provide a personal tag cloud on your channel page" msgstr "Aktiviert die Anzeige einer Schlagwort-Wolke (Tag Cloud) auf Deiner Kanal-Seite" -#: ../../include/features.php:434 +#: ../../include/features.php:453 msgid "Premium Channel" msgstr "Premium-Kanal" -#: ../../include/features.php:435 +#: ../../include/features.php:454 msgid "" "Allows you to set restrictions and terms on those that connect with your " "channel" msgstr "Ermöglicht es, Einschränkungen und Bedingungen für Verbindungen dieses Kanals festzulegen" -#: ../../include/taxonomy.php:325 ../../include/taxonomy.php:346 +#: ../../include/taxonomy.php:377 ../../include/taxonomy.php:398 msgid "Tags" msgstr "Schlagwörter" -#: ../../include/taxonomy.php:410 +#: ../../include/taxonomy.php:483 msgid "Keywords" msgstr "Schlüsselwörter" -#: ../../include/taxonomy.php:431 +#: ../../include/taxonomy.php:504 msgid "have" msgstr "habe" -#: ../../include/taxonomy.php:431 +#: ../../include/taxonomy.php:504 msgid "has" msgstr "hat" -#: ../../include/taxonomy.php:432 +#: ../../include/taxonomy.php:505 msgid "want" msgstr "will" -#: ../../include/taxonomy.php:432 +#: ../../include/taxonomy.php:505 msgid "wants" msgstr "will" -#: ../../include/taxonomy.php:433 +#: ../../include/taxonomy.php:506 msgid "likes" msgstr "gefällt" -#: ../../include/taxonomy.php:434 +#: ../../include/taxonomy.php:507 msgid "dislikes" msgstr "missfällt" @@ -13356,283 +13490,283 @@ msgstr "Diese Aktion überschreitet die Grenzen Ihres Abonnements." msgid "This action is not available under your subscription plan." msgstr "Diese Aktion ist in Ihrem Abonnement nicht verfügbar." -#: ../../include/datetime.php:147 +#: ../../include/datetime.php:150 msgid "Birthday" msgstr "Geburtstag" -#: ../../include/datetime.php:149 +#: ../../include/datetime.php:152 msgid "Age: " msgstr "Alter:" -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:154 msgid "YYYY-MM-DD or MM-DD" msgstr "JJJJ-MM-TT oder MM-TT" -#: ../../include/datetime.php:292 +#: ../../include/datetime.php:298 msgid "less than a second ago" msgstr "Vor weniger als einer Sekunde" -#: ../../include/datetime.php:310 +#: ../../include/datetime.php:316 #, php-format msgctxt "e.g. 22 hours ago, 1 minute ago" msgid "%1$d %2$s ago" msgstr "vor %1$d %2$s" -#: ../../include/datetime.php:321 +#: ../../include/datetime.php:327 msgctxt "relative_date" msgid "year" msgid_plural "years" msgstr[0] "Jahr" msgstr[1] "Jahre" -#: ../../include/datetime.php:324 +#: ../../include/datetime.php:330 msgctxt "relative_date" msgid "month" msgid_plural "months" msgstr[0] "Monat" msgstr[1] "Monate" -#: ../../include/datetime.php:327 +#: ../../include/datetime.php:333 msgctxt "relative_date" msgid "week" msgid_plural "weeks" msgstr[0] "Woche" msgstr[1] "Wochen" -#: ../../include/datetime.php:330 +#: ../../include/datetime.php:336 msgctxt "relative_date" msgid "day" msgid_plural "days" msgstr[0] "Tag" msgstr[1] "Tage" -#: ../../include/datetime.php:333 +#: ../../include/datetime.php:339 msgctxt "relative_date" msgid "hour" msgid_plural "hours" msgstr[0] "Stunde" msgstr[1] "Stunden" -#: ../../include/datetime.php:336 +#: ../../include/datetime.php:342 msgctxt "relative_date" msgid "minute" msgid_plural "minutes" msgstr[0] "Minute" msgstr[1] "Minuten" -#: ../../include/datetime.php:339 +#: ../../include/datetime.php:345 msgctxt "relative_date" msgid "second" msgid_plural "seconds" msgstr[0] "Sekunde" msgstr[1] "Sekunden" -#: ../../include/datetime.php:576 +#: ../../include/datetime.php:579 #, php-format msgid "%1$s's birthday" msgstr "%1$ss Geburtstag" -#: ../../include/datetime.php:577 +#: ../../include/datetime.php:580 #, php-format msgid "Happy Birthday %1$s" msgstr "Alles Gute zum Geburtstag, %1$s" -#: ../../include/nav.php:91 +#: ../../include/nav.php:98 msgid "Remote authentication" msgstr "Über Konto auf anderem Server einloggen" -#: ../../include/nav.php:91 +#: ../../include/nav.php:98 msgid "Click to authenticate to your home hub" msgstr "Klicke, um Dich über Deinen Heimat-Server zu authentifizieren" -#: ../../include/nav.php:98 +#: ../../include/nav.php:105 msgid "Network Activity" msgstr "Netzwerk-Aktivitäten" -#: ../../include/nav.php:100 +#: ../../include/nav.php:107 msgid "Mark all activity notifications seen" msgstr "Alle Benachrichtigungen als gesehen markieren" -#: ../../include/nav.php:102 +#: ../../include/nav.php:109 msgid "Channel home" msgstr "Mein Kanal" -#: ../../include/nav.php:103 +#: ../../include/nav.php:110 msgid "View your channel home" msgstr "Zeige Deine Kanalseite an" -#: ../../include/nav.php:104 +#: ../../include/nav.php:111 msgid "Mark all channel notifications seen" msgstr "Markiere alle Kanal-Benachrichtigungen als angesehen" -#: ../../include/nav.php:109 +#: ../../include/nav.php:116 msgid "Registrations" msgstr "Registrierungen" -#: ../../include/nav.php:112 +#: ../../include/nav.php:119 msgid "Notifications" msgstr "Benachrichtigungen" -#: ../../include/nav.php:113 +#: ../../include/nav.php:120 msgid "View all notifications" msgstr "Alle Benachrichtigungen ansehen" -#: ../../include/nav.php:114 +#: ../../include/nav.php:121 msgid "Mark all system notifications seen" msgstr "Markiere alle System-Benachrichtigungen als gesehen" -#: ../../include/nav.php:116 +#: ../../include/nav.php:123 msgid "Private mail" msgstr "Persönliche Mail" -#: ../../include/nav.php:117 +#: ../../include/nav.php:124 msgid "View your private messages" msgstr "Zeige Deine persönlichen Nachrichten an" -#: ../../include/nav.php:118 +#: ../../include/nav.php:125 msgid "Mark all private messages seen" msgstr "Markiere alle persönlichen Nachrichten als gesehen" -#: ../../include/nav.php:124 +#: ../../include/nav.php:131 msgid "Event Calendar" msgstr "Terminkalender" -#: ../../include/nav.php:129 ../../include/nav.php:215 +#: ../../include/nav.php:136 ../../include/nav.php:222 msgid "Manage Your Channels" msgstr "Verwalte Deine Kanäle" -#: ../../include/nav.php:132 ../../include/nav.php:217 +#: ../../include/nav.php:139 ../../include/nav.php:224 msgid "Account/Channel Settings" msgstr "Konto-/Kanal-Einstellungen" -#: ../../include/nav.php:138 ../../include/nav.php:167 +#: ../../include/nav.php:145 ../../include/nav.php:174 msgid "End this session" msgstr "Beende diese Sitzung" -#: ../../include/nav.php:141 +#: ../../include/nav.php:148 msgid "Your profile page" msgstr "Deine Profilseite" -#: ../../include/nav.php:144 +#: ../../include/nav.php:151 msgid "Manage/Edit profiles" msgstr "Profile verwalten" -#: ../../include/nav.php:146 +#: ../../include/nav.php:153 msgid "Edit your profile" msgstr "Profil bearbeiten" -#: ../../include/nav.php:153 ../../include/nav.php:157 +#: ../../include/nav.php:160 ../../include/nav.php:164 msgid "Sign in" msgstr "Anmelden" -#: ../../include/nav.php:182 +#: ../../include/nav.php:189 msgid "Take me home" msgstr "Bringe mich nach Hause (eigener Kanal)" -#: ../../include/nav.php:184 +#: ../../include/nav.php:191 msgid "Log me out of this site" msgstr "Logge mich von dieser Seite aus" -#: ../../include/nav.php:189 +#: ../../include/nav.php:196 msgid "Create an account" msgstr "Erzeuge ein Konto" -#: ../../include/nav.php:201 +#: ../../include/nav.php:208 msgid "Help and documentation" msgstr "Hilfe und Dokumentation" -#: ../../include/nav.php:204 +#: ../../include/nav.php:211 msgid "Search site @name, #tag, ?docs, content" msgstr "Hub durchsuchen: @Name. #Schlagwort, ?Dokumentation, Inhalt" -#: ../../include/nav.php:224 +#: ../../include/nav.php:231 msgid "Site Setup and Configuration" msgstr "Seiten-Einrichtung und -Konfiguration" -#: ../../include/nav.php:311 +#: ../../include/nav.php:322 msgid "@name, #tag, ?doc, content" msgstr "@Name, #Schlagwort, ?Dokumentation, Inhalt" -#: ../../include/nav.php:312 +#: ../../include/nav.php:323 msgid "Please wait..." msgstr "Bitte warten..." -#: ../../include/nav.php:318 +#: ../../include/nav.php:329 msgid "Add Apps" msgstr "Apps hinzufügen" -#: ../../include/nav.php:319 +#: ../../include/nav.php:330 msgid "Arrange Apps" msgstr "Apps anordnen" -#: ../../include/nav.php:320 +#: ../../include/nav.php:331 msgid "Toggle System Apps" msgstr "System-Apps umschalten" -#: ../../include/photos.php:123 +#: ../../include/photos.php:150 #, php-format msgid "Image exceeds website size limit of %lu bytes" msgstr "Bild überschreitet das Webseitenlimit von %lu Bytes" -#: ../../include/photos.php:130 +#: ../../include/photos.php:161 msgid "Image file is empty." msgstr "Bilddatei ist leer." -#: ../../include/photos.php:268 +#: ../../include/photos.php:322 msgid "Photo storage failed." msgstr "Fotospeicherung fehlgeschlagen." -#: ../../include/photos.php:308 +#: ../../include/photos.php:364 msgid "a new photo" msgstr "ein neues Foto" -#: ../../include/photos.php:312 +#: ../../include/photos.php:368 #, php-format msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" msgstr "%1$s hat %2$s auf %3$s veröffentlicht" -#: ../../include/photos.php:605 +#: ../../include/photos.php:660 msgid "Upload New Photos" msgstr "Neue Fotos hochladen" -#: ../../include/zot.php:654 +#: ../../include/zot.php:675 msgid "Invalid data packet" msgstr "Ungültiges Datenpaket" -#: ../../include/zot.php:681 +#: ../../include/zot.php:702 msgid "Unable to verify channel signature" msgstr "Konnte die Signatur des Kanals nicht verifizieren" -#: ../../include/zot.php:2368 +#: ../../include/zot.php:2409 #, php-format msgid "Unable to verify site signature for %s" msgstr "Kann die Signatur der Seite von %s nicht verifizieren" -#: ../../include/group.php:26 +#: ../../include/group.php:22 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 "Es hat früher schon einmal eine Gruppe mit diesem Namen existiert, die gelöscht wurde. Es <strong>könnten</strong> von damals noch Elemente (Beiträge, Dateien etc.) vorhanden sein, die allen jetzigen und zukünftigen Mitgliedern dieser Gruppe den Zugriff erlauben. Wenn das nicht Deine Absicht ist, erstelle bitte eine neue Gruppe mit einem anderen Namen." -#: ../../include/group.php:268 +#: ../../include/group.php:264 msgid "Add new connections to this privacy group" msgstr "Neue Verbindung zu dieser Gruppe hinzufügen" -#: ../../include/group.php:310 +#: ../../include/group.php:306 msgid "edit" msgstr "Bearbeiten" -#: ../../include/group.php:333 +#: ../../include/group.php:329 msgid "Edit group" msgstr "Gruppe ändern" -#: ../../include/group.php:334 +#: ../../include/group.php:330 msgid "Add privacy group" msgstr "Gruppe hinzufügen" -#: ../../include/group.php:335 +#: ../../include/group.php:331 msgid "Channels not in any privacy group" msgstr "Kanäle, die in keiner Gruppe sind" diff --git a/view/de/hstrings.php b/view/de/hstrings.php index 25011af40..61db3fb5d 100644 --- a/view/de/hstrings.php +++ b/view/de/hstrings.php @@ -71,6 +71,9 @@ App::$strings["2. Enter my \$Projectname network address into the site searchbar App::$strings["or visit"] = "oder besuche"; App::$strings["3. Click [Connect]"] = "3. Klicke auf [Verbinden]"; App::$strings["Submit"] = "Absenden"; +App::$strings["Cards"] = "Karten"; +App::$strings["Add Article"] = "Artikel hinzufügen"; +App::$strings["Articles"] = "Artikel"; App::$strings["Item not found"] = "Element nicht gefunden"; App::$strings["Layout Name"] = "Layout-Name"; App::$strings["Layout Description (Optional)"] = "Layout-Beschreibung (optional)"; @@ -148,6 +151,7 @@ App::$strings["You may also export your posts and conversations for a particular App::$strings["To select all posts for a given year, such as this year, visit <a href=\"%1\$s\">%2\$s</a>"] = "Um alle Beiträge eines bestimmten Jahres, zum Beispiel dieses Jahres, auszuwählen, klicke <a href=\"%1\$s\">%2\$s</a>."; App::$strings["To select all posts for a given month, such as January of this year, visit <a href=\"%1\$s\">%2\$s</a>"] = "Um alle Beiträge eines bestimmten Monats auszuwählen, zum Beispiel vom Januar diesen Jahres, klicke <a href=\"%1\$s\">%2\$s</a>."; App::$strings["These content files may be imported or restored by visiting <a href=\"%1\$s\">%2\$s</a> on any site containing your channel. For best results please import or restore these in date order (oldest first)."] = "Diese Inhalts-Sicherungen können wiederhergestellt werden, indem Du <a href=\"%1\$s\">%2\$s</a> auf jeglichem Hub besuchst, der diesen Kanal enthält. Das funktioniert am besten, wenn Du dabei die zeitliche Reihenfolge einhältst, also die Sicherungen für den ältesten Zeitraum zuerst importierst."; +App::$strings["Welcome to hubzilla!"] = "Willkommen bei Hubzilla!"; App::$strings["Public access denied."] = "Öffentlichen Zugriff verweigert."; App::$strings["Search"] = "Suche"; App::$strings["Items tagged with: %s"] = "Beiträge mit Schlagwort: %s"; @@ -165,8 +169,10 @@ App::$strings["Sync Now"] = "Jetzt synchronisieren"; App::$strings["Please wait several minutes between consecutive operations."] = "Bitte warte mehrere Minuten zwischen dem Ausführen zweier Operationen!"; App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "Wenn möglich, lösche einen Klon, indem Du Dich auf dem jeweiligen Hub einloggst und den Kanal dort löschst."; App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Benutze dieses Formular zum Löschen eines Klons, wenn es den Hub nicht mehr gibt."; -App::$strings["Change Order of Navigation Apps"] = "App-Reihenfolge in der Navigation ändern"; -App::$strings["Use arrows to move the corresponding app up or down in the display list"] = "Benutze die Pfeiltasten, um die jeweilige App in der Anzeigeliste auf- oder abwärts zu bewegen."; +App::$strings["Change Order of Pinned Navbar Apps"] = "Reihenfolge der in der Navigation angepinnten Apps ändern"; +App::$strings["Change Order of App Tray Apps"] = "Reihenfolge der Apps im App-Menü ändern"; +App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Benutze die Pfeil-Knöpfe, um die jeweilige App in der Navigationsleiste nach links (oben) oder rechts (unten) zu bewegen"; +App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Benutze die Pfeil-Knöpfe, um die jeweilige App im App-Menü nach oben oder unten zu bewegen"; App::$strings["Menu not found."] = "Menü nicht gefunden"; App::$strings["Unable to create element."] = "Element konnte nicht erstellt werden."; App::$strings["Unable to update menu element."] = "Kann Menü-Element nicht aktualisieren."; @@ -253,6 +259,10 @@ App::$strings["photo"] = "Foto"; App::$strings["status"] = "Status"; App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt nun %2\$ss %3\$s"; App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s folgt %2\$ss %3\$s nicht mehr"; +App::$strings["Channel not found."] = "Kanal nicht gefunden."; +App::$strings["Insert web link"] = "Link einfügen"; +App::$strings["Title (optional)"] = "Titel (optional)"; +App::$strings["Edit Article"] = "Artikel bearbeiten"; App::$strings["Nothing to import."] = "Nichts zu importieren."; App::$strings["Unable to download data from old server"] = "Daten können vom alten Server nicht heruntergeladen werden"; App::$strings["Imported file is empty."] = "Die importierte Datei ist leer."; @@ -582,10 +592,14 @@ App::$strings["Delivery interval"] = "Auslieferung Intervall"; App::$strings["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."] = "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared Hosts, 2-3 für VPS, 0-1 für große dedizierte Server."; App::$strings["Deliveries per process"] = "Zustellungen pro Prozess"; App::$strings["Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5."] = "Anzahl der Zustellungen, die innerhalb eines einzelnen Betriebssystemprozesses versucht werden. Anpassen, falls nötig, um die System-Performance zu verbessern. Empfehlung: 1-5."; +App::$strings["Queue Threshold"] = "Warteschlangen-Grenzwert"; +App::$strings["Always defer immediate delivery if queue contains more than this number of entries."] = "Unmittelbare Zustellung immer verzögern, wenn die Warteschlange mehr als diese Anzahl von Einträgen enthält."; App::$strings["Poll interval"] = "Abfrageintervall"; App::$strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Verzögere Hintergrundprozesse um diese Anzahl Sekunden, um die Systemlast zu reduzieren. Bei 0 wird das Auslieferungsintervall verwendet."; App::$strings["Path to ImageMagick convert program"] = "Pfad zum ImageMagick-Programm convert"; App::$strings["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"] = "Wenn gesetzt, dann verwende dieses Programm zum Erzeugen von Vorschaubildern großer Fotos (>4000 Pixel in beiden Richtungen), anderenfalls kann Speicherüberlauf auftreten. Beispiel: /usr/bin/convert"; +App::$strings["Allow SVG thumbnails in file browser"] = "Erlaube SVG-Vorschaubilder im Dateibrowser"; +App::$strings["WARNING: SVG images may contain malicious code."] = "Warnung: SVG-Grafiken können Schadcode enthalten."; App::$strings["Maximum Load Average"] = "Maximales Load Average"; App::$strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maximale Systemlast, bevor Verteil- und Empfangsprozesse verschoben werden – Standard 50"; App::$strings["Expiration period in days for imported (grid/network) content"] = "Setze den Zeitraum (in Tagen), ab wann importierte (aus dem Netzwerk) Inhalte ablaufen sollen"; @@ -699,6 +713,7 @@ App::$strings["Maximum Friend Requests/Day:"] = "Maximale Kontaktanfragen pro Ta App::$strings["May reduce spam activity"] = "Kann die Spam-Aktivität verringern"; App::$strings["Default Privacy Group"] = "Standard-Gruppe"; App::$strings["Use my default audience setting for the type of object published"] = "Verwende Deine eingestellte Standard-Zielgruppe des jeweiligen Inhaltstyps"; +App::$strings["Profile to assign new connections"] = "Profil, welches neuen Verbindungen zugewiesen wird"; App::$strings["Channel permissions category:"] = "Zugriffsrechte-Kategorie des Kanals:"; App::$strings["Default Permissions Group"] = "Standard-Berechtigungsgruppe"; App::$strings["Maximum private messages per day from unknown people:"] = "Maximale Anzahl privater Nachrichten pro Tag von unbekannten Leuten:"; @@ -734,6 +749,8 @@ App::$strings["New connections"] = "Neue Verbindungen"; App::$strings["System Registrations"] = "System – Registrierungen"; App::$strings["Unseen shared files"] = "Ungesehene geteilte Dateien"; App::$strings["Unseen public activity"] = "Ungesehene öffentliche Aktivität"; +App::$strings["Email notification hub (hostname)"] = "Hub für E-Mail-Benachrichtigungen (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"] = "Wenn Dein Kanal auf mehreren Hubs geklont ist, setze die Einstellung auf deinen bevorzugten Hub. Dies verhindert Mehrfachzustellung von E-Mail-Benachrichtigungen. Beispiel: %s"; App::$strings["Also show new wall posts, private messages and connections under Notices"] = "Neue Pinnwand-Nachrichten, private Nachrichten und Verbindungen unter Benachrichtigungen anzeigen"; App::$strings["Notify me of events this many days in advance"] = "Benachrichtige mich zu Terminen so viele Tage im Voraus"; App::$strings["Must be greater than 0"] = "Muss größer als 0 sein"; @@ -799,6 +816,8 @@ App::$strings["Minimum of 10 seconds, no maximum"] = "Minimum 10 Sekunden, kein App::$strings["Maximum number of conversations to load at any time:"] = "Maximale Anzahl von Unterhaltungen, die auf einmal geladen werden sollen:"; App::$strings["Maximum of 100 items"] = "Maximum: 100 Beiträge"; App::$strings["Show emoticons (smilies) as images"] = "Emoticons (Smilies) als Bilder anzeigen"; +App::$strings["Provide channel menu in navigation bar"] = "Kanal-Menü in der Navigationsleiste zur Verfügung stellen"; +App::$strings["Default: channel menu located in app menu"] = "Voreinstellung: Kanal-Menü ist im App-Menü integriert"; App::$strings["Manual conversation updates"] = "Manuelle Konversationsaktualisierung"; App::$strings["Default is on, turning this off may increase screen jumping"] = "Voreinstellung ist An, dies abzuschalten kann das unerwartete Springen der Seitenanzeige erhöhen."; App::$strings["Link post titles to source"] = "Beitragstitel zum Originalbeitrag verlinken"; @@ -866,7 +885,6 @@ App::$strings["Authentication failed."] = "Authentifizierung fehlgeschlagen."; App::$strings["Remote Authentication"] = "Entfernte Authentifizierung"; App::$strings["Enter your channel address (e.g. channel@example.com)"] = "Deine Kanal-Adresse (z. B. channel@example.com)"; App::$strings["Authenticate"] = "Authentifizieren"; -App::$strings["Channel not found."] = "Kanal nicht gefunden."; App::$strings["Permissions denied."] = "Berechtigung verweigert."; App::$strings["Import"] = "Import"; App::$strings["Authorize application connection"] = "Zugriff für die Anwendung autorisieren"; @@ -874,8 +892,6 @@ App::$strings["Return to your app and insert this Security Code:"] = "Gehen Sie App::$strings["Please login to continue."] = "Zum Weitermachen, bitte einloggen."; App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Möchtest Du dieser Anwendung erlauben, Deine Nachrichten und Kontakte abzurufen und/oder neue Nachrichten für Dich zu erstellen?"; App::$strings["Item not available."] = "Element nicht verfügbar."; -App::$strings["Insert web link"] = "Link einfügen"; -App::$strings["Title (optional)"] = "Titel (optional)"; App::$strings["Edit Block"] = "Block bearbeiten"; App::$strings["vcard"] = "VCard"; App::$strings["Apps"] = "Apps"; @@ -1047,6 +1063,7 @@ App::$strings["Layout not found."] = "Layout nicht gefunden."; App::$strings["Module Name:"] = "Modulname:"; App::$strings["Layout Help"] = "Layout-Hilfe"; App::$strings["Edit another layout"] = "Ein weiteres Layout bearbeiten"; +App::$strings["System layout"] = "System-Layout"; App::$strings["Poke"] = "Anstupsen"; App::$strings["Poke somebody"] = "Jemanden anstupsen"; App::$strings["Poke/Prod"] = "Anstupsen/Knuffen"; @@ -1210,12 +1227,17 @@ App::$strings["Help"] = "Hilfe"; App::$strings["Comanche page description language help"] = "Hilfe zur Comanche-Seitenbeschreibungssprache"; App::$strings["Layout Description"] = "Layout-Beschreibung"; App::$strings["Download PDL file"] = "PDL-Datei herunterladen"; +App::$strings["Unknown error"] = "Unbekannter Fehler"; +App::$strings["Post not found."] = "Beitrag nicht gefunden."; App::$strings["post"] = "Beitrag"; App::$strings["comment"] = "Kommentar"; App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s hat %2\$ss %3\$s mit %4\$s verschlagwortet"; App::$strings["This setting requires special processing and editing has been blocked."] = "Diese Einstellung erfordert eine besondere Verarbeitung und ist blockiert."; App::$strings["Configuration Editor"] = "Konfigurationseditor"; 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."] = "Warnung: Einige Einstellungen können Deinen Kanal funktionsunfähig machen. Bitte verlasse diese Seite, es sei denn Du bist vertraut damit, wie dieses Feature korrekt verwendet wird."; +App::$strings["If enabled, connection requests will be approved without your interaction"] = "Ist dies aktiviert, werden Verbindungsanfragen ohne Deine aktive Zustimmung bestätigt."; +App::$strings["Automatic approval settings"] = "Einstellungen für automatische Bestätigung"; +App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "Einige individuelle Berechtigungen können basierend auf Deinen Kanal- und Privatsphäre-Einstellungen vorbelegt oder gesperrt sein."; App::$strings["Privacy group created."] = "Gruppe wurde erstellt."; App::$strings["Could not create privacy group."] = "Gruppe konnte nicht erstellt werden."; App::$strings["Privacy group not found."] = "Gruppe nicht gefunden."; @@ -1308,7 +1330,6 @@ App::$strings["Make Default"] = "Zum Standard machen"; App::$strings["%d new messages"] = "%d neue Nachrichten"; App::$strings["%d new introductions"] = "%d neue Vorstellungen"; App::$strings["Delegated Channel"] = "Delegierte Kanäle"; -App::$strings["Cards"] = "Karten"; App::$strings["Add Card"] = "Karte hinzufügen"; App::$strings["This directory server requires an access token"] = "Dieser Verzeichnisserver benötigt einen Zugriffstoken"; App::$strings["About this site"] = "Über diese Seite"; @@ -1415,7 +1436,7 @@ App::$strings["Connect"] = "Verbinden"; App::$strings["Public Forum:"] = "Öffentliches Forum:"; App::$strings["Keywords: "] = "Schlüsselwörter:"; App::$strings["Don't suggest"] = "Nicht vorschlagen"; -App::$strings["Common connections:"] = "Gemeinsame Verbindungen:"; +App::$strings["Common connections (estimated):"] = "Gemeinsame Verbindungen (geschätzt):"; App::$strings["Global Directory"] = "Globales Verzeichnis"; App::$strings["Local Directory"] = "Lokales Verzeichnis"; App::$strings["Finding:"] = "Ergebnisse:"; @@ -1484,6 +1505,7 @@ App::$strings["Maximum daily site registrations exceeded. Please try again tomor App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Bitte stimme den Nutzungsbedingungen zu. Registrierung fehlgeschlagen."; App::$strings["Passwords do not match."] = "Passwörter stimmen nicht überein."; App::$strings["Registration successful. Please check your email for validation instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet."; +App::$strings["Registration successful. Continue to create your first channel..."] = "Registrierung erfolgreich. Fahre fort, indem Du Deinen ersten Kanal anlegst..."; App::$strings["Your registration is pending approval by the site owner."] = "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden."; App::$strings["Your registration can not be processed."] = "Deine Registrierung konnte nicht verarbeitet werden."; App::$strings["Registration on this hub is disabled."] = "Die Registrierung auf diesem Hub ist nicht möglich."; @@ -1491,7 +1513,7 @@ App::$strings["Registration on this hub is by approval only."] = "Eine Registrie App::$strings["<a href=\"pubsites\">Register at another affiliated hub.</a>"] = "<a href=\"pubsites\">Registriere Dich auf einem der anderen verbundenen Hubs.</a>"; App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Die maximale Anzahl täglicher Registrierungen auf diesem Server wurde überschritten. Bitte versuche es morgen noch einmal."; App::$strings["I accept the %s for this website"] = "Ich akzeptiere die %s für diese Webseite"; -App::$strings["I am over 13 years of age and accept the %s for this website"] = "Ich bin älter als 13 Jahre und akzeptiere die %s dieser Webseite"; +App::$strings["I am over %s years of age and accept the %s for this website"] = "Ich bin älter als %s Jahre und akzeptiere die %s dieser Website."; App::$strings["Your email address"] = "Ihre E-Mail Adresse"; App::$strings["Choose a password"] = "Passwort"; App::$strings["Please re-enter your password"] = "Bitte gib Dein Passwort noch einmal ein"; @@ -1516,6 +1538,7 @@ App::$strings["Developers"] = "Entwickler"; App::$strings["Tutorials"] = "Tutorials"; App::$strings["\$Projectname Documentation"] = "\$Projectname-Dokumentation"; App::$strings["Contents"] = "Inhalt"; +App::$strings["Article"] = "Artikel"; App::$strings["Item has been removed."] = "Der Beitrag wurde entfernt."; App::$strings["Tag removed"] = "Schlagwort entfernt"; App::$strings["Remove Item Tag"] = "Schlagwort entfernen"; @@ -1617,6 +1640,8 @@ App::$strings["Purchase"] = "Kaufen"; App::$strings["Undelete"] = "Wieder hergestellt"; App::$strings["Add to app-tray"] = "Zum App-Menü hinzufügen"; App::$strings["Remove from app-tray"] = "Aus dem App-Menü entfernen"; +App::$strings["Pin to navbar"] = "An Navigationsleiste anpinnen"; +App::$strings["Unpin from navbar"] = "Von Navigationsleiste entfernen"; App::$strings["__ctx:permcat__ default"] = "Standard"; App::$strings["__ctx:permcat__ follower"] = "Abonnent"; App::$strings["__ctx:permcat__ contributor"] = "Beitragender"; @@ -1772,7 +1797,6 @@ App::$strings["Shared"] = "Geteilt"; App::$strings["You are using %1\$s of your available file storage."] = "Sie verwenden %1\$s von Ihrem verfügbaren Dateispeicher."; App::$strings["You are using %1\$s of %2\$s available file storage. (%3\$s%)"] = "Sie verwenden %1\$s von %2\$s verfügbarem Dateispeicher. (%3\$s%)"; App::$strings["WARNING:"] = "WARNUNG:"; -App::$strings["Please use DAV to upload large (video, audio) files.<br>See <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>"] = "Bitte verwende DAV, um große Dateien (Audio, Video) hochzuladen.<br>Für weitere Informationen siehe <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>"; App::$strings["Create new folder"] = "Neuen Ordner anlegen"; App::$strings["Upload file"] = "Datei hochladen"; App::$strings["Drop files here to immediately upload"] = "Dateien zum sofortigen Hochladen hier fallen lassen"; @@ -1802,6 +1826,8 @@ App::$strings["Events Tools"] = "Kalenderwerkzeuge"; App::$strings["Export Calendar"] = "Kalender exportieren"; App::$strings["Import Calendar"] = "Kalender importieren"; App::$strings["Suggested Chatrooms"] = "Chatraum-Vorschläge"; +App::$strings["HQ Control Panel"] = "HQ-Einstellungen"; +App::$strings["Create a new post"] = "Neuen Beitrag erstellen"; App::$strings["Private Mail Menu"] = "Private Nachrichten"; App::$strings["Combined View"] = "Kombinierte Anzeige"; App::$strings["Inbox"] = "Eingang"; @@ -1830,8 +1856,8 @@ App::$strings["Remove term"] = "Eintrag löschen"; App::$strings["Saved Searches"] = "Gespeicherte Suchanfragen"; App::$strings["add"] = "hinzufügen"; App::$strings["Notes"] = "Notizen"; -App::$strings["Wiki Pages"] = "Wikiseiten"; App::$strings["Add new page"] = "Neue Seite hinzufügen"; +App::$strings["Wiki Pages"] = "Wikiseiten"; App::$strings["Page name"] = "Seitenname"; App::$strings["Refresh"] = "Aktualisieren"; App::$strings["Tasks"] = "Aufgaben"; @@ -1859,6 +1885,7 @@ App::$strings["New Network Activity"] = "Neue Netzwerk-Aktivitäten"; App::$strings["New Network Activity Notifications"] = "Benachrichtigungen für neue Netzwerk-Aktivitäten"; App::$strings["View your network activity"] = "Zeige Deine Netzwerk-Aktivitäten"; App::$strings["Mark all notifications read"] = "Alle Benachrichtigungen als gesehen markieren"; +App::$strings["Show new posts only"] = "Zeige nur neue Beiträge"; App::$strings["New Home Activity"] = "Neue Kanal-Aktivitäten"; App::$strings["New Home Activity Notifications"] = "Benachrichtigungen für neue Kanal-Aktivitäten"; App::$strings["View your home activity"] = "Zeige Deine Kanal-Aktivitäten"; @@ -1876,13 +1903,13 @@ App::$strings["View all connections"] = "Zeige alle Verbindungen"; App::$strings["New Files"] = "Neue Dateien"; App::$strings["New Files Notifications"] = "Benachrichtigungen für neue Dateien"; App::$strings["Notices"] = "Benachrichtigungen"; -App::$strings["View all notices"] = ""; -App::$strings["Mark all notices seen"] = ""; +App::$strings["View all notices"] = "Alle Notizen ansehen"; +App::$strings["Mark all notices seen"] = "Alle Notizen als gesehen markieren"; App::$strings["New Registrations"] = "Neue Registrierungen"; App::$strings["New Registrations Notifications"] = "Benachrichtigungen für neue Registrierungen"; App::$strings["Public Stream Notifications"] = "Benachrichtigungen für öffentlichen Beitrags-Stream"; App::$strings["View the public stream"] = "Zeige öffentlichen Beitrags-Stream"; -App::$strings["Loading..."] = "Lädt ..."; +App::$strings["Loading"] = "Lädt..."; App::$strings["Source channel not found."] = "Quellkanal nicht gefunden."; App::$strings["Create an account to access services and applications"] = "Erstelle ein Konto, um auf Dienste und Anwendungen zugreifen zu können."; App::$strings["Logout"] = "Abmelden"; @@ -2013,23 +2040,12 @@ App::$strings["InsaneJournal password"] = "InsaneJournal-Passwort"; App::$strings["Post to InsaneJournal by default"] = "Standardmäßig bei InsaneJournal veröffentlichen"; App::$strings["InsaneJournal Post Settings"] = "InsaneJournal-Beitragseinstellungen"; App::$strings["Insane Journal Settings saved."] = "InsaneJournal-Einstellungen gespeichert."; -App::$strings["Upload a file"] = "Datei hochladen"; -App::$strings["Drop files here to upload"] = "Dateien zum Hochladen hier fallen lassen"; -App::$strings["Failed"] = "Fehlgeschlagen"; -App::$strings["No files were uploaded."] = "Es wurden keine Dateien hochgeladen."; -App::$strings["Uploaded file is empty"] = "Hochgeladene Datei ist leer"; -App::$strings["Image exceeds size limit of "] = "Bild überschreitet Größenbeschränkung von "; -App::$strings["File has an invalid extension, it should be one of "] = "Die Datei hat eine ungültige Endung. Erlaubt sind folgende:"; -App::$strings["Upload was cancelled, or server error encountered"] = "Das Hochladen wurde abgebrochen oder es ist ein Serverfehler aufgetreten."; App::$strings["Post to Dreamwidth"] = "Bei Dreamwidth veröffentlichen"; App::$strings["Enable Dreamwidth Post Plugin"] = "Aktiviere das Dreamwidth-Plugin"; App::$strings["Dreamwidth username"] = "Dreamwidth-Benutzername"; App::$strings["Dreamwidth password"] = "Dreamwidth-Passwort"; App::$strings["Post to Dreamwidth by default"] = "Standardmäßig auf auf Dreamwidth posten"; App::$strings["Dreamwidth Post Settings"] = "Dreamwidth-Beitragseinstellungen"; -App::$strings["Install Firefox Sharing Tools"] = "Installiere das Firefox Sharing Werkzeug"; -App::$strings["Share content from Firefox to \$Projectname"] = "Inhalte von Firefox nach \$Projectname teilen"; -App::$strings["Install Firefox Sharing Tools to this web browser"] = "Installiere das Firefox Sharing Werkzeug in diesen Webbrowser"; App::$strings["Hubzilla Directory Stats"] = "Hubzilla-Verzeichnisstatistiken"; App::$strings["Total Hubs"] = "Hubs insgesamt"; App::$strings["Hubzilla Hubs"] = "Hubzilla Hubs"; @@ -2044,10 +2060,6 @@ App::$strings["Average Age"] = "Durchschnittsalter"; App::$strings["Known Chatrooms"] = "Bekannte Chaträume"; App::$strings["Known Tags"] = "Bekannte Schlagwörter"; 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,"] = "Bitte berücksichtige, dass Diaspora und Friendica Statistiken nur solche einschließen, die **diesem Verzeichnis** bekannt sind, nicht alle im Netzwerk bekannten. Das gilt auch für Chaträume."; -App::$strings["Email notification hub"] = "Hub für E-Mail-Benachrichtigungen"; -App::$strings["Hostname"] = "Servername"; -App::$strings["Mailhost Settings"] = "Mailhost-Einstellungen"; -App::$strings["MAILHOST Settings saved."] = "MAILHOST-Einstellungen gespeichert."; App::$strings["Your Webbie:"] = "Dein Webbie"; App::$strings["Fontsize (px):"] = "Schriftgröße (px):"; App::$strings["Link:"] = "Link:"; @@ -2161,20 +2173,25 @@ App::$strings["Show Upload Limits"] = "Hochladebeschränkungen anzeigen"; App::$strings["Hubzilla configured maximum size: "] = "Die in Hubzilla eingestellte maximale Größe:"; App::$strings["PHP upload_max_filesize: "] = "PHP upload_max_filesize:"; App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = "PHP post_max_size (muss größer sein als upload_max_filesize):"; -App::$strings["generic profile image"] = ""; -App::$strings["random geometric pattern"] = ""; -App::$strings["monster face"] = ""; -App::$strings["computer generated face"] = ""; +App::$strings["generic profile image"] = "generisches Profilbild"; +App::$strings["random geometric pattern"] = "zufälliges geometrisches Muster"; +App::$strings["monster face"] = "Monstergesicht"; +App::$strings["computer generated face"] = "computergeneriertes Gesicht"; App::$strings["retro arcade style face"] = ""; App::$strings["Hub default profile photo"] = "Standard-Profilfoto für diesen Hub"; App::$strings["Information"] = "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"] = "Einstellungen speichern"; -App::$strings["Default avatar image"] = ""; +App::$strings["Default avatar image"] = "Standard-Avatarbild"; App::$strings["Select default avatar image if none was found at Gravatar. See README"] = ""; -App::$strings["Rating of images"] = ""; +App::$strings["Rating of images"] = "Bewertungen der Bilder"; App::$strings["Select the appropriate avatar rating for your site. See README"] = ""; -App::$strings["Gravatar settings updated."] = ""; +App::$strings["Gravatar settings updated."] = "Gravatar-Einstellungen aktualisiert."; +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["Recent Channel/Profile Viewers"] = "Kürzliche Kanal/Profil Besucher"; App::$strings["This plugin/addon has not been configured."] = "Dieses Plugin/Addon wurde noch nicht konfiguriert."; App::$strings["Please visit the Visage settings on %s"] = "Bitte rufe die Visage Einstellungen auf %s auf"; @@ -2255,6 +2272,8 @@ App::$strings["ActivityPub"] = "ActivityPub"; 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["Enable the ActivityPub protocol for this channel"] = ""; +App::$strings["Send multi-media HTML articles"] = ""; +App::$strings["Not supported by some microblog services such as Mastodon"] = ""; App::$strings["ActivityPub Protocol Settings"] = ""; App::$strings["Project Servers and Resources"] = "Projektserver und -ressourcen"; App::$strings["Project Creator and Tech Lead"] = "Projektersteller und Technischer Leiter"; @@ -2542,6 +2561,8 @@ App::$strings["Uncertain"] = "Ungewiss"; App::$strings["It's complicated"] = "Es ist kompliziert"; App::$strings["Don't care"] = "Interessiert mich nicht"; App::$strings["Ask me"] = "Frag mich mal"; +App::$strings["likes %1\$s's %2\$s"] = ""; +App::$strings["doesn't like %1\$s's %2\$s"] = ""; App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s ist jetzt mit %2\$s verbunden"; App::$strings["%1\$s poked %2\$s"] = "%1\$s stupste %2\$s an"; App::$strings["poked"] = "stupste"; @@ -2550,6 +2571,7 @@ App::$strings["Categories:"] = "Kategorien:"; App::$strings["Filed under:"] = "Gespeichert unter:"; App::$strings["View in context"] = "Im Zusammenhang anschauen"; App::$strings["remove"] = "lösche"; +App::$strings["Loading..."] = "Lädt ..."; App::$strings["Delete Selected Items"] = "Lösche die ausgewählten Elemente"; App::$strings["View Source"] = "Quelle anzeigen"; App::$strings["Follow Thread"] = "Unterhaltung folgen"; @@ -2605,7 +2627,9 @@ App::$strings["Photo Albums"] = "Fotoalben"; App::$strings["Files and Storage"] = "Dateien und Speicher"; App::$strings["Bookmarks"] = "Lesezeichen"; App::$strings["Saved Bookmarks"] = "Gespeicherte Lesezeichen"; -App::$strings["View Cards"] = ""; +App::$strings["View Cards"] = "Karten anzeigen"; +App::$strings["articles"] = "Artikel"; +App::$strings["View Articles"] = "Artikel anzeigen"; App::$strings["View Webpages"] = "Webseiten anzeigen"; App::$strings["__ctx:noun__ Attending"] = array( 0 => "Zusage", @@ -2705,12 +2729,12 @@ App::$strings["Download binary/encrypted content"] = "Binären/verschlüsselten App::$strings["default"] = "Standard"; App::$strings["Page layout"] = "Seiten-Layout"; App::$strings["You can create your own with the layouts tool"] = "Mit dem Gestaltungswerkzeug kannst Du Deine eigenen Layouts erstellen"; -App::$strings["HTML"] = ""; -App::$strings["Comanche Layout"] = ""; -App::$strings["PHP"] = ""; +App::$strings["HTML"] = "HTML"; +App::$strings["Comanche Layout"] = "Comanche-Layout"; +App::$strings["PHP"] = "PHP"; App::$strings["Page content type"] = "Art des Seiteninhalts"; App::$strings["activity"] = "Aktivität"; -App::$strings["a-z, 0-9, -, and _ only"] = ""; +App::$strings["a-z, 0-9, -, and _ only"] = "nur a-z, 0-9, - und _"; App::$strings["Design Tools"] = "Gestaltungswerkzeuge"; App::$strings["Pages"] = "Seiten"; App::$strings["Import website..."] = "Webseite importieren..."; @@ -2739,14 +2763,14 @@ App::$strings["Examples: Robert Morgenstein, Fishing"] = "Beispiele: Robert Morg App::$strings["Random Profile"] = "Zufallsprofil"; App::$strings["Invite Friends"] = "Lade Freunde ein"; App::$strings["Advanced example: name=fred and country=iceland"] = "Fortgeschrittenes Beispiel: name=fred and country=iceland"; -App::$strings["Common Connections"] = ""; -App::$strings["View all %d common connections"] = ""; +App::$strings["Common Connections"] = "Gemeinsame Verbindungen"; +App::$strings["View all %d common connections"] = "Zeige alle %d gemeinsamen Verbindungen"; App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s schrieb den folgenden %2\$s %3\$s"; App::$strings["Channel is blocked on this site."] = "Der Kanal ist auf dieser Seite blockiert "; App::$strings["Channel location missing."] = "Adresse des Kanals fehlt."; App::$strings["Response from remote channel was incomplete."] = "Antwort des entfernten Kanals war unvollständig."; App::$strings["Channel was deleted and no longer exists."] = "Kanal wurde gelöscht und existiert nicht mehr."; -App::$strings["Remote channel or protocol unavailable."] = ""; +App::$strings["Remote channel or protocol unavailable."] = "Externer Kanal oder Protokoll nicht verfügbar."; App::$strings["Channel discovery failed."] = "Kanalsuche fehlgeschlagen"; App::$strings["Protocol disabled."] = "Protokoll deaktiviert."; App::$strings["Cannot connect to yourself."] = "Du kannst Dich nicht mit Dir selbst verbinden."; @@ -2919,9 +2943,10 @@ App::$strings["Post permissions %s cannot be changed %s after a post is shared.< App::$strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS-Informationen für den Datenbank-Server '%s' nicht finden"; App::$strings["Image/photo"] = "Bild/Foto"; App::$strings["Encrypted content"] = "Verschlüsselter Inhalt"; -App::$strings["Install %s element: "] = "Element %s installieren: "; +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."] = "Dieser Beitrag beinhaltet ein installierbares %s Element, aber Du hast nicht die nötigen Rechte, um es auf diesem Hub zu installieren."; App::$strings["card"] = "Karte"; +App::$strings["article"] = "Artikel"; App::$strings["Click to open/close"] = "Klicke zum Öffnen/Schließen"; App::$strings["spoiler"] = "Spoiler"; App::$strings["$1 wrote:"] = "$1 schrieb:"; @@ -2929,7 +2954,7 @@ App::$strings[" by "] = "von"; App::$strings[" on "] = "am"; App::$strings["Embedded content"] = "Eingebetteter Inhalt"; App::$strings["Embedding disabled"] = "Einbetten deaktiviert"; -App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = ""; +App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s heißt %2\$s willkommen"; App::$strings["General Features"] = "Allgemeine Funktionen"; App::$strings["Multiple Profiles"] = "Mehrfachprofile"; App::$strings["Ability to create multiple profiles"] = "Ermöglicht das Anlegen mehrerer Profile pro Kanal"; @@ -2990,6 +3015,7 @@ App::$strings["Show friend and connection suggestions"] = "Freund- und Verbindun App::$strings["Connection Filtering"] = "Filter für Verbindungen"; App::$strings["Filter incoming posts from connections based on keywords/content"] = "Ermöglicht die Filterung eingehender Beiträge anhand von Schlüsselwörtern (muss an der Verbindung konfiguriert werden)"; App::$strings["Post/Comment Tools"] = "Beitrag-/Kommentar-Tools"; +App::$strings["Use markdown for editing posts"] = "Verwende Markdown zum Bearbeiten von Beiträgen"; App::$strings["Community Tagging"] = "Gemeinschaftliches Verschlagworten"; App::$strings["Ability to tag existing posts"] = "Ermöglicht das Verschlagworten existierender Beiträge"; App::$strings["Post Categories"] = "Beitrags-Kategorien"; diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po index 67be6a829..8f6b8cb4e 100644 --- a/view/es-es/hmessages.po +++ b/view/es-es/hmessages.po @@ -5,17 +5,18 @@ # Translators: # alfonsomthd <alfonsomthd@tutanota.com>, 2015 # inboxwall <axetransit@gmail.com>, 2015 -# jeroenpraat <social@jeroenvanrietpaap.nl>, 2015 -# Manuel Jiménez Friaza <mjfriaza@openmailbox.org>, 2015-2017 +# jeroenpraat <jeroenpraat@disroot.org>, 2015 +# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017 +# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2015-2017 # Rafael, 2015 # tony baldwin <tonybaldwin@gmx.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Redmatrix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-19 12:01+0200\n" -"PO-Revision-Date: 2017-10-28 10:20+0000\n" -"Last-Translator: Manuel Jiménez Friaza <mjfriaza@openmailbox.org>\n" +"POT-Creation-Date: 2017-12-13 12:54+0100\n" +"PO-Revision-Date: 2017-12-16 09:43+0000\n" +"Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>\n" "Language-Team: Spanish (Spain) (http://www.transifex.com/Friendica/red-matrix/language/es_ES/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,168 +24,169 @@ msgstr "" "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../Zotlabs/Access/Permissions.php:53 +#: ../../Zotlabs/Access/Permissions.php:56 msgid "Can view my channel stream and posts" msgstr "Pueden verse la actividad y publicaciones de mi canal" -#: ../../Zotlabs/Access/Permissions.php:54 +#: ../../Zotlabs/Access/Permissions.php:57 msgid "Can send me their channel stream and posts" msgstr "Se me pueden enviar entradas y contenido de un canal" -#: ../../Zotlabs/Access/Permissions.php:55 +#: ../../Zotlabs/Access/Permissions.php:58 msgid "Can view my default channel profile" msgstr "Puede verse mi perfil de canal predeterminado." -#: ../../Zotlabs/Access/Permissions.php:56 +#: ../../Zotlabs/Access/Permissions.php:59 msgid "Can view my connections" msgstr "Pueden verse mis conexiones" -#: ../../Zotlabs/Access/Permissions.php:57 +#: ../../Zotlabs/Access/Permissions.php:60 msgid "Can view my file storage and photos" msgstr "Pueden verse mi repositorio de ficheros y mis fotos" -#: ../../Zotlabs/Access/Permissions.php:58 +#: ../../Zotlabs/Access/Permissions.php:61 msgid "Can upload/modify my file storage and photos" msgstr "Se pueden subir / modificar elementos en mi repositorio de ficheros y fotos" -#: ../../Zotlabs/Access/Permissions.php:59 +#: ../../Zotlabs/Access/Permissions.php:62 msgid "Can view my channel webpages" msgstr "Pueden verse las páginas personales de mi canal" -#: ../../Zotlabs/Access/Permissions.php:60 +#: ../../Zotlabs/Access/Permissions.php:63 msgid "Can view my wiki pages" msgstr "Pueden verse mis páginas wiki" -#: ../../Zotlabs/Access/Permissions.php:61 +#: ../../Zotlabs/Access/Permissions.php:64 msgid "Can create/edit my channel webpages" msgstr "Pueden crearse / modificarse páginas personales en mi canal" -#: ../../Zotlabs/Access/Permissions.php:62 +#: ../../Zotlabs/Access/Permissions.php:65 msgid "Can write to my wiki pages" msgstr "Se pueden modificar las páginas de mi wiki" -#: ../../Zotlabs/Access/Permissions.php:63 +#: ../../Zotlabs/Access/Permissions.php:66 msgid "Can post on my channel (wall) page" msgstr "Pueden crearse entradas en mi página de inicio del canal (“muro”)" -#: ../../Zotlabs/Access/Permissions.php:64 +#: ../../Zotlabs/Access/Permissions.php:67 msgid "Can comment on or like my posts" msgstr "Pueden publicarse comentarios en mis publicaciones o marcar mis entradas con 'me gusta'." -#: ../../Zotlabs/Access/Permissions.php:65 +#: ../../Zotlabs/Access/Permissions.php:68 msgid "Can send me private mail messages" msgstr "Se me pueden enviar mensajes privados" -#: ../../Zotlabs/Access/Permissions.php:66 +#: ../../Zotlabs/Access/Permissions.php:69 msgid "Can like/dislike profiles and profile things" msgstr "Se puede mostrar agrado o desagrado (Me gusta / No me gusta) en mis perfiles y sus distintos apartados" -#: ../../Zotlabs/Access/Permissions.php:67 +#: ../../Zotlabs/Access/Permissions.php:70 msgid "Can forward to all my channel connections via @+ mentions in posts" msgstr "Pueden reenviarse publicaciones a todas las conexiones de mi canal a través de @+ menciones en las entradas" -#: ../../Zotlabs/Access/Permissions.php:68 +#: ../../Zotlabs/Access/Permissions.php:71 msgid "Can chat with me" msgstr "Se puede chatear conmigo" -#: ../../Zotlabs/Access/Permissions.php:69 +#: ../../Zotlabs/Access/Permissions.php:72 msgid "Can source my public posts in derived channels" msgstr "Pueden utilizarse mis entradas públicas como origen de contenidos en canales derivados" -#: ../../Zotlabs/Access/Permissions.php:70 +#: ../../Zotlabs/Access/Permissions.php:73 msgid "Can administer my channel" msgstr "Se puede administrar mi canal" -#: ../../Zotlabs/Access/PermissionRoles.php:248 +#: ../../Zotlabs/Access/PermissionRoles.php:265 msgid "Social Networking" msgstr "Redes sociales" -#: ../../Zotlabs/Access/PermissionRoles.php:249 +#: ../../Zotlabs/Access/PermissionRoles.php:266 msgid "Social - Mostly Public" msgstr "Social - Público en su mayor parte" -#: ../../Zotlabs/Access/PermissionRoles.php:250 +#: ../../Zotlabs/Access/PermissionRoles.php:267 msgid "Social - Restricted" msgstr "Social - Restringido" -#: ../../Zotlabs/Access/PermissionRoles.php:251 +#: ../../Zotlabs/Access/PermissionRoles.php:268 msgid "Social - Private" msgstr "Social - Privado" -#: ../../Zotlabs/Access/PermissionRoles.php:254 +#: ../../Zotlabs/Access/PermissionRoles.php:271 msgid "Community Forum" msgstr "Foro de discusión" -#: ../../Zotlabs/Access/PermissionRoles.php:255 +#: ../../Zotlabs/Access/PermissionRoles.php:272 msgid "Forum - Mostly Public" msgstr "Foro - Público en su mayor parte" -#: ../../Zotlabs/Access/PermissionRoles.php:256 +#: ../../Zotlabs/Access/PermissionRoles.php:273 msgid "Forum - Restricted" msgstr "Foro - Restringido" -#: ../../Zotlabs/Access/PermissionRoles.php:257 +#: ../../Zotlabs/Access/PermissionRoles.php:274 msgid "Forum - Private" msgstr "Foro - Privado" -#: ../../Zotlabs/Access/PermissionRoles.php:260 +#: ../../Zotlabs/Access/PermissionRoles.php:277 msgid "Feed Republish" msgstr "Republicar un \"feed\"" -#: ../../Zotlabs/Access/PermissionRoles.php:261 +#: ../../Zotlabs/Access/PermissionRoles.php:278 msgid "Feed - Mostly Public" msgstr "Feed - Público en su mayor parte" -#: ../../Zotlabs/Access/PermissionRoles.php:262 +#: ../../Zotlabs/Access/PermissionRoles.php:279 msgid "Feed - Restricted" msgstr "Feed - Restringido" -#: ../../Zotlabs/Access/PermissionRoles.php:265 +#: ../../Zotlabs/Access/PermissionRoles.php:282 msgid "Special Purpose" msgstr "Propósito especial" -#: ../../Zotlabs/Access/PermissionRoles.php:266 +#: ../../Zotlabs/Access/PermissionRoles.php:283 msgid "Special - Celebrity/Soapbox" msgstr "Especial - Celebridad / Tribuna improvisada" -#: ../../Zotlabs/Access/PermissionRoles.php:267 +#: ../../Zotlabs/Access/PermissionRoles.php:284 msgid "Special - Group Repository" msgstr "Especial - Repositorio de grupo" -#: ../../Zotlabs/Access/PermissionRoles.php:270 +#: ../../Zotlabs/Access/PermissionRoles.php:287 #: ../../Zotlabs/Module/Cdav.php:1182 ../../Zotlabs/Module/New_channel.php:132 -#: ../../Zotlabs/Module/Settings/Channel.php:467 +#: ../../Zotlabs/Module/Settings/Channel.php:474 #: ../../Zotlabs/Module/Connedit.php:936 ../../Zotlabs/Module/Profiles.php:798 -#: ../../Zotlabs/Module/Register.php:213 ../../include/selectors.php:49 +#: ../../Zotlabs/Module/Register.php:221 ../../include/selectors.php:49 #: ../../include/selectors.php:66 ../../include/selectors.php:104 -#: ../../include/selectors.php:140 ../../include/event.php:1297 -#: ../../include/event.php:1304 ../../include/connections.php:689 +#: ../../include/selectors.php:140 ../../include/event.php:1308 +#: ../../include/event.php:1315 ../../include/connections.php:689 #: ../../include/connections.php:696 msgid "Other" msgstr "Otro" -#: ../../Zotlabs/Access/PermissionRoles.php:271 +#: ../../Zotlabs/Access/PermissionRoles.php:288 msgid "Custom/Expert Mode" msgstr "Modo personalizado/experto" -#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Editlayout.php:31 -#: ../../Zotlabs/Module/Connect.php:17 +#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Articles.php:29 +#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Connect.php:17 #: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Hcard.php:12 #: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Profile.php:20 #: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Editwebpage.php:32 #: ../../Zotlabs/Module/Cards.php:29 ../../Zotlabs/Module/Webpages.php:33 -#: ../../Zotlabs/Module/Filestorage.php:51 ../../include/channel.php:1163 +#: ../../Zotlabs/Module/Filestorage.php:51 ../../include/channel.php:1198 msgid "Requested profile is not available." msgstr "El perfil solicitado no está disponible." #: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80 #: ../../Zotlabs/Module/Invite.php:17 ../../Zotlabs/Module/Invite.php:94 -#: ../../Zotlabs/Module/Editlayout.php:67 +#: ../../Zotlabs/Module/Articles.php:68 ../../Zotlabs/Module/Editlayout.php:67 #: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Channel.php:110 #: ../../Zotlabs/Module/Channel.php:248 ../../Zotlabs/Module/Channel.php:288 #: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Locs.php:87 #: ../../Zotlabs/Module/Mitem.php:115 ../../Zotlabs/Module/Events.php:271 -#: ../../Zotlabs/Module/Appman.php:82 ../../Zotlabs/Module/Regmod.php:21 +#: ../../Zotlabs/Module/Appman.php:86 ../../Zotlabs/Module/Regmod.php:21 +#: ../../Zotlabs/Module/Article_edit.php:51 #: ../../Zotlabs/Module/New_channel.php:77 #: ../../Zotlabs/Module/New_channel.php:104 #: ../../Zotlabs/Module/Sharedwithme.php:16 ../../Zotlabs/Module/Setup.php:209 @@ -196,19 +198,19 @@ msgstr "El perfil solicitado no está disponible." #: ../../Zotlabs/Module/Mood.php:116 ../../Zotlabs/Module/Connections.php:29 #: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Bookmarks.php:64 #: ../../Zotlabs/Module/Photos.php:69 ../../Zotlabs/Module/Wiki.php:50 -#: ../../Zotlabs/Module/Wiki.php:273 ../../Zotlabs/Module/Wiki.php:388 +#: ../../Zotlabs/Module/Wiki.php:273 ../../Zotlabs/Module/Wiki.php:400 #: ../../Zotlabs/Module/Pdledit.php:29 ../../Zotlabs/Module/Poke.php:149 -#: ../../Zotlabs/Module/Profile_photo.php:288 -#: ../../Zotlabs/Module/Profile_photo.php:301 -#: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Item.php:223 -#: ../../Zotlabs/Module/Item.php:240 ../../Zotlabs/Module/Item.php:250 -#: ../../Zotlabs/Module/Item.php:1102 ../../Zotlabs/Module/Page.php:34 -#: ../../Zotlabs/Module/Page.php:125 ../../Zotlabs/Module/Connedit.php:389 +#: ../../Zotlabs/Module/Profile_photo.php:294 +#: ../../Zotlabs/Module/Profile_photo.php:307 +#: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Item.php:228 +#: ../../Zotlabs/Module/Item.php:245 ../../Zotlabs/Module/Item.php:255 +#: ../../Zotlabs/Module/Item.php:1085 ../../Zotlabs/Module/Page.php:34 +#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Connedit.php:389 #: ../../Zotlabs/Module/Chat.php:100 ../../Zotlabs/Module/Chat.php:105 #: ../../Zotlabs/Module/Menu.php:78 ../../Zotlabs/Module/Layouts.php:71 #: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89 -#: ../../Zotlabs/Module/Group.php:13 ../../Zotlabs/Module/Profiles.php:198 -#: ../../Zotlabs/Module/Profiles.php:635 +#: ../../Zotlabs/Module/Defperms.php:173 ../../Zotlabs/Module/Group.php:13 +#: ../../Zotlabs/Module/Profiles.php:198 ../../Zotlabs/Module/Profiles.php:635 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 #: ../../Zotlabs/Module/Editwebpage.php:107 @@ -216,32 +218,32 @@ msgstr "El perfil solicitado no está disponible." #: ../../Zotlabs/Module/Cards.php:68 ../../Zotlabs/Module/Webpages.php:118 #: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 #: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Sources.php:74 -#: ../../Zotlabs/Module/Like.php:181 ../../Zotlabs/Module/Suggest.php:28 +#: ../../Zotlabs/Module/Like.php:184 ../../Zotlabs/Module/Suggest.php:28 #: ../../Zotlabs/Module/Message.php:18 ../../Zotlabs/Module/Mail.php:146 #: ../../Zotlabs/Module/Register.php:77 #: ../../Zotlabs/Module/Cover_photo.php:281 #: ../../Zotlabs/Module/Cover_photo.php:294 -#: ../../Zotlabs/Module/Display.php:343 ../../Zotlabs/Module/Network.php:15 +#: ../../Zotlabs/Module/Display.php:404 ../../Zotlabs/Module/Network.php:15 #: ../../Zotlabs/Module/Filestorage.php:15 #: ../../Zotlabs/Module/Filestorage.php:70 #: ../../Zotlabs/Module/Filestorage.php:85 -#: ../../Zotlabs/Module/Filestorage.php:112 ../../Zotlabs/Module/Common.php:38 +#: ../../Zotlabs/Module/Filestorage.php:117 ../../Zotlabs/Module/Common.php:38 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 #: ../../Zotlabs/Module/Service_limits.php:11 #: ../../Zotlabs/Module/Rate.php:113 ../../Zotlabs/Module/Card_edit.php:51 #: ../../Zotlabs/Module/Notifications.php:11 -#: ../../Zotlabs/Lib/Chatroom.php:137 ../../Zotlabs/Web/WebServer.php:169 +#: ../../Zotlabs/Lib/Chatroom.php:133 ../../Zotlabs/Web/WebServer.php:169 #: ../../addon/keepout/keepout.php:36 ../../addon/openid/Mod_Id.php:53 #: ../../addon/gitwiki/Mod_Gitwiki.php:196 #: ../../addon/gitwiki/Mod_Gitwiki.php:292 ../../addon/pumpio/pumpio.php:40 -#: ../../include/attach.php:144 ../../include/attach.php:191 -#: ../../include/attach.php:255 ../../include/attach.php:269 -#: ../../include/attach.php:276 ../../include/attach.php:344 -#: ../../include/attach.php:358 ../../include/attach.php:365 -#: ../../include/attach.php:443 ../../include/attach.php:924 -#: ../../include/attach.php:998 ../../include/attach.php:1163 -#: ../../include/items.php:3489 ../../include/photos.php:28 +#: ../../include/attach.php:150 ../../include/attach.php:197 +#: ../../include/attach.php:270 ../../include/attach.php:284 +#: ../../include/attach.php:293 ../../include/attach.php:366 +#: ../../include/attach.php:380 ../../include/attach.php:387 +#: ../../include/attach.php:469 ../../include/attach.php:1008 +#: ../../include/attach.php:1082 ../../include/attach.php:1247 +#: ../../include/items.php:3633 ../../include/photos.php:27 msgid "Permission denied." msgstr "Acceso denegado." @@ -268,58 +270,60 @@ msgstr "Creado" msgid "Edited" msgstr "Editado" -#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Cdav.php:1185 -#: ../../Zotlabs/Module/New_channel.php:147 +#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Articles.php:96 +#: ../../Zotlabs/Module/Cdav.php:1185 ../../Zotlabs/Module/New_channel.php:147 #: ../../Zotlabs/Module/Connedit.php:939 ../../Zotlabs/Module/Menu.php:118 #: ../../Zotlabs/Module/Layouts.php:185 ../../Zotlabs/Module/Profiles.php:801 #: ../../Zotlabs/Module/Cards.php:96 ../../Zotlabs/Module/Webpages.php:239 -#: ../../Zotlabs/Storage/Browser.php:229 ../../Zotlabs/Storage/Browser.php:335 -#: ../../Zotlabs/Widget/Cdav.php:127 ../../Zotlabs/Widget/Cdav.php:164 +#: ../../Zotlabs/Storage/Browser.php:273 ../../Zotlabs/Storage/Browser.php:379 +#: ../../Zotlabs/Widget/Cdav.php:128 ../../Zotlabs/Widget/Cdav.php:165 msgid "Create" msgstr "Crear" #: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Editlayout.php:114 +#: ../../Zotlabs/Module/Article_edit.php:99 #: ../../Zotlabs/Module/Admin/Profs.php:154 #: ../../Zotlabs/Module/Settings/Oauth.php:149 #: ../../Zotlabs/Module/Thing.php:261 ../../Zotlabs/Module/Editblock.php:114 #: ../../Zotlabs/Module/Connections.php:260 #: ../../Zotlabs/Module/Connections.php:297 #: ../../Zotlabs/Module/Connections.php:317 ../../Zotlabs/Module/Wiki.php:202 -#: ../../Zotlabs/Module/Wiki.php:346 ../../Zotlabs/Module/Menu.php:112 +#: ../../Zotlabs/Module/Wiki.php:358 ../../Zotlabs/Module/Menu.php:112 #: ../../Zotlabs/Module/Layouts.php:193 #: ../../Zotlabs/Module/Editwebpage.php:142 #: ../../Zotlabs/Module/Webpages.php:240 ../../Zotlabs/Module/Editpost.php:85 #: ../../Zotlabs/Module/Card_edit.php:99 ../../Zotlabs/Lib/Apps.php:399 -#: ../../Zotlabs/Lib/ThreadItem.php:111 ../../Zotlabs/Storage/Browser.php:239 -#: ../../Zotlabs/Widget/Cdav.php:125 ../../Zotlabs/Widget/Cdav.php:161 +#: ../../Zotlabs/Lib/ThreadItem.php:121 ../../Zotlabs/Storage/Browser.php:285 +#: ../../Zotlabs/Widget/Cdav.php:126 ../../Zotlabs/Widget/Cdav.php:162 #: ../../addon/gitwiki/Mod_Gitwiki.php:151 -#: ../../addon/gitwiki/Mod_Gitwiki.php:252 ../../include/channel.php:1262 -#: ../../include/channel.php:1266 ../../include/menu.php:113 +#: ../../addon/gitwiki/Mod_Gitwiki.php:252 ../../include/channel.php:1297 +#: ../../include/channel.php:1301 ../../include/menu.php:113 msgid "Edit" msgstr "Editar" -#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1049 +#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1102 #: ../../Zotlabs/Module/Layouts.php:194 ../../Zotlabs/Module/Webpages.php:241 -#: ../../Zotlabs/Widget/Cdav.php:123 ../../include/conversation.php:1346 +#: ../../Zotlabs/Widget/Cdav.php:124 ../../include/conversation.php:1363 msgid "Share" msgstr "Compartir" #: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Editlayout.php:138 #: ../../Zotlabs/Module/Cdav.php:897 ../../Zotlabs/Module/Cdav.php:1187 +#: ../../Zotlabs/Module/Article_edit.php:129 #: ../../Zotlabs/Module/Admin/Accounts.php:173 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:155 #: ../../Zotlabs/Module/Settings/Oauth.php:150 #: ../../Zotlabs/Module/Thing.php:262 ../../Zotlabs/Module/Editblock.php:139 #: ../../Zotlabs/Module/Connections.php:268 -#: ../../Zotlabs/Module/Photos.php:1150 ../../Zotlabs/Module/Connedit.php:654 +#: ../../Zotlabs/Module/Photos.php:1203 ../../Zotlabs/Module/Connedit.php:654 #: ../../Zotlabs/Module/Connedit.php:941 ../../Zotlabs/Module/Group.php:179 #: ../../Zotlabs/Module/Profiles.php:803 #: ../../Zotlabs/Module/Editwebpage.php:167 #: ../../Zotlabs/Module/Webpages.php:242 #: ../../Zotlabs/Module/Card_edit.php:129 ../../Zotlabs/Lib/Apps.php:400 -#: ../../Zotlabs/Lib/ThreadItem.php:131 ../../Zotlabs/Storage/Browser.php:240 -#: ../../include/conversation.php:674 ../../include/conversation.php:717 +#: ../../Zotlabs/Lib/ThreadItem.php:141 ../../Zotlabs/Storage/Browser.php:286 +#: ../../include/conversation.php:690 ../../include/conversation.php:733 msgid "Delete" msgstr "Eliminar" @@ -402,7 +406,7 @@ msgstr "3. Pulse [conectar]" #: ../../Zotlabs/Module/Invite.php:151 ../../Zotlabs/Module/Locs.php:121 #: ../../Zotlabs/Module/Mitem.php:243 ../../Zotlabs/Module/Events.php:493 -#: ../../Zotlabs/Module/Appman.php:148 +#: ../../Zotlabs/Module/Appman.php:152 #: ../../Zotlabs/Module/Import_items.php:129 #: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:349 #: ../../Zotlabs/Module/Connect.php:98 @@ -412,59 +416,60 @@ msgstr "3. Pulse [conectar]" #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Channels.php:147 #: ../../Zotlabs/Module/Admin/Themes.php:158 -#: ../../Zotlabs/Module/Admin/Site.php:273 +#: ../../Zotlabs/Module/Admin/Site.php:277 #: ../../Zotlabs/Module/Admin/Profs.php:157 #: ../../Zotlabs/Module/Admin/Account_edit.php:74 #: ../../Zotlabs/Module/Admin/Security.php:104 #: ../../Zotlabs/Module/Settings/Permcats.php:110 -#: ../../Zotlabs/Module/Settings/Channel.php:480 +#: ../../Zotlabs/Module/Settings/Channel.php:489 #: ../../Zotlabs/Module/Settings/Features.php:47 #: ../../Zotlabs/Module/Settings/Tokens.php:168 #: ../../Zotlabs/Module/Settings/Account.php:118 #: ../../Zotlabs/Module/Settings/Featured.php:52 -#: ../../Zotlabs/Module/Settings/Display.php:207 +#: ../../Zotlabs/Module/Settings/Display.php:209 #: ../../Zotlabs/Module/Settings/Oauth.php:87 #: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374 -#: ../../Zotlabs/Module/Import.php:529 ../../Zotlabs/Module/Cal.php:343 -#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Photos.php:659 -#: ../../Zotlabs/Module/Photos.php:1029 ../../Zotlabs/Module/Photos.php:1069 -#: ../../Zotlabs/Module/Photos.php:1187 ../../Zotlabs/Module/Wiki.php:206 -#: ../../Zotlabs/Module/Pdledit.php:94 ../../Zotlabs/Module/Poke.php:200 -#: ../../Zotlabs/Module/Connedit.php:904 ../../Zotlabs/Module/Chat.php:196 -#: ../../Zotlabs/Module/Chat.php:242 ../../Zotlabs/Module/Pconfig.php:107 +#: ../../Zotlabs/Module/Import.php:529 ../../Zotlabs/Module/Cal.php:345 +#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Photos.php:1082 +#: ../../Zotlabs/Module/Photos.php:1122 ../../Zotlabs/Module/Photos.php:1240 +#: ../../Zotlabs/Module/Wiki.php:206 ../../Zotlabs/Module/Pdledit.php:98 +#: ../../Zotlabs/Module/Poke.php:200 ../../Zotlabs/Module/Connedit.php:904 +#: ../../Zotlabs/Module/Chat.php:196 ../../Zotlabs/Module/Chat.php:242 +#: ../../Zotlabs/Module/Pconfig.php:107 ../../Zotlabs/Module/Defperms.php:249 #: ../../Zotlabs/Module/Group.php:87 ../../Zotlabs/Module/Profiles.php:726 #: ../../Zotlabs/Module/Sources.php:114 ../../Zotlabs/Module/Sources.php:149 #: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Mail.php:431 -#: ../../Zotlabs/Module/Filestorage.php:155 ../../Zotlabs/Module/Rate.php:166 -#: ../../Zotlabs/Lib/ThreadItem.php:743 +#: ../../Zotlabs/Module/Filestorage.php:160 ../../Zotlabs/Module/Rate.php:166 +#: ../../Zotlabs/Lib/ThreadItem.php:754 #: ../../Zotlabs/Widget/Eventstools.php:16 -#: ../../Zotlabs/Widget/Wiki_pages.php:61 +#: ../../Zotlabs/Widget/Wiki_pages.php:40 +#: ../../Zotlabs/Widget/Wiki_pages.php:97 #: ../../view/theme/redbasic_c/php/config.php:95 #: ../../view/theme/redbasic/php/config.php:93 -#: ../../addon/skeleton/skeleton.php:65 ../../addon/gnusoc/gnusoc.php:269 +#: ../../addon/skeleton/skeleton.php:65 ../../addon/gnusoc/gnusoc.php:273 #: ../../addon/planets/planets.php:153 #: ../../addon/openclipatar/openclipatar.php:53 #: ../../addon/wppost/wppost.php:113 ../../addon/nsfw/nsfw.php:92 #: ../../addon/ijpost/ijpost.php:89 ../../addon/dwpost/dwpost.php:89 -#: ../../addon/mailhost/mailhost.php:40 #: ../../addon/likebanner/likebanner.php:57 #: ../../addon/redphotos/redphotos.php:136 ../../addon/irc/irc.php:53 #: ../../addon/ljpost/ljpost.php:86 ../../addon/startpage/startpage.php:113 -#: ../../addon/diaspora/diaspora.php:807 +#: ../../addon/diaspora/diaspora.php:816 #: ../../addon/gitwiki/Mod_Gitwiki.php:155 -#: ../../addon/rainbowtag/rainbowtag.php:85 ../../addon/visage/visage.php:170 -#: ../../addon/nsabait/nsabait.php:161 ../../addon/mailtest/mailtest.php:100 +#: ../../addon/rainbowtag/rainbowtag.php:85 ../../addon/hzfiles/hzfiles.php:84 +#: ../../addon/visage/visage.php:170 ../../addon/nsabait/nsabait.php:161 +#: ../../addon/mailtest/mailtest.php:100 #: ../../addon/openstreetmap/openstreetmap.php:168 #: ../../addon/rtof/rtof.php:101 ../../addon/jappixmini/jappixmini.php:371 #: ../../addon/superblock/superblock.php:120 ../../addon/nofed/nofed.php:80 #: ../../addon/redred/redred.php:119 ../../addon/logrot/logrot.php:35 -#: ../../addon/frphotos/frphotos.php:96 ../../addon/pubcrawl/pubcrawl.php:1049 +#: ../../addon/frphotos/frphotos.php:96 ../../addon/pubcrawl/pubcrawl.php:1053 #: ../../addon/chords/Mod_Chords.php:60 ../../addon/libertree/libertree.php:85 #: ../../addon/flattrwidget/flattrwidget.php:124 #: ../../addon/statusnet/statusnet.php:322 #: ../../addon/statusnet/statusnet.php:380 #: ../../addon/statusnet/statusnet.php:432 -#: ../../addon/statusnet/statusnet.php:899 ../../addon/twitter/twitter.php:217 +#: ../../addon/statusnet/statusnet.php:900 ../../addon/twitter/twitter.php:217 #: ../../addon/twitter/twitter.php:259 #: ../../addon/smileybutton/smileybutton.php:219 #: ../../addon/piwik/piwik.php:95 ../../addon/pageheader/pageheader.php:48 @@ -474,7 +479,24 @@ msgstr "3. Pulse [conectar]" msgid "Submit" msgstr "Enviar" +#: ../../Zotlabs/Module/Articles.php:38 ../../Zotlabs/Module/Cards.php:38 +#: ../../Zotlabs/Module/Cards.php:178 ../../Zotlabs/Lib/Apps.php:224 +#: ../../include/conversation.php:1890 ../../include/features.php:122 +#: ../../include/nav.php:490 +msgid "Cards" +msgstr "Fichas" + +#: ../../Zotlabs/Module/Articles.php:95 +msgid "Add Article" +msgstr "Añadir un artículo" + +#: ../../Zotlabs/Module/Articles.php:178 ../../include/nav.php:501 +msgid "Articles" +msgstr "Artículos" + #: ../../Zotlabs/Module/Editlayout.php:79 +#: ../../Zotlabs/Module/Article_edit.php:17 +#: ../../Zotlabs/Module/Article_edit.php:33 #: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95 #: ../../Zotlabs/Module/Editwebpage.php:80 #: ../../Zotlabs/Module/Editpost.php:24 ../../Zotlabs/Module/Card_edit.php:17 @@ -496,13 +518,14 @@ msgstr "Descripción de la plantilla (opcional)" msgid "Edit Layout" msgstr "Modificar la plantilla" -#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Subthread.php:62 -#: ../../Zotlabs/Module/Import_items.php:120 ../../Zotlabs/Module/Group.php:74 +#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Subthread.php:86 +#: ../../Zotlabs/Module/Import_items.php:120 +#: ../../Zotlabs/Module/Cloud.php:111 ../../Zotlabs/Module/Group.php:74 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:68 -#: ../../Zotlabs/Module/Like.php:283 ../../Zotlabs/Web/WebServer.php:168 -#: ../../addon/redphotos/redphotos.php:119 +#: ../../Zotlabs/Module/Like.php:295 ../../Zotlabs/Web/WebServer.php:168 +#: ../../addon/redphotos/redphotos.php:119 ../../addon/hzfiles/hzfiles.php:73 #: ../../addon/frphotos/frphotos.php:81 ../../addon/redfiles/redfiles.php:109 -#: ../../include/items.php:346 +#: ../../include/items.php:358 msgid "Permission denied" msgstr "Permiso denegado" @@ -514,7 +537,7 @@ msgstr "Identificador del perfil no válido" msgid "Profile Visibility Editor" msgstr "Editor de visibilidad del perfil" -#: ../../Zotlabs/Module/Profperm.php:113 ../../include/channel.php:1585 +#: ../../Zotlabs/Module/Profperm.php:113 ../../include/channel.php:1633 msgid "Profile" msgstr "Perfil" @@ -541,11 +564,11 @@ msgstr "Resumen: " #: ../../Zotlabs/Module/Cdav.php:786 ../../Zotlabs/Module/Cdav.php:787 #: ../../Zotlabs/Module/Cdav.php:794 ../../Zotlabs/Module/Embedphotos.php:146 -#: ../../Zotlabs/Module/Photos.php:764 ../../Zotlabs/Module/Photos.php:1220 -#: ../../Zotlabs/Lib/Apps.php:727 ../../Zotlabs/Lib/Apps.php:805 -#: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Widget/Portfolio.php:86 -#: ../../Zotlabs/Widget/Album.php:84 ../../addon/pubcrawl/as.php:841 -#: ../../include/conversation.php:1143 +#: ../../Zotlabs/Module/Photos.php:817 ../../Zotlabs/Module/Photos.php:1273 +#: ../../Zotlabs/Lib/Apps.php:744 ../../Zotlabs/Lib/Apps.php:822 +#: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Widget/Portfolio.php:95 +#: ../../Zotlabs/Widget/Album.php:84 ../../addon/pubcrawl/as.php:842 +#: ../../include/conversation.php:1160 msgid "Unknown" msgstr "Desconocido" @@ -582,7 +605,7 @@ msgid "End date and time" msgstr "Fecha y hora de finalización" #: ../../Zotlabs/Module/Cdav.php:871 ../../Zotlabs/Module/Events.php:473 -#: ../../Zotlabs/Module/Appman.php:138 ../../Zotlabs/Module/Rbmark.php:101 +#: ../../Zotlabs/Module/Appman.php:142 ../../Zotlabs/Module/Rbmark.php:101 #: ../../addon/rendezvous/rendezvous.php:173 msgid "Description" msgstr "Descripción" @@ -595,20 +618,20 @@ msgid "Location" msgstr "Ubicación" #: ../../Zotlabs/Module/Cdav.php:879 ../../Zotlabs/Module/Events.php:689 -#: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Cal.php:337 -#: ../../Zotlabs/Module/Cal.php:344 ../../Zotlabs/Module/Photos.php:918 +#: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Cal.php:339 +#: ../../Zotlabs/Module/Cal.php:346 ../../Zotlabs/Module/Photos.php:971 msgid "Previous" msgstr "Anterior" #: ../../Zotlabs/Module/Cdav.php:880 ../../Zotlabs/Module/Events.php:690 #: ../../Zotlabs/Module/Events.php:699 ../../Zotlabs/Module/Setup.php:263 -#: ../../Zotlabs/Module/Cal.php:338 ../../Zotlabs/Module/Cal.php:345 -#: ../../Zotlabs/Module/Photos.php:927 +#: ../../Zotlabs/Module/Cal.php:340 ../../Zotlabs/Module/Cal.php:347 +#: ../../Zotlabs/Module/Photos.php:980 msgid "Next" msgstr "Siguiente" #: ../../Zotlabs/Module/Cdav.php:881 ../../Zotlabs/Module/Events.php:700 -#: ../../Zotlabs/Module/Cal.php:346 +#: ../../Zotlabs/Module/Cal.php:348 msgid "Today" msgstr "Hoy" @@ -656,14 +679,13 @@ msgstr "Eliminar todos" #: ../../Zotlabs/Module/Admin/Plugins.php:423 #: ../../Zotlabs/Module/Settings/Oauth.php:88 #: ../../Zotlabs/Module/Settings/Oauth.php:114 -#: ../../Zotlabs/Module/Wiki.php:333 ../../Zotlabs/Module/Wiki.php:363 +#: ../../Zotlabs/Module/Wiki.php:345 ../../Zotlabs/Module/Wiki.php:375 #: ../../Zotlabs/Module/Connedit.php:942 ../../Zotlabs/Module/Fbrowser.php:66 #: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Profiles.php:804 #: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Module/Tagrm.php:15 -#: ../../Zotlabs/Module/Tagrm.php:138 ../../addon/js_upload/js_upload.php:46 -#: ../../addon/gitwiki/Mod_Gitwiki.php:244 -#: ../../addon/gitwiki/Mod_Gitwiki.php:267 ../../include/conversation.php:1369 -#: ../../include/conversation.php:1418 +#: ../../Zotlabs/Module/Tagrm.php:138 ../../addon/gitwiki/Mod_Gitwiki.php:244 +#: ../../addon/gitwiki/Mod_Gitwiki.php:267 ../../include/conversation.php:1386 +#: ../../include/conversation.php:1435 msgid "Cancel" msgstr "Cancelar" @@ -677,8 +699,8 @@ msgstr "¡Disculpas! La edición de eventos recurrentes aún no se ha implementa #: ../../Zotlabs/Module/Settings/Oauth.php:89 #: ../../Zotlabs/Module/Settings/Oauth.php:115 #: ../../Zotlabs/Module/Wiki.php:209 ../../Zotlabs/Module/Connedit.php:924 -#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Lib/NativeWikiPage.php:554 -#: ../../Zotlabs/Storage/Browser.php:234 +#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Lib/NativeWikiPage.php:558 +#: ../../Zotlabs/Storage/Browser.php:280 #: ../../Zotlabs/Widget/Wiki_page_history.php:22 #: ../../addon/rendezvous/rendezvous.php:172 #: ../../addon/gitwiki/Mod_Gitwiki.php:158 @@ -704,7 +726,7 @@ msgstr "Teléfono" #: ../../Zotlabs/Module/Connedit.php:928 ../../Zotlabs/Module/Profiles.php:790 #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 ../../addon/rtof/rtof.php:93 -#: ../../addon/redred/redred.php:107 ../../include/network.php:1706 +#: ../../addon/redred/redred.php:107 ../../include/network.php:1769 msgid "Email" msgstr "Correo electrónico" @@ -731,19 +753,19 @@ msgid "Note" msgstr "Nota" #: ../../Zotlabs/Module/Cdav.php:1179 ../../Zotlabs/Module/Connedit.php:933 -#: ../../Zotlabs/Module/Profiles.php:795 ../../include/event.php:1290 +#: ../../Zotlabs/Module/Profiles.php:795 ../../include/event.php:1301 #: ../../include/connections.php:682 msgid "Mobile" msgstr "Móvil" #: ../../Zotlabs/Module/Cdav.php:1180 ../../Zotlabs/Module/Connedit.php:934 -#: ../../Zotlabs/Module/Profiles.php:796 ../../include/event.php:1291 +#: ../../Zotlabs/Module/Profiles.php:796 ../../include/event.php:1302 #: ../../include/connections.php:683 msgid "Home" msgstr "Inicio" #: ../../Zotlabs/Module/Cdav.php:1181 ../../Zotlabs/Module/Connedit.php:935 -#: ../../Zotlabs/Module/Profiles.php:797 ../../include/event.php:1294 +#: ../../Zotlabs/Module/Profiles.php:797 ../../include/event.php:1305 #: ../../include/connections.php:686 msgid "Work" msgstr "Trabajo" @@ -886,9 +908,13 @@ msgid "" " please import or restore these in date order (oldest first)." msgstr "Estos ficheros pueden ser importados o restaurados visitando <a href=\"%1$s\">%2$s</a> o cualquier sitio que contenga su canal. Para obtener los mejores resultados, por favor, importar o restaurar estos ficheros en orden de fecha (la más antigua primero)." -#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Photos.php:490 +#: ../../Zotlabs/Module/Hq.php:136 +msgid "Welcome to hubzilla!" +msgstr "¡Bienvenido o bienvenida a Hubzilla!" + +#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Photos.php:540 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Directory.php:63 -#: ../../Zotlabs/Module/Display.php:21 +#: ../../Zotlabs/Module/Directory.php:68 ../../Zotlabs/Module/Display.php:30 #: ../../Zotlabs/Module/Viewconnections.php:23 msgid "Public access denied." msgstr "Acceso público denegado." @@ -896,7 +922,7 @@ msgstr "Acceso público denegado." #: ../../Zotlabs/Module/Search.php:44 ../../Zotlabs/Module/Connections.php:313 #: ../../Zotlabs/Lib/Apps.php:250 ../../Zotlabs/Widget/Sitesearch.php:31 #: ../../include/text.php:1029 ../../include/text.php:1041 -#: ../../include/acl_selectors.php:213 ../../include/nav.php:204 +#: ../../include/acl_selectors.php:213 ../../include/nav.php:211 msgid "Search" msgstr "Buscar" @@ -910,8 +936,8 @@ msgstr "elementos etiquetados con: %s" msgid "Search results for: %s" msgstr "Resultados de la búsqueda para: %s" -#: ../../Zotlabs/Module/Pubstream.php:38 -#: ../../Zotlabs/Widget/Notifications.php:128 +#: ../../Zotlabs/Module/Pubstream.php:81 +#: ../../Zotlabs/Widget/Notifications.php:129 msgid "Public Stream" msgstr "\"Stream\" público" @@ -967,14 +993,23 @@ 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/Apporder.php:39 -msgid "Change Order of Navigation Apps" -msgstr "Cambiar el orden de las aplicaciones en la barra de navegación" +#: ../../Zotlabs/Module/Apporder.php:44 +msgid "Change Order of Pinned Navbar Apps" +msgstr "Cambiar el orden de las aplicaciones fijas en la barra de navegación" -#: ../../Zotlabs/Module/Apporder.php:40 +#: ../../Zotlabs/Module/Apporder.php:44 +msgid "Change Order of App Tray Apps" +msgstr "Cambiar el orden de las aplicaciones de la bandeja de aplicaciones" + +#: ../../Zotlabs/Module/Apporder.php:45 msgid "" -"Use arrows to move the corresponding app up or down in the display list" -msgstr "Utilizar las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la lista de visualización" +"Use arrows to move the corresponding app left (top) or right (bottom) in the" +" navbar" +msgstr "Use las flechas para mover la aplicación correspondiente a la izquierda (arriba) o derecha (abajo) en la barra de navegación." + +#: ../../Zotlabs/Module/Apporder.php:45 +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/Mitem.php:28 ../../Zotlabs/Module/Menu.php:144 msgid "Menu not found." @@ -1002,7 +1037,7 @@ msgid "Menu Item Permissions" msgstr "Permisos del elemento del menú" #: ../../Zotlabs/Module/Mitem.php:154 ../../Zotlabs/Module/Mitem.php:231 -#: ../../Zotlabs/Module/Settings/Channel.php:513 +#: ../../Zotlabs/Module/Settings/Channel.php:522 msgid "(click to open/close)" msgstr "(pulsar para abrir o cerrar)" @@ -1026,17 +1061,17 @@ msgstr "Usar la autenticación mágica si está disponible" #: ../../Zotlabs/Module/Mitem.php:240 ../../Zotlabs/Module/Mitem.php:241 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Removeme.php:63 -#: ../../Zotlabs/Module/Admin/Site.php:237 -#: ../../Zotlabs/Module/Settings/Channel.php:298 -#: ../../Zotlabs/Module/Settings/Display.php:103 -#: ../../Zotlabs/Module/Api.php:97 ../../Zotlabs/Module/Photos.php:644 +#: ../../Zotlabs/Module/Admin/Site.php:240 +#: ../../Zotlabs/Module/Settings/Channel.php:305 +#: ../../Zotlabs/Module/Settings/Display.php:105 +#: ../../Zotlabs/Module/Api.php:97 ../../Zotlabs/Module/Photos.php:697 #: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Wiki.php:219 #: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Connedit.php:779 #: ../../Zotlabs/Module/Menu.php:100 ../../Zotlabs/Module/Menu.php:157 -#: ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Filestorage.php:150 -#: ../../Zotlabs/Module/Filestorage.php:158 -#: ../../Zotlabs/Storage/Browser.php:351 ../../boot.php:1644 +#: ../../Zotlabs/Module/Defperms.php:180 ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Module/Filestorage.php:155 +#: ../../Zotlabs/Module/Filestorage.php:163 +#: ../../Zotlabs/Storage/Browser.php:394 ../../boot.php:1669 #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic_c/php/config.php:115 #: ../../view/theme/redbasic/php/config.php:98 @@ -1077,16 +1112,17 @@ msgstr "No" #: ../../Zotlabs/Module/Mitem.php:240 ../../Zotlabs/Module/Mitem.php:241 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Removeme.php:63 -#: ../../Zotlabs/Module/Admin/Site.php:239 -#: ../../Zotlabs/Module/Settings/Channel.php:298 -#: ../../Zotlabs/Module/Settings/Display.php:103 -#: ../../Zotlabs/Module/Api.php:96 ../../Zotlabs/Module/Photos.php:644 +#: ../../Zotlabs/Module/Admin/Site.php:242 +#: ../../Zotlabs/Module/Settings/Channel.php:305 +#: ../../Zotlabs/Module/Settings/Display.php:105 +#: ../../Zotlabs/Module/Api.php:96 ../../Zotlabs/Module/Photos.php:697 #: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Wiki.php:219 #: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Menu.php:100 -#: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Filestorage.php:150 -#: ../../Zotlabs/Module/Filestorage.php:158 -#: ../../Zotlabs/Storage/Browser.php:351 ../../boot.php:1644 +#: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Defperms.php:180 +#: ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Module/Filestorage.php:155 +#: ../../Zotlabs/Module/Filestorage.php:163 +#: ../../Zotlabs/Storage/Browser.php:394 ../../boot.php:1669 #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic_c/php/config.php:115 #: ../../view/theme/redbasic/php/config.php:98 @@ -1228,9 +1264,9 @@ msgstr "Se requieren el título del evento y su hora de inicio." msgid "Event not found." msgstr "Evento no encontrado." -#: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Tagger.php:51 -#: ../../Zotlabs/Module/Like.php:372 ../../include/conversation.php:119 -#: ../../include/text.php:1941 ../../include/event.php:1145 +#: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Tagger.php:73 +#: ../../Zotlabs/Module/Like.php:384 ../../include/conversation.php:119 +#: ../../include/text.php:1941 ../../include/event.php:1153 msgid "event" msgstr "evento" @@ -1239,9 +1275,9 @@ msgid "Edit event title" msgstr "Editar el título del evento" #: ../../Zotlabs/Module/Events.php:460 ../../Zotlabs/Module/Events.php:465 -#: ../../Zotlabs/Module/Appman.php:136 ../../Zotlabs/Module/Appman.php:137 +#: ../../Zotlabs/Module/Appman.php:140 ../../Zotlabs/Module/Appman.php:141 #: ../../Zotlabs/Module/Profiles.php:748 ../../Zotlabs/Module/Profiles.php:752 -#: ../../include/datetime.php:259 +#: ../../include/datetime.php:265 msgid "Required" msgstr "Obligatorio" @@ -1291,13 +1327,13 @@ msgstr "Editar la descripción" msgid "Edit Location" msgstr "Modificar la dirección" -#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1070 -#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/ThreadItem.php:753 -#: ../../include/conversation.php:1313 +#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1123 +#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/ThreadItem.php:764 +#: ../../include/conversation.php:1330 msgid "Preview" msgstr "Previsualizar" -#: ../../Zotlabs/Module/Events.php:479 ../../include/conversation.php:1385 +#: ../../Zotlabs/Module/Events.php:479 ../../include/conversation.php:1402 msgid "Permission settings" msgstr "Configuración de permisos" @@ -1309,7 +1345,7 @@ msgstr "Zona horaria: " msgid "Advanced Options" msgstr "Opciones avanzadas" -#: ../../Zotlabs/Module/Events.php:605 ../../Zotlabs/Module/Cal.php:264 +#: ../../Zotlabs/Module/Events.php:605 ../../Zotlabs/Module/Cal.php:266 msgid "l, F j" msgstr "l j F" @@ -1321,7 +1357,7 @@ msgstr "Editar evento" msgid "Delete event" msgstr "Borrar evento" -#: ../../Zotlabs/Module/Events.php:660 ../../Zotlabs/Module/Cal.php:313 +#: ../../Zotlabs/Module/Events.php:660 ../../Zotlabs/Module/Cal.php:315 #: ../../include/text.php:1760 msgid "Link to Source" msgstr "Enlazar con la entrada en su ubicación original" @@ -1330,16 +1366,16 @@ msgstr "Enlazar con la entrada en su ubicación original" msgid "calendar" msgstr "calendario" -#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:336 +#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:338 msgid "Edit Event" msgstr "Editar el evento" -#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:336 +#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:338 msgid "Create Event" msgstr "Crear un evento" -#: ../../Zotlabs/Module/Events.php:691 ../../Zotlabs/Module/Cal.php:339 -#: ../../include/channel.php:1588 +#: ../../Zotlabs/Module/Events.php:691 ../../Zotlabs/Module/Cal.php:341 +#: ../../include/channel.php:1636 msgid "Export" msgstr "Exportar" @@ -1359,47 +1395,47 @@ msgstr "Aplicación instalada." msgid "Malformed app." msgstr "Aplicación con errores" -#: ../../Zotlabs/Module/Appman.php:125 +#: ../../Zotlabs/Module/Appman.php:129 msgid "Embed code" msgstr "Código incorporado" -#: ../../Zotlabs/Module/Appman.php:131 +#: ../../Zotlabs/Module/Appman.php:135 msgid "Edit App" msgstr "Modificar la aplicación" -#: ../../Zotlabs/Module/Appman.php:131 +#: ../../Zotlabs/Module/Appman.php:135 msgid "Create App" msgstr "Crear una aplicación" -#: ../../Zotlabs/Module/Appman.php:136 +#: ../../Zotlabs/Module/Appman.php:140 msgid "Name of app" msgstr "Nombre de la aplicación" -#: ../../Zotlabs/Module/Appman.php:137 +#: ../../Zotlabs/Module/Appman.php:141 msgid "Location (URL) of app" msgstr "Dirección (URL) de la aplicación" -#: ../../Zotlabs/Module/Appman.php:139 +#: ../../Zotlabs/Module/Appman.php:143 msgid "Photo icon URL" msgstr "Dirección del icono" -#: ../../Zotlabs/Module/Appman.php:139 +#: ../../Zotlabs/Module/Appman.php:143 msgid "80 x 80 pixels - optional" msgstr "80 x 80 pixels - opcional" -#: ../../Zotlabs/Module/Appman.php:140 +#: ../../Zotlabs/Module/Appman.php:144 msgid "Categories (optional, comma separated list)" msgstr "Temas (opcional, lista separada por comas)" -#: ../../Zotlabs/Module/Appman.php:141 +#: ../../Zotlabs/Module/Appman.php:145 msgid "Version ID" msgstr "Versión" -#: ../../Zotlabs/Module/Appman.php:142 +#: ../../Zotlabs/Module/Appman.php:146 msgid "Price of app" msgstr "Precio de la aplicación" -#: ../../Zotlabs/Module/Appman.php:143 +#: ../../Zotlabs/Module/Appman.php:147 msgid "Location (URL) to purchase app" msgstr "Dirección (URL) donde adquirir la aplicación" @@ -1411,30 +1447,55 @@ msgstr "Por favor, inicie sesión." msgid "Hub not found." msgstr "Servidor no encontrado" -#: ../../Zotlabs/Module/Subthread.php:87 ../../Zotlabs/Module/Tagger.php:47 -#: ../../Zotlabs/Module/Like.php:370 +#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Tagger.php:69 +#: ../../Zotlabs/Module/Like.php:382 #: ../../addon/redphotos/redphotohelper.php:71 -#: ../../addon/diaspora/Receiver.php:1424 ../../addon/pubcrawl/as.php:1288 +#: ../../addon/diaspora/Receiver.php:1433 ../../addon/pubcrawl/as.php:1295 #: ../../include/conversation.php:116 ../../include/text.php:1938 msgid "photo" msgstr "foto" -#: ../../Zotlabs/Module/Subthread.php:87 ../../Zotlabs/Module/Like.php:370 -#: ../../addon/diaspora/Receiver.php:1424 ../../addon/pubcrawl/as.php:1288 +#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Like.php:382 +#: ../../addon/diaspora/Receiver.php:1433 ../../addon/pubcrawl/as.php:1295 #: ../../include/conversation.php:144 ../../include/text.php:1944 msgid "status" msgstr "el mensaje de estado" -#: ../../Zotlabs/Module/Subthread.php:118 +#: ../../Zotlabs/Module/Subthread.php:142 #, php-format msgid "%1$s is following %2$s's %3$s" msgstr "%1$s está siguiendo %3$s de %2$s" -#: ../../Zotlabs/Module/Subthread.php:120 +#: ../../Zotlabs/Module/Subthread.php:144 #, php-format msgid "%1$s stopped following %2$s's %3$s" msgstr "%1$s ha dejado de seguir %3$s de %2$s" +#: ../../Zotlabs/Module/Article_edit.php:44 ../../Zotlabs/Module/Cal.php:62 +#: ../../Zotlabs/Module/Chanview.php:96 ../../Zotlabs/Module/Page.php:75 +#: ../../Zotlabs/Module/Wall_upload.php:31 ../../Zotlabs/Module/Block.php:41 +#: ../../Zotlabs/Module/Card_edit.php:44 +msgid "Channel not found." +msgstr "Canal no encontrado." + +#: ../../Zotlabs/Module/Article_edit.php:101 +#: ../../Zotlabs/Module/Editblock.php:116 ../../Zotlabs/Module/Chat.php:207 +#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Mail.php:288 +#: ../../Zotlabs/Module/Mail.php:430 ../../Zotlabs/Module/Card_edit.php:101 +#: ../../include/conversation.php:1278 +msgid "Insert web link" +msgstr "Insertar enlace web" + +#: ../../Zotlabs/Module/Article_edit.php:117 +#: ../../Zotlabs/Module/Editblock.php:129 +#: ../../Zotlabs/Module/Card_edit.php:117 ../../include/conversation.php:1398 +msgid "Title (optional)" +msgstr "Título (opcional)" + +#: ../../Zotlabs/Module/Article_edit.php:128 +msgid "Edit Article" +msgstr "Editar el artículo" + #: ../../Zotlabs/Module/Import_items.php:48 ../../Zotlabs/Module/Import.php:64 msgid "Nothing to import." msgstr "No hay nada para importar." @@ -1480,22 +1541,22 @@ msgid "You have created %1$.0f of %2$.0f allowed channels." msgstr "Ha creado %1$.0f de %2$.0f canales permitidos." #: ../../Zotlabs/Module/New_channel.php:134 -#: ../../Zotlabs/Module/Register.php:237 +#: ../../Zotlabs/Module/Register.php:249 msgid "Name or caption" msgstr "Nombre o descripción" #: ../../Zotlabs/Module/New_channel.php:134 -#: ../../Zotlabs/Module/Register.php:237 +#: ../../Zotlabs/Module/Register.php:249 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:136 -#: ../../Zotlabs/Module/Register.php:239 +#: ../../Zotlabs/Module/Register.php:251 msgid "Choose a short nickname" msgstr "Elija un alias corto" #: ../../Zotlabs/Module/New_channel.php:136 -#: ../../Zotlabs/Module/Register.php:239 +#: ../../Zotlabs/Module/Register.php:251 #, php-format msgid "" "Your nickname will be used to create an easy to remember channel address " @@ -1503,17 +1564,17 @@ msgid "" msgstr "Su alias se usará para crear una dirección de canal fácil de recordar, p. ej.: alias%s" #: ../../Zotlabs/Module/New_channel.php:137 -#: ../../Zotlabs/Module/Register.php:240 +#: ../../Zotlabs/Module/Register.php:252 msgid "Channel role and privacy" msgstr "Clase de canal y privacidad" #: ../../Zotlabs/Module/New_channel.php:137 -#: ../../Zotlabs/Module/Register.php:240 +#: ../../Zotlabs/Module/Register.php:252 msgid "Select a channel role with your privacy requirements." msgstr "Seleccione un tipo de canal con sus requisitos de privacidad" #: ../../Zotlabs/Module/New_channel.php:137 -#: ../../Zotlabs/Module/Register.php:240 +#: ../../Zotlabs/Module/Register.php:252 msgid "Read more about roles" msgstr "Leer más sobre los roles" @@ -1575,7 +1636,7 @@ msgid "" msgstr "Por defecto, solo la instancia del canal alojado en este servidor será eliminado de la red" #: ../../Zotlabs/Module/Removeme.php:64 -#: ../../Zotlabs/Module/Settings/Channel.php:580 +#: ../../Zotlabs/Module/Settings/Channel.php:593 msgid "Remove Channel" msgstr "Eliminar el canal" @@ -1588,12 +1649,12 @@ msgid "NEW" msgstr "NUEVO" #: ../../Zotlabs/Module/Sharedwithme.php:107 -#: ../../Zotlabs/Storage/Browser.php:236 ../../include/text.php:1394 +#: ../../Zotlabs/Storage/Browser.php:282 ../../include/text.php:1394 msgid "Size" msgstr "Tamaño" #: ../../Zotlabs/Module/Sharedwithme.php:108 -#: ../../Zotlabs/Storage/Browser.php:237 +#: ../../Zotlabs/Storage/Browser.php:283 msgid "Last Modified" msgstr "Última modificación" @@ -2181,10 +2242,10 @@ msgstr "Intentar ejecutar este paso de actualización automáticamente" #: ../../Zotlabs/Module/Admin/Plugins.php:259 #: ../../Zotlabs/Module/Admin/Themes.php:72 ../../Zotlabs/Module/Thing.php:89 -#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:33 -#: ../../Zotlabs/Module/Display.php:347 +#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:46 +#: ../../Zotlabs/Module/Display.php:408 #: ../../Zotlabs/Module/Filestorage.php:24 ../../Zotlabs/Module/Admin.php:62 -#: ../../include/items.php:3410 +#: ../../include/items.php:3546 msgid "Item not found." msgstr "Elemento no encontrado." @@ -2215,7 +2276,7 @@ msgstr "Activar" #: ../../Zotlabs/Module/Admin/Channels.php:145 #: ../../Zotlabs/Module/Admin/Themes.php:122 #: ../../Zotlabs/Module/Admin/Themes.php:156 -#: ../../Zotlabs/Module/Admin/Site.php:271 +#: ../../Zotlabs/Module/Admin/Site.php:275 #: ../../Zotlabs/Module/Admin/Security.php:86 #: ../../Zotlabs/Module/Admin.php:136 msgid "Administration" @@ -2234,8 +2295,8 @@ msgstr "Cambiar" #: ../../Zotlabs/Module/Admin/Plugins.php:344 #: ../../Zotlabs/Module/Admin/Themes.php:125 ../../Zotlabs/Lib/Apps.php:236 -#: ../../Zotlabs/Widget/Settings_menu.php:133 ../../include/nav.php:132 -#: ../../include/nav.php:217 +#: ../../Zotlabs/Widget/Settings_menu.php:133 ../../include/nav.php:139 +#: ../../include/nav.php:224 msgid "Settings" msgstr "Ajustes" @@ -2319,7 +2380,7 @@ msgid "Switch branch" msgstr "Cambiar la rama" #: ../../Zotlabs/Module/Admin/Plugins.php:455 -#: ../../Zotlabs/Module/Photos.php:967 ../../Zotlabs/Module/Tagrm.php:137 +#: ../../Zotlabs/Module/Photos.php:1020 ../../Zotlabs/Module/Tagrm.php:137 #: ../../addon/superblock/superblock.php:116 msgid "Remove" msgstr "Eliminar" @@ -2342,7 +2403,7 @@ msgstr[1] "%s cuentas eliminadas" msgid "Account not found" msgstr "Cuenta no encontrada" -#: ../../Zotlabs/Module/Admin/Accounts.php:90 ../../include/channel.php:2357 +#: ../../Zotlabs/Module/Admin/Accounts.php:90 ../../include/channel.php:2456 #, php-format msgid "Account '%s' deleted" msgstr "La cuenta '%s' ha sido eliminada" @@ -2381,7 +2442,7 @@ msgid "No registrations." msgstr "Sin registros." #: ../../Zotlabs/Module/Admin/Accounts.php:171 -#: ../../Zotlabs/Module/Connections.php:282 ../../include/conversation.php:716 +#: ../../Zotlabs/Module/Connections.php:282 ../../include/conversation.php:732 msgid "Approve" msgstr "Aprobar" @@ -2403,7 +2464,7 @@ msgstr "Desbloquear" msgid "ID" msgstr "ID" -#: ../../Zotlabs/Module/Admin/Accounts.php:182 ../../include/group.php:288 +#: ../../Zotlabs/Module/Admin/Accounts.php:182 ../../include/group.php:284 msgid "All Channels" msgstr "Todos los canales" @@ -2538,7 +2599,7 @@ msgid "Disallow Code" msgstr "No permitir código" #: ../../Zotlabs/Module/Admin/Channels.php:154 -#: ../../include/conversation.php:1791 ../../include/nav.php:399 +#: ../../include/conversation.php:1808 ../../include/nav.php:410 msgid "Channel" msgstr "Canal" @@ -2583,394 +2644,412 @@ msgstr "[Experimental]" msgid "[Unsupported]" msgstr "[No soportado]" -#: ../../Zotlabs/Module/Admin/Site.php:144 +#: ../../Zotlabs/Module/Admin/Site.php:147 msgid "Site settings updated." msgstr "Ajustes del sitio actualizados." -#: ../../Zotlabs/Module/Admin/Site.php:170 +#: ../../Zotlabs/Module/Admin/Site.php:173 #: ../../view/theme/redbasic_c/php/config.php:15 -#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:2943 +#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:2968 msgid "Default" msgstr "Predeterminado" -#: ../../Zotlabs/Module/Admin/Site.php:181 -#: ../../Zotlabs/Module/Settings/Display.php:137 +#: ../../Zotlabs/Module/Admin/Site.php:184 +#: ../../Zotlabs/Module/Settings/Display.php:139 #, php-format msgid "%s - (Incompatible)" msgstr "%s - (Incompatible)" -#: ../../Zotlabs/Module/Admin/Site.php:188 -#: ../../Zotlabs/Module/Settings/Display.php:151 +#: ../../Zotlabs/Module/Admin/Site.php:191 +#: ../../Zotlabs/Module/Settings/Display.php:153 msgid "mobile" msgstr "móvil" -#: ../../Zotlabs/Module/Admin/Site.php:190 +#: ../../Zotlabs/Module/Admin/Site.php:193 msgid "experimental" msgstr "experimental" -#: ../../Zotlabs/Module/Admin/Site.php:192 +#: ../../Zotlabs/Module/Admin/Site.php:195 msgid "unsupported" msgstr "no soportado" -#: ../../Zotlabs/Module/Admin/Site.php:238 +#: ../../Zotlabs/Module/Admin/Site.php:241 msgid "Yes - with approval" msgstr "Sí - con aprobación" -#: ../../Zotlabs/Module/Admin/Site.php:244 +#: ../../Zotlabs/Module/Admin/Site.php:247 msgid "My site is not a public server" msgstr "Mi sitio no es un servidor público" -#: ../../Zotlabs/Module/Admin/Site.php:245 +#: ../../Zotlabs/Module/Admin/Site.php:248 msgid "My site has paid access only" msgstr "Mi sitio es un servicio de pago" -#: ../../Zotlabs/Module/Admin/Site.php:246 +#: ../../Zotlabs/Module/Admin/Site.php:249 msgid "My site has free access only" msgstr "Mi sitio es un servicio gratuito" -#: ../../Zotlabs/Module/Admin/Site.php:247 +#: ../../Zotlabs/Module/Admin/Site.php:250 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:258 +#: ../../Zotlabs/Module/Admin/Site.php:262 msgid "Beginner/Basic" msgstr "Principiante / Básico" -#: ../../Zotlabs/Module/Admin/Site.php:259 +#: ../../Zotlabs/Module/Admin/Site.php:263 msgid "Novice - not skilled but willing to learn" msgstr "Novato: no cualificado, pero dispuesto a aprender" -#: ../../Zotlabs/Module/Admin/Site.php:260 +#: ../../Zotlabs/Module/Admin/Site.php:264 msgid "Intermediate - somewhat comfortable" msgstr "Intermedio: bastante cómodo" -#: ../../Zotlabs/Module/Admin/Site.php:261 +#: ../../Zotlabs/Module/Admin/Site.php:265 msgid "Advanced - very comfortable" msgstr "Avanzado: muy cómodo" -#: ../../Zotlabs/Module/Admin/Site.php:262 +#: ../../Zotlabs/Module/Admin/Site.php:266 msgid "Expert - I can write computer code" msgstr "Experto: puedo escribir código informático" -#: ../../Zotlabs/Module/Admin/Site.php:263 +#: ../../Zotlabs/Module/Admin/Site.php:267 msgid "Wizard - I probably know more than you do" msgstr "Colaborador: probablemente sé más que tú" -#: ../../Zotlabs/Module/Admin/Site.php:272 ../../Zotlabs/Widget/Admin.php:22 +#: ../../Zotlabs/Module/Admin/Site.php:276 ../../Zotlabs/Widget/Admin.php:22 msgid "Site" msgstr "Sitio" -#: ../../Zotlabs/Module/Admin/Site.php:274 -#: ../../Zotlabs/Module/Register.php:251 +#: ../../Zotlabs/Module/Admin/Site.php:278 +#: ../../Zotlabs/Module/Register.php:263 msgid "Registration" msgstr "Registro" -#: ../../Zotlabs/Module/Admin/Site.php:275 +#: ../../Zotlabs/Module/Admin/Site.php:279 msgid "File upload" msgstr "Subir fichero" -#: ../../Zotlabs/Module/Admin/Site.php:276 +#: ../../Zotlabs/Module/Admin/Site.php:280 msgid "Policies" msgstr "Políticas" -#: ../../Zotlabs/Module/Admin/Site.php:277 +#: ../../Zotlabs/Module/Admin/Site.php:281 #: ../../include/contact_widgets.php:16 msgid "Advanced" msgstr "Avanzado" -#: ../../Zotlabs/Module/Admin/Site.php:281 -#: ../../addon/statusnet/statusnet.php:890 +#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../addon/statusnet/statusnet.php:891 msgid "Site name" msgstr "Nombre del sitio" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:287 msgid "Site default technical skill level" msgstr "Nivel de habilidad técnica predeterminado del sitio" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:287 msgid "Used to provide a member experience matched to technical comfort level" msgstr "Se utiliza para proporcionar una experiencia a los miembros adaptada a su nivel de comodidad técnica" -#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Lock the technical skill level setting" msgstr "Bloquear el ajuste del nivel de habilidad técnica" -#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Members can set their own technical comfort level by default" msgstr "Los miembros pueden configurar su nivel de comodidad técnica por defecto" -#: ../../Zotlabs/Module/Admin/Site.php:287 +#: ../../Zotlabs/Module/Admin/Site.php:291 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../Zotlabs/Module/Admin/Site.php:288 +#: ../../Zotlabs/Module/Admin/Site.php:292 msgid "Administrator Information" msgstr "Información del Administrador" -#: ../../Zotlabs/Module/Admin/Site.php:288 +#: ../../Zotlabs/Module/Admin/Site.php:292 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:289 +#: ../../Zotlabs/Module/Admin/Site.php:293 #: ../../Zotlabs/Module/Siteinfo.php:22 msgid "Site Information" msgstr "Información sobre el sitio" -#: ../../Zotlabs/Module/Admin/Site.php:289 +#: ../../Zotlabs/Module/Admin/Site.php:293 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:290 +#: ../../Zotlabs/Module/Admin/Site.php:294 msgid "System language" msgstr "Idioma del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Site.php:295 msgid "System theme" msgstr "Tema gráfico del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Site.php:295 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:292 +#: ../../Zotlabs/Module/Admin/Site.php:296 msgid "Mobile system theme" msgstr "Tema del sistema para móviles" -#: ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Module/Admin/Site.php:296 msgid "Theme for mobile devices" msgstr "Tema para dispositivos móviles" -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Admin/Site.php:298 msgid "Allow Feeds as Connections" msgstr "Permitir contenidos RSS como conexiones" -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Admin/Site.php:298 msgid "(Heavy system resource usage)" msgstr "(Uso intenso de los recursos del sistema)" -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:299 msgid "Maximum image size" msgstr "Tamaño máximo de la imagen" -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:299 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:296 +#: ../../Zotlabs/Module/Admin/Site.php:300 msgid "Does this site allow new member registration?" msgstr "¿Debe este sitio permitir el registro de nuevos miembros?" -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../Zotlabs/Module/Admin/Site.php:301 msgid "Invitation only" msgstr "Solo con una invitación" -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../Zotlabs/Module/Admin/Site.php:301 msgid "" "Only allow new member registrations with an invitation code. Above register " "policy must be set to Yes." msgstr "Solo se permiten inscripciones de nuevos miembros con un código de invitación. Además, deben aceptarse los términos del registro marcando \"Sí\"." -#: ../../Zotlabs/Module/Admin/Site.php:298 +#: ../../Zotlabs/Module/Admin/Site.php:302 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:299 +#: ../../Zotlabs/Module/Admin/Site.php:303 msgid "Register text" msgstr "Texto del registro" -#: ../../Zotlabs/Module/Admin/Site.php:299 +#: ../../Zotlabs/Module/Admin/Site.php:303 msgid "Will be displayed prominently on the registration page." msgstr "Se mostrará de forma destacada en la página de registro." -#: ../../Zotlabs/Module/Admin/Site.php:300 +#: ../../Zotlabs/Module/Admin/Site.php:304 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:300 +#: ../../Zotlabs/Module/Admin/Site.php:304 msgid "" "example: 'public' to show public stream, 'page/sys/home' to show a system " "webpage called 'home' or 'include:home.html' to include a file." msgstr "ejemplo: 'public' para mostrar contenido público, 'page/sys/home' para mostrar la página web definida como \"home\" o 'include:home.html' para mostrar el contenido de un fichero." -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:305 msgid "Preserve site homepage URL" msgstr "Preservar la dirección de la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:305 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:302 +#: ../../Zotlabs/Module/Admin/Site.php:306 msgid "Accounts abandoned after x days" msgstr "Cuentas abandonadas después de x días" -#: ../../Zotlabs/Module/Admin/Site.php:302 +#: ../../Zotlabs/Module/Admin/Site.php:306 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:303 +#: ../../Zotlabs/Module/Admin/Site.php:307 msgid "Allowed friend domains" msgstr "Dominios amigos permitidos" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:307 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:304 +#: ../../Zotlabs/Module/Admin/Site.php:308 msgid "Verify Email Addresses" msgstr "Verificar las direcciones de correo electrónico" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:308 msgid "" "Check to verify email addresses used in account registration (recommended)." msgstr "Activar para la verificación de la dirección de correo electrónico en el registro de una cuenta (recomendado)." -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:309 msgid "Force publish" msgstr "Forzar la publicación" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:309 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:306 +#: ../../Zotlabs/Module/Admin/Site.php:310 msgid "Import Public Streams" msgstr "Importar contenido público" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:310 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "Importar y permitir acceso al contenido público sacado de otros sitios. Advertencia: este contenido no está moderado, por lo que podría encontrar cosas inapropiadas u ofensivas." -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:311 msgid "Login on Homepage" msgstr "Iniciar sesión en la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:311 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:308 +#: ../../Zotlabs/Module/Admin/Site.php:312 msgid "Enable context help" msgstr "Habilitar la ayuda contextual" -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:312 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:310 +#: ../../Zotlabs/Module/Admin/Site.php:314 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:311 +#: ../../Zotlabs/Module/Admin/Site.php:315 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:312 +#: ../../Zotlabs/Module/Admin/Site.php:316 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:314 +#: ../../Zotlabs/Module/Admin/Site.php:318 msgid "Directory Server URL" msgstr "URL del servidor de directorio" -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:318 msgid "Default directory server" msgstr "Servidor de directorio predeterminado" -#: ../../Zotlabs/Module/Admin/Site.php:316 +#: ../../Zotlabs/Module/Admin/Site.php:320 msgid "Proxy user" msgstr "Usuario del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:317 +#: ../../Zotlabs/Module/Admin/Site.php:321 msgid "Proxy URL" msgstr "Dirección del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:322 msgid "Network timeout" msgstr "Tiempo de espera de la red" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:322 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:319 +#: ../../Zotlabs/Module/Admin/Site.php:323 msgid "Delivery interval" msgstr "Intervalo de entrega" -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:323 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:320 +#: ../../Zotlabs/Module/Admin/Site.php:324 msgid "Deliveries per process" msgstr "Intentos de envío por proceso" -#: ../../Zotlabs/Module/Admin/Site.php:320 +#: ../../Zotlabs/Module/Admin/Site.php:324 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:321 +#: ../../Zotlabs/Module/Admin/Site.php:325 +msgid "Queue Threshold" +msgstr "Umbral de la cola de espera" + +#: ../../Zotlabs/Module/Admin/Site.php:325 +msgid "" +"Always defer immediate delivery if queue contains more than this number of " +"entries." +msgstr "Aplazar siempre la entrega inmediata si la cola contiene más de este número de entradas." + +#: ../../Zotlabs/Module/Admin/Site.php:326 msgid "Poll interval" msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos" -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:326 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:322 +#: ../../Zotlabs/Module/Admin/Site.php:327 msgid "Path to ImageMagick convert program" msgstr "Ruta al programa de conversión de ImageMagick" -#: ../../Zotlabs/Module/Admin/Site.php:322 +#: ../../Zotlabs/Module/Admin/Site.php:327 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:323 +#: ../../Zotlabs/Module/Admin/Site.php:328 +msgid "Allow SVG thumbnails in file browser" +msgstr "Permitir miniaturas SVG en el navegador de archivos" + +#: ../../Zotlabs/Module/Admin/Site.php:328 +msgid "WARNING: SVG images may contain malicious code." +msgstr "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso." + +#: ../../Zotlabs/Module/Admin/Site.php:329 msgid "Maximum Load Average" msgstr "Carga media máxima" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:329 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:324 +#: ../../Zotlabs/Module/Admin/Site.php:330 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:324 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "0 for no expiration of imported content" msgstr "0 para que no caduque el contenido importado" @@ -3249,19 +3328,19 @@ msgstr "Nombre de la autorización" #: ../../Zotlabs/Module/Settings/Permcats.php:103 #: ../../Zotlabs/Module/Settings/Tokens.php:161 -#: ../../Zotlabs/Module/Connedit.php:908 +#: ../../Zotlabs/Module/Connedit.php:908 ../../Zotlabs/Module/Defperms.php:250 msgid "My Settings" msgstr "Mis ajustes" #: ../../Zotlabs/Module/Settings/Permcats.php:105 #: ../../Zotlabs/Module/Settings/Tokens.php:163 -#: ../../Zotlabs/Module/Connedit.php:903 +#: ../../Zotlabs/Module/Connedit.php:903 ../../Zotlabs/Module/Defperms.php:248 msgid "inherited" msgstr "heredado" #: ../../Zotlabs/Module/Settings/Permcats.php:108 #: ../../Zotlabs/Module/Settings/Tokens.php:166 -#: ../../Zotlabs/Module/Connedit.php:910 +#: ../../Zotlabs/Module/Connedit.php:910 ../../Zotlabs/Module/Defperms.php:253 msgid "Individual Permissions" msgstr "Permisos individuales" @@ -3275,18 +3354,19 @@ msgid "" " settings here." msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. <strong>No</strong> puede cambiar estos ajustes aquí." -#: ../../Zotlabs/Module/Settings/Channel.php:62 -#: ../../Zotlabs/Module/Settings/Channel.php:66 -#: ../../Zotlabs/Module/Settings/Channel.php:67 -#: ../../Zotlabs/Module/Settings/Channel.php:70 -#: ../../Zotlabs/Module/Settings/Channel.php:81 +#: ../../Zotlabs/Module/Settings/Channel.php:64 +#: ../../Zotlabs/Module/Settings/Channel.php:68 +#: ../../Zotlabs/Module/Settings/Channel.php:69 +#: ../../Zotlabs/Module/Settings/Channel.php:72 +#: ../../Zotlabs/Module/Settings/Channel.php:83 #: ../../Zotlabs/Module/Connedit.php:711 ../../Zotlabs/Widget/Affinity.php:28 -#: ../../include/selectors.php:123 ../../include/channel.php:423 -#: ../../include/channel.php:424 ../../include/channel.php:431 +#: ../../include/selectors.php:123 ../../include/channel.php:437 +#: ../../include/channel.php:438 ../../include/channel.php:445 msgid "Friends" msgstr "Amigos/as" -#: ../../Zotlabs/Module/Settings/Channel.php:255 +#: ../../Zotlabs/Module/Settings/Channel.php:262 +#: ../../Zotlabs/Module/Defperms.php:103 #: ../../addon/rendezvous/rendezvous.php:82 #: ../../addon/openstreetmap/openstreetmap.php:184 #: ../../addon/msgfooter/msgfooter.php:54 ../../addon/logrot/logrot.php:54 @@ -3295,388 +3375,403 @@ msgstr "Amigos/as" msgid "Settings updated." msgstr "Ajustes actualizados." -#: ../../Zotlabs/Module/Settings/Channel.php:316 +#: ../../Zotlabs/Module/Settings/Channel.php:323 msgid "Nobody except yourself" msgstr "Nadie excepto usted" -#: ../../Zotlabs/Module/Settings/Channel.php:317 +#: ../../Zotlabs/Module/Settings/Channel.php:324 msgid "Only those you specifically allow" msgstr "Solo aquellos a los que usted permita explícitamente" -#: ../../Zotlabs/Module/Settings/Channel.php:318 +#: ../../Zotlabs/Module/Settings/Channel.php:325 msgid "Approved connections" msgstr "Conexiones aprobadas" -#: ../../Zotlabs/Module/Settings/Channel.php:319 +#: ../../Zotlabs/Module/Settings/Channel.php:326 msgid "Any connections" msgstr "Cualquier conexión" -#: ../../Zotlabs/Module/Settings/Channel.php:320 +#: ../../Zotlabs/Module/Settings/Channel.php:327 msgid "Anybody on this website" msgstr "Cualquiera en este sitio web" -#: ../../Zotlabs/Module/Settings/Channel.php:321 +#: ../../Zotlabs/Module/Settings/Channel.php:328 msgid "Anybody in this network" msgstr "Cualquiera en esta red" -#: ../../Zotlabs/Module/Settings/Channel.php:322 +#: ../../Zotlabs/Module/Settings/Channel.php:329 msgid "Anybody authenticated" msgstr "Cualquiera que esté autenticado" -#: ../../Zotlabs/Module/Settings/Channel.php:323 +#: ../../Zotlabs/Module/Settings/Channel.php:330 msgid "Anybody on the internet" msgstr "Cualquiera en internet" -#: ../../Zotlabs/Module/Settings/Channel.php:399 +#: ../../Zotlabs/Module/Settings/Channel.php:406 msgid "Publish your default profile in the network directory" msgstr "Publicar su perfil principal en el directorio de la red" -#: ../../Zotlabs/Module/Settings/Channel.php:404 +#: ../../Zotlabs/Module/Settings/Channel.php:411 msgid "Allow us to suggest you as a potential friend to new members?" msgstr "¿Nos permite sugerirle como amigo potencial a los nuevos miembros?" -#: ../../Zotlabs/Module/Settings/Channel.php:408 -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Settings/Channel.php:415 +#: ../../Zotlabs/Module/Profile_photo.php:443 #: ../../Zotlabs/Module/Cover_photo.php:365 msgid "or" msgstr "o" -#: ../../Zotlabs/Module/Settings/Channel.php:413 +#: ../../Zotlabs/Module/Settings/Channel.php:420 msgid "Your channel address is" msgstr "Su dirección de canal es" -#: ../../Zotlabs/Module/Settings/Channel.php:416 +#: ../../Zotlabs/Module/Settings/Channel.php:423 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:478 +#: ../../Zotlabs/Module/Settings/Channel.php:487 msgid "Channel Settings" msgstr "Ajustes del canal" -#: ../../Zotlabs/Module/Settings/Channel.php:485 +#: ../../Zotlabs/Module/Settings/Channel.php:494 msgid "Basic Settings" msgstr "Configuración básica" -#: ../../Zotlabs/Module/Settings/Channel.php:486 -#: ../../include/channel.php:1473 +#: ../../Zotlabs/Module/Settings/Channel.php:495 +#: ../../include/channel.php:1521 msgid "Full Name:" msgstr "Nombre completo:" -#: ../../Zotlabs/Module/Settings/Channel.php:487 +#: ../../Zotlabs/Module/Settings/Channel.php:496 #: ../../Zotlabs/Module/Settings/Account.php:119 msgid "Email Address:" msgstr "Dirección de correo electrónico:" -#: ../../Zotlabs/Module/Settings/Channel.php:488 +#: ../../Zotlabs/Module/Settings/Channel.php:497 msgid "Your Timezone:" msgstr "Su huso horario:" -#: ../../Zotlabs/Module/Settings/Channel.php:489 +#: ../../Zotlabs/Module/Settings/Channel.php:498 msgid "Default Post Location:" msgstr "Localización geográfica predeterminada para sus publicaciones:" -#: ../../Zotlabs/Module/Settings/Channel.php:489 +#: ../../Zotlabs/Module/Settings/Channel.php:498 msgid "Geographical location to display on your posts" msgstr "Localización geográfica que debe mostrarse en sus publicaciones" -#: ../../Zotlabs/Module/Settings/Channel.php:490 +#: ../../Zotlabs/Module/Settings/Channel.php:499 msgid "Use Browser Location:" msgstr "Usar la localización geográfica del navegador:" -#: ../../Zotlabs/Module/Settings/Channel.php:492 +#: ../../Zotlabs/Module/Settings/Channel.php:501 msgid "Adult Content" msgstr "Contenido solo para adultos" -#: ../../Zotlabs/Module/Settings/Channel.php:492 +#: ../../Zotlabs/Module/Settings/Channel.php:501 msgid "" "This channel frequently or regularly publishes adult content. (Please tag " "any adult material and/or nudity with #NSFW)" msgstr "Este canal publica contenido solo para adultos con frecuencia o regularmente. (Por favor etiquete cualquier material para adultos con la etiqueta #NSFW)" -#: ../../Zotlabs/Module/Settings/Channel.php:494 +#: ../../Zotlabs/Module/Settings/Channel.php:503 msgid "Security and Privacy Settings" msgstr "Configuración de seguridad y privacidad" -#: ../../Zotlabs/Module/Settings/Channel.php:496 +#: ../../Zotlabs/Module/Settings/Channel.php:505 msgid "Your permissions are already configured. Click to view/adjust" msgstr "Sus permisos ya están configurados. Pulse para ver/ajustar" -#: ../../Zotlabs/Module/Settings/Channel.php:498 +#: ../../Zotlabs/Module/Settings/Channel.php:507 msgid "Hide my online presence" msgstr "Ocultar mi presencia en línea" -#: ../../Zotlabs/Module/Settings/Channel.php:498 +#: ../../Zotlabs/Module/Settings/Channel.php:507 msgid "Prevents displaying in your profile that you are online" msgstr "Evitar mostrar en su perfil que está en línea" -#: ../../Zotlabs/Module/Settings/Channel.php:500 +#: ../../Zotlabs/Module/Settings/Channel.php:509 msgid "Simple Privacy Settings:" msgstr "Configuración de privacidad sencilla:" -#: ../../Zotlabs/Module/Settings/Channel.php:501 +#: ../../Zotlabs/Module/Settings/Channel.php:510 msgid "" "Very Public - <em>extremely permissive (should be used with caution)</em>" msgstr "Muy Público - <em>extremadamente permisivo (debería ser usado con precaución)</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:502 +#: ../../Zotlabs/Module/Settings/Channel.php:511 msgid "" "Typical - <em>default public, privacy when desired (similar to social " "network permissions but with improved privacy)</em>" msgstr "Típico - <em>por defecto público, privado cuando se desee (similar a los permisos de una red social pero con privacidad mejorada)</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:503 +#: ../../Zotlabs/Module/Settings/Channel.php:512 msgid "Private - <em>default private, never open or public</em>" msgstr "Privado - <em>por defecto, privado, nunca abierto o público</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:504 +#: ../../Zotlabs/Module/Settings/Channel.php:513 msgid "Blocked - <em>default blocked to/from everybody</em>" msgstr "Bloqueado - <em>por defecto, bloqueado/a para cualquiera</em>" -#: ../../Zotlabs/Module/Settings/Channel.php:506 +#: ../../Zotlabs/Module/Settings/Channel.php:515 msgid "Allow others to tag your posts" msgstr "Permitir a otros etiquetar sus publicaciones" -#: ../../Zotlabs/Module/Settings/Channel.php:506 +#: ../../Zotlabs/Module/Settings/Channel.php:515 msgid "" "Often used by the community to retro-actively flag inappropriate content" msgstr "A menudo usado por la comunidad para marcar contenido inapropiado de forma retroactiva." -#: ../../Zotlabs/Module/Settings/Channel.php:508 +#: ../../Zotlabs/Module/Settings/Channel.php:517 msgid "Channel Permission Limits" msgstr "Límites de los permisos del canal" -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 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:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 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:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 #, 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:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 msgid "This website does not expire imported content." msgstr "Este sitio web no caduca el contenido importado." -#: ../../Zotlabs/Module/Settings/Channel.php:510 +#: ../../Zotlabs/Module/Settings/Channel.php:519 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:511 +#: ../../Zotlabs/Module/Settings/Channel.php:520 msgid "Maximum Friend Requests/Day:" msgstr "Máximo de solicitudes de amistad por día:" -#: ../../Zotlabs/Module/Settings/Channel.php:511 +#: ../../Zotlabs/Module/Settings/Channel.php:520 msgid "May reduce spam activity" msgstr "Podría reducir la actividad de spam" -#: ../../Zotlabs/Module/Settings/Channel.php:512 +#: ../../Zotlabs/Module/Settings/Channel.php:521 msgid "Default Privacy Group" msgstr "Grupo de canales predeterminado" -#: ../../Zotlabs/Module/Settings/Channel.php:514 +#: ../../Zotlabs/Module/Settings/Channel.php:523 msgid "Use my default audience setting for the type of object published" msgstr "Usar los ajustes de mi audiencia predeterminada para el tipo de publicación" -#: ../../Zotlabs/Module/Settings/Channel.php:521 +#: ../../Zotlabs/Module/Settings/Channel.php:524 +msgid "Profile to assign new connections" +msgstr "Perfil para asignar a las nuevas conexiones" + +#: ../../Zotlabs/Module/Settings/Channel.php:533 msgid "Channel permissions category:" msgstr "Categoría de los permisos del canal:" -#: ../../Zotlabs/Module/Settings/Channel.php:522 +#: ../../Zotlabs/Module/Settings/Channel.php:534 msgid "Default Permissions Group" msgstr "Grupo de permisos predeterminados" -#: ../../Zotlabs/Module/Settings/Channel.php:528 +#: ../../Zotlabs/Module/Settings/Channel.php:540 msgid "Maximum private messages per day from unknown people:" msgstr "Máximo de mensajes privados por día de gente desconocida:" -#: ../../Zotlabs/Module/Settings/Channel.php:528 +#: ../../Zotlabs/Module/Settings/Channel.php:540 msgid "Useful to reduce spamming" msgstr "Útil para reducir el envío de correo no deseado" -#: ../../Zotlabs/Module/Settings/Channel.php:531 +#: ../../Zotlabs/Module/Settings/Channel.php:543 msgid "Notification Settings" msgstr "Configuración de las notificaciones" -#: ../../Zotlabs/Module/Settings/Channel.php:532 +#: ../../Zotlabs/Module/Settings/Channel.php:544 msgid "By default post a status message when:" msgstr "Por defecto, enviar un mensaje de estado cuando:" -#: ../../Zotlabs/Module/Settings/Channel.php:533 +#: ../../Zotlabs/Module/Settings/Channel.php:545 msgid "accepting a friend request" msgstr "Acepte una solicitud de amistad" -#: ../../Zotlabs/Module/Settings/Channel.php:534 +#: ../../Zotlabs/Module/Settings/Channel.php:546 msgid "joining a forum/community" msgstr "al unirse a un foro o comunidad" -#: ../../Zotlabs/Module/Settings/Channel.php:535 +#: ../../Zotlabs/Module/Settings/Channel.php:547 msgid "making an <em>interesting</em> profile change" msgstr "Realice un cambio <em>interesante</em> en su perfil" -#: ../../Zotlabs/Module/Settings/Channel.php:536 +#: ../../Zotlabs/Module/Settings/Channel.php:548 msgid "Send a notification email when:" msgstr "Enviar una notificación por correo electrónico cuando:" -#: ../../Zotlabs/Module/Settings/Channel.php:537 +#: ../../Zotlabs/Module/Settings/Channel.php:549 msgid "You receive a connection request" msgstr "Reciba una solicitud de conexión" -#: ../../Zotlabs/Module/Settings/Channel.php:538 +#: ../../Zotlabs/Module/Settings/Channel.php:550 msgid "Your connections are confirmed" msgstr "Sus conexiones hayan sido confirmadas" -#: ../../Zotlabs/Module/Settings/Channel.php:539 +#: ../../Zotlabs/Module/Settings/Channel.php:551 msgid "Someone writes on your profile wall" msgstr "Alguien escriba en la página de su perfil (\"muro\")" -#: ../../Zotlabs/Module/Settings/Channel.php:540 +#: ../../Zotlabs/Module/Settings/Channel.php:552 msgid "Someone writes a followup comment" msgstr "Alguien escriba un comentario sobre sus publicaciones" -#: ../../Zotlabs/Module/Settings/Channel.php:541 +#: ../../Zotlabs/Module/Settings/Channel.php:553 msgid "You receive a private message" msgstr "Reciba un mensaje privado" -#: ../../Zotlabs/Module/Settings/Channel.php:542 +#: ../../Zotlabs/Module/Settings/Channel.php:554 msgid "You receive a friend suggestion" msgstr "Reciba una sugerencia de amistad" -#: ../../Zotlabs/Module/Settings/Channel.php:543 +#: ../../Zotlabs/Module/Settings/Channel.php:555 msgid "You are tagged in a post" msgstr "Usted sea etiquetado en una publicación" -#: ../../Zotlabs/Module/Settings/Channel.php:544 +#: ../../Zotlabs/Module/Settings/Channel.php:556 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:546 +#: ../../Zotlabs/Module/Settings/Channel.php:558 msgid "Someone likes your post/comment" msgstr "Alguien muestre agrado por su entrada o comentario" -#: ../../Zotlabs/Module/Settings/Channel.php:549 +#: ../../Zotlabs/Module/Settings/Channel.php:561 msgid "Show visual notifications including:" msgstr "Mostrar notificaciones visuales que incluyan:" -#: ../../Zotlabs/Module/Settings/Channel.php:551 +#: ../../Zotlabs/Module/Settings/Channel.php:563 msgid "Unseen grid activity" msgstr "Nueva actividad en la red" -#: ../../Zotlabs/Module/Settings/Channel.php:552 +#: ../../Zotlabs/Module/Settings/Channel.php:564 msgid "Unseen channel activity" msgstr "Actividad no vista en el canal" -#: ../../Zotlabs/Module/Settings/Channel.php:553 +#: ../../Zotlabs/Module/Settings/Channel.php:565 msgid "Unseen private messages" msgstr "Mensajes privados no leídos" -#: ../../Zotlabs/Module/Settings/Channel.php:553 -#: ../../Zotlabs/Module/Settings/Channel.php:558 -#: ../../Zotlabs/Module/Settings/Channel.php:559 -#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/Settings/Channel.php:565 +#: ../../Zotlabs/Module/Settings/Channel.php:570 +#: ../../Zotlabs/Module/Settings/Channel.php:571 +#: ../../Zotlabs/Module/Settings/Channel.php:572 #: ../../addon/jappixmini/jappixmini.php:343 msgid "Recommended" msgstr "Recomendado" -#: ../../Zotlabs/Module/Settings/Channel.php:554 +#: ../../Zotlabs/Module/Settings/Channel.php:566 msgid "Upcoming events" msgstr "Próximos eventos" -#: ../../Zotlabs/Module/Settings/Channel.php:555 +#: ../../Zotlabs/Module/Settings/Channel.php:567 msgid "Events today" msgstr "Eventos de hoy" -#: ../../Zotlabs/Module/Settings/Channel.php:556 +#: ../../Zotlabs/Module/Settings/Channel.php:568 msgid "Upcoming birthdays" msgstr "Próximos cumpleaños" -#: ../../Zotlabs/Module/Settings/Channel.php:556 +#: ../../Zotlabs/Module/Settings/Channel.php:568 msgid "Not available in all themes" msgstr "No disponible en todos los temas" -#: ../../Zotlabs/Module/Settings/Channel.php:557 +#: ../../Zotlabs/Module/Settings/Channel.php:569 msgid "System (personal) notifications" msgstr "Notificaciones del sistema (personales)" -#: ../../Zotlabs/Module/Settings/Channel.php:558 +#: ../../Zotlabs/Module/Settings/Channel.php:570 msgid "System info messages" msgstr "Mensajes de información del sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:559 +#: ../../Zotlabs/Module/Settings/Channel.php:571 msgid "System critical alerts" msgstr "Alertas críticas del sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/Settings/Channel.php:572 msgid "New connections" msgstr "Nuevas conexiones" -#: ../../Zotlabs/Module/Settings/Channel.php:561 +#: ../../Zotlabs/Module/Settings/Channel.php:573 msgid "System Registrations" msgstr "Registros del sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:562 +#: ../../Zotlabs/Module/Settings/Channel.php:574 msgid "Unseen shared files" msgstr "Ficheros compartidos no vistos" -#: ../../Zotlabs/Module/Settings/Channel.php:563 +#: ../../Zotlabs/Module/Settings/Channel.php:575 msgid "Unseen public activity" msgstr "Actividad pública no vista" -#: ../../Zotlabs/Module/Settings/Channel.php:564 +#: ../../Zotlabs/Module/Settings/Channel.php:576 +msgid "Email notification hub (hostname)" +msgstr "Email de notificación del hub (nombre del host)" + +#: ../../Zotlabs/Module/Settings/Channel.php:576 +#, 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:577 msgid "" "Also show new wall posts, private messages and connections under Notices" msgstr "Mostrar también en Avisos las nuevas publicaciones, los mensajes privados y las conexiones" -#: ../../Zotlabs/Module/Settings/Channel.php:566 +#: ../../Zotlabs/Module/Settings/Channel.php:579 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:566 +#: ../../Zotlabs/Module/Settings/Channel.php:579 msgid "Must be greater than 0" msgstr "Debe ser mayor que 0" -#: ../../Zotlabs/Module/Settings/Channel.php:572 +#: ../../Zotlabs/Module/Settings/Channel.php:585 msgid "Advanced Account/Page Type Settings" msgstr "Ajustes avanzados de la cuenta y de los tipos de página" -#: ../../Zotlabs/Module/Settings/Channel.php:573 +#: ../../Zotlabs/Module/Settings/Channel.php:586 msgid "Change the behaviour of this account for special situations" msgstr "Cambiar el comportamiento de esta cuenta en situaciones especiales" -#: ../../Zotlabs/Module/Settings/Channel.php:575 +#: ../../Zotlabs/Module/Settings/Channel.php:588 msgid "Miscellaneous Settings" msgstr "Ajustes diversos" -#: ../../Zotlabs/Module/Settings/Channel.php:576 +#: ../../Zotlabs/Module/Settings/Channel.php:589 msgid "Default photo upload folder" msgstr "Carpeta por defecto de las fotos subidas" -#: ../../Zotlabs/Module/Settings/Channel.php:576 -#: ../../Zotlabs/Module/Settings/Channel.php:577 +#: ../../Zotlabs/Module/Settings/Channel.php:589 +#: ../../Zotlabs/Module/Settings/Channel.php:590 msgid "%Y - current year, %m - current month" msgstr "%Y - año en curso, %m - mes actual" -#: ../../Zotlabs/Module/Settings/Channel.php:577 +#: ../../Zotlabs/Module/Settings/Channel.php:590 msgid "Default file upload folder" msgstr "Carpeta por defecto de los ficheros subidos" -#: ../../Zotlabs/Module/Settings/Channel.php:579 +#: ../../Zotlabs/Module/Settings/Channel.php:592 msgid "Personal menu to display in your channel pages" msgstr "Menú personal que debe mostrarse en las páginas de su canal" -#: ../../Zotlabs/Module/Settings/Channel.php:581 +#: ../../Zotlabs/Module/Settings/Channel.php:594 msgid "Remove this channel." msgstr "Eliminar este canal." -#: ../../Zotlabs/Module/Settings/Channel.php:582 +#: ../../Zotlabs/Module/Settings/Channel.php:595 msgid "Firefox Share $Projectname provider" msgstr "Servicio de compartición de Firefox: proveedor $Projectname" -#: ../../Zotlabs/Module/Settings/Channel.php:583 +#: ../../Zotlabs/Module/Settings/Channel.php:596 msgid "Start calendar week on Monday" msgstr "Comenzar el calendario semanal por el lunes" @@ -3830,116 +3925,124 @@ msgstr "Ajustes del controlador de afinidad" msgid "Feature/Addon Settings" msgstr "Ajustes de los complementos" -#: ../../Zotlabs/Module/Settings/Display.php:145 +#: ../../Zotlabs/Module/Settings/Display.php:147 msgid "No special theme for mobile devices" msgstr "Sin tema especial para dispositivos móviles" -#: ../../Zotlabs/Module/Settings/Display.php:148 +#: ../../Zotlabs/Module/Settings/Display.php:150 #, php-format msgid "%s - (Experimental)" msgstr "%s - (Experimental)" -#: ../../Zotlabs/Module/Settings/Display.php:202 +#: ../../Zotlabs/Module/Settings/Display.php:204 msgid "Display Settings" msgstr "Ajustes de visualización" -#: ../../Zotlabs/Module/Settings/Display.php:203 +#: ../../Zotlabs/Module/Settings/Display.php:205 msgid "Theme Settings" msgstr "Ajustes del tema" -#: ../../Zotlabs/Module/Settings/Display.php:204 +#: ../../Zotlabs/Module/Settings/Display.php:206 msgid "Custom Theme Settings" msgstr "Ajustes personalizados del tema" -#: ../../Zotlabs/Module/Settings/Display.php:205 +#: ../../Zotlabs/Module/Settings/Display.php:207 msgid "Content Settings" msgstr "Ajustes del contenido" -#: ../../Zotlabs/Module/Settings/Display.php:211 +#: ../../Zotlabs/Module/Settings/Display.php:213 msgid "Display Theme:" msgstr "Tema gráfico del perfil:" -#: ../../Zotlabs/Module/Settings/Display.php:212 +#: ../../Zotlabs/Module/Settings/Display.php:214 msgid "Select scheme" msgstr "Elegir un esquema" -#: ../../Zotlabs/Module/Settings/Display.php:214 +#: ../../Zotlabs/Module/Settings/Display.php:216 msgid "Mobile Theme:" msgstr "Tema para el móvil:" -#: ../../Zotlabs/Module/Settings/Display.php:215 +#: ../../Zotlabs/Module/Settings/Display.php:217 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:215 +#: ../../Zotlabs/Module/Settings/Display.php:217 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:216 +#: ../../Zotlabs/Module/Settings/Display.php:218 msgid "Enable user zoom on mobile devices" msgstr "Habilitar zoom de usuario en dispositivos móviles" -#: ../../Zotlabs/Module/Settings/Display.php:217 +#: ../../Zotlabs/Module/Settings/Display.php:219 msgid "Update browser every xx seconds" msgstr "Actualizar navegador cada xx segundos" -#: ../../Zotlabs/Module/Settings/Display.php:217 +#: ../../Zotlabs/Module/Settings/Display.php:219 msgid "Minimum of 10 seconds, no maximum" msgstr "Mínimo de 10 segundos, sin máximo" -#: ../../Zotlabs/Module/Settings/Display.php:218 +#: ../../Zotlabs/Module/Settings/Display.php:220 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:218 +#: ../../Zotlabs/Module/Settings/Display.php:220 msgid "Maximum of 100 items" msgstr "Máximo de 100 elementos" -#: ../../Zotlabs/Module/Settings/Display.php:219 +#: ../../Zotlabs/Module/Settings/Display.php:221 msgid "Show emoticons (smilies) as images" msgstr "Mostrar emoticonos (smilies) como imágenes" -#: ../../Zotlabs/Module/Settings/Display.php:220 +#: ../../Zotlabs/Module/Settings/Display.php:222 +msgid "Provide channel menu in navigation bar" +msgstr "Proporcionar un menú de canales en la barra de navegación" + +#: ../../Zotlabs/Module/Settings/Display.php:222 +msgid "Default: channel menu located in app menu" +msgstr "Predeterminado: menú de canales ubicado en el menú de aplicaciones" + +#: ../../Zotlabs/Module/Settings/Display.php:223 msgid "Manual conversation updates" msgstr "Actualizaciones manuales de la conversación" -#: ../../Zotlabs/Module/Settings/Display.php:220 +#: ../../Zotlabs/Module/Settings/Display.php:223 msgid "Default is on, turning this off may increase screen jumping" msgstr "El valor predeterminado está activado, al desactivarlo puede aumentar el salto de pantalla" -#: ../../Zotlabs/Module/Settings/Display.php:221 +#: ../../Zotlabs/Module/Settings/Display.php:224 msgid "Link post titles to source" msgstr "Enlazar título de la publicación a la fuente original" -#: ../../Zotlabs/Module/Settings/Display.php:222 +#: ../../Zotlabs/Module/Settings/Display.php:225 msgid "System Page Layout Editor - (advanced)" msgstr "Editor de plantilla de página del sistema - (avanzado)" -#: ../../Zotlabs/Module/Settings/Display.php:225 +#: ../../Zotlabs/Module/Settings/Display.php:228 msgid "Use blog/list mode on channel page" msgstr "Usar modo blog/lista en la página de inicio del canal" -#: ../../Zotlabs/Module/Settings/Display.php:225 -#: ../../Zotlabs/Module/Settings/Display.php:226 +#: ../../Zotlabs/Module/Settings/Display.php:228 +#: ../../Zotlabs/Module/Settings/Display.php:229 msgid "(comments displayed separately)" msgstr "(comentarios mostrados de forma separada)" -#: ../../Zotlabs/Module/Settings/Display.php:226 +#: ../../Zotlabs/Module/Settings/Display.php:229 msgid "Use blog/list mode on grid page" msgstr "Mostrar mi red en modo blog" -#: ../../Zotlabs/Module/Settings/Display.php:227 +#: ../../Zotlabs/Module/Settings/Display.php:230 msgid "Channel page max height of content (in pixels)" msgstr "Altura máxima del contenido de la página del canal (en píxeles)" -#: ../../Zotlabs/Module/Settings/Display.php:227 -#: ../../Zotlabs/Module/Settings/Display.php:228 +#: ../../Zotlabs/Module/Settings/Display.php:230 +#: ../../Zotlabs/Module/Settings/Display.php:231 msgid "click to expand content exceeding this height" msgstr "Pulsar para expandir el contenido que exceda de esta altura" -#: ../../Zotlabs/Module/Settings/Display.php:228 +#: ../../Zotlabs/Module/Settings/Display.php:231 msgid "Grid page max height of content (in pixels)" msgstr "Altura máxima del contenido de mi red (en píxeles)" @@ -3963,7 +4066,7 @@ msgstr "Nombre de la aplicación" #: ../../Zotlabs/Module/Settings/Oauth.php:90 #: ../../Zotlabs/Module/Settings/Oauth.php:116 -#: ../../addon/statusnet/statusnet.php:893 ../../addon/twitter/twitter.php:775 +#: ../../addon/statusnet/statusnet.php:894 ../../addon/twitter/twitter.php:775 msgid "Consumer Key" msgstr "Consumer Key" @@ -3974,7 +4077,7 @@ msgstr "Generado automáticamente - si lo desea, cámbielo. Longitud máxima: 2 #: ../../Zotlabs/Module/Settings/Oauth.php:91 #: ../../Zotlabs/Module/Settings/Oauth.php:117 -#: ../../addon/statusnet/statusnet.php:892 ../../addon/twitter/twitter.php:776 +#: ../../addon/statusnet/statusnet.php:893 ../../addon/twitter/twitter.php:776 msgid "Consumer Secret" msgstr "Consumer Secret" @@ -4020,24 +4123,25 @@ msgid "Remove authorization" msgstr "Eliminar autorización" #: ../../Zotlabs/Module/Embedphotos.php:140 -#: ../../Zotlabs/Module/Photos.php:758 ../../Zotlabs/Module/Photos.php:1297 -#: ../../Zotlabs/Widget/Portfolio.php:78 ../../Zotlabs/Widget/Album.php:78 +#: ../../Zotlabs/Module/Photos.php:811 ../../Zotlabs/Module/Photos.php:1350 +#: ../../Zotlabs/Widget/Portfolio.php:87 ../../Zotlabs/Widget/Album.php:78 msgid "View Photo" msgstr "Ver foto" #: ../../Zotlabs/Module/Embedphotos.php:156 -#: ../../Zotlabs/Module/Photos.php:789 ../../Zotlabs/Widget/Portfolio.php:97 +#: ../../Zotlabs/Module/Photos.php:842 ../../Zotlabs/Widget/Portfolio.php:108 #: ../../Zotlabs/Widget/Album.php:95 msgid "Edit Album" msgstr "Editar álbum" #: ../../Zotlabs/Module/Embedphotos.php:158 -#: ../../Zotlabs/Module/Photos.php:791 ../../Zotlabs/Module/Photos.php:1328 -#: ../../Zotlabs/Module/Profile_photo.php:431 +#: ../../Zotlabs/Module/Photos.php:712 ../../Zotlabs/Module/Photos.php:844 +#: ../../Zotlabs/Module/Photos.php:1381 +#: ../../Zotlabs/Module/Profile_photo.php:437 #: ../../Zotlabs/Module/Cover_photo.php:361 -#: ../../Zotlabs/Storage/Browser.php:230 ../../Zotlabs/Storage/Browser.php:337 -#: ../../Zotlabs/Widget/Cdav.php:132 ../../Zotlabs/Widget/Cdav.php:168 -#: ../../Zotlabs/Widget/Portfolio.php:99 ../../Zotlabs/Widget/Album.php:97 +#: ../../Zotlabs/Storage/Browser.php:274 ../../Zotlabs/Storage/Browser.php:381 +#: ../../Zotlabs/Widget/Cdav.php:133 ../../Zotlabs/Widget/Cdav.php:169 +#: ../../Zotlabs/Widget/Portfolio.php:110 ../../Zotlabs/Widget/Album.php:97 msgid "Upload" msgstr "Subir" @@ -4099,9 +4203,9 @@ msgid "URL for photo of thing (optional)" msgstr "Dirección para la foto o elemento (opcional)" #: ../../Zotlabs/Module/Thing.php:314 ../../Zotlabs/Module/Thing.php:367 -#: ../../Zotlabs/Module/Photos.php:649 ../../Zotlabs/Module/Photos.php:1018 +#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Photos.php:1071 #: ../../Zotlabs/Module/Connedit.php:676 ../../Zotlabs/Module/Chat.php:235 -#: ../../Zotlabs/Module/Filestorage.php:142 +#: ../../Zotlabs/Module/Filestorage.php:147 #: ../../include/acl_selectors.php:218 msgid "Permissions" msgstr "Permisos" @@ -4111,12 +4215,12 @@ msgid "Add Thing to your Profile" msgstr "Añadir alguna cosa a su perfil" #: ../../Zotlabs/Module/Notify.php:61 -#: ../../Zotlabs/Module/Notifications.php:38 +#: ../../Zotlabs/Module/Notifications.php:57 msgid "No more system notifications." msgstr "No hay más notificaciones del sistema" #: ../../Zotlabs/Module/Notify.php:65 -#: ../../Zotlabs/Module/Notifications.php:42 +#: ../../Zotlabs/Module/Notifications.php:61 msgid "System Notifications" msgstr "Notificaciones del sistema" @@ -4134,7 +4238,7 @@ msgid "No channel. Import failed." msgstr "No hay canal. La importación ha fallado" #: ../../Zotlabs/Module/Import.php:481 -#: ../../addon/diaspora/import_diaspora.php:142 +#: ../../addon/diaspora/import_diaspora.php:139 msgid "Import completed." msgstr "Importación completada." @@ -4199,30 +4303,24 @@ msgstr "Este proceso puede tardar varios minutos en completarse. Por favor enví msgid "Authentication failed." msgstr "Falló la autenticación." -#: ../../Zotlabs/Module/Rmagic.php:75 ../../boot.php:1640 -#: ../../include/channel.php:2204 +#: ../../Zotlabs/Module/Rmagic.php:75 ../../boot.php:1665 +#: ../../include/channel.php:2301 msgid "Remote Authentication" msgstr "Acceso desde su servidor" -#: ../../Zotlabs/Module/Rmagic.php:76 ../../include/channel.php:2205 +#: ../../Zotlabs/Module/Rmagic.php:76 ../../include/channel.php:2302 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)" -#: ../../Zotlabs/Module/Rmagic.php:77 ../../include/channel.php:2206 +#: ../../Zotlabs/Module/Rmagic.php:77 ../../include/channel.php:2303 msgid "Authenticate" msgstr "Acceder" -#: ../../Zotlabs/Module/Cal.php:62 ../../Zotlabs/Module/Chanview.php:96 -#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Wall_upload.php:31 -#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Card_edit.php:44 -msgid "Channel not found." -msgstr "Canal no encontrado." - #: ../../Zotlabs/Module/Cal.php:69 msgid "Permissions denied." msgstr "Permisos denegados." -#: ../../Zotlabs/Module/Cal.php:342 ../../include/text.php:2312 +#: ../../Zotlabs/Module/Cal.php:344 ../../include/text.php:2312 msgid "Import" msgstr "Importar" @@ -4248,18 +4346,6 @@ msgstr "¿Desea autorizar a esta aplicación a acceder a sus publicaciones y con msgid "Item not available." msgstr "Elemento no disponible" -#: ../../Zotlabs/Module/Editblock.php:116 ../../Zotlabs/Module/Chat.php:207 -#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Mail.php:288 -#: ../../Zotlabs/Module/Mail.php:430 ../../Zotlabs/Module/Card_edit.php:101 -#: ../../include/conversation.php:1261 -msgid "Insert web link" -msgstr "Insertar enlace web" - -#: ../../Zotlabs/Module/Editblock.php:129 -#: ../../Zotlabs/Module/Card_edit.php:117 ../../include/conversation.php:1381 -msgid "Title (optional)" -msgstr "Título (opcional)" - #: ../../Zotlabs/Module/Editblock.php:138 msgid "Edit Block" msgstr "Modificar este bloque" @@ -4280,7 +4366,7 @@ msgstr "Gestionar las aplicaciones" msgid "Create new app" msgstr "Crear una nueva aplicación" -#: ../../Zotlabs/Module/Mood.php:67 ../../include/conversation.php:256 +#: ../../Zotlabs/Module/Mood.php:67 ../../include/conversation.php:268 #, php-format msgctxt "mood" msgid "%1$s is %2$s" @@ -4319,7 +4405,8 @@ msgstr "Archivado o inaccesible" #: ../../Zotlabs/Module/Connections.php:74 #: ../../Zotlabs/Module/Connections.php:83 ../../Zotlabs/Module/Menu.php:116 -#: ../../include/conversation.php:1697 +#: ../../Zotlabs/Module/Notifications.php:52 +#: ../../include/conversation.php:1714 msgid "New" msgstr "Nuevas" @@ -4330,7 +4417,7 @@ msgid "All" msgstr "Todos/as" #: ../../Zotlabs/Module/Connections.php:133 -#: ../../Zotlabs/Widget/Notifications.php:80 +#: ../../Zotlabs/Widget/Notifications.php:82 msgid "New Connections" msgstr "Nuevas conexiones" @@ -4421,7 +4508,7 @@ msgid "Recent activity" msgstr "Actividad reciente" #: ../../Zotlabs/Module/Connections.php:309 ../../Zotlabs/Lib/Apps.php:229 -#: ../../include/text.php:959 ../../include/nav.php:107 +#: ../../include/text.php:959 ../../include/nav.php:114 msgid "Connections" msgstr "Conexiones" @@ -4434,8 +4521,8 @@ msgid "Connections search" msgstr "Buscar conexiones" #: ../../Zotlabs/Module/Connections.php:316 -#: ../../Zotlabs/Module/Directory.php:391 -#: ../../Zotlabs/Module/Directory.php:396 ../../include/contact_widgets.php:23 +#: ../../Zotlabs/Module/Directory.php:396 +#: ../../Zotlabs/Module/Directory.php:401 ../../include/contact_widgets.php:23 msgid "Find" msgstr "Encontrar" @@ -4499,238 +4586,238 @@ msgstr "Álbum no encontrado." msgid "Delete Album" msgstr "Borrar álbum" -#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1030 +#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1083 msgid "Delete Photo" msgstr "Borrar foto" -#: ../../Zotlabs/Module/Photos.php:501 +#: ../../Zotlabs/Module/Photos.php:551 msgid "No photos selected" msgstr "No hay fotos seleccionadas" -#: ../../Zotlabs/Module/Photos.php:550 +#: ../../Zotlabs/Module/Photos.php:600 msgid "Access to this item is restricted." msgstr "El acceso a este elemento está restringido." -#: ../../Zotlabs/Module/Photos.php:593 +#: ../../Zotlabs/Module/Photos.php:646 #, php-format msgid "%1$.2f MB of %2$.2f MB photo storage used." msgstr "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado." -#: ../../Zotlabs/Module/Photos.php:596 +#: ../../Zotlabs/Module/Photos.php:649 #, php-format msgid "%1$.2f MB photo storage used." msgstr "%1$.2f MB de almacenamiento de fotos utilizado." -#: ../../Zotlabs/Module/Photos.php:638 +#: ../../Zotlabs/Module/Photos.php:691 msgid "Upload Photos" msgstr "Subir fotos" -#: ../../Zotlabs/Module/Photos.php:642 +#: ../../Zotlabs/Module/Photos.php:695 msgid "Enter an album name" msgstr "Introducir un nombre de álbum" -#: ../../Zotlabs/Module/Photos.php:643 +#: ../../Zotlabs/Module/Photos.php:696 msgid "or select an existing album (doubleclick)" msgstr "o seleccionar uno existente (doble click)" -#: ../../Zotlabs/Module/Photos.php:644 +#: ../../Zotlabs/Module/Photos.php:697 msgid "Create a status post for this upload" msgstr "Crear un mensaje de estado para esta subida" -#: ../../Zotlabs/Module/Photos.php:645 +#: ../../Zotlabs/Module/Photos.php:698 msgid "Caption (optional):" msgstr "Título (opcional):" -#: ../../Zotlabs/Module/Photos.php:646 +#: ../../Zotlabs/Module/Photos.php:699 msgid "Description (optional):" msgstr "Descripción (opcional):" -#: ../../Zotlabs/Module/Photos.php:732 +#: ../../Zotlabs/Module/Photos.php:785 msgid "Show Newest First" msgstr "Mostrar lo más reciente primero" -#: ../../Zotlabs/Module/Photos.php:734 +#: ../../Zotlabs/Module/Photos.php:787 msgid "Show Oldest First" msgstr "Mostrar lo más antiguo primero" -#: ../../Zotlabs/Module/Photos.php:839 +#: ../../Zotlabs/Module/Photos.php:892 msgid "Permission denied. Access to this item may be restricted." msgstr "Permiso denegado. El acceso a este elemento puede estar restringido." -#: ../../Zotlabs/Module/Photos.php:841 +#: ../../Zotlabs/Module/Photos.php:894 msgid "Photo not available" msgstr "Foto no disponible" -#: ../../Zotlabs/Module/Photos.php:899 +#: ../../Zotlabs/Module/Photos.php:952 msgid "Use as profile photo" msgstr "Usar como foto del perfil" -#: ../../Zotlabs/Module/Photos.php:900 +#: ../../Zotlabs/Module/Photos.php:953 msgid "Use as cover photo" msgstr "Usar como imagen de portada del perfil" -#: ../../Zotlabs/Module/Photos.php:907 +#: ../../Zotlabs/Module/Photos.php:960 msgid "Private Photo" msgstr "Foto privada" -#: ../../Zotlabs/Module/Photos.php:922 +#: ../../Zotlabs/Module/Photos.php:975 msgid "View Full Size" msgstr "Ver tamaño completo" -#: ../../Zotlabs/Module/Photos.php:1004 +#: ../../Zotlabs/Module/Photos.php:1057 msgid "Edit photo" msgstr "Editar foto" -#: ../../Zotlabs/Module/Photos.php:1006 +#: ../../Zotlabs/Module/Photos.php:1059 msgid "Rotate CW (right)" msgstr "Girar CW (a la derecha)" -#: ../../Zotlabs/Module/Photos.php:1007 +#: ../../Zotlabs/Module/Photos.php:1060 msgid "Rotate CCW (left)" msgstr "Girar CCW (a la izquierda)" -#: ../../Zotlabs/Module/Photos.php:1010 +#: ../../Zotlabs/Module/Photos.php:1063 msgid "Move photo to album" msgstr "Mover la foto a un álbum" -#: ../../Zotlabs/Module/Photos.php:1011 +#: ../../Zotlabs/Module/Photos.php:1064 msgid "Enter a new album name" msgstr "Introducir un nuevo nombre de álbum" -#: ../../Zotlabs/Module/Photos.php:1012 +#: ../../Zotlabs/Module/Photos.php:1065 msgid "or select an existing one (doubleclick)" msgstr "o seleccionar uno (doble click) existente" -#: ../../Zotlabs/Module/Photos.php:1015 +#: ../../Zotlabs/Module/Photos.php:1068 msgid "Caption" msgstr "Título" -#: ../../Zotlabs/Module/Photos.php:1017 +#: ../../Zotlabs/Module/Photos.php:1070 msgid "Add a Tag" msgstr "Añadir una etiqueta" -#: ../../Zotlabs/Module/Photos.php:1025 +#: ../../Zotlabs/Module/Photos.php:1078 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" msgstr "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com" -#: ../../Zotlabs/Module/Photos.php:1028 +#: ../../Zotlabs/Module/Photos.php:1081 msgid "Flag as adult in album view" msgstr "Marcar como \"solo para adultos\" en el álbum" -#: ../../Zotlabs/Module/Photos.php:1047 ../../Zotlabs/Lib/ThreadItem.php:271 +#: ../../Zotlabs/Module/Photos.php:1100 ../../Zotlabs/Lib/ThreadItem.php:281 msgid "I like this (toggle)" msgstr "Me gusta (cambiar)" -#: ../../Zotlabs/Module/Photos.php:1048 ../../Zotlabs/Lib/ThreadItem.php:272 +#: ../../Zotlabs/Module/Photos.php:1101 ../../Zotlabs/Lib/ThreadItem.php:282 msgid "I don't like this (toggle)" msgstr "No me gusta esto (cambiar)" -#: ../../Zotlabs/Module/Photos.php:1050 ../../Zotlabs/Lib/ThreadItem.php:416 -#: ../../include/conversation.php:768 +#: ../../Zotlabs/Module/Photos.php:1103 ../../Zotlabs/Lib/ThreadItem.php:427 +#: ../../include/conversation.php:785 msgid "Please wait" msgstr "Espere por favor" -#: ../../Zotlabs/Module/Photos.php:1066 ../../Zotlabs/Module/Photos.php:1184 -#: ../../Zotlabs/Lib/ThreadItem.php:740 +#: ../../Zotlabs/Module/Photos.php:1119 ../../Zotlabs/Module/Photos.php:1237 +#: ../../Zotlabs/Lib/ThreadItem.php:751 msgid "This is you" msgstr "Este es usted" -#: ../../Zotlabs/Module/Photos.php:1068 ../../Zotlabs/Module/Photos.php:1186 -#: ../../Zotlabs/Lib/ThreadItem.php:742 ../../include/js_strings.php:6 +#: ../../Zotlabs/Module/Photos.php:1121 ../../Zotlabs/Module/Photos.php:1239 +#: ../../Zotlabs/Lib/ThreadItem.php:753 ../../include/js_strings.php:6 msgid "Comment" msgstr "Comentar" -#: ../../Zotlabs/Module/Photos.php:1084 ../../include/conversation.php:594 +#: ../../Zotlabs/Module/Photos.php:1137 ../../include/conversation.php:618 msgctxt "title" msgid "Likes" msgstr "Me gusta" -#: ../../Zotlabs/Module/Photos.php:1084 ../../include/conversation.php:594 +#: ../../Zotlabs/Module/Photos.php:1137 ../../include/conversation.php:618 msgctxt "title" msgid "Dislikes" msgstr "No me gusta" -#: ../../Zotlabs/Module/Photos.php:1085 ../../include/conversation.php:595 +#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 msgctxt "title" msgid "Agree" msgstr "De acuerdo" -#: ../../Zotlabs/Module/Photos.php:1085 ../../include/conversation.php:595 +#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 msgctxt "title" msgid "Disagree" msgstr "En desacuerdo" -#: ../../Zotlabs/Module/Photos.php:1085 ../../include/conversation.php:595 +#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 msgctxt "title" msgid "Abstain" msgstr "Abstención" -#: ../../Zotlabs/Module/Photos.php:1086 ../../include/conversation.php:596 +#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 msgctxt "title" msgid "Attending" msgstr "Participaré" -#: ../../Zotlabs/Module/Photos.php:1086 ../../include/conversation.php:596 +#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 msgctxt "title" msgid "Not attending" msgstr "No participaré" -#: ../../Zotlabs/Module/Photos.php:1086 ../../include/conversation.php:596 +#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 msgctxt "title" msgid "Might attend" msgstr "Quizá participe" -#: ../../Zotlabs/Module/Photos.php:1103 ../../Zotlabs/Module/Photos.php:1115 -#: ../../Zotlabs/Lib/ThreadItem.php:191 ../../Zotlabs/Lib/ThreadItem.php:203 +#: ../../Zotlabs/Module/Photos.php:1156 ../../Zotlabs/Module/Photos.php:1168 +#: ../../Zotlabs/Lib/ThreadItem.php:201 ../../Zotlabs/Lib/ThreadItem.php:213 msgid "View all" msgstr "Ver todo" -#: ../../Zotlabs/Module/Photos.php:1107 ../../Zotlabs/Lib/ThreadItem.php:195 -#: ../../include/conversation.php:1950 ../../include/channel.php:1491 -#: ../../include/taxonomy.php:520 +#: ../../Zotlabs/Module/Photos.php:1160 ../../Zotlabs/Lib/ThreadItem.php:205 +#: ../../include/conversation.php:1978 ../../include/channel.php:1539 +#: ../../include/taxonomy.php:593 msgctxt "noun" msgid "Like" msgid_plural "Likes" msgstr[0] "Me gusta" msgstr[1] "Me gusta" -#: ../../Zotlabs/Module/Photos.php:1112 ../../Zotlabs/Lib/ThreadItem.php:200 -#: ../../include/conversation.php:1953 +#: ../../Zotlabs/Module/Photos.php:1165 ../../Zotlabs/Lib/ThreadItem.php:210 +#: ../../include/conversation.php:1981 msgctxt "noun" msgid "Dislike" msgid_plural "Dislikes" msgstr[0] "No me gusta" msgstr[1] "No me gusta" -#: ../../Zotlabs/Module/Photos.php:1212 +#: ../../Zotlabs/Module/Photos.php:1265 msgid "Photo Tools" msgstr "Gestión de las fotos" -#: ../../Zotlabs/Module/Photos.php:1221 +#: ../../Zotlabs/Module/Photos.php:1274 msgid "In This Photo:" msgstr "En esta foto:" -#: ../../Zotlabs/Module/Photos.php:1226 +#: ../../Zotlabs/Module/Photos.php:1279 msgid "Map" msgstr "Mapa" -#: ../../Zotlabs/Module/Photos.php:1234 ../../Zotlabs/Lib/ThreadItem.php:404 +#: ../../Zotlabs/Module/Photos.php:1287 ../../Zotlabs/Lib/ThreadItem.php:415 msgctxt "noun" msgid "Likes" msgstr "Me gusta" -#: ../../Zotlabs/Module/Photos.php:1235 ../../Zotlabs/Lib/ThreadItem.php:405 +#: ../../Zotlabs/Module/Photos.php:1288 ../../Zotlabs/Lib/ThreadItem.php:416 msgctxt "noun" msgid "Dislikes" msgstr "No me gusta" -#: ../../Zotlabs/Module/Photos.php:1240 ../../Zotlabs/Lib/ThreadItem.php:410 +#: ../../Zotlabs/Module/Photos.php:1293 ../../Zotlabs/Lib/ThreadItem.php:421 #: ../../include/acl_selectors.php:220 msgid "Close" msgstr "Cerrar" -#: ../../Zotlabs/Module/Photos.php:1312 ../../Zotlabs/Module/Photos.php:1325 -#: ../../Zotlabs/Module/Photos.php:1326 ../../include/photos.php:601 +#: ../../Zotlabs/Module/Photos.php:1365 ../../Zotlabs/Module/Photos.php:1378 +#: ../../Zotlabs/Module/Photos.php:1379 ../../include/photos.php:656 msgid "Recent Photos" msgstr "Fotos recientes" @@ -4738,7 +4825,8 @@ msgstr "Fotos recientes" msgid "Profile Unavailable." msgstr "Perfil no disponible" -#: ../../Zotlabs/Module/Wiki.php:44 ../../addon/gitwiki/Mod_Gitwiki.php:42 +#: ../../Zotlabs/Module/Wiki.php:44 ../../Zotlabs/Module/Cloud.php:108 +#: ../../addon/gitwiki/Mod_Gitwiki.php:42 msgid "Not found" msgstr "No encontrado" @@ -4759,7 +4847,7 @@ msgid "Error downloading wiki: " msgstr "Error al descargar el wiki: " #: ../../Zotlabs/Module/Wiki.php:197 ../../addon/gitwiki/Mod_Gitwiki.php:146 -#: ../../include/conversation.php:1897 ../../include/nav.php:504 +#: ../../include/conversation.php:1925 ../../include/nav.php:526 msgid "Wikis" msgstr "Wikis" @@ -4781,22 +4869,25 @@ msgstr "Nombre del wiki" msgid "Content type" msgstr "Tipo de contenido" -#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:336 -#: ../../Zotlabs/Widget/Wiki_pages.php:57 ../../include/text.php:1802 +#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:348 +#: ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1802 +#: ../../include/features.php:378 msgid "Markdown" msgstr "Markdown" -#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:336 -#: ../../Zotlabs/Widget/Wiki_pages.php:57 ../../include/text.php:1800 +#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:348 +#: ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1800 msgid "BBcode" msgstr "BBcode" -#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Widget/Wiki_pages.php:57 -#: ../../include/text.php:1803 +#: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1803 msgid "Text" msgstr "Texto" -#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:235 +#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:281 #: ../../addon/gitwiki/Mod_Gitwiki.php:159 msgid "Type" msgstr "Tipo" @@ -4825,127 +4916,127 @@ msgstr "Wiki no encontrado" msgid "Rename page" msgstr "Renombrar la página" -#: ../../Zotlabs/Module/Wiki.php:296 ../../addon/gitwiki/Mod_Gitwiki.php:214 +#: ../../Zotlabs/Module/Wiki.php:305 ../../addon/gitwiki/Mod_Gitwiki.php:214 msgid "Error retrieving page content" msgstr "Error al recuperar el contenido de la página" -#: ../../Zotlabs/Module/Wiki.php:302 ../../Zotlabs/Module/Wiki.php:304 +#: ../../Zotlabs/Module/Wiki.php:313 ../../Zotlabs/Module/Wiki.php:315 msgid "New page" msgstr "Nueva página" -#: ../../Zotlabs/Module/Wiki.php:331 ../../addon/gitwiki/Mod_Gitwiki.php:242 +#: ../../Zotlabs/Module/Wiki.php:343 ../../addon/gitwiki/Mod_Gitwiki.php:242 msgid "Revision Comparison" msgstr "Comparación de revisiones" -#: ../../Zotlabs/Module/Wiki.php:332 ../../addon/gitwiki/Mod_Gitwiki.php:243 +#: ../../Zotlabs/Module/Wiki.php:344 ../../addon/gitwiki/Mod_Gitwiki.php:243 msgid "Revert" msgstr "Revertir" -#: ../../Zotlabs/Module/Wiki.php:339 +#: ../../Zotlabs/Module/Wiki.php:351 msgid "Short description of your changes (optional)" msgstr "Breve descripción de sus cambios (opcional)" -#: ../../Zotlabs/Module/Wiki.php:346 ../../addon/gitwiki/Mod_Gitwiki.php:252 +#: ../../Zotlabs/Module/Wiki.php:358 ../../addon/gitwiki/Mod_Gitwiki.php:252 msgid "Source" msgstr "Fuente" -#: ../../Zotlabs/Module/Wiki.php:356 ../../addon/gitwiki/Mod_Gitwiki.php:260 +#: ../../Zotlabs/Module/Wiki.php:368 ../../addon/gitwiki/Mod_Gitwiki.php:260 msgid "New page name" msgstr "Nombre de la nueva página" -#: ../../Zotlabs/Module/Wiki.php:361 ../../addon/gitwiki/Mod_Gitwiki.php:265 -#: ../../include/conversation.php:1265 +#: ../../Zotlabs/Module/Wiki.php:373 ../../addon/gitwiki/Mod_Gitwiki.php:265 +#: ../../include/conversation.php:1282 msgid "Embed image from photo albums" msgstr "Incluir una imagen de los álbumes de fotos" -#: ../../Zotlabs/Module/Wiki.php:362 ../../addon/gitwiki/Mod_Gitwiki.php:266 -#: ../../include/conversation.php:1368 +#: ../../Zotlabs/Module/Wiki.php:374 ../../addon/gitwiki/Mod_Gitwiki.php:266 +#: ../../include/conversation.php:1385 msgid "Embed an image from your albums" msgstr "Incluir una imagen de sus álbumes" -#: ../../Zotlabs/Module/Wiki.php:364 ../../addon/gitwiki/Mod_Gitwiki.php:268 -#: ../../include/conversation.php:1370 ../../include/conversation.php:1417 +#: ../../Zotlabs/Module/Wiki.php:376 ../../addon/gitwiki/Mod_Gitwiki.php:268 +#: ../../include/conversation.php:1387 ../../include/conversation.php:1434 msgid "OK" msgstr "OK" -#: ../../Zotlabs/Module/Wiki.php:365 ../../addon/gitwiki/Mod_Gitwiki.php:269 -#: ../../include/conversation.php:1301 +#: ../../Zotlabs/Module/Wiki.php:377 ../../addon/gitwiki/Mod_Gitwiki.php:269 +#: ../../include/conversation.php:1318 msgid "Choose images to embed" msgstr "Elegir imágenes para incluir" -#: ../../Zotlabs/Module/Wiki.php:366 ../../addon/gitwiki/Mod_Gitwiki.php:270 -#: ../../include/conversation.php:1302 +#: ../../Zotlabs/Module/Wiki.php:378 ../../addon/gitwiki/Mod_Gitwiki.php:270 +#: ../../include/conversation.php:1319 msgid "Choose an album" msgstr "Elegir un álbum" -#: ../../Zotlabs/Module/Wiki.php:367 ../../addon/gitwiki/Mod_Gitwiki.php:271 +#: ../../Zotlabs/Module/Wiki.php:379 ../../addon/gitwiki/Mod_Gitwiki.php:271 msgid "Choose a different album" msgstr "Elegir un álbum diferente..." -#: ../../Zotlabs/Module/Wiki.php:368 ../../addon/gitwiki/Mod_Gitwiki.php:272 -#: ../../include/conversation.php:1304 +#: ../../Zotlabs/Module/Wiki.php:380 ../../addon/gitwiki/Mod_Gitwiki.php:272 +#: ../../include/conversation.php:1321 msgid "Error getting album list" msgstr "Error al obtener la lista de álbumes" -#: ../../Zotlabs/Module/Wiki.php:369 ../../addon/gitwiki/Mod_Gitwiki.php:273 -#: ../../include/conversation.php:1305 +#: ../../Zotlabs/Module/Wiki.php:381 ../../addon/gitwiki/Mod_Gitwiki.php:273 +#: ../../include/conversation.php:1322 msgid "Error getting photo link" msgstr "Error al obtener el enlace de la foto" -#: ../../Zotlabs/Module/Wiki.php:370 ../../addon/gitwiki/Mod_Gitwiki.php:274 -#: ../../include/conversation.php:1306 +#: ../../Zotlabs/Module/Wiki.php:382 ../../addon/gitwiki/Mod_Gitwiki.php:274 +#: ../../include/conversation.php:1323 msgid "Error getting album" msgstr "Error al obtener el álbum" -#: ../../Zotlabs/Module/Wiki.php:442 ../../addon/gitwiki/Mod_Gitwiki.php:337 +#: ../../Zotlabs/Module/Wiki.php:458 ../../addon/gitwiki/Mod_Gitwiki.php:337 msgid "Error creating wiki. Invalid name." msgstr "Error al crear el wiki: el nombre no es válido." -#: ../../Zotlabs/Module/Wiki.php:449 +#: ../../Zotlabs/Module/Wiki.php:465 msgid "A wiki with this name already exists." msgstr "Ya hay un wiki con este nombre." -#: ../../Zotlabs/Module/Wiki.php:462 ../../addon/gitwiki/Mod_Gitwiki.php:348 +#: ../../Zotlabs/Module/Wiki.php:478 ../../addon/gitwiki/Mod_Gitwiki.php:348 msgid "Wiki created, but error creating Home page." msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio." -#: ../../Zotlabs/Module/Wiki.php:469 ../../addon/gitwiki/Mod_Gitwiki.php:353 +#: ../../Zotlabs/Module/Wiki.php:485 ../../addon/gitwiki/Mod_Gitwiki.php:353 msgid "Error creating wiki" msgstr "Error al crear el wiki" -#: ../../Zotlabs/Module/Wiki.php:492 +#: ../../Zotlabs/Module/Wiki.php:508 msgid "Error updating wiki. Invalid name." msgstr "Error al actualizar el wiki. Nombre no válido." -#: ../../Zotlabs/Module/Wiki.php:512 +#: ../../Zotlabs/Module/Wiki.php:528 msgid "Error updating wiki" msgstr "Error al actualizar el wiki" -#: ../../Zotlabs/Module/Wiki.php:527 +#: ../../Zotlabs/Module/Wiki.php:543 msgid "Wiki delete permission denied." msgstr "Se ha denegado el permiso para eliminar el wiki." -#: ../../Zotlabs/Module/Wiki.php:537 +#: ../../Zotlabs/Module/Wiki.php:553 msgid "Error deleting wiki" msgstr "Se ha producido un error al eliminar el wiki" -#: ../../Zotlabs/Module/Wiki.php:565 ../../addon/gitwiki/Mod_Gitwiki.php:400 +#: ../../Zotlabs/Module/Wiki.php:586 ../../addon/gitwiki/Mod_Gitwiki.php:400 msgid "New page created" msgstr "Se ha creado la nueva página" -#: ../../Zotlabs/Module/Wiki.php:686 +#: ../../Zotlabs/Module/Wiki.php:707 msgid "Cannot delete Home" msgstr "No se puede eliminar la página principal" -#: ../../Zotlabs/Module/Wiki.php:750 +#: ../../Zotlabs/Module/Wiki.php:771 msgid "Current Revision" msgstr "Revisión actual" -#: ../../Zotlabs/Module/Wiki.php:750 +#: ../../Zotlabs/Module/Wiki.php:771 msgid "Selected Revision" msgstr "Revisión seleccionada" -#: ../../Zotlabs/Module/Wiki.php:800 +#: ../../Zotlabs/Module/Wiki.php:821 msgid "You must be authenticated." msgstr "Debe estar autenticado." @@ -4961,7 +5052,7 @@ msgstr "Plantilla actualizada." msgid "Feature disabled." msgstr "Funcionalidad deshabilitada." -#: ../../Zotlabs/Module/Pdledit.php:47 ../../Zotlabs/Module/Pdledit.php:88 +#: ../../Zotlabs/Module/Pdledit.php:47 ../../Zotlabs/Module/Pdledit.php:90 msgid "Edit System Page Description" msgstr "Editor del Sistema de Descripción de Páginas" @@ -4973,24 +5064,28 @@ msgstr "(modificado)" msgid "Reset" msgstr "Reiniciar" -#: ../../Zotlabs/Module/Pdledit.php:83 +#: ../../Zotlabs/Module/Pdledit.php:85 msgid "Layout not found." msgstr "Plantilla no encontrada" -#: ../../Zotlabs/Module/Pdledit.php:89 +#: ../../Zotlabs/Module/Pdledit.php:91 msgid "Module Name:" msgstr "Nombre del módulo:" -#: ../../Zotlabs/Module/Pdledit.php:90 +#: ../../Zotlabs/Module/Pdledit.php:92 msgid "Layout Help" msgstr "Ayuda para el diseño de plantillas de página" -#: ../../Zotlabs/Module/Pdledit.php:91 +#: ../../Zotlabs/Module/Pdledit.php:93 msgid "Edit another layout" msgstr "Editar otro diseño" +#: ../../Zotlabs/Module/Pdledit.php:94 +msgid "System layout" +msgstr "Diseño del sistema" + #: ../../Zotlabs/Module/Poke.php:182 ../../Zotlabs/Lib/Apps.php:248 -#: ../../include/conversation.php:1075 +#: ../../include/conversation.php:1092 msgid "Poke" msgstr "Toques y otras cosas" @@ -5024,8 +5119,8 @@ msgid "Image uploaded but image cropping failed." msgstr "Imagen actualizada, pero el recorte de la imagen ha fallado. " #: ../../Zotlabs/Module/Profile_photo.php:115 -#: ../../Zotlabs/Module/Profile_photo.php:234 -#: ../../include/photo/photo_driver.php:710 +#: ../../Zotlabs/Module/Profile_photo.php:240 +#: ../../include/photo/photo_driver.php:740 msgid "Profile Photos" msgstr "Fotos del perfil" @@ -5034,80 +5129,80 @@ msgstr "Fotos del perfil" msgid "Image resize failed." msgstr "El ajuste del tamaño de la imagen ha fallado." -#: ../../Zotlabs/Module/Profile_photo.php:204 +#: ../../Zotlabs/Module/Profile_photo.php:210 #: ../../addon/openclipatar/openclipatar.php:298 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente." -#: ../../Zotlabs/Module/Profile_photo.php:211 -#: ../../Zotlabs/Module/Cover_photo.php:173 ../../include/photos.php:156 +#: ../../Zotlabs/Module/Profile_photo.php:217 +#: ../../Zotlabs/Module/Cover_photo.php:173 ../../include/photos.php:195 msgid "Unable to process image" msgstr "No ha sido posible procesar la imagen" -#: ../../Zotlabs/Module/Profile_photo.php:246 +#: ../../Zotlabs/Module/Profile_photo.php:252 #: ../../Zotlabs/Module/Cover_photo.php:197 msgid "Image upload failed." msgstr "La carga de la imagen ha fallado." -#: ../../Zotlabs/Module/Profile_photo.php:265 +#: ../../Zotlabs/Module/Profile_photo.php:271 #: ../../Zotlabs/Module/Cover_photo.php:214 msgid "Unable to process image." msgstr "No ha sido posible procesar la imagen." -#: ../../Zotlabs/Module/Profile_photo.php:326 -#: ../../Zotlabs/Module/Profile_photo.php:373 +#: ../../Zotlabs/Module/Profile_photo.php:332 +#: ../../Zotlabs/Module/Profile_photo.php:379 #: ../../Zotlabs/Module/Cover_photo.php:307 #: ../../Zotlabs/Module/Cover_photo.php:322 msgid "Photo not available." msgstr "Foto no disponible." -#: ../../Zotlabs/Module/Profile_photo.php:428 +#: ../../Zotlabs/Module/Profile_photo.php:434 #: ../../Zotlabs/Module/Cover_photo.php:358 msgid "Upload File:" msgstr "Subir fichero:" -#: ../../Zotlabs/Module/Profile_photo.php:429 +#: ../../Zotlabs/Module/Profile_photo.php:435 #: ../../Zotlabs/Module/Cover_photo.php:359 msgid "Select a profile:" msgstr "Seleccionar un perfil:" -#: ../../Zotlabs/Module/Profile_photo.php:430 +#: ../../Zotlabs/Module/Profile_photo.php:436 msgid "Use Photo for Profile" msgstr "Usar la fotografía para el perfil" -#: ../../Zotlabs/Module/Profile_photo.php:430 +#: ../../Zotlabs/Module/Profile_photo.php:436 msgid "Upload Profile Photo" msgstr "Subir foto de perfil" -#: ../../Zotlabs/Module/Profile_photo.php:431 +#: ../../Zotlabs/Module/Profile_photo.php:437 #: ../../addon/openclipatar/openclipatar.php:182 #: ../../addon/openclipatar/openclipatar.php:194 msgid "Use" msgstr "Usar" -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Profile_photo.php:443 #: ../../Zotlabs/Module/Cover_photo.php:365 msgid "skip this step" msgstr "Omitir este paso" -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Profile_photo.php:443 #: ../../Zotlabs/Module/Cover_photo.php:365 msgid "select a photo from your photo albums" msgstr "Seleccione una foto de sus álbumes de fotos" -#: ../../Zotlabs/Module/Profile_photo.php:456 +#: ../../Zotlabs/Module/Profile_photo.php:462 #: ../../Zotlabs/Module/Cover_photo.php:381 msgid "Crop Image" msgstr "Recortar imagen" -#: ../../Zotlabs/Module/Profile_photo.php:457 +#: ../../Zotlabs/Module/Profile_photo.php:463 #: ../../Zotlabs/Module/Cover_photo.php:382 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/Profile_photo.php:459 +#: ../../Zotlabs/Module/Profile_photo.php:465 #: ../../Zotlabs/Module/Cover_photo.php:384 msgid "Done Editing" msgstr "Edición completada" @@ -5120,65 +5215,65 @@ msgstr "Ausente" msgid "Online" msgstr "Conectado/a" -#: ../../Zotlabs/Module/Item.php:185 +#: ../../Zotlabs/Module/Item.php:193 msgid "Unable to locate original post." msgstr "No ha sido posible encontrar la entrada original." -#: ../../Zotlabs/Module/Item.php:470 +#: ../../Zotlabs/Module/Item.php:475 msgid "Empty post discarded." msgstr "La entrada vacía ha sido desechada." -#: ../../Zotlabs/Module/Item.php:870 +#: ../../Zotlabs/Module/Item.php:853 msgid "Duplicate post suppressed." msgstr "Se ha suprimido la entrada duplicada." -#: ../../Zotlabs/Module/Item.php:1015 +#: ../../Zotlabs/Module/Item.php:998 msgid "System error. Post not saved." msgstr "Error del sistema. La entrada no se ha podido salvar." -#: ../../Zotlabs/Module/Item.php:1051 +#: ../../Zotlabs/Module/Item.php:1034 msgid "Your comment is awaiting approval." msgstr "Su comentario está pendiente de aprobación." -#: ../../Zotlabs/Module/Item.php:1156 +#: ../../Zotlabs/Module/Item.php:1139 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:1163 +#: ../../Zotlabs/Module/Item.php:1168 #, 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:1170 +#: ../../Zotlabs/Module/Item.php:1175 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "Ha alcanzado su límite de %1$.0f páginas web." -#: ../../Zotlabs/Module/Ping.php:318 +#: ../../Zotlabs/Module/Ping.php:311 msgid "sent you a private message" msgstr "le ha enviado un mensaje privado" -#: ../../Zotlabs/Module/Ping.php:369 +#: ../../Zotlabs/Module/Ping.php:360 msgid "added your channel" msgstr "añadió este canal a sus conexiones" -#: ../../Zotlabs/Module/Ping.php:393 +#: ../../Zotlabs/Module/Ping.php:384 msgid "requires approval" msgstr "requiere aprobación" -#: ../../Zotlabs/Module/Ping.php:403 +#: ../../Zotlabs/Module/Ping.php:394 msgid "g A l F d" msgstr "g A l d F" -#: ../../Zotlabs/Module/Ping.php:421 +#: ../../Zotlabs/Module/Ping.php:412 msgid "[today]" msgstr "[hoy]" -#: ../../Zotlabs/Module/Ping.php:430 +#: ../../Zotlabs/Module/Ping.php:421 msgid "posted an event" msgstr "publicó un evento" -#: ../../Zotlabs/Module/Ping.php:463 +#: ../../Zotlabs/Module/Ping.php:454 msgid "shared a file with you" msgstr "compartió un archivo con usted" @@ -5186,14 +5281,14 @@ msgstr "compartió un archivo con usted" msgid "Invalid item." msgstr "Elemento no válido." -#: ../../Zotlabs/Module/Page.php:128 ../../Zotlabs/Module/Block.php:77 -#: ../../Zotlabs/Module/Display.php:120 -#: ../../Zotlabs/Lib/NativeWikiPage.php:515 ../../Zotlabs/Web/Router.php:158 +#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Block.php:77 +#: ../../Zotlabs/Module/Display.php:133 +#: ../../Zotlabs/Lib/NativeWikiPage.php:519 ../../Zotlabs/Web/Router.php:168 #: ../../include/help.php:81 msgid "Page not found." msgstr "Página no encontrada." -#: ../../Zotlabs/Module/Page.php:165 +#: ../../Zotlabs/Module/Page.php:173 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," @@ -5203,7 +5298,7 @@ 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/Connedit.php:79 +#: ../../Zotlabs/Module/Connedit.php:79 ../../Zotlabs/Module/Defperms.php:59 msgid "Could not access contact record." msgstr "No se ha podido acceder al registro de contacto." @@ -5243,7 +5338,7 @@ msgstr "La conexión ha sido eliminada." #: ../../Zotlabs/Module/Connedit.php:594 ../../Zotlabs/Lib/Apps.php:241 #: ../../addon/openclipatar/openclipatar.php:57 -#: ../../include/conversation.php:1015 ../../include/nav.php:141 +#: ../../include/conversation.php:1032 ../../include/nav.php:148 msgid "View Profile" msgstr "Ver el perfil" @@ -5411,17 +5506,17 @@ msgid "" "not supported by their network." msgstr "Esta conexión no es accesible desde este sitio. La independencia de ubicación no es compatible con su red." -#: ../../Zotlabs/Module/Connedit.php:867 +#: ../../Zotlabs/Module/Connedit.php:867 ../../Zotlabs/Module/Defperms.php:238 #: ../../Zotlabs/Widget/Settings_menu.php:109 msgid "Connection Default Permissions" msgstr "Permisos predeterminados de conexión" -#: ../../Zotlabs/Module/Connedit.php:867 ../../include/items.php:3974 +#: ../../Zotlabs/Module/Connedit.php:867 ../../include/items.php:4134 #, php-format msgid "Connection: %s" msgstr "Conexión: %s" -#: ../../Zotlabs/Module/Connedit.php:868 +#: ../../Zotlabs/Module/Connedit.php:868 ../../Zotlabs/Module/Defperms.php:239 msgid "Apply these permissions automatically" msgstr "Aplicar estos permisos automaticamente" @@ -5429,11 +5524,11 @@ msgstr "Aplicar estos permisos automaticamente" msgid "Connection requests will be approved without your interaction" msgstr "Las solicitudes de conexión serán aprobadas sin su intervención" -#: ../../Zotlabs/Module/Connedit.php:869 +#: ../../Zotlabs/Module/Connedit.php:869 ../../Zotlabs/Module/Defperms.php:240 msgid "Permission role" msgstr "Rol de acceso" -#: ../../Zotlabs/Module/Connedit.php:870 +#: ../../Zotlabs/Module/Connedit.php:870 ../../Zotlabs/Module/Defperms.php:241 msgid "Add permission role" msgstr "Añadir un rol de acceso" @@ -5445,7 +5540,7 @@ msgstr "La dirección primaria de esta conexión es" msgid "Available locations:" msgstr "Ubicaciones disponibles:" -#: ../../Zotlabs/Module/Connedit.php:883 +#: ../../Zotlabs/Module/Connedit.php:883 ../../Zotlabs/Module/Defperms.php:245 msgid "" "The permissions indicated on this page will be applied to all new " "connections." @@ -5546,13 +5641,13 @@ msgid "Bookmark this room" msgstr "Añadir esta sala a Marcadores" #: ../../Zotlabs/Module/Chat.php:205 ../../Zotlabs/Module/Mail.php:241 -#: ../../Zotlabs/Module/Mail.php:362 ../../include/conversation.php:1296 +#: ../../Zotlabs/Module/Mail.php:362 ../../include/conversation.php:1313 msgid "Please enter a link URL:" msgstr "Por favor, introduzca la dirección del enlace:" #: ../../Zotlabs/Module/Chat.php:206 ../../Zotlabs/Module/Mail.php:294 -#: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Lib/ThreadItem.php:757 -#: ../../include/conversation.php:1415 +#: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Lib/ThreadItem.php:768 +#: ../../include/conversation.php:1432 msgid "Encrypt text" msgstr "Cifrar texto" @@ -5586,13 +5681,13 @@ msgid "min" msgstr "min" #: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:242 -#: ../../include/conversation.php:1814 ../../include/nav.php:422 +#: ../../include/conversation.php:1831 ../../include/nav.php:433 msgid "Photos" msgstr "Fotos" #: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:237 -#: ../../Zotlabs/Storage/Browser.php:225 ../../include/conversation.php:1822 -#: ../../include/nav.php:430 +#: ../../Zotlabs/Storage/Browser.php:269 ../../include/conversation.php:1839 +#: ../../include/nav.php:441 msgid "Files" msgstr "Ficheros" @@ -5689,7 +5784,7 @@ msgid "Layouts" msgstr "Plantillas" #: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:245 -#: ../../include/nav.php:201 ../../include/nav.php:301 +#: ../../include/nav.php:208 ../../include/nav.php:312 #: ../../include/help.php:68 ../../include/help.php:74 msgid "Help" msgstr "Ayuda" @@ -5706,17 +5801,25 @@ msgstr "Descripción de la plantilla" msgid "Download PDL file" msgstr "Descargar el fichero PDL" -#: ../../Zotlabs/Module/Tagger.php:55 ../../include/markdown.php:141 -#: ../../include/bbcode.php:333 +#: ../../Zotlabs/Module/Cloud.php:114 +msgid "Unknown error" +msgstr "Error desconocido" + +#: ../../Zotlabs/Module/Tagger.php:48 +msgid "Post not found." +msgstr "Mensaje no encontrado." + +#: ../../Zotlabs/Module/Tagger.php:77 ../../include/markdown.php:160 +#: ../../include/bbcode.php:335 msgid "post" msgstr "la entrada" -#: ../../Zotlabs/Module/Tagger.php:57 ../../include/conversation.php:146 +#: ../../Zotlabs/Module/Tagger.php:79 ../../include/conversation.php:146 #: ../../include/text.php:1946 msgid "comment" msgstr "el comentario" -#: ../../Zotlabs/Module/Tagger.php:95 +#: ../../Zotlabs/Module/Tagger.php:117 #, 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" @@ -5736,6 +5839,21 @@ msgid "" " to correctly use this feature." msgstr "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica." +#: ../../Zotlabs/Module/Defperms.php:239 +msgid "" +"If enabled, connection requests will be approved without your interaction" +msgstr "Si está habilitado, las solicitudes de conexión serán aprobadas sin su intervención." + +#: ../../Zotlabs/Module/Defperms.php:246 +msgid "Automatic approval settings" +msgstr "Opciones de autorización automática" + +#: ../../Zotlabs/Module/Defperms.php:254 +msgid "" +"Some individual permissions may have been preset or locked based on your " +"channel type and privacy settings." +msgstr "Es posible que se hayan preestablecido o bloqueado algunos permisos individuales según el tipo de canal y la configuración de privacidad." + #: ../../Zotlabs/Module/Group.php:24 msgid "Privacy group created." msgstr "El grupo de canales ha sido creado." @@ -5745,7 +5863,7 @@ msgid "Could not create privacy group." msgstr "No se puede crear el grupo de canales" #: ../../Zotlabs/Module/Group.php:42 ../../Zotlabs/Module/Group.php:143 -#: ../../include/items.php:3941 +#: ../../include/items.php:4101 msgid "Privacy group not found." msgstr "Grupo de canales no encontrado." @@ -5880,7 +5998,7 @@ msgid "View this profile" msgstr "Ver este perfil" #: ../../Zotlabs/Module/Profiles.php:728 ../../Zotlabs/Module/Profiles.php:827 -#: ../../include/channel.php:1284 +#: ../../include/channel.php:1320 msgid "Edit visibility" msgstr "Editar visibilidad" @@ -5892,7 +6010,7 @@ msgstr "Gestión del perfil" msgid "Change cover photo" msgstr "Cambiar la imagen de portada del perfil" -#: ../../Zotlabs/Module/Profiles.php:731 ../../include/channel.php:1255 +#: ../../Zotlabs/Module/Profiles.php:731 ../../include/channel.php:1290 msgid "Change profile photo" msgstr "Cambiar la foto del perfil" @@ -5912,7 +6030,7 @@ msgstr "Eliminar este perfil" msgid "Add profile things" msgstr "Añadir cosas al perfil" -#: ../../Zotlabs/Module/Profiles.php:736 ../../include/conversation.php:1688 +#: ../../Zotlabs/Module/Profiles.php:736 ../../include/conversation.php:1705 msgid "Personal" msgstr "Personales" @@ -5920,7 +6038,7 @@ msgstr "Personales" msgid "Relation" msgstr "Relación" -#: ../../Zotlabs/Module/Profiles.php:739 ../../include/datetime.php:55 +#: ../../Zotlabs/Module/Profiles.php:739 ../../include/datetime.php:58 msgid "Miscellaneous" msgstr "Varios" @@ -6057,12 +6175,12 @@ msgstr "Mis otros canales" msgid "Communications" msgstr "Comunicaciones" -#: ../../Zotlabs/Module/Profiles.php:823 ../../include/channel.php:1280 +#: ../../Zotlabs/Module/Profiles.php:823 ../../include/channel.php:1316 msgid "Profile Image" msgstr "Imagen del perfil" -#: ../../Zotlabs/Module/Profiles.php:833 ../../include/channel.php:1262 -#: ../../include/nav.php:144 +#: ../../Zotlabs/Module/Profiles.php:833 ../../include/channel.php:1297 +#: ../../include/nav.php:151 msgid "Edit Profiles" msgstr "Editar perfiles" @@ -6079,7 +6197,7 @@ msgid "Create a new channel" msgstr "Crear un nuevo canal" #: ../../Zotlabs/Module/Manage.php:170 ../../Zotlabs/Lib/Apps.php:234 -#: ../../include/nav.php:129 ../../include/nav.php:215 +#: ../../include/nav.php:136 ../../include/nav.php:222 msgid "Channel Manager" msgstr "Administración de canales" @@ -6113,12 +6231,6 @@ msgstr "%d nuevas solicitudes de conexión" msgid "Delegated Channel" msgstr "Canal delegado" -#: ../../Zotlabs/Module/Cards.php:38 ../../Zotlabs/Module/Cards.php:178 -#: ../../Zotlabs/Lib/Apps.php:224 ../../include/conversation.php:1873 -#: ../../include/features.php:122 ../../include/nav.php:479 -msgid "Cards" -msgstr "Fichas" - #: ../../Zotlabs/Module/Cards.php:95 msgid "Add Card" msgstr "Añadir una ficha" @@ -6139,7 +6251,7 @@ msgstr "Nombre del sitio" msgid "Administrator" msgstr "Administrador" -#: ../../Zotlabs/Module/Siteinfo.php:26 ../../Zotlabs/Module/Register.php:221 +#: ../../Zotlabs/Module/Siteinfo.php:26 ../../Zotlabs/Module/Register.php:229 msgid "Terms of Service" msgstr "Términos del servicio" @@ -6174,7 +6286,7 @@ msgid "No ratings" msgstr "Ninguna valoración" #: ../../Zotlabs/Module/Ratings.php:97 ../../Zotlabs/Module/Pubsites.php:35 -#: ../../include/conversation.php:1065 +#: ../../include/conversation.php:1082 msgid "Ratings" msgstr "Valoraciones" @@ -6207,7 +6319,7 @@ msgid "Export selected" msgstr "Exportar los elementos seleccionados" #: ../../Zotlabs/Module/Webpages.php:237 ../../Zotlabs/Lib/Apps.php:238 -#: ../../include/conversation.php:1884 ../../include/nav.php:491 +#: ../../include/conversation.php:1912 ../../include/nav.php:513 msgid "Webpages" msgstr "Páginas web" @@ -6249,13 +6361,13 @@ msgid "" " password." msgstr "Los cambios en el nombre de un canal no está permitida hasta pasadas 48 horas desde el cambio de contraseña de la cuenta." -#: ../../Zotlabs/Module/Changeaddr.php:46 ../../include/channel.php:209 -#: ../../include/channel.php:579 +#: ../../Zotlabs/Module/Changeaddr.php:46 ../../include/channel.php:214 +#: ../../include/channel.php:599 msgid "Reserved nickname. Please choose another." msgstr "Sobrenombre en uso. Por favor, elija otro." -#: ../../Zotlabs/Module/Changeaddr.php:51 ../../include/channel.php:214 -#: ../../include/channel.php:584 +#: ../../Zotlabs/Module/Changeaddr.php:51 ../../include/channel.php:219 +#: ../../include/channel.php:604 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." @@ -6341,7 +6453,8 @@ msgstr "correo enviado" msgid "Delivery report for %1$s" msgstr "Informe de entrega para %1$s" -#: ../../Zotlabs/Module/Dreport.php:151 ../../Zotlabs/Widget/Wiki_pages.php:60 +#: ../../Zotlabs/Module/Dreport.php:151 ../../Zotlabs/Widget/Wiki_pages.php:39 +#: ../../Zotlabs/Widget/Wiki_pages.php:96 msgid "Options" msgstr "Opciones" @@ -6366,7 +6479,7 @@ msgid "*" msgstr "*" #: ../../Zotlabs/Module/Sources.php:96 -#: ../../Zotlabs/Widget/Settings_menu.php:125 ../../include/features.php:218 +#: ../../Zotlabs/Widget/Settings_menu.php:125 ../../include/features.php:228 msgid "Channel Sources" msgstr "Orígenes de los contenidos del canal" @@ -6422,200 +6535,200 @@ msgstr "Fuente eliminada" msgid "Unable to remove source." msgstr "No se puede eliminar la fuente." -#: ../../Zotlabs/Module/Like.php:19 +#: ../../Zotlabs/Module/Like.php:22 msgid "Like/Dislike" msgstr "Me gusta/No me gusta" -#: ../../Zotlabs/Module/Like.php:24 +#: ../../Zotlabs/Module/Like.php:27 msgid "This action is restricted to members." msgstr "Esta acción está restringida solo para miembros." -#: ../../Zotlabs/Module/Like.php:25 +#: ../../Zotlabs/Module/Like.php:28 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 "Por favor, <a href=\"rmagic\">identifíquese con su $Projectname ID</a> o <a href=\"register\">rregístrese como un nuevo $Projectname member</a> para continuar." -#: ../../Zotlabs/Module/Like.php:105 ../../Zotlabs/Module/Like.php:131 -#: ../../Zotlabs/Module/Like.php:169 +#: ../../Zotlabs/Module/Like.php:108 ../../Zotlabs/Module/Like.php:134 +#: ../../Zotlabs/Module/Like.php:172 msgid "Invalid request." msgstr "Solicitud incorrecta." -#: ../../Zotlabs/Module/Like.php:117 ../../include/conversation.php:122 +#: ../../Zotlabs/Module/Like.php:120 ../../include/conversation.php:122 msgid "channel" msgstr "el canal" -#: ../../Zotlabs/Module/Like.php:146 +#: ../../Zotlabs/Module/Like.php:149 msgid "thing" msgstr "elemento" -#: ../../Zotlabs/Module/Like.php:192 +#: ../../Zotlabs/Module/Like.php:195 msgid "Channel unavailable." msgstr "Canal no disponible." -#: ../../Zotlabs/Module/Like.php:240 +#: ../../Zotlabs/Module/Like.php:243 msgid "Previous action reversed." msgstr "Acción anterior revocada." -#: ../../Zotlabs/Module/Like.php:423 ../../addon/diaspora/Receiver.php:1453 -#: ../../addon/pubcrawl/as.php:1323 ../../include/conversation.php:160 +#: ../../Zotlabs/Module/Like.php:435 ../../addon/diaspora/Receiver.php:1462 +#: ../../addon/pubcrawl/as.php:1330 ../../include/conversation.php:160 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "A %1$s le gusta %3$s de %2$s" -#: ../../Zotlabs/Module/Like.php:425 ../../addon/pubcrawl/as.php:1325 +#: ../../Zotlabs/Module/Like.php:437 ../../addon/pubcrawl/as.php:1332 #: ../../include/conversation.php:163 #, 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" -#: ../../Zotlabs/Module/Like.php:427 +#: ../../Zotlabs/Module/Like.php:439 #, php-format msgid "%1$s agrees with %2$s's %3$s" msgstr "%3$s de %2$s: %1$s está de acuerdo" -#: ../../Zotlabs/Module/Like.php:429 +#: ../../Zotlabs/Module/Like.php:441 #, php-format msgid "%1$s doesn't agree with %2$s's %3$s" msgstr "%3$s de %2$s: %1$s no está de acuerdo" -#: ../../Zotlabs/Module/Like.php:431 +#: ../../Zotlabs/Module/Like.php:443 #, php-format msgid "%1$s abstains from a decision on %2$s's %3$s" msgstr "%3$s de %2$s: %1$s se abstiene" -#: ../../Zotlabs/Module/Like.php:433 +#: ../../Zotlabs/Module/Like.php:445 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "%3$s de %2$s: %1$s participa" -#: ../../Zotlabs/Module/Like.php:435 +#: ../../Zotlabs/Module/Like.php:447 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "%3$s de %2$s: %1$s no participa" -#: ../../Zotlabs/Module/Like.php:437 +#: ../../Zotlabs/Module/Like.php:449 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "%3$s de %2$s: %1$s quizá participe" -#: ../../Zotlabs/Module/Like.php:547 +#: ../../Zotlabs/Module/Like.php:561 msgid "Action completed." msgstr "Acción completada." -#: ../../Zotlabs/Module/Like.php:548 +#: ../../Zotlabs/Module/Like.php:562 msgid "Thank you." msgstr "Gracias." -#: ../../Zotlabs/Module/Directory.php:245 +#: ../../Zotlabs/Module/Directory.php:250 #, php-format msgid "%d rating" msgid_plural "%d ratings" msgstr[0] "%d valoración" msgstr[1] "%d valoraciones" -#: ../../Zotlabs/Module/Directory.php:256 +#: ../../Zotlabs/Module/Directory.php:261 msgid "Gender: " msgstr "Género:" -#: ../../Zotlabs/Module/Directory.php:258 +#: ../../Zotlabs/Module/Directory.php:263 msgid "Status: " msgstr "Estado:" -#: ../../Zotlabs/Module/Directory.php:260 +#: ../../Zotlabs/Module/Directory.php:265 msgid "Homepage: " msgstr "Página personal:" -#: ../../Zotlabs/Module/Directory.php:309 ../../include/channel.php:1516 +#: ../../Zotlabs/Module/Directory.php:314 ../../include/channel.php:1564 msgid "Age:" msgstr "Edad:" -#: ../../Zotlabs/Module/Directory.php:314 ../../include/channel.php:1352 -#: ../../include/event.php:52 ../../include/event.php:84 +#: ../../Zotlabs/Module/Directory.php:319 ../../include/channel.php:1392 +#: ../../include/event.php:53 ../../include/event.php:85 msgid "Location:" msgstr "Ubicación:" -#: ../../Zotlabs/Module/Directory.php:320 +#: ../../Zotlabs/Module/Directory.php:325 msgid "Description:" msgstr "Descripción:" -#: ../../Zotlabs/Module/Directory.php:325 ../../include/channel.php:1532 +#: ../../Zotlabs/Module/Directory.php:330 ../../include/channel.php:1580 msgid "Hometown:" msgstr "Lugar de nacimiento:" -#: ../../Zotlabs/Module/Directory.php:327 ../../include/channel.php:1540 +#: ../../Zotlabs/Module/Directory.php:332 ../../include/channel.php:1588 msgid "About:" msgstr "Sobre mí:" -#: ../../Zotlabs/Module/Directory.php:328 ../../Zotlabs/Module/Suggest.php:56 +#: ../../Zotlabs/Module/Directory.php:333 ../../Zotlabs/Module/Suggest.php:56 #: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Widget/Suggestions.php:44 -#: ../../include/conversation.php:1035 ../../include/channel.php:1337 +#: ../../include/conversation.php:1052 ../../include/channel.php:1377 #: ../../include/connections.php:111 msgid "Connect" msgstr "Conectar" -#: ../../Zotlabs/Module/Directory.php:329 +#: ../../Zotlabs/Module/Directory.php:334 msgid "Public Forum:" msgstr "Foro público:" -#: ../../Zotlabs/Module/Directory.php:332 +#: ../../Zotlabs/Module/Directory.php:337 msgid "Keywords: " msgstr "Palabras clave:" -#: ../../Zotlabs/Module/Directory.php:335 +#: ../../Zotlabs/Module/Directory.php:340 msgid "Don't suggest" msgstr "No sugerir:" -#: ../../Zotlabs/Module/Directory.php:337 -msgid "Common connections:" -msgstr "Conexiones comunes:" +#: ../../Zotlabs/Module/Directory.php:342 +msgid "Common connections (estimated):" +msgstr "Conexiones comunes (estimadas): " -#: ../../Zotlabs/Module/Directory.php:386 +#: ../../Zotlabs/Module/Directory.php:391 msgid "Global Directory" msgstr "Directorio global:" -#: ../../Zotlabs/Module/Directory.php:386 +#: ../../Zotlabs/Module/Directory.php:391 msgid "Local Directory" msgstr "Directorio local:" -#: ../../Zotlabs/Module/Directory.php:392 +#: ../../Zotlabs/Module/Directory.php:397 msgid "Finding:" msgstr "Encontrar:" -#: ../../Zotlabs/Module/Directory.php:395 ../../Zotlabs/Module/Suggest.php:64 +#: ../../Zotlabs/Module/Directory.php:400 ../../Zotlabs/Module/Suggest.php:64 #: ../../include/contact_widgets.php:24 msgid "Channel Suggestions" msgstr "Sugerencias de canales" -#: ../../Zotlabs/Module/Directory.php:397 +#: ../../Zotlabs/Module/Directory.php:402 msgid "next page" msgstr "siguiente página" -#: ../../Zotlabs/Module/Directory.php:397 +#: ../../Zotlabs/Module/Directory.php:402 msgid "previous page" msgstr "página anterior" -#: ../../Zotlabs/Module/Directory.php:398 +#: ../../Zotlabs/Module/Directory.php:403 msgid "Sort options" msgstr "Ordenar opciones" -#: ../../Zotlabs/Module/Directory.php:399 +#: ../../Zotlabs/Module/Directory.php:404 msgid "Alphabetic" msgstr "Alfabético" -#: ../../Zotlabs/Module/Directory.php:400 +#: ../../Zotlabs/Module/Directory.php:405 msgid "Reverse Alphabetic" msgstr "Alfabético inverso" -#: ../../Zotlabs/Module/Directory.php:401 +#: ../../Zotlabs/Module/Directory.php:406 msgid "Newest to Oldest" msgstr "De más nuevo a más antiguo" -#: ../../Zotlabs/Module/Directory.php:402 +#: ../../Zotlabs/Module/Directory.php:407 msgid "Oldest to Newest" msgstr "De más antiguo a más nuevo" -#: ../../Zotlabs/Module/Directory.php:419 +#: ../../Zotlabs/Module/Directory.php:424 msgid "No entries (some entries may be hidden)." msgstr "Sin entradas (algunas entradas pueden estar ocultas)." @@ -6698,7 +6811,7 @@ msgid "Subject:" msgstr "Asunto:" #: ../../Zotlabs/Module/Mail.php:287 ../../Zotlabs/Module/Mail.php:429 -#: ../../include/conversation.php:1365 +#: ../../include/conversation.php:1382 msgid "Attach file" msgstr "Adjuntar fichero" @@ -6707,7 +6820,7 @@ msgid "Send" msgstr "Enviar" #: ../../Zotlabs/Module/Mail.php:292 ../../Zotlabs/Module/Mail.php:434 -#: ../../include/conversation.php:1410 +#: ../../include/conversation.php:1427 msgid "Set expiration date" msgstr "Configurar fecha de caducidad" @@ -6783,28 +6896,28 @@ msgstr "Software" msgid "Rate" msgstr "Valorar" -#: ../../Zotlabs/Module/Impel.php:41 ../../include/bbcode.php:263 +#: ../../Zotlabs/Module/Impel.php:43 ../../include/bbcode.php:263 msgid "webpage" msgstr "página web" -#: ../../Zotlabs/Module/Impel.php:46 ../../include/bbcode.php:269 +#: ../../Zotlabs/Module/Impel.php:48 ../../include/bbcode.php:269 msgid "block" msgstr "bloque" -#: ../../Zotlabs/Module/Impel.php:51 ../../include/bbcode.php:266 +#: ../../Zotlabs/Module/Impel.php:53 ../../include/bbcode.php:266 msgid "layout" msgstr "plantilla" -#: ../../Zotlabs/Module/Impel.php:58 ../../include/bbcode.php:272 +#: ../../Zotlabs/Module/Impel.php:60 ../../include/bbcode.php:272 msgid "menu" msgstr "menú" -#: ../../Zotlabs/Module/Impel.php:181 +#: ../../Zotlabs/Module/Impel.php:183 #, php-format msgid "%s element installed" msgstr "%s elemento instalado" -#: ../../Zotlabs/Module/Impel.php:184 +#: ../../Zotlabs/Module/Impel.php:186 #, php-format msgid "%s element installation failed" msgstr "Elemento con instalación fallida: %s" @@ -6833,7 +6946,7 @@ msgstr "Escriba un nombre de carpeta" msgid "or select an existing folder (doubleclick)" msgstr "o seleccione una (con un doble click)" -#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Lib/ThreadItem.php:141 +#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Lib/ThreadItem.php:151 msgid "Save to Folder" msgstr "Guardar en carpeta" @@ -6855,82 +6968,86 @@ msgstr "Por favor, confirme que acepta los Términos del servicio. El registro h msgid "Passwords do not match." msgstr "Las contraseñas no coinciden." -#: ../../Zotlabs/Module/Register.php:131 +#: ../../Zotlabs/Module/Register.php:127 ../../Zotlabs/Module/Register.php:137 msgid "" "Registration successful. Please check your email for validation " "instructions." msgstr "Registro realizado con éxito. Por favor, compruebe su correo electrónico para ver las instrucciones para validarlo." -#: ../../Zotlabs/Module/Register.php:137 +#: ../../Zotlabs/Module/Register.php:135 +msgid "Registration successful. Continue to create your first channel..." +msgstr "Registro exitoso. Continúe creando tu primer canal..." + +#: ../../Zotlabs/Module/Register.php:144 msgid "Your registration is pending approval by the site owner." msgstr "Su registro está pendiente de aprobación por el propietario del sitio." -#: ../../Zotlabs/Module/Register.php:140 +#: ../../Zotlabs/Module/Register.php:147 msgid "Your registration can not be processed." msgstr "Su registro no puede ser procesado." -#: ../../Zotlabs/Module/Register.php:184 +#: ../../Zotlabs/Module/Register.php:192 msgid "Registration on this hub is disabled." msgstr "El registro está deshabilitado en este sitio." -#: ../../Zotlabs/Module/Register.php:193 +#: ../../Zotlabs/Module/Register.php:201 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:194 +#: ../../Zotlabs/Module/Register.php:202 msgid "<a href=\"pubsites\">Register at another affiliated hub.</a>" msgstr "<a href=\"pubsites\">Registrarse en otro hub afiliado.</a>" -#: ../../Zotlabs/Module/Register.php:204 +#: ../../Zotlabs/Module/Register.php:212 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "Este sitio ha excedido el límite de inscripción diaria de cuentas. Por favor, inténtelo de nuevo mañana." -#: ../../Zotlabs/Module/Register.php:227 +#: ../../Zotlabs/Module/Register.php:235 #, php-format msgid "I accept the %s for this website" msgstr "Acepto los %s de este sitio" -#: ../../Zotlabs/Module/Register.php:229 +#: ../../Zotlabs/Module/Register.php:241 #, php-format -msgid "I am over 13 years of age and accept the %s for this website" -msgstr "Tengo más de 13 años de edad y acepto los %s de este sitio" +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:233 +#: ../../Zotlabs/Module/Register.php:245 msgid "Your email address" msgstr "Su dirección de correo electrónico" -#: ../../Zotlabs/Module/Register.php:234 +#: ../../Zotlabs/Module/Register.php:246 msgid "Choose a password" msgstr "Elija una contraseña" -#: ../../Zotlabs/Module/Register.php:235 +#: ../../Zotlabs/Module/Register.php:247 msgid "Please re-enter your password" msgstr "Por favor, vuelva a escribir su contraseña" -#: ../../Zotlabs/Module/Register.php:236 +#: ../../Zotlabs/Module/Register.php:248 msgid "Please enter your invitation code" msgstr "Por favor, introduzca el código de su invitación" -#: ../../Zotlabs/Module/Register.php:241 +#: ../../Zotlabs/Module/Register.php:253 msgid "no" msgstr "no" -#: ../../Zotlabs/Module/Register.php:241 +#: ../../Zotlabs/Module/Register.php:253 msgid "yes" msgstr "sí" -#: ../../Zotlabs/Module/Register.php:256 +#: ../../Zotlabs/Module/Register.php:268 msgid "Membership on this site is by invitation only." msgstr "Para registrarse en este sitio es necesaria una invitación." -#: ../../Zotlabs/Module/Register.php:268 ../../boot.php:1620 -#: ../../include/nav.php:189 +#: ../../Zotlabs/Module/Register.php:280 ../../boot.php:1645 +#: ../../include/nav.php:196 msgid "Register" msgstr "Registrarse" -#: ../../Zotlabs/Module/Register.php:269 +#: ../../Zotlabs/Module/Register.php:281 msgid "" "This site may require email verification after submitting this form. If you " "are returned to a login page, please check your email for instructions." @@ -6941,30 +7058,30 @@ msgstr "Este sitio puede requerir una verificación de correo electrónico despu msgid "Cover Photos" msgstr "Imágenes de portada del perfil" -#: ../../Zotlabs/Module/Cover_photo.php:237 ../../include/items.php:4320 +#: ../../Zotlabs/Module/Cover_photo.php:237 ../../include/items.php:4478 msgid "female" msgstr "mujer" -#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4321 +#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4479 #, php-format msgid "%1$s updated her %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../Zotlabs/Module/Cover_photo.php:239 ../../include/items.php:4322 +#: ../../Zotlabs/Module/Cover_photo.php:239 ../../include/items.php:4480 msgid "male" msgstr "hombre" -#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/items.php:4323 +#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/items.php:4481 #, php-format msgid "%1$s updated his %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../Zotlabs/Module/Cover_photo.php:242 ../../include/items.php:4325 +#: ../../Zotlabs/Module/Cover_photo.php:242 ../../include/items.php:4483 #, php-format msgid "%1$s updated their %2$s" msgstr "%1$s ha actualizado su %2$s" -#: ../../Zotlabs/Module/Cover_photo.php:244 ../../include/channel.php:1980 +#: ../../Zotlabs/Module/Cover_photo.php:244 ../../include/channel.php:2053 msgid "cover photo" msgstr "Imagen de portada del perfil" @@ -6976,8 +7093,8 @@ msgstr "Subir imagen de portada del perfil" msgid "Documentation Search" msgstr "Búsqueda de Documentación" -#: ../../Zotlabs/Module/Help.php:80 ../../include/conversation.php:1804 -#: ../../include/nav.php:412 +#: ../../Zotlabs/Module/Help.php:80 ../../include/conversation.php:1821 +#: ../../include/nav.php:423 msgid "About" msgstr "Mi perfil" @@ -7001,7 +7118,11 @@ msgstr "Documentación de $Projectname" msgid "Contents" msgstr "Contenidos" -#: ../../Zotlabs/Module/Display.php:340 +#: ../../Zotlabs/Module/Display.php:349 +msgid "Article" +msgstr "Artículo" + +#: ../../Zotlabs/Module/Display.php:401 msgid "Item has been removed." msgstr "Se ha eliminado el elemento." @@ -7021,35 +7142,35 @@ msgstr "Seleccionar una etiqueta para eliminar:" msgid "No such group" msgstr "No se encuentra el grupo" -#: ../../Zotlabs/Module/Network.php:136 +#: ../../Zotlabs/Module/Network.php:137 msgid "No such channel" msgstr "No se encuentra el canal" -#: ../../Zotlabs/Module/Network.php:141 +#: ../../Zotlabs/Module/Network.php:142 msgid "forum" msgstr "foro" -#: ../../Zotlabs/Module/Network.php:153 +#: ../../Zotlabs/Module/Network.php:154 msgid "Search Results For:" msgstr "Buscar resultados para:" -#: ../../Zotlabs/Module/Network.php:221 +#: ../../Zotlabs/Module/Network.php:222 msgid "Privacy group is empty" msgstr "El grupo de canales está vacío" -#: ../../Zotlabs/Module/Network.php:230 +#: ../../Zotlabs/Module/Network.php:231 msgid "Privacy group: " msgstr "Grupo de canales: " -#: ../../Zotlabs/Module/Network.php:256 +#: ../../Zotlabs/Module/Network.php:257 msgid "Invalid connection." msgstr "Conexión no válida." -#: ../../Zotlabs/Module/Network.php:275 ../../addon/redred/redred.php:65 +#: ../../Zotlabs/Module/Network.php:276 ../../addon/redred/redred.php:65 msgid "Invalid channel." msgstr "El canal no es válido." -#: ../../Zotlabs/Module/Acl.php:351 +#: ../../Zotlabs/Module/Acl.php:358 msgid "network" msgstr "red" @@ -7071,40 +7192,40 @@ msgstr "Permiso denegado" msgid "File not found." msgstr "Fichero no encontrado." -#: ../../Zotlabs/Module/Filestorage.php:137 +#: ../../Zotlabs/Module/Filestorage.php:142 msgid "Edit file permissions" msgstr "Modificar los permisos del fichero" -#: ../../Zotlabs/Module/Filestorage.php:149 +#: ../../Zotlabs/Module/Filestorage.php:154 msgid "Set/edit permissions" msgstr "Establecer/editar los permisos" -#: ../../Zotlabs/Module/Filestorage.php:150 +#: ../../Zotlabs/Module/Filestorage.php:155 msgid "Include all files and sub folders" msgstr "Incluir todos los ficheros y subcarpetas" -#: ../../Zotlabs/Module/Filestorage.php:151 +#: ../../Zotlabs/Module/Filestorage.php:156 msgid "Return to file list" msgstr "Volver a la lista de ficheros" -#: ../../Zotlabs/Module/Filestorage.php:153 +#: ../../Zotlabs/Module/Filestorage.php:158 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/Module/Filestorage.php:154 +#: ../../Zotlabs/Module/Filestorage.php:159 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" -#: ../../Zotlabs/Module/Filestorage.php:156 +#: ../../Zotlabs/Module/Filestorage.php:161 msgid "Share this file" msgstr "Compartir este fichero" -#: ../../Zotlabs/Module/Filestorage.php:157 +#: ../../Zotlabs/Module/Filestorage.php:162 msgid "Show URL to this file" msgstr "Mostrar la dirección de este fichero" -#: ../../Zotlabs/Module/Filestorage.php:158 -#: ../../Zotlabs/Storage/Browser.php:351 +#: ../../Zotlabs/Module/Filestorage.php:163 +#: ../../Zotlabs/Storage/Browser.php:394 msgid "Show in your contacts shared folder" msgstr "Mostrar en la carpeta compartida con sus contactos" @@ -7238,7 +7359,7 @@ msgid "" "Password reset failed." msgstr "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado." -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1648 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1673 msgid "Password Reset" msgstr "Restablecer la contraseña" @@ -7283,8 +7404,8 @@ msgstr "Introduzca y envíe su dirección de correo electrónico para el restabl msgid "Email Address" msgstr "Dirección de correo electrónico" -#: ../../Zotlabs/Module/Notifications.php:43 -#: ../../Zotlabs/Lib/ThreadItem.php:397 +#: ../../Zotlabs/Module/Notifications.php:62 +#: ../../Zotlabs/Lib/ThreadItem.php:408 msgid "Mark all seen" msgstr "Marcar todo como visto" @@ -7336,31 +7457,30 @@ msgstr "Servicio de compartición de Firefox" msgid "Remote Diagnostics" msgstr "Diagnóstico remoto" -#: ../../Zotlabs/Lib/Apps.php:232 ../../include/features.php:342 +#: ../../Zotlabs/Lib/Apps.php:232 ../../include/features.php:352 msgid "Suggest Channels" msgstr "Sugerir canales" -#: ../../Zotlabs/Lib/Apps.php:233 ../../boot.php:1639 -#: ../../include/nav.php:153 ../../include/nav.php:157 +#: ../../Zotlabs/Lib/Apps.php:233 ../../boot.php:1664 +#: ../../include/nav.php:160 ../../include/nav.php:164 msgid "Login" msgstr "Iniciar sesión" -#: ../../Zotlabs/Lib/Apps.php:235 ../../include/nav.php:98 +#: ../../Zotlabs/Lib/Apps.php:235 ../../include/nav.php:105 msgid "Activity" msgstr "Actividad" -#: ../../Zotlabs/Lib/Apps.php:239 ../../include/conversation.php:1900 -#: ../../include/features.php:95 ../../include/nav.php:507 +#: ../../Zotlabs/Lib/Apps.php:239 ../../include/conversation.php:1928 +#: ../../include/features.php:95 ../../include/nav.php:529 msgid "Wiki" msgstr "Wiki" -#: ../../Zotlabs/Lib/Apps.php:240 ../../include/nav.php:102 +#: ../../Zotlabs/Lib/Apps.php:240 ../../include/nav.php:109 msgid "Channel Home" msgstr "Mi canal" -#: ../../Zotlabs/Lib/Apps.php:243 ../../include/conversation.php:1833 -#: ../../include/conversation.php:1836 ../../include/nav.php:124 -#: ../../include/nav.php:441 ../../include/nav.php:444 +#: ../../Zotlabs/Lib/Apps.php:243 ../../include/conversation.php:1850 +#: ../../include/conversation.php:1853 ../../include/nav.php:131 msgid "Events" msgstr "Eventos" @@ -7368,7 +7488,7 @@ msgstr "Eventos" msgid "Directory" msgstr "Directorio" -#: ../../Zotlabs/Lib/Apps.php:246 ../../include/nav.php:116 +#: ../../Zotlabs/Lib/Apps.php:246 ../../include/nav.php:123 msgid "Mail" msgstr "Correo" @@ -7418,14 +7538,22 @@ msgstr "Comprar" msgid "Undelete" msgstr "Recuperar" -#: ../../Zotlabs/Lib/Apps.php:407 +#: ../../Zotlabs/Lib/Apps.php:409 msgid "Add to app-tray" msgstr "Añadir a la bandeja de aplicaciones" -#: ../../Zotlabs/Lib/Apps.php:408 +#: ../../Zotlabs/Lib/Apps.php:410 msgid "Remove from app-tray" msgstr "Quitar de la bandeja de aplicaciones" +#: ../../Zotlabs/Lib/Apps.php:411 +msgid "Pin to navbar" +msgstr "Fijar en la barra de navegación" + +#: ../../Zotlabs/Lib/Apps.php:412 +msgid "Unpin from navbar" +msgstr "Quitar de la barra de navegación" + #: ../../Zotlabs/Lib/Permcat.php:58 msgctxt "permcat" msgid "default" @@ -7447,71 +7575,71 @@ msgid "publisher" msgstr "editor" #: ../../Zotlabs/Lib/NativeWikiPage.php:42 -#: ../../Zotlabs/Lib/NativeWikiPage.php:90 +#: ../../Zotlabs/Lib/NativeWikiPage.php:93 msgid "(No Title)" msgstr "(Sin título)" -#: ../../Zotlabs/Lib/NativeWikiPage.php:104 +#: ../../Zotlabs/Lib/NativeWikiPage.php:107 msgid "Wiki page create failed." msgstr "Se ha producido un error en la creación de la página wiki." -#: ../../Zotlabs/Lib/NativeWikiPage.php:117 +#: ../../Zotlabs/Lib/NativeWikiPage.php:120 msgid "Wiki not found." msgstr "No se ha encontrado el wiki." -#: ../../Zotlabs/Lib/NativeWikiPage.php:128 +#: ../../Zotlabs/Lib/NativeWikiPage.php:131 msgid "Destination name already exists" msgstr "El nombre de destino ya existe" -#: ../../Zotlabs/Lib/NativeWikiPage.php:160 -#: ../../Zotlabs/Lib/NativeWikiPage.php:355 +#: ../../Zotlabs/Lib/NativeWikiPage.php:163 +#: ../../Zotlabs/Lib/NativeWikiPage.php:359 msgid "Page not found" msgstr "No se ha encontrado la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:191 +#: ../../Zotlabs/Lib/NativeWikiPage.php:194 msgid "Error reading page content" msgstr "Se ha producido un error al leer el contenido de la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:347 -#: ../../Zotlabs/Lib/NativeWikiPage.php:396 -#: ../../Zotlabs/Lib/NativeWikiPage.php:463 -#: ../../Zotlabs/Lib/NativeWikiPage.php:504 +#: ../../Zotlabs/Lib/NativeWikiPage.php:350 +#: ../../Zotlabs/Lib/NativeWikiPage.php:400 +#: ../../Zotlabs/Lib/NativeWikiPage.php:467 +#: ../../Zotlabs/Lib/NativeWikiPage.php:508 msgid "Error reading wiki" msgstr "Se ha producido un error al leer el wiki" -#: ../../Zotlabs/Lib/NativeWikiPage.php:384 +#: ../../Zotlabs/Lib/NativeWikiPage.php:388 msgid "Page update failed." msgstr "Se ha producido un error al actualizar la página." -#: ../../Zotlabs/Lib/NativeWikiPage.php:418 +#: ../../Zotlabs/Lib/NativeWikiPage.php:422 msgid "Nothing deleted" msgstr "No se ha eliminado nada" -#: ../../Zotlabs/Lib/NativeWikiPage.php:484 +#: ../../Zotlabs/Lib/NativeWikiPage.php:488 msgid "Compare: object not found." msgstr "No se ha encontrado un objeto para comparar." -#: ../../Zotlabs/Lib/NativeWikiPage.php:490 +#: ../../Zotlabs/Lib/NativeWikiPage.php:494 msgid "Page updated" msgstr "Se ha actualizado la página" -#: ../../Zotlabs/Lib/NativeWikiPage.php:493 +#: ../../Zotlabs/Lib/NativeWikiPage.php:497 msgid "Untitled" msgstr "Sin título" -#: ../../Zotlabs/Lib/NativeWikiPage.php:499 +#: ../../Zotlabs/Lib/NativeWikiPage.php:503 msgid "Wiki resource_id required for git commit" msgstr "Se necesita Wiki resource_id para el git commit" -#: ../../Zotlabs/Lib/NativeWikiPage.php:555 +#: ../../Zotlabs/Lib/NativeWikiPage.php:559 #: ../../Zotlabs/Widget/Wiki_page_history.php:23 msgctxt "wiki_history" msgid "Message" msgstr "Mensaje" -#: ../../Zotlabs/Lib/NativeWikiPage.php:593 -#: ../../addon/gitwiki/gitwiki_backend.php:579 ../../include/bbcode.php:672 -#: ../../include/bbcode.php:818 +#: ../../Zotlabs/Lib/NativeWikiPage.php:597 +#: ../../addon/gitwiki/gitwiki_backend.php:579 ../../include/bbcode.php:674 +#: ../../include/bbcode.php:822 msgid "Different viewers will see this text differently" msgstr "Visitantes diferentes verán este texto de forma distinta" @@ -7578,23 +7706,23 @@ msgstr "Este es su ajuste predeterminado para establecer quién puede ver su rep msgid "This is your default setting for the audience of your webpages" msgstr "Este es el ajuste predeterminado para establecer la audiencia de sus páginas web" -#: ../../Zotlabs/Lib/Chatroom.php:27 +#: ../../Zotlabs/Lib/Chatroom.php:23 msgid "Missing room name" msgstr "Sala de chat sin nombre" -#: ../../Zotlabs/Lib/Chatroom.php:36 +#: ../../Zotlabs/Lib/Chatroom.php:32 msgid "Duplicate room name" msgstr "Nombre de sala duplicado." -#: ../../Zotlabs/Lib/Chatroom.php:86 ../../Zotlabs/Lib/Chatroom.php:94 +#: ../../Zotlabs/Lib/Chatroom.php:82 ../../Zotlabs/Lib/Chatroom.php:90 msgid "Invalid room specifier." msgstr "Especificador de sala no válido." -#: ../../Zotlabs/Lib/Chatroom.php:126 +#: ../../Zotlabs/Lib/Chatroom.php:122 msgid "Room not found." msgstr "Sala no encontrada." -#: ../../Zotlabs/Lib/Chatroom.php:147 +#: ../../Zotlabs/Lib/Chatroom.php:143 msgid "Room is full" msgstr "La sala está llena." @@ -7820,11 +7948,11 @@ msgstr "Por favor, visite %s para aprobar o rechazar la sugerencia." msgid "[$Projectname:Notify]" msgstr "[$Projectname:Aviso]" -#: ../../Zotlabs/Lib/Enotify.php:789 +#: ../../Zotlabs/Lib/Enotify.php:793 msgid "created a new post" msgstr "ha creado una nueva entrada" -#: ../../Zotlabs/Lib/Enotify.php:790 +#: ../../Zotlabs/Lib/Enotify.php:794 #, php-format msgid "commented on %s's post" msgstr "ha comentado la entrada de %s" @@ -7847,208 +7975,208 @@ msgstr "Error de actualización en %s" msgid "Update %s failed. See error logs." msgstr "La actualización %s ha fallado. Mire el informe de errores." -#: ../../Zotlabs/Lib/ThreadItem.php:97 ../../include/conversation.php:681 +#: ../../Zotlabs/Lib/ThreadItem.php:97 ../../include/conversation.php:697 msgid "Private Message" msgstr "Mensaje Privado" -#: ../../Zotlabs/Lib/ThreadItem.php:137 ../../include/conversation.php:673 +#: ../../Zotlabs/Lib/ThreadItem.php:147 ../../include/conversation.php:689 msgid "Select" msgstr "Seleccionar" -#: ../../Zotlabs/Lib/ThreadItem.php:162 +#: ../../Zotlabs/Lib/ThreadItem.php:172 msgid "I will attend" msgstr "Participaré" -#: ../../Zotlabs/Lib/ThreadItem.php:162 +#: ../../Zotlabs/Lib/ThreadItem.php:172 msgid "I will not attend" msgstr "No participaré" -#: ../../Zotlabs/Lib/ThreadItem.php:162 +#: ../../Zotlabs/Lib/ThreadItem.php:172 msgid "I might attend" msgstr "Quizá participe" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:182 msgid "I agree" msgstr "Estoy de acuerdo" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:182 msgid "I disagree" msgstr "No estoy de acuerdo" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:182 msgid "I abstain" msgstr "Me abstengo" -#: ../../Zotlabs/Lib/ThreadItem.php:228 +#: ../../Zotlabs/Lib/ThreadItem.php:238 msgid "Add Star" msgstr "Destacar añadiendo una estrella" -#: ../../Zotlabs/Lib/ThreadItem.php:229 +#: ../../Zotlabs/Lib/ThreadItem.php:239 msgid "Remove Star" msgstr "Eliminar estrella" -#: ../../Zotlabs/Lib/ThreadItem.php:230 +#: ../../Zotlabs/Lib/ThreadItem.php:240 msgid "Toggle Star Status" msgstr "Activar o desactivar el estado de entrada preferida" -#: ../../Zotlabs/Lib/ThreadItem.php:234 +#: ../../Zotlabs/Lib/ThreadItem.php:244 msgid "starred" msgstr "preferidas" -#: ../../Zotlabs/Lib/ThreadItem.php:244 ../../include/conversation.php:688 +#: ../../Zotlabs/Lib/ThreadItem.php:254 ../../include/conversation.php:704 msgid "Message signature validated" msgstr "Firma de mensaje validada" -#: ../../Zotlabs/Lib/ThreadItem.php:245 ../../include/conversation.php:689 +#: ../../Zotlabs/Lib/ThreadItem.php:255 ../../include/conversation.php:705 msgid "Message signature incorrect" msgstr "Firma de mensaje incorrecta" -#: ../../Zotlabs/Lib/ThreadItem.php:253 +#: ../../Zotlabs/Lib/ThreadItem.php:263 msgid "Add Tag" msgstr "Añadir etiqueta" -#: ../../Zotlabs/Lib/ThreadItem.php:271 ../../include/taxonomy.php:433 +#: ../../Zotlabs/Lib/ThreadItem.php:281 ../../include/taxonomy.php:506 msgid "like" msgstr "me gusta" -#: ../../Zotlabs/Lib/ThreadItem.php:272 ../../include/taxonomy.php:434 +#: ../../Zotlabs/Lib/ThreadItem.php:282 ../../include/taxonomy.php:507 msgid "dislike" msgstr "no me gusta" -#: ../../Zotlabs/Lib/ThreadItem.php:276 +#: ../../Zotlabs/Lib/ThreadItem.php:286 msgid "Share This" msgstr "Compartir esto" -#: ../../Zotlabs/Lib/ThreadItem.php:276 +#: ../../Zotlabs/Lib/ThreadItem.php:286 msgid "share" msgstr "compartir" -#: ../../Zotlabs/Lib/ThreadItem.php:285 +#: ../../Zotlabs/Lib/ThreadItem.php:295 msgid "Delivery Report" msgstr "Informe de transmisión" -#: ../../Zotlabs/Lib/ThreadItem.php:303 +#: ../../Zotlabs/Lib/ThreadItem.php:313 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comentario" msgstr[1] "%d comentarios" -#: ../../Zotlabs/Lib/ThreadItem.php:333 ../../Zotlabs/Lib/ThreadItem.php:334 +#: ../../Zotlabs/Lib/ThreadItem.php:343 ../../Zotlabs/Lib/ThreadItem.php:344 #, php-format msgid "View %s's profile - %s" msgstr "Ver el perfil de %s - %s" -#: ../../Zotlabs/Lib/ThreadItem.php:337 +#: ../../Zotlabs/Lib/ThreadItem.php:347 msgid "to" msgstr "a" -#: ../../Zotlabs/Lib/ThreadItem.php:338 +#: ../../Zotlabs/Lib/ThreadItem.php:348 msgid "via" msgstr "mediante" -#: ../../Zotlabs/Lib/ThreadItem.php:339 +#: ../../Zotlabs/Lib/ThreadItem.php:349 msgid "Wall-to-Wall" msgstr "De página del perfil a página del perfil (de \"muro\" a \"muro\")" -#: ../../Zotlabs/Lib/ThreadItem.php:340 +#: ../../Zotlabs/Lib/ThreadItem.php:350 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:353 ../../include/conversation.php:747 +#: ../../Zotlabs/Lib/ThreadItem.php:363 ../../include/conversation.php:763 #, php-format msgid "from %s" msgstr "desde %s" -#: ../../Zotlabs/Lib/ThreadItem.php:356 ../../include/conversation.php:750 +#: ../../Zotlabs/Lib/ThreadItem.php:366 ../../include/conversation.php:766 #, php-format msgid "last edited: %s" msgstr "último cambio: %s" -#: ../../Zotlabs/Lib/ThreadItem.php:357 ../../include/conversation.php:751 +#: ../../Zotlabs/Lib/ThreadItem.php:367 ../../include/conversation.php:767 #, php-format msgid "Expires: %s" msgstr "Caduca: %s" -#: ../../Zotlabs/Lib/ThreadItem.php:363 +#: ../../Zotlabs/Lib/ThreadItem.php:374 msgid "Attend" msgstr "Participar o asistir" -#: ../../Zotlabs/Lib/ThreadItem.php:364 +#: ../../Zotlabs/Lib/ThreadItem.php:375 msgid "Attendance Options" msgstr "Opciones de participación o asistencia" -#: ../../Zotlabs/Lib/ThreadItem.php:365 +#: ../../Zotlabs/Lib/ThreadItem.php:376 msgid "Vote" msgstr "Votar" -#: ../../Zotlabs/Lib/ThreadItem.php:366 +#: ../../Zotlabs/Lib/ThreadItem.php:377 msgid "Voting Options" msgstr "Opciones de votación" -#: ../../Zotlabs/Lib/ThreadItem.php:387 +#: ../../Zotlabs/Lib/ThreadItem.php:398 #: ../../addon/bookmarker/bookmarker.php:38 msgid "Save Bookmarks" msgstr "Guardar en Marcadores" -#: ../../Zotlabs/Lib/ThreadItem.php:388 +#: ../../Zotlabs/Lib/ThreadItem.php:399 msgid "Add to Calendar" msgstr "Añadir al calendario" -#: ../../Zotlabs/Lib/ThreadItem.php:415 ../../include/conversation.php:471 +#: ../../Zotlabs/Lib/ThreadItem.php:426 ../../include/conversation.php:483 msgid "This is an unsaved preview" msgstr "Esta es una previsualización sin guardar" -#: ../../Zotlabs/Lib/ThreadItem.php:447 ../../include/js_strings.php:7 +#: ../../Zotlabs/Lib/ThreadItem.php:458 ../../include/js_strings.php:7 #, php-format msgid "%s show all" msgstr "%s mostrar todo" -#: ../../Zotlabs/Lib/ThreadItem.php:744 ../../include/conversation.php:1360 +#: ../../Zotlabs/Lib/ThreadItem.php:755 ../../include/conversation.php:1377 msgid "Bold" msgstr "Negrita" -#: ../../Zotlabs/Lib/ThreadItem.php:745 ../../include/conversation.php:1361 +#: ../../Zotlabs/Lib/ThreadItem.php:756 ../../include/conversation.php:1378 msgid "Italic" msgstr "Itálico " -#: ../../Zotlabs/Lib/ThreadItem.php:746 ../../include/conversation.php:1362 +#: ../../Zotlabs/Lib/ThreadItem.php:757 ../../include/conversation.php:1379 msgid "Underline" msgstr "Subrayar" -#: ../../Zotlabs/Lib/ThreadItem.php:747 ../../include/conversation.php:1363 +#: ../../Zotlabs/Lib/ThreadItem.php:758 ../../include/conversation.php:1380 msgid "Quote" msgstr "Citar" -#: ../../Zotlabs/Lib/ThreadItem.php:748 ../../include/conversation.php:1364 +#: ../../Zotlabs/Lib/ThreadItem.php:759 ../../include/conversation.php:1381 msgid "Code" msgstr "Código" -#: ../../Zotlabs/Lib/ThreadItem.php:749 +#: ../../Zotlabs/Lib/ThreadItem.php:760 msgid "Image" msgstr "Imagen" -#: ../../Zotlabs/Lib/ThreadItem.php:750 +#: ../../Zotlabs/Lib/ThreadItem.php:761 msgid "Attach File" msgstr "Fichero adjunto" -#: ../../Zotlabs/Lib/ThreadItem.php:751 +#: ../../Zotlabs/Lib/ThreadItem.php:762 msgid "Insert Link" msgstr "Insertar enlace" -#: ../../Zotlabs/Lib/ThreadItem.php:752 +#: ../../Zotlabs/Lib/ThreadItem.php:763 msgid "Video" msgstr "Vídeo" -#: ../../Zotlabs/Lib/ThreadItem.php:762 +#: ../../Zotlabs/Lib/ThreadItem.php:773 msgid "Your full name (required)" msgstr "Su nombre completo (requerido)" -#: ../../Zotlabs/Lib/ThreadItem.php:763 +#: ../../Zotlabs/Lib/ThreadItem.php:774 msgid "Your email address (required)" msgstr "Su dirección de correo electrónico (requerido)" -#: ../../Zotlabs/Lib/ThreadItem.php:764 +#: ../../Zotlabs/Lib/ThreadItem.php:775 msgid "Your website URL (optional)" msgstr "La URL de su sitio web (opcional)" @@ -8064,7 +8192,7 @@ msgstr "La autenticación desde su servidor está bloqueada. Ha iniciado sesión msgid "Welcome %s. Remote authentication successful." msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente." -#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:238 +#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:284 msgid "parent" msgstr "padre" @@ -8080,7 +8208,8 @@ msgstr "Principal" msgid "Addressbook" msgstr "Libreta de direcciones" -#: ../../Zotlabs/Storage/Browser.php:140 +#: ../../Zotlabs/Storage/Browser.php:140 ../../include/nav.php:452 +#: ../../include/nav.php:455 msgid "Calendar" msgstr "Calendario" @@ -8092,48 +8221,41 @@ msgstr "Programar bandeja de entrada" msgid "Schedule Outbox" msgstr "Programar bandeja de salida" -#: ../../Zotlabs/Storage/Browser.php:226 +#: ../../Zotlabs/Storage/Browser.php:270 msgid "Total" msgstr "Total" -#: ../../Zotlabs/Storage/Browser.php:228 +#: ../../Zotlabs/Storage/Browser.php:272 msgid "Shared" msgstr "Compartido" -#: ../../Zotlabs/Storage/Browser.php:304 +#: ../../Zotlabs/Storage/Browser.php:350 #, php-format msgid "You are using %1$s of your available file storage." msgstr "Está usando %1$s de su espacio disponible para ficheros." -#: ../../Zotlabs/Storage/Browser.php:309 +#: ../../Zotlabs/Storage/Browser.php:355 #, php-format msgid "You are using %1$s of %2$s available file storage. (%3$s%)" msgstr "Está usando %1$s de %2$s que tiene a su disposición para ficheros. (%3$s%)" -#: ../../Zotlabs/Storage/Browser.php:320 +#: ../../Zotlabs/Storage/Browser.php:366 msgid "WARNING:" msgstr "ATENCIÓN: " -#: ../../Zotlabs/Storage/Browser.php:330 -msgid "" -"Please use DAV to upload large (video, audio) files.<br>See <a class=\"zrl\"" -" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop " -"Clients</a>" -msgstr "Por favor, use DAV para subir ficheros de gran tamaño (vídeo, audio).<br>Mire en <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>" - -#: ../../Zotlabs/Storage/Browser.php:334 +#: ../../Zotlabs/Storage/Browser.php:378 msgid "Create new folder" msgstr "Crear nueva carpeta" -#: ../../Zotlabs/Storage/Browser.php:336 +#: ../../Zotlabs/Storage/Browser.php:380 msgid "Upload file" msgstr "Subir fichero" -#: ../../Zotlabs/Storage/Browser.php:350 +#: ../../Zotlabs/Storage/Browser.php:393 msgid "Drop files here to immediately upload" msgstr "Arrastre los ficheros aquí para subirlos de forma inmediata" -#: ../../Zotlabs/Widget/Forums.php:85 +#: ../../Zotlabs/Widget/Forums.php:99 msgid "Forums" msgstr "Foros" @@ -8149,80 +8271,81 @@ msgstr "Lectura y escritura" msgid "Read-only" msgstr "Sólo lectura" -#: ../../Zotlabs/Widget/Cdav.php:116 +#: ../../Zotlabs/Widget/Cdav.php:117 msgid "My Calendars" msgstr "Mis calendarios" -#: ../../Zotlabs/Widget/Cdav.php:118 +#: ../../Zotlabs/Widget/Cdav.php:119 msgid "Shared Calendars" msgstr "Calendarios compartidos" -#: ../../Zotlabs/Widget/Cdav.php:122 +#: ../../Zotlabs/Widget/Cdav.php:123 msgid "Share this calendar" msgstr "Compartir este calendario" -#: ../../Zotlabs/Widget/Cdav.php:124 +#: ../../Zotlabs/Widget/Cdav.php:125 msgid "Calendar name and color" msgstr "Nombre y color del calendario" -#: ../../Zotlabs/Widget/Cdav.php:126 +#: ../../Zotlabs/Widget/Cdav.php:127 msgid "Create new calendar" msgstr "Crear un nuevo calendario" -#: ../../Zotlabs/Widget/Cdav.php:128 +#: ../../Zotlabs/Widget/Cdav.php:129 msgid "Calendar Name" msgstr "Nombre del calendario" -#: ../../Zotlabs/Widget/Cdav.php:129 +#: ../../Zotlabs/Widget/Cdav.php:130 msgid "Calendar Tools" msgstr "Gestión de calendarios" -#: ../../Zotlabs/Widget/Cdav.php:130 +#: ../../Zotlabs/Widget/Cdav.php:131 msgid "Import calendar" msgstr "Importar un calendario" -#: ../../Zotlabs/Widget/Cdav.php:131 +#: ../../Zotlabs/Widget/Cdav.php:132 msgid "Select a calendar to import to" msgstr "Seleccionar un calendario para importarlo" -#: ../../Zotlabs/Widget/Cdav.php:158 +#: ../../Zotlabs/Widget/Cdav.php:159 msgid "Addressbooks" msgstr "Agenda de direcciones" -#: ../../Zotlabs/Widget/Cdav.php:160 +#: ../../Zotlabs/Widget/Cdav.php:161 msgid "Addressbook name" msgstr "Nombre de la agenda" -#: ../../Zotlabs/Widget/Cdav.php:162 +#: ../../Zotlabs/Widget/Cdav.php:163 msgid "Create new addressbook" msgstr "Crear una nueva agenda de direcciones" -#: ../../Zotlabs/Widget/Cdav.php:163 +#: ../../Zotlabs/Widget/Cdav.php:164 msgid "Addressbook Name" msgstr "Nombre de la agenda" -#: ../../Zotlabs/Widget/Cdav.php:165 +#: ../../Zotlabs/Widget/Cdav.php:166 msgid "Addressbook Tools" msgstr "Gestión de agendas de direcciones" -#: ../../Zotlabs/Widget/Cdav.php:166 +#: ../../Zotlabs/Widget/Cdav.php:167 msgid "Import addressbook" msgstr "Importar una agenda de direcciones" -#: ../../Zotlabs/Widget/Cdav.php:167 +#: ../../Zotlabs/Widget/Cdav.php:168 msgid "Select an addressbook to import to" msgstr "Seleccionar una agenda para importarla" -#: ../../Zotlabs/Widget/Appcategories.php:39 -#: ../../Zotlabs/Widget/Tagcloud.php:25 ../../include/contact_widgets.php:91 -#: ../../include/contact_widgets.php:132 ../../include/taxonomy.php:285 -#: ../../include/taxonomy.php:367 ../../include/taxonomy.php:387 +#: ../../Zotlabs/Widget/Appcategories.php:40 +#: ../../Zotlabs/Widget/Tagcloud.php:25 ../../include/contact_widgets.php:97 +#: ../../include/contact_widgets.php:141 ../../include/contact_widgets.php:186 +#: ../../include/taxonomy.php:337 ../../include/taxonomy.php:419 +#: ../../include/taxonomy.php:439 ../../include/taxonomy.php:460 msgid "Categories" msgstr "Temas" -#: ../../Zotlabs/Widget/Appcategories.php:42 ../../Zotlabs/Widget/Filer.php:31 -#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:94 -#: ../../include/contact_widgets.php:135 +#: ../../Zotlabs/Widget/Appcategories.php:43 ../../Zotlabs/Widget/Filer.php:31 +#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:100 +#: ../../include/contact_widgets.php:144 ../../include/contact_widgets.php:189 msgid "Everything" msgstr "Todo" @@ -8242,6 +8365,14 @@ msgstr "Importar un calendario" msgid "Suggested Chatrooms" msgstr "Salas de chat sugeridas" +#: ../../Zotlabs/Widget/Hq_controls.php:14 +msgid "HQ Control Panel" +msgstr "Panel de control de HQ" + +#: ../../Zotlabs/Widget/Hq_controls.php:17 +msgid "Create a new post" +msgstr "Crear una nueva entrada" + #: ../../Zotlabs/Widget/Mailmenu.php:13 msgid "Private Mail Menu" msgstr "Menú de correo privado" @@ -8250,21 +8381,21 @@ msgstr "Menú de correo privado" msgid "Combined View" msgstr "Vista combinada" -#: ../../Zotlabs/Widget/Mailmenu.php:20 ../../include/nav.php:119 +#: ../../Zotlabs/Widget/Mailmenu.php:20 ../../include/nav.php:126 msgid "Inbox" msgstr "Bandeja de entrada" -#: ../../Zotlabs/Widget/Mailmenu.php:25 ../../include/nav.php:120 +#: ../../Zotlabs/Widget/Mailmenu.php:25 ../../include/nav.php:127 msgid "Outbox" msgstr "Bandeja de salida" -#: ../../Zotlabs/Widget/Mailmenu.php:30 ../../include/nav.php:121 +#: ../../Zotlabs/Widget/Mailmenu.php:30 ../../include/nav.php:128 msgid "New Message" msgstr "Nuevo mensaje" #: ../../Zotlabs/Widget/Chatroom_list.php:16 -#: ../../include/conversation.php:1847 ../../include/conversation.php:1850 -#: ../../include/nav.php:455 ../../include/nav.php:458 +#: ../../include/conversation.php:1864 ../../include/conversation.php:1867 +#: ../../include/nav.php:466 ../../include/nav.php:469 msgid "Chatrooms" msgstr "Salas de chat" @@ -8326,11 +8457,11 @@ msgstr "Enviar mensajes" msgid "Conversations" msgstr "Conversaciones" -#: ../../Zotlabs/Widget/Conversations.php:35 +#: ../../Zotlabs/Widget/Conversations.php:37 msgid "No messages." msgstr "Sin mensajes." -#: ../../Zotlabs/Widget/Conversations.php:55 +#: ../../Zotlabs/Widget/Conversations.php:57 msgid "Delete conversation" msgstr "Eliminar conversación" @@ -8346,11 +8477,11 @@ msgstr "foto/imagen" msgid "Remove term" msgstr "Eliminar término" -#: ../../Zotlabs/Widget/Savedsearch.php:83 ../../include/features.php:306 +#: ../../Zotlabs/Widget/Savedsearch.php:83 ../../include/features.php:316 msgid "Saved Searches" msgstr "Búsquedas guardadas" -#: ../../Zotlabs/Widget/Savedsearch.php:84 ../../include/group.php:337 +#: ../../Zotlabs/Widget/Savedsearch.php:84 ../../include/group.php:333 msgid "add" msgstr "añadir" @@ -8358,15 +8489,16 @@ msgstr "añadir" msgid "Notes" msgstr "Notas" -#: ../../Zotlabs/Widget/Wiki_pages.php:47 ../../addon/gitwiki/gitwiki.php:76 -msgid "Wiki Pages" -msgstr "Páginas del wiki" - -#: ../../Zotlabs/Widget/Wiki_pages.php:53 ../../addon/gitwiki/gitwiki.php:81 +#: ../../Zotlabs/Widget/Wiki_pages.php:32 +#: ../../Zotlabs/Widget/Wiki_pages.php:89 ../../addon/gitwiki/gitwiki.php:81 msgid "Add new page" msgstr "Añadir una nueva página" -#: ../../Zotlabs/Widget/Wiki_pages.php:58 ../../addon/gitwiki/gitwiki.php:82 +#: ../../Zotlabs/Widget/Wiki_pages.php:83 ../../addon/gitwiki/gitwiki.php:76 +msgid "Wiki Pages" +msgstr "Páginas del wiki" + +#: ../../Zotlabs/Widget/Wiki_pages.php:94 ../../addon/gitwiki/gitwiki.php:82 msgid "Page name" msgstr "Nombre de la página" @@ -8387,7 +8519,7 @@ msgid "See more..." msgstr "Ver más..." #: ../../Zotlabs/Widget/Filer.php:28 ../../include/contact_widgets.php:53 -#: ../../include/features.php:395 +#: ../../include/features.php:414 msgid "Saved Folders" msgstr "Carpetas guardadas" @@ -8407,7 +8539,7 @@ msgstr "Examinar la cola" msgid "DB updates" msgstr "Actualizaciones de la base de datos" -#: ../../Zotlabs/Widget/Admin.php:55 ../../include/nav.php:224 +#: ../../Zotlabs/Widget/Admin.php:55 ../../include/nav.php:231 msgid "Admin" msgstr "Administrador" @@ -8447,7 +8579,7 @@ msgstr "Exportar canal" msgid "Connected apps" msgstr "Aplicaciones (apps) conectadas" -#: ../../Zotlabs/Widget/Settings_menu.php:100 ../../include/features.php:158 +#: ../../Zotlabs/Widget/Settings_menu.php:100 ../../include/features.php:168 msgid "Permission Groups" msgstr "Grupos de permisos" @@ -8467,165 +8599,170 @@ msgstr "Nueva actividad en la red" msgid "New Network Activity Notifications" msgstr "Avisos de nueva actividad en la red" -#: ../../Zotlabs/Widget/Notifications.php:20 ../../include/nav.php:99 +#: ../../Zotlabs/Widget/Notifications.php:20 ../../include/nav.php:106 msgid "View your network activity" msgstr "Ver su actividad en la red" -#: ../../Zotlabs/Widget/Notifications.php:24 +#: ../../Zotlabs/Widget/Notifications.php:23 msgid "Mark all notifications read" msgstr "Marcar todas las notificaciones como leídas" -#: ../../Zotlabs/Widget/Notifications.php:32 +#: ../../Zotlabs/Widget/Notifications.php:26 +#: ../../Zotlabs/Widget/Notifications.php:44 +#: ../../Zotlabs/Widget/Notifications.php:139 +msgid "Show new posts only" +msgstr "Mostrar solo las entradas nuevas" + +#: ../../Zotlabs/Widget/Notifications.php:34 msgid "New Home Activity" msgstr "Nueva actividad en su página principal" -#: ../../Zotlabs/Widget/Notifications.php:33 +#: ../../Zotlabs/Widget/Notifications.php:35 msgid "New Home Activity Notifications" msgstr "Avisos de nueva actividad en su página principal" -#: ../../Zotlabs/Widget/Notifications.php:36 +#: ../../Zotlabs/Widget/Notifications.php:38 msgid "View your home activity" msgstr "Ver su actividad en su página principal" -#: ../../Zotlabs/Widget/Notifications.php:40 +#: ../../Zotlabs/Widget/Notifications.php:41 #: ../../Zotlabs/Widget/Notifications.php:136 msgid "Mark all notifications seen" msgstr "Marcar todas las notificaciones como vistas" -#: ../../Zotlabs/Widget/Notifications.php:48 +#: ../../Zotlabs/Widget/Notifications.php:52 msgid "New Mails" msgstr "Nuevos mensajes de correo" -#: ../../Zotlabs/Widget/Notifications.php:49 +#: ../../Zotlabs/Widget/Notifications.php:53 msgid "New Mails Notifications" msgstr "Avisos de nuevos mensajes de correo" -#: ../../Zotlabs/Widget/Notifications.php:52 +#: ../../Zotlabs/Widget/Notifications.php:56 msgid "View your private mails" msgstr "Ver sus correos privados" -#: ../../Zotlabs/Widget/Notifications.php:56 +#: ../../Zotlabs/Widget/Notifications.php:59 msgid "Mark all messages seen" msgstr "Marcar todos los mensajes como vistos" -#: ../../Zotlabs/Widget/Notifications.php:64 +#: ../../Zotlabs/Widget/Notifications.php:67 msgid "New Events" msgstr "Eventos nuevos" -#: ../../Zotlabs/Widget/Notifications.php:65 +#: ../../Zotlabs/Widget/Notifications.php:68 msgid "New Events Notifications" msgstr "Avisos de nuevos eventos" -#: ../../Zotlabs/Widget/Notifications.php:68 ../../include/nav.php:125 +#: ../../Zotlabs/Widget/Notifications.php:71 ../../include/nav.php:132 msgid "View events" msgstr "Ver los eventos" -#: ../../Zotlabs/Widget/Notifications.php:72 ../../include/nav.php:126 +#: ../../Zotlabs/Widget/Notifications.php:74 ../../include/nav.php:133 msgid "Mark all events seen" msgstr "Marcar todos los eventos como leidos" -#: ../../Zotlabs/Widget/Notifications.php:81 +#: ../../Zotlabs/Widget/Notifications.php:83 msgid "New Connections Notifications" msgstr "Avisos de nuevas conexiones" -#: ../../Zotlabs/Widget/Notifications.php:84 +#: ../../Zotlabs/Widget/Notifications.php:86 msgid "View all connections" msgstr "Ver todas las conexiones" -#: ../../Zotlabs/Widget/Notifications.php:92 +#: ../../Zotlabs/Widget/Notifications.php:94 msgid "New Files" msgstr "Ficheros nuevos" -#: ../../Zotlabs/Widget/Notifications.php:93 +#: ../../Zotlabs/Widget/Notifications.php:95 msgid "New Files Notifications" msgstr "Avisos de nuevos ficheros" -#: ../../Zotlabs/Widget/Notifications.php:100 -#: ../../Zotlabs/Widget/Notifications.php:101 ../../include/nav.php:112 +#: ../../Zotlabs/Widget/Notifications.php:102 +#: ../../Zotlabs/Widget/Notifications.php:103 ../../include/nav.php:119 msgid "Notices" msgstr "Avisos" -#: ../../Zotlabs/Widget/Notifications.php:104 +#: ../../Zotlabs/Widget/Notifications.php:106 msgid "View all notices" msgstr "Ver todos los avisos" -#: ../../Zotlabs/Widget/Notifications.php:108 +#: ../../Zotlabs/Widget/Notifications.php:109 msgid "Mark all notices seen" msgstr "Marcar como leídos todos los avisos" -#: ../../Zotlabs/Widget/Notifications.php:118 +#: ../../Zotlabs/Widget/Notifications.php:119 msgid "New Registrations" msgstr "Registros nuevos" -#: ../../Zotlabs/Widget/Notifications.php:119 +#: ../../Zotlabs/Widget/Notifications.php:120 msgid "New Registrations Notifications" msgstr "Notificaciones de nuevos registros" -#: ../../Zotlabs/Widget/Notifications.php:129 +#: ../../Zotlabs/Widget/Notifications.php:130 msgid "Public Stream Notifications" msgstr "Avisos del \"stream\" público" -#: ../../Zotlabs/Widget/Notifications.php:132 +#: ../../Zotlabs/Widget/Notifications.php:133 msgid "View the public stream" msgstr "Ver el \"stream\" público" -#: ../../Zotlabs/Widget/Notifications.php:143 -#: ../../include/conversation.php:871 ../../include/nav.php:305 -msgid "Loading..." -msgstr "Cargando..." +#: ../../Zotlabs/Widget/Notifications.php:147 ../../include/nav.php:316 +msgid "Loading" +msgstr "Cargando" #: ../../util/nconfig.php:34 msgid "Source channel not found." msgstr "No se ha encontrado el canal de origen." -#: ../../boot.php:1619 +#: ../../boot.php:1644 msgid "Create an account to access services and applications" msgstr "Crear una cuenta para acceder a los servicios y aplicaciones" -#: ../../boot.php:1638 ../../include/nav.php:138 ../../include/nav.php:167 -#: ../../include/nav.php:184 +#: ../../boot.php:1663 ../../include/nav.php:145 ../../include/nav.php:174 +#: ../../include/nav.php:191 msgid "Logout" msgstr "Finalizar sesión" -#: ../../boot.php:1642 +#: ../../boot.php:1667 msgid "Login/Email" msgstr "Inicio de sesión / Correo electrónico" -#: ../../boot.php:1643 +#: ../../boot.php:1668 msgid "Password" msgstr "Contraseña" -#: ../../boot.php:1644 +#: ../../boot.php:1669 msgid "Remember me" msgstr "Recordarme" -#: ../../boot.php:1647 +#: ../../boot.php:1672 msgid "Forgot your password?" msgstr "¿Olvidó su contraseña?" -#: ../../boot.php:2191 +#: ../../boot.php:2257 msgid "toggle mobile" msgstr "cambiar a modo móvil" -#: ../../boot.php:2344 +#: ../../boot.php:2419 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Error SSL del sitio web en %s" -#: ../../boot.php:2349 +#: ../../boot.php:2424 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:2468 +#: ../../boot.php:2540 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s" -#: ../../boot.php:2473 +#: ../../boot.php:2545 msgid "Cron/Scheduled tasks not running." msgstr "Las tareas del Planificador/Cron no están funcionando." -#: ../../boot.php:2474 ../../include/datetime.php:286 +#: ../../boot.php:2546 ../../include/datetime.php:292 msgid "never" msgstr "nunca" @@ -8883,30 +9020,30 @@ msgstr "Un ajuste" msgid "Skeleton Settings" msgstr "Ajustes de Skeleton" -#: ../../addon/gnusoc/gnusoc.php:243 +#: ../../addon/gnusoc/gnusoc.php:247 msgid "GNU-Social Protocol Settings updated." msgstr "Se han actualizado los ajustes del protocolo de GNU-Social." -#: ../../addon/gnusoc/gnusoc.php:262 +#: ../../addon/gnusoc/gnusoc.php:266 msgid "" "The GNU-Social protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "El protocolo de GNU-Social no admite la independencia de la ubicación. Las\n conexiones que realice dentro de esa red pueden ser inaccesibles desde \nubicaciones de canales alternativos." -#: ../../addon/gnusoc/gnusoc.php:265 +#: ../../addon/gnusoc/gnusoc.php:269 msgid "Enable the GNU-Social protocol for this channel" msgstr "Activar el protocolo de GNU-Social para este canal" -#: ../../addon/gnusoc/gnusoc.php:269 +#: ../../addon/gnusoc/gnusoc.php:273 msgid "GNU-Social Protocol Settings" msgstr "Ajustes del protocolo de GNU-Social" -#: ../../addon/gnusoc/gnusoc.php:460 +#: ../../addon/gnusoc/gnusoc.php:464 msgid "Follow" msgstr "Seguir" -#: ../../addon/gnusoc/gnusoc.php:463 +#: ../../addon/gnusoc/gnusoc.php:467 #, php-format msgid "%1$s is now following %2$s" msgstr "%1$s está siguiendo ahora a %2$s" @@ -8952,8 +9089,8 @@ msgstr "Regresar después" msgid "Page to load after image selection." msgstr "Página para cargar después de la selección de imágenes." -#: ../../addon/openclipatar/openclipatar.php:58 ../../include/channel.php:1266 -#: ../../include/nav.php:146 +#: ../../addon/openclipatar/openclipatar.php:58 ../../include/channel.php:1301 +#: ../../include/nav.php:153 msgid "Edit Profile" msgstr "Editar el perfil" @@ -9026,7 +9163,7 @@ msgstr "Error desconocido. Por favor, inténtelo otra vez." msgid "Profile photo updated successfully." msgstr "Se ha actualizado con éxito la foto de perfil." -#: ../../addon/zotvi/zot6.php:25 ../../include/zot.php:3983 +#: ../../addon/zotvi/zot6.php:25 ../../include/zot.php:4051 msgid "invalid target signature" msgstr "La firma recibida no es válida" @@ -9159,38 +9296,6 @@ msgstr "Ajustes de publicación en InsaneJournal" msgid "Insane Journal Settings saved." msgstr "Se han guardado los ajustes de InsaneJournal." -#: ../../addon/js_upload/js_upload.php:44 -msgid "Upload a file" -msgstr "Subir un fichero" - -#: ../../addon/js_upload/js_upload.php:45 -msgid "Drop files here to upload" -msgstr "Arrastre los ficheros aquí para subirlos" - -#: ../../addon/js_upload/js_upload.php:47 -msgid "Failed" -msgstr "Ha fallado" - -#: ../../addon/js_upload/js_upload.php:315 -msgid "No files were uploaded." -msgstr "No se han subido ficheros." - -#: ../../addon/js_upload/js_upload.php:322 -msgid "Uploaded file is empty" -msgstr "El fichero subido está vacío" - -#: ../../addon/js_upload/js_upload.php:335 -msgid "Image exceeds size limit of " -msgstr "La imagen supera el límite de tamaño de " - -#: ../../addon/js_upload/js_upload.php:347 -msgid "File has an invalid extension, it should be one of " -msgstr "El fichero tiene una extensión no válida, debería ser una de estas: " - -#: ../../addon/js_upload/js_upload.php:359 -msgid "Upload was cancelled, or server error encountered" -msgstr "Se canceló la carga o se encontró un error del servidor" - #: ../../addon/dwpost/dwpost.php:42 msgid "Post to Dreamwidth" msgstr "Publicar en Dreamwidth" @@ -9215,18 +9320,6 @@ msgstr "Publicar en Dreamwidth de forma predeterminada" msgid "Dreamwidth Post Settings" msgstr "Ajustes de publicación en Dreamwidth" -#: ../../addon/firefox/firefox.php:23 -msgid "Install Firefox Sharing Tools" -msgstr "Instalar las herramientas de compartición de Firefox" - -#: ../../addon/firefox/firefox.php:34 -msgid "Share content from Firefox to $Projectname" -msgstr "Compartir contenido desde Firefox a $Projectname" - -#: ../../addon/firefox/firefox.php:37 -msgid "Install Firefox Sharing Tools to this web browser" -msgstr "Instalar las herramientas de compartición de Firefox en este navegador" - #: ../../addon/dirstats/dirstats.php:94 msgid "Hubzilla Directory Stats" msgstr "Estadísticas de directorio de Hubzilla" @@ -9286,22 +9379,6 @@ msgid "" "applies to chatrooms," msgstr "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refieren únicamente a aquellas de las que **este directorio** es consciente, y no a todos los conocidos en la red. Esto también es aplicable a las salas de chat," -#: ../../addon/mailhost/mailhost.php:36 -msgid "Email notification hub" -msgstr "Notificación por correo electrónico del hub" - -#: ../../addon/mailhost/mailhost.php:36 -msgid "Hostname" -msgstr "Nombre del host" - -#: ../../addon/mailhost/mailhost.php:40 -msgid "Mailhost Settings" -msgstr "Ajustes de Mailhost" - -#: ../../addon/mailhost/mailhost.php:54 -msgid "MAILHOST Settings saved." -msgstr "Se han guardado los ajustes de MAILHOST." - #: ../../addon/likebanner/likebanner.php:51 msgid "Your Webbie:" msgstr "Su webbie: " @@ -9496,12 +9573,12 @@ msgid "Login failed." msgstr "El acceso ha fallado." #: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:49 -#: ../../include/selectors.php:66 ../../include/channel.php:1432 +#: ../../include/selectors.php:66 ../../include/channel.php:1480 msgid "Male" msgstr "Hombre" #: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:49 -#: ../../include/selectors.php:66 ../../include/channel.php:1430 +#: ../../include/selectors.php:66 ../../include/channel.php:1478 msgid "Female" msgstr "Mujer" @@ -9688,39 +9765,39 @@ msgstr "una declaración de amor eterno" msgid "declared undying love for" msgstr "ha declarado amor eterno a" -#: ../../addon/diaspora/diaspora.php:763 +#: ../../addon/diaspora/diaspora.php:772 msgid "Diaspora Protocol Settings updated." msgstr "Los ajustes del protocolo de Diaspora se han actualizado." -#: ../../addon/diaspora/diaspora.php:782 +#: ../../addon/diaspora/diaspora.php:791 msgid "" "The Diaspora protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos." -#: ../../addon/diaspora/diaspora.php:785 +#: ../../addon/diaspora/diaspora.php:794 msgid "Enable the Diaspora protocol for this channel" msgstr "Activar el protocolo de Diaspora para este canal" -#: ../../addon/diaspora/diaspora.php:789 +#: ../../addon/diaspora/diaspora.php:798 msgid "Allow any Diaspora member to comment on your public posts" msgstr "Permitir a cualquier miembro de Diaspora comentar sus entradas públicas" -#: ../../addon/diaspora/diaspora.php:793 +#: ../../addon/diaspora/diaspora.php:802 msgid "Prevent your hashtags from being redirected to other sites" msgstr "Impedir que sus \"hashtags\" sean redirigidos a otros sitios " -#: ../../addon/diaspora/diaspora.php:797 +#: ../../addon/diaspora/diaspora.php:806 msgid "" "Sign and forward posts and comments with no existing Diaspora signature" msgstr "Firmar y enviar entradas y comentarios sin firma de Diaspora" -#: ../../addon/diaspora/diaspora.php:802 +#: ../../addon/diaspora/diaspora.php:811 msgid "Followed hashtags (comma separated, do not include the #)" msgstr "\"Hashtags\" seguidos (separados por comas, sin incluir #)" -#: ../../addon/diaspora/diaspora.php:807 +#: ../../addon/diaspora/diaspora.php:816 msgid "Diaspora Protocol Settings" msgstr "Ajustes del protocolo de Diaspora" @@ -9829,6 +9906,26 @@ msgstr "Seleccione la valoración adecuada del avatar para su sitio. Ver README" msgid "Gravatar settings updated." msgstr "Se han actualizado los ajustes de Gravatar." +#: ../../addon/hzfiles/hzfiles.php:79 +msgid "Hubzilla File Storage Import" +msgstr "Importar del depósito de ficheros de Hubzilla" + +#: ../../addon/hzfiles/hzfiles.php:80 +msgid "This will import all your cloud files from another server." +msgstr "Esto importará todos sus ficheros en la nube desde otro servidor." + +#: ../../addon/hzfiles/hzfiles.php:81 +msgid "Hubzilla Server base URL" +msgstr "URL base del servidor Hubzilla" + +#: ../../addon/hzfiles/hzfiles.php:82 +msgid "Since modified date yyyy-mm-dd" +msgstr "Modificado desde la fecha yyyy-mm-dd" + +#: ../../addon/hzfiles/hzfiles.php:83 +msgid "Until modified date yyyy-mm-dd" +msgstr "Modificado hasta la fecha yyyy-mm-dd" + #: ../../addon/visage/visage.php:93 msgid "Recent Channel/Profile Viewers" msgstr "Visitantes recientes del canal o perfil" @@ -9975,8 +10072,8 @@ msgstr "Contraseña de Friendica" msgid "Hubzilla to Friendica Post Settings" msgstr "Ajustes de publicación de Hubzilla a Friendica" -#: ../../addon/jappixmini/jappixmini.php:305 ../../include/channel.php:1357 -#: ../../include/channel.php:1519 +#: ../../addon/jappixmini/jappixmini.php:305 ../../include/channel.php:1397 +#: ../../include/channel.php:1567 msgid "Status:" msgstr "Estado:" @@ -10141,27 +10238,35 @@ msgstr "Nombre de inicio de sesión en Friendica" msgid "Friendica Login Password" msgstr "Contraseña de inicio de sesión en Friendica" -#: ../../addon/pubcrawl/as.php:1076 ../../addon/pubcrawl/as.php:1160 -#: ../../addon/pubcrawl/as.php:1332 ../../include/network.php:1705 +#: ../../addon/pubcrawl/as.php:1077 ../../addon/pubcrawl/as.php:1164 +#: ../../addon/pubcrawl/as.php:1339 ../../include/network.php:1768 msgid "ActivityPub" msgstr "ActivityPub" -#: ../../addon/pubcrawl/pubcrawl.php:1032 +#: ../../addon/pubcrawl/pubcrawl.php:1033 msgid "ActivityPub Protocol Settings updated." msgstr "Se han actualizado los ajustes del protocolo ActivityPub." -#: ../../addon/pubcrawl/pubcrawl.php:1041 +#: ../../addon/pubcrawl/pubcrawl.php:1042 msgid "" "The ActivityPub protocol does not support location independence. Connections" " you make within that network may be unreachable from alternate channel " "locations." msgstr "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos." -#: ../../addon/pubcrawl/pubcrawl.php:1044 +#: ../../addon/pubcrawl/pubcrawl.php:1045 msgid "Enable the ActivityPub protocol for this channel" msgstr "Activar el protocolo ActivityPub para este canal" -#: ../../addon/pubcrawl/pubcrawl.php:1049 +#: ../../addon/pubcrawl/pubcrawl.php:1048 +msgid "Send multi-media HTML articles" +msgstr "Enviar artículos multimedia en HTML" + +#: ../../addon/pubcrawl/pubcrawl.php:1048 +msgid "Not supported by some microblog services such as Mastodon" +msgstr "No soportado por algunos servicios de microblog como Mastodon" + +#: ../../addon/pubcrawl/pubcrawl.php:1053 msgid "ActivityPub Protocol Settings" msgstr "Ajustes del protocolo ActivityPub" @@ -10507,11 +10612,11 @@ msgstr "Limpiar la configuración de OAuth" msgid "GNU social Post Settings" msgstr "Ajustes de publicación en GNU social" -#: ../../addon/statusnet/statusnet.php:891 +#: ../../addon/statusnet/statusnet.php:892 msgid "API URL" msgstr "URL de la API" -#: ../../addon/statusnet/statusnet.php:894 +#: ../../addon/statusnet/statusnet.php:895 msgid "Application name" msgstr "Nombre de la aplicación" @@ -10551,7 +10656,7 @@ msgstr "Debe elegir blancas o negras." msgid "Error creating new game." msgstr "Error al crear un nuevo juego." -#: ../../addon/chess/chess.php:409 ../../include/channel.php:1117 +#: ../../addon/chess/chess.php:409 ../../include/channel.php:1152 msgid "Requested channel is not available." msgstr "El canal solicitado no está disponible." @@ -11001,7 +11106,7 @@ msgstr "sudoroso/a" #: ../../addon/moremoods/moremoods.php:36 msgid "bleeding out" -msgstr "una maldición" +msgstr "exánime" #: ../../addon/moremoods/moremoods.php:37 msgid "victorious" @@ -11230,11 +11335,11 @@ msgstr "Transexual" msgid "Hermaphrodite" msgstr "Hermafrodita" -#: ../../include/selectors.php:49 ../../include/channel.php:1436 +#: ../../include/selectors.php:49 ../../include/channel.php:1484 msgid "Neuter" msgstr "Neutral" -#: ../../include/selectors.php:49 ../../include/channel.php:1438 +#: ../../include/selectors.php:49 ../../include/channel.php:1486 msgid "Non-specific" msgstr "No especificado" @@ -11414,284 +11519,306 @@ msgstr "No me importa" msgid "Ask me" msgstr "Pregúnteme" -#: ../../include/conversation.php:200 +#: ../../include/conversation.php:169 +#, php-format +msgid "likes %1$s's %2$s" +msgstr "gusta de %2$s de %1$s" + +#: ../../include/conversation.php:172 +#, php-format +msgid "doesn't like %1$s's %2$s" +msgstr "no gusta de %2$s de %1$s" + +#: ../../include/conversation.php:212 #, php-format msgid "%1$s is now connected with %2$s" msgstr "%1$s ahora está conectado/a con %2$s" -#: ../../include/conversation.php:235 +#: ../../include/conversation.php:247 #, php-format msgid "%1$s poked %2$s" msgstr "%1$s ha dado un toque a %2$s" -#: ../../include/conversation.php:239 ../../include/text.php:1104 +#: ../../include/conversation.php:251 ../../include/text.php:1104 #: ../../include/text.php:1109 msgid "poked" msgstr "ha dado un toque a" -#: ../../include/conversation.php:720 +#: ../../include/conversation.php:736 #, php-format msgid "View %s's profile @ %s" msgstr "Ver el perfil @ %s de %s" -#: ../../include/conversation.php:740 +#: ../../include/conversation.php:756 msgid "Categories:" msgstr "Temas:" -#: ../../include/conversation.php:741 +#: ../../include/conversation.php:757 msgid "Filed under:" msgstr "Archivado bajo:" -#: ../../include/conversation.php:766 +#: ../../include/conversation.php:783 msgid "View in context" msgstr "Mostrar en su contexto" -#: ../../include/conversation.php:867 +#: ../../include/conversation.php:884 msgid "remove" msgstr "eliminar" -#: ../../include/conversation.php:872 +#: ../../include/conversation.php:888 +msgid "Loading..." +msgstr "Cargando..." + +#: ../../include/conversation.php:889 msgid "Delete Selected Items" msgstr "Eliminar elementos seleccionados" -#: ../../include/conversation.php:915 +#: ../../include/conversation.php:932 msgid "View Source" msgstr "Ver el código fuente de la entrada" -#: ../../include/conversation.php:925 +#: ../../include/conversation.php:942 msgid "Follow Thread" msgstr "Seguir este hilo" -#: ../../include/conversation.php:934 +#: ../../include/conversation.php:951 msgid "Unfollow Thread" msgstr "Dejar de seguir este hilo" -#: ../../include/conversation.php:1025 +#: ../../include/conversation.php:1042 msgid "Activity/Posts" msgstr "Actividad y publicaciones" -#: ../../include/conversation.php:1045 +#: ../../include/conversation.php:1062 msgid "Edit Connection" msgstr "Editar conexión" -#: ../../include/conversation.php:1055 +#: ../../include/conversation.php:1072 msgid "Message" msgstr "Mensaje" -#: ../../include/conversation.php:1189 +#: ../../include/conversation.php:1206 #, php-format msgid "%s likes this." msgstr "A %s le gusta esto." -#: ../../include/conversation.php:1189 +#: ../../include/conversation.php:1206 #, php-format msgid "%s doesn't like this." msgstr "A %s no le gusta esto." -#: ../../include/conversation.php:1193 +#: ../../include/conversation.php:1210 #, 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] "a <span %1$s>%2$d personas</span> le gusta esto." msgstr[1] "A <span %1$s>%2$d personas</span> les gusta esto." -#: ../../include/conversation.php:1195 +#: ../../include/conversation.php:1212 #, 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] "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." -#: ../../include/conversation.php:1201 +#: ../../include/conversation.php:1218 msgid "and" msgstr "y" -#: ../../include/conversation.php:1204 +#: ../../include/conversation.php:1221 #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" msgstr[0] ", y %d persona más" msgstr[1] ", y %d personas más" -#: ../../include/conversation.php:1205 +#: ../../include/conversation.php:1222 #, php-format msgid "%s like this." msgstr "A %s le gusta esto." -#: ../../include/conversation.php:1205 +#: ../../include/conversation.php:1222 #, php-format msgid "%s don't like this." msgstr "A %s no le gusta esto." -#: ../../include/conversation.php:1248 +#: ../../include/conversation.php:1265 msgid "Set your location" msgstr "Establecer su ubicación" -#: ../../include/conversation.php:1249 +#: ../../include/conversation.php:1266 msgid "Clear browser location" msgstr "Eliminar los datos de localización geográfica del navegador" -#: ../../include/conversation.php:1297 +#: ../../include/conversation.php:1314 msgid "Tag term:" msgstr "Término de la etiqueta:" -#: ../../include/conversation.php:1298 +#: ../../include/conversation.php:1315 msgid "Where are you right now?" msgstr "¿Donde está ahora?" -#: ../../include/conversation.php:1303 +#: ../../include/conversation.php:1320 msgid "Choose a different album..." msgstr "Elegir un álbum diferente..." -#: ../../include/conversation.php:1307 +#: ../../include/conversation.php:1324 msgid "Comments enabled" msgstr "Comentarios habilitados" -#: ../../include/conversation.php:1308 +#: ../../include/conversation.php:1325 msgid "Comments disabled" msgstr "Comentarios deshabilitados" -#: ../../include/conversation.php:1355 +#: ../../include/conversation.php:1372 msgid "Page link name" msgstr "Nombre del enlace de la página" -#: ../../include/conversation.php:1358 +#: ../../include/conversation.php:1375 msgid "Post as" msgstr "Publicar como" -#: ../../include/conversation.php:1372 +#: ../../include/conversation.php:1389 msgid "Toggle voting" msgstr "Cambiar votación" -#: ../../include/conversation.php:1375 +#: ../../include/conversation.php:1392 msgid "Disable comments" msgstr "Dehabilitar los comentarios" -#: ../../include/conversation.php:1376 +#: ../../include/conversation.php:1393 msgid "Toggle comments" msgstr "Activar o desactivar los comentarios" -#: ../../include/conversation.php:1384 +#: ../../include/conversation.php:1401 msgid "Categories (optional, comma-separated list)" msgstr "Temas (opcional, lista separada por comas)" -#: ../../include/conversation.php:1407 +#: ../../include/conversation.php:1424 msgid "Other networks and post services" msgstr "Otras redes y servicios de publicación" -#: ../../include/conversation.php:1413 +#: ../../include/conversation.php:1430 msgid "Set publish date" msgstr "Establecer la fecha de publicación" -#: ../../include/conversation.php:1673 +#: ../../include/conversation.php:1690 msgid "Commented Order" msgstr "Comentarios recientes" -#: ../../include/conversation.php:1676 +#: ../../include/conversation.php:1693 msgid "Sort by Comment Date" msgstr "Ordenar por fecha de comentario" -#: ../../include/conversation.php:1680 +#: ../../include/conversation.php:1697 msgid "Posted Order" msgstr "Publicaciones recientes" -#: ../../include/conversation.php:1683 +#: ../../include/conversation.php:1700 msgid "Sort by Post Date" msgstr "Ordenar por fecha de publicación" -#: ../../include/conversation.php:1691 +#: ../../include/conversation.php:1708 msgid "Posts that mention or involve you" msgstr "Publicaciones que le mencionan o involucran" -#: ../../include/conversation.php:1700 +#: ../../include/conversation.php:1717 msgid "Activity Stream - by date" msgstr "Contenido - por fecha" -#: ../../include/conversation.php:1706 +#: ../../include/conversation.php:1723 msgid "Starred" msgstr "Preferidas" -#: ../../include/conversation.php:1709 +#: ../../include/conversation.php:1726 msgid "Favourite Posts" msgstr "Publicaciones favoritas" -#: ../../include/conversation.php:1716 +#: ../../include/conversation.php:1733 msgid "Spam" msgstr "Correo basura" -#: ../../include/conversation.php:1719 +#: ../../include/conversation.php:1736 msgid "Posts flagged as SPAM" msgstr "Publicaciones marcadas como basura" -#: ../../include/conversation.php:1794 ../../include/nav.php:402 +#: ../../include/conversation.php:1811 ../../include/nav.php:413 msgid "Status Messages and Posts" msgstr "Mensajes de estado y publicaciones" -#: ../../include/conversation.php:1807 ../../include/nav.php:415 +#: ../../include/conversation.php:1824 ../../include/nav.php:426 msgid "Profile Details" msgstr "Detalles del perfil" -#: ../../include/conversation.php:1817 ../../include/nav.php:425 -#: ../../include/photos.php:600 +#: ../../include/conversation.php:1834 ../../include/nav.php:436 +#: ../../include/photos.php:655 msgid "Photo Albums" msgstr "Álbumes de fotos" -#: ../../include/conversation.php:1825 ../../include/nav.php:433 +#: ../../include/conversation.php:1842 ../../include/nav.php:444 msgid "Files and Storage" msgstr "Ficheros y repositorio" -#: ../../include/conversation.php:1862 ../../include/nav.php:468 +#: ../../include/conversation.php:1879 ../../include/nav.php:479 msgid "Bookmarks" msgstr "Marcadores" -#: ../../include/conversation.php:1865 ../../include/nav.php:471 +#: ../../include/conversation.php:1882 ../../include/nav.php:482 msgid "Saved Bookmarks" msgstr "Marcadores guardados" -#: ../../include/conversation.php:1876 ../../include/nav.php:482 +#: ../../include/conversation.php:1893 ../../include/nav.php:493 msgid "View Cards" msgstr "Ver las fichas" -#: ../../include/conversation.php:1887 ../../include/nav.php:494 +#: ../../include/conversation.php:1901 +msgid "articles" +msgstr "artículos" + +#: ../../include/conversation.php:1904 ../../include/nav.php:504 +msgid "View Articles" +msgstr "Ver los artículos" + +#: ../../include/conversation.php:1915 ../../include/nav.php:516 msgid "View Webpages" msgstr "Ver páginas web" -#: ../../include/conversation.php:1956 +#: ../../include/conversation.php:1984 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "Participaré" msgstr[1] "Participaré" -#: ../../include/conversation.php:1959 +#: ../../include/conversation.php:1987 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "No participaré" msgstr[1] "No participaré" -#: ../../include/conversation.php:1962 +#: ../../include/conversation.php:1990 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] "Indeciso/a" msgstr[1] "Indecisos/as" -#: ../../include/conversation.php:1965 +#: ../../include/conversation.php:1993 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "De acuerdo" msgstr[1] "De acuerdo" -#: ../../include/conversation.php:1968 +#: ../../include/conversation.php:1996 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "En desacuerdo" msgstr[1] "En desacuerdo" -#: ../../include/conversation.php:1971 +#: ../../include/conversation.php:1999 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -11969,7 +12096,7 @@ msgstr "diciembre" msgid "Unknown Attachment" msgstr "Adjunto no reconocido" -#: ../../include/text.php:1394 ../../include/feedutils.php:780 +#: ../../include/text.php:1394 ../../include/feedutils.php:825 msgid "unknown" msgstr "desconocido" @@ -11985,7 +12112,7 @@ msgstr "eliminar del fichero" msgid "Download binary/encrypted content" msgstr "Descargar contenido binario o cifrado" -#: ../../include/text.php:1782 ../../include/language.php:367 +#: ../../include/text.php:1782 ../../include/language.php:364 msgid "default" msgstr "por defecto" @@ -12124,16 +12251,16 @@ msgstr "Invitar a amigos" msgid "Advanced example: name=fred and country=iceland" msgstr "Ejemplo avanzado: nombre=juan y país=españa" -#: ../../include/contact_widgets.php:166 +#: ../../include/contact_widgets.php:223 msgid "Common Connections" msgstr "Conexiones comunes" -#: ../../include/contact_widgets.php:171 +#: ../../include/contact_widgets.php:228 #, php-format msgid "View all %d common connections" msgstr "Ver todas las %d conexiones comunes" -#: ../../include/markdown.php:139 ../../include/bbcode.php:337 +#: ../../include/markdown.php:158 ../../include/bbcode.php:339 #, php-format msgid "%1$s wrote the following %2$s %3$s" msgstr "%1$s escribió %2$s siguiente %3$s" @@ -12456,385 +12583,385 @@ msgstr "Visitar %2$s de %1$s" msgid "%1$s has an updated %2$s, changing %3$s." msgstr "%1$s ha actualizado %2$s, cambiando %3$s." -#: ../../include/attach.php:250 ../../include/attach.php:339 +#: ../../include/attach.php:265 ../../include/attach.php:361 msgid "Item was not found." msgstr "Elemento no encontrado." -#: ../../include/attach.php:505 +#: ../../include/attach.php:553 msgid "No source file." msgstr "Ningún fichero de origen" -#: ../../include/attach.php:527 +#: ../../include/attach.php:575 msgid "Cannot locate file to replace" msgstr "No se puede localizar el fichero que va a ser sustituido." -#: ../../include/attach.php:545 +#: ../../include/attach.php:593 msgid "Cannot locate file to revise/update" msgstr "No se puede localizar el fichero para revisar/actualizar" -#: ../../include/attach.php:680 +#: ../../include/attach.php:734 #, php-format msgid "File exceeds size limit of %d" msgstr "El fichero supera el limite de tamaño de %d" -#: ../../include/attach.php:694 +#: ../../include/attach.php:754 #, php-format msgid "You have reached your limit of %1$.0f Mbytes attachment storage." msgstr "Ha alcanzado su límite de %1$.0f Mbytes de almacenamiento de adjuntos." -#: ../../include/attach.php:864 +#: ../../include/attach.php:929 msgid "File upload failed. Possible system limit or action terminated." msgstr "Error de carga, posiblemente por limite del sistema o porque la acción ha finalizado." -#: ../../include/attach.php:877 +#: ../../include/attach.php:948 msgid "Stored file could not be verified. Upload failed." msgstr "El fichero almacenado no ha podido ser verificado. El envío ha fallado." -#: ../../include/attach.php:938 ../../include/attach.php:954 +#: ../../include/attach.php:1022 ../../include/attach.php:1038 msgid "Path not available." msgstr "Ruta no disponible." -#: ../../include/attach.php:1003 ../../include/attach.php:1168 +#: ../../include/attach.php:1087 ../../include/attach.php:1252 msgid "Empty pathname" msgstr "Ruta vacía" -#: ../../include/attach.php:1029 +#: ../../include/attach.php:1113 msgid "duplicate filename or path" msgstr "Nombre duplicado de ruta o fichero" -#: ../../include/attach.php:1054 +#: ../../include/attach.php:1138 msgid "Path not found." msgstr "Ruta no encontrada" -#: ../../include/attach.php:1122 +#: ../../include/attach.php:1206 msgid "mkdir failed." msgstr "mkdir ha fallado." -#: ../../include/attach.php:1126 +#: ../../include/attach.php:1210 msgid "database storage failed." msgstr "el almacenamiento en la base de datos ha fallado." -#: ../../include/attach.php:1174 +#: ../../include/attach.php:1258 msgid "Empty path" msgstr "Ruta vacía" -#: ../../include/security.php:531 +#: ../../include/security.php:532 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/items.php:857 ../../include/items.php:909 +#: ../../include/items.php:885 ../../include/items.php:945 msgid "(Unknown)" msgstr "(Desconocido)" -#: ../../include/items.php:1093 +#: ../../include/items.php:1129 msgid "Visible to anybody on the internet." msgstr "Visible para cualquiera en internet." -#: ../../include/items.php:1095 +#: ../../include/items.php:1131 msgid "Visible to you only." msgstr "Visible sólo para usted." -#: ../../include/items.php:1097 +#: ../../include/items.php:1133 msgid "Visible to anybody in this network." msgstr "Visible para cualquiera en esta red." -#: ../../include/items.php:1099 +#: ../../include/items.php:1135 msgid "Visible to anybody authenticated." msgstr "Visible para cualquiera que esté autenticado." -#: ../../include/items.php:1101 +#: ../../include/items.php:1137 #, php-format msgid "Visible to anybody on %s." msgstr "Visible para cualquiera en %s." -#: ../../include/items.php:1103 +#: ../../include/items.php:1139 msgid "Visible to all connections." msgstr "Visible para todas las conexiones." -#: ../../include/items.php:1105 +#: ../../include/items.php:1141 msgid "Visible to approved connections." msgstr "Visible para las conexiones permitidas." -#: ../../include/items.php:1107 +#: ../../include/items.php:1143 msgid "Visible to specific connections." msgstr "Visible para conexiones específicas." -#: ../../include/items.php:3957 +#: ../../include/items.php:4117 msgid "Privacy group is empty." msgstr "El grupo de canales está vacío." -#: ../../include/items.php:3964 +#: ../../include/items.php:4124 #, php-format msgid "Privacy group: %s" msgstr "Grupo de canales: %s" -#: ../../include/items.php:3976 +#: ../../include/items.php:4136 msgid "Connection not found." msgstr "Conexión no encontrada" -#: ../../include/items.php:4327 +#: ../../include/items.php:4485 msgid "profile photo" msgstr "foto del perfil" -#: ../../include/items.php:4520 +#: ../../include/items.php:4676 #, php-format msgid "[Edited %s]" msgstr "[se ha editado %s]" -#: ../../include/items.php:4520 +#: ../../include/items.php:4676 msgctxt "edit_activity" msgid "Post" msgstr "Publicar" -#: ../../include/items.php:4520 +#: ../../include/items.php:4676 msgctxt "edit_activity" msgid "Comment" msgstr "Comentar" -#: ../../include/channel.php:34 +#: ../../include/channel.php:35 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:69 +#: ../../include/channel.php:68 msgid "Empty name" msgstr "Nombre vacío" -#: ../../include/channel.php:72 +#: ../../include/channel.php:71 msgid "Name too long" msgstr "Nombre demasiado largo" -#: ../../include/channel.php:183 +#: ../../include/channel.php:188 msgid "No account identifier" msgstr "Ningún identificador de la cuenta" -#: ../../include/channel.php:195 +#: ../../include/channel.php:200 msgid "Nickname is required." msgstr "Se requiere un sobrenombre (alias)." -#: ../../include/channel.php:273 +#: ../../include/channel.php:277 msgid "Unable to retrieve created identity" msgstr "No ha sido posible recuperar la identidad creada" -#: ../../include/channel.php:359 +#: ../../include/channel.php:373 msgid "Default Profile" msgstr "Perfil principal" -#: ../../include/channel.php:512 ../../include/channel.php:601 +#: ../../include/channel.php:532 ../../include/channel.php:621 msgid "Unable to retrieve modified identity" msgstr "No se puede recuperar la identidad modficada" -#: ../../include/channel.php:1263 +#: ../../include/channel.php:1298 msgid "Create New Profile" msgstr "Crear un nuevo perfil" -#: ../../include/channel.php:1283 +#: ../../include/channel.php:1319 msgid "Visible to everybody" msgstr "Visible para todos" -#: ../../include/channel.php:1356 ../../include/channel.php:1475 +#: ../../include/channel.php:1396 ../../include/channel.php:1523 msgid "Gender:" msgstr "Género:" -#: ../../include/channel.php:1358 ../../include/channel.php:1530 +#: ../../include/channel.php:1398 ../../include/channel.php:1578 msgid "Homepage:" msgstr "Página personal:" -#: ../../include/channel.php:1359 +#: ../../include/channel.php:1399 msgid "Online Now" msgstr "Ahora en línea" -#: ../../include/channel.php:1434 +#: ../../include/channel.php:1482 msgid "Trans" msgstr "Trans" -#: ../../include/channel.php:1480 +#: ../../include/channel.php:1528 msgid "Like this channel" msgstr "Me gusta este canal" -#: ../../include/channel.php:1504 +#: ../../include/channel.php:1552 msgid "j F, Y" msgstr "j F Y" -#: ../../include/channel.php:1505 +#: ../../include/channel.php:1553 msgid "j F" msgstr "j F" -#: ../../include/channel.php:1512 +#: ../../include/channel.php:1560 msgid "Birthday:" msgstr "Cumpleaños:" -#: ../../include/channel.php:1525 +#: ../../include/channel.php:1573 #, php-format msgid "for %1$d %2$s" msgstr "por %1$d %2$s" -#: ../../include/channel.php:1528 +#: ../../include/channel.php:1576 msgid "Sexual Preference:" msgstr "Orientación sexual:" -#: ../../include/channel.php:1534 +#: ../../include/channel.php:1582 msgid "Tags:" msgstr "Etiquetas:" -#: ../../include/channel.php:1536 +#: ../../include/channel.php:1584 msgid "Political Views:" msgstr "Posición política:" -#: ../../include/channel.php:1538 +#: ../../include/channel.php:1586 msgid "Religion:" msgstr "Religión:" -#: ../../include/channel.php:1542 +#: ../../include/channel.php:1590 msgid "Hobbies/Interests:" msgstr "Aficciones o intereses:" -#: ../../include/channel.php:1544 +#: ../../include/channel.php:1592 msgid "Likes:" msgstr "Me gusta:" -#: ../../include/channel.php:1546 +#: ../../include/channel.php:1594 msgid "Dislikes:" msgstr "No me gusta:" -#: ../../include/channel.php:1548 +#: ../../include/channel.php:1596 msgid "Contact information and Social Networks:" msgstr "Información de contacto y redes sociales:" -#: ../../include/channel.php:1550 +#: ../../include/channel.php:1598 msgid "My other channels:" msgstr "Mis otros canales:" -#: ../../include/channel.php:1552 +#: ../../include/channel.php:1600 msgid "Musical interests:" msgstr "Preferencias musicales:" -#: ../../include/channel.php:1554 +#: ../../include/channel.php:1602 msgid "Books, literature:" msgstr "Libros, literatura:" -#: ../../include/channel.php:1556 +#: ../../include/channel.php:1604 msgid "Television:" msgstr "Televisión:" -#: ../../include/channel.php:1558 +#: ../../include/channel.php:1606 msgid "Film/dance/culture/entertainment:" msgstr "Cine, danza, cultura, entretenimiento:" -#: ../../include/channel.php:1560 +#: ../../include/channel.php:1608 msgid "Love/Romance:" msgstr "Vida sentimental o amorosa:" -#: ../../include/channel.php:1562 +#: ../../include/channel.php:1610 msgid "Work/employment:" msgstr "Trabajo:" -#: ../../include/channel.php:1564 +#: ../../include/channel.php:1612 msgid "School/education:" msgstr "Estudios:" -#: ../../include/channel.php:1587 +#: ../../include/channel.php:1635 msgid "Like this thing" msgstr "Me gusta esto" -#: ../../include/event.php:22 ../../include/event.php:69 +#: ../../include/event.php:23 ../../include/event.php:70 msgid "l F d, Y \\@ g:i A" msgstr "l d de F, Y \\@ G:i" -#: ../../include/event.php:30 ../../include/event.php:73 +#: ../../include/event.php:31 ../../include/event.php:74 msgid "Starts:" msgstr "Comienza:" -#: ../../include/event.php:40 ../../include/event.php:77 +#: ../../include/event.php:41 ../../include/event.php:78 msgid "Finishes:" msgstr "Finaliza:" -#: ../../include/event.php:1008 +#: ../../include/event.php:1011 msgid "This event has been added to your calendar." msgstr "Este evento ha sido añadido a su calendario." -#: ../../include/event.php:1208 +#: ../../include/event.php:1220 msgid "Not specified" msgstr "Sin especificar" -#: ../../include/event.php:1209 +#: ../../include/event.php:1221 msgid "Needs Action" msgstr "Necesita de una intervención" -#: ../../include/event.php:1210 +#: ../../include/event.php:1222 msgid "Completed" msgstr "Completado/a" -#: ../../include/event.php:1211 +#: ../../include/event.php:1223 msgid "In Process" msgstr "En proceso" -#: ../../include/event.php:1212 +#: ../../include/event.php:1224 msgid "Cancelled" msgstr "Cancelado/a" -#: ../../include/event.php:1292 ../../include/connections.php:684 +#: ../../include/event.php:1303 ../../include/connections.php:684 msgid "Home, Voice" msgstr "Llamadas particulares" -#: ../../include/event.php:1293 ../../include/connections.php:685 +#: ../../include/event.php:1304 ../../include/connections.php:685 msgid "Home, Fax" msgstr "Fax particular" -#: ../../include/event.php:1295 ../../include/connections.php:687 +#: ../../include/event.php:1306 ../../include/connections.php:687 msgid "Work, Voice" msgstr "Llamadas de trabajo" -#: ../../include/event.php:1296 ../../include/connections.php:688 +#: ../../include/event.php:1307 ../../include/connections.php:688 msgid "Work, Fax" msgstr "Fax de trabajo" -#: ../../include/network.php:752 +#: ../../include/network.php:761 msgid "view full size" msgstr "Ver en el tamaño original" -#: ../../include/network.php:1700 ../../include/network.php:1701 +#: ../../include/network.php:1763 ../../include/network.php:1764 msgid "Friendica" msgstr "Friendica" -#: ../../include/network.php:1702 +#: ../../include/network.php:1765 msgid "OStatus" msgstr "OStatus" -#: ../../include/network.php:1703 +#: ../../include/network.php:1766 msgid "GNU-Social" msgstr "GNU Social" -#: ../../include/network.php:1704 +#: ../../include/network.php:1767 msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/network.php:1707 +#: ../../include/network.php:1770 msgid "Diaspora" msgstr "Diaspora" -#: ../../include/network.php:1708 +#: ../../include/network.php:1771 msgid "Facebook" msgstr "Facebook" -#: ../../include/network.php:1709 +#: ../../include/network.php:1772 msgid "Zot" msgstr "Zot" -#: ../../include/network.php:1710 +#: ../../include/network.php:1773 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/network.php:1711 +#: ../../include/network.php:1774 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/network.php:1712 +#: ../../include/network.php:1775 msgid "MySpace" msgstr "MySpace" -#: ../../include/language.php:380 +#: ../../include/language.php:377 msgid "Select an alternate language" msgstr "Seleccionar un idioma alternativo" @@ -12872,24 +12999,24 @@ msgstr "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha msgid "Cannot locate DNS info for database server '%s'" msgstr "No se ha podido localizar información de DNS para el servidor de base de datos “%s”" -#: ../../include/bbcode.php:194 ../../include/bbcode.php:1102 -#: ../../include/bbcode.php:1105 ../../include/bbcode.php:1110 -#: ../../include/bbcode.php:1113 ../../include/bbcode.php:1116 -#: ../../include/bbcode.php:1119 ../../include/bbcode.php:1124 -#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1132 -#: ../../include/bbcode.php:1135 ../../include/bbcode.php:1138 -#: ../../include/bbcode.php:1141 +#: ../../include/bbcode.php:194 ../../include/bbcode.php:1106 +#: ../../include/bbcode.php:1109 ../../include/bbcode.php:1114 +#: ../../include/bbcode.php:1117 ../../include/bbcode.php:1120 +#: ../../include/bbcode.php:1123 ../../include/bbcode.php:1128 +#: ../../include/bbcode.php:1131 ../../include/bbcode.php:1136 +#: ../../include/bbcode.php:1139 ../../include/bbcode.php:1142 +#: ../../include/bbcode.php:1145 msgid "Image/photo" msgstr "Imagen/foto" -#: ../../include/bbcode.php:233 ../../include/bbcode.php:1152 +#: ../../include/bbcode.php:233 ../../include/bbcode.php:1156 msgid "Encrypted content" msgstr "Contenido cifrado" #: ../../include/bbcode.php:249 #, php-format -msgid "Install %s element: " -msgstr "Instalar el elemento %s:" +msgid "Install %1$s element %2$s" +msgstr "Instalar el elemento de%1$s%2$s" #: ../../include/bbcode.php:253 #, php-format @@ -12902,15 +13029,19 @@ msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan p msgid "card" msgstr "ficha" -#: ../../include/bbcode.php:414 ../../include/bbcode.php:422 +#: ../../include/bbcode.php:333 +msgid "article" +msgstr "artículo" + +#: ../../include/bbcode.php:416 ../../include/bbcode.php:424 msgid "Click to open/close" msgstr "Pulsar para abrir/cerrar" -#: ../../include/bbcode.php:422 +#: ../../include/bbcode.php:424 msgid "spoiler" msgstr "spoiler" -#: ../../include/bbcode.php:1090 +#: ../../include/bbcode.php:1094 msgid "$1 wrote:" msgstr "$1 escribió:" @@ -12930,10 +13061,10 @@ msgstr "Contenido incorporado" msgid "Embedding disabled" msgstr "Incrustación deshabilitada" -#: ../../include/zid.php:305 +#: ../../include/zid.php:340 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" -msgstr "OpenWebAuth: %1$sda la bienvenida a %2$s" +msgstr "OpenWebAuth: %1$s da la bienvenida a %2$s" #: ../../include/features.php:54 msgid "General Features" @@ -12987,292 +13118,296 @@ msgstr "Habilita una herramienta para guardar notas y recordatorios (advertencia msgid "Create personal planning cards" msgstr "Crear fichas de planificación personal" -#: ../../include/features.php:131 +#: ../../include/features.php:141 msgid "Navigation Channel Select" msgstr "Navegación por el selector de canales" -#: ../../include/features.php:132 +#: ../../include/features.php:142 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:140 +#: ../../include/features.php:150 msgid "Photo Location" msgstr "Ubicación de las fotos" -#: ../../include/features.php:141 +#: ../../include/features.php:151 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:149 +#: ../../include/features.php:159 msgid "Access Controlled Chatrooms" msgstr "Salas de chat moderadas" -#: ../../include/features.php:150 +#: ../../include/features.php:160 msgid "Provide chatrooms and chat services with access control." msgstr "Proporcionar salas y servicios de chat moderados." -#: ../../include/features.php:159 +#: ../../include/features.php:169 msgid "Provide alternate connection permission roles." msgstr "Proporcionar roles de acceso alternativos para esta conexión." -#: ../../include/features.php:167 +#: ../../include/features.php:177 msgid "Smart Birthdays" msgstr "Cumpleaños inteligentes" -#: ../../include/features.php:168 +#: ../../include/features.php:178 msgid "" "Make birthday events timezone aware in case your friends are scattered " "across the planet." msgstr "Enlazar los eventos de cumpleaños con el huso horario en el caso de que sus amigos estén dispersos por el mundo." -#: ../../include/features.php:176 +#: ../../include/features.php:186 msgid "Event Timezone Selection" msgstr "Selección del huso horario del evento" -#: ../../include/features.php:177 +#: ../../include/features.php:187 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:185 +#: ../../include/features.php:195 msgid "Advanced Directory Search" msgstr "Búsqueda avanzada en el directorio" -#: ../../include/features.php:186 +#: ../../include/features.php:196 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:194 +#: ../../include/features.php:204 msgid "Advanced Theme and Layout Settings" msgstr "Ajustes avanzados de temas y esquemas" -#: ../../include/features.php:195 +#: ../../include/features.php:205 msgid "Allows fine tuning of themes and page layouts" msgstr "Permitir el ajuste fino de temas y esquemas de páginas" -#: ../../include/features.php:205 +#: ../../include/features.php:215 msgid "Post Composition Features" msgstr "Opciones para la redacción de entradas" -#: ../../include/features.php:209 +#: ../../include/features.php:219 msgid "Large Photos" msgstr "Fotos de gran tamaño" -#: ../../include/features.php:210 +#: ../../include/features.php:220 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:219 +#: ../../include/features.php:229 msgid "Automatically import channel content from other channels or feeds" msgstr "Importar automáticamente contenido de otros canales o \"feeds\"" -#: ../../include/features.php:227 +#: ../../include/features.php:237 msgid "Even More Encryption" msgstr "Más cifrado todavía" -#: ../../include/features.php:228 +#: ../../include/features.php:238 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:236 +#: ../../include/features.php:246 msgid "Enable Voting Tools" msgstr "Permitir entradas con votación" -#: ../../include/features.php:237 +#: ../../include/features.php:247 msgid "Provide a class of post which others can vote on" msgstr "Proveer una clase de publicación en la que otros puedan votar" -#: ../../include/features.php:245 +#: ../../include/features.php:255 msgid "Disable Comments" msgstr "Deshabilitar comentarios" -#: ../../include/features.php:246 +#: ../../include/features.php:256 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:254 +#: ../../include/features.php:264 msgid "Delayed Posting" msgstr "Publicación aplazada" -#: ../../include/features.php:255 +#: ../../include/features.php:265 msgid "Allow posts to be published at a later date" msgstr "Permitir mensajes que se publicarán en una fecha posterior" -#: ../../include/features.php:263 +#: ../../include/features.php:273 msgid "Content Expiration" msgstr "Caducidad del contenido" -#: ../../include/features.php:264 +#: ../../include/features.php:274 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:272 +#: ../../include/features.php:282 msgid "Suppress Duplicate Posts/Comments" msgstr "Prevenir entradas o comentarios duplicados" -#: ../../include/features.php:273 +#: ../../include/features.php:283 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:284 +#: ../../include/features.php:294 msgid "Network and Stream Filtering" msgstr "Filtrado del contenido" -#: ../../include/features.php:288 +#: ../../include/features.php:298 msgid "Search by Date" msgstr "Buscar por fecha" -#: ../../include/features.php:289 +#: ../../include/features.php:299 msgid "Ability to select posts by date ranges" msgstr "Capacidad de seleccionar entradas por rango de fechas" -#: ../../include/features.php:297 ../../include/group.php:332 +#: ../../include/features.php:307 ../../include/group.php:328 msgid "Privacy Groups" msgstr "Grupos de canales" -#: ../../include/features.php:298 +#: ../../include/features.php:308 msgid "Enable management and selection of privacy groups" msgstr "Activar la gestión y selección de grupos de canales" -#: ../../include/features.php:307 +#: ../../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:315 +#: ../../include/features.php:325 msgid "Network Personal Tab" msgstr "Actividad personal" -#: ../../include/features.php:316 +#: ../../include/features.php:326 msgid "Enable tab to display only Network posts that you've interacted on" msgstr "Habilitar una pestaña en la cual se muestren solo las entradas en las que ha participado." -#: ../../include/features.php:324 +#: ../../include/features.php:334 msgid "Network New Tab" msgstr "Contenido nuevo" -#: ../../include/features.php:325 +#: ../../include/features.php:335 msgid "Enable tab to display all new Network activity" msgstr "Habilitar una pestaña en la que se muestre solo el contenido nuevo" -#: ../../include/features.php:333 +#: ../../include/features.php:343 msgid "Affinity Tool" msgstr "Herramienta de afinidad" -#: ../../include/features.php:334 +#: ../../include/features.php:344 msgid "Filter stream activity by depth of relationships" msgstr "Filtrar el contenido según la profundidad de las relaciones" -#: ../../include/features.php:343 +#: ../../include/features.php:353 msgid "Show friend and connection suggestions" msgstr "Mostrar sugerencias de amigos y conexiones" -#: ../../include/features.php:351 +#: ../../include/features.php:361 msgid "Connection Filtering" msgstr "Filtrado de conexiones" -#: ../../include/features.php:352 +#: ../../include/features.php:362 msgid "Filter incoming posts from connections based on keywords/content" msgstr "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido" -#: ../../include/features.php:364 +#: ../../include/features.php:374 msgid "Post/Comment Tools" msgstr "Gestión de entradas y comentarios" -#: ../../include/features.php:368 +#: ../../include/features.php:379 +msgid "Use markdown for editing posts" +msgstr "Usar markdown para editar las entradas" + +#: ../../include/features.php:387 msgid "Community Tagging" msgstr "Etiquetas de la comunidad" -#: ../../include/features.php:369 +#: ../../include/features.php:388 msgid "Ability to tag existing posts" msgstr "Capacidad de etiquetar entradas existentes" -#: ../../include/features.php:377 +#: ../../include/features.php:396 msgid "Post Categories" msgstr "Temas de las entradas" -#: ../../include/features.php:378 +#: ../../include/features.php:397 msgid "Add categories to your posts" msgstr "Añadir temas a sus publicaciones" -#: ../../include/features.php:386 +#: ../../include/features.php:405 msgid "Emoji Reactions" msgstr "Emoticonos \"emoji\"" -#: ../../include/features.php:387 +#: ../../include/features.php:406 msgid "Add emoji reaction ability to posts" msgstr "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas" -#: ../../include/features.php:396 +#: ../../include/features.php:415 msgid "Ability to file posts under folders" msgstr "Capacidad de archivar entradas en carpetas" -#: ../../include/features.php:404 +#: ../../include/features.php:423 msgid "Dislike Posts" msgstr "Desagrado de publicaciones" -#: ../../include/features.php:405 +#: ../../include/features.php:424 msgid "Ability to dislike posts/comments" msgstr "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios" -#: ../../include/features.php:413 +#: ../../include/features.php:432 msgid "Star Posts" msgstr "Entradas destacadas" -#: ../../include/features.php:414 +#: ../../include/features.php:433 msgid "Ability to mark special posts with a star indicator" msgstr "Capacidad de marcar entradas destacadas con un indicador de estrella" -#: ../../include/features.php:422 +#: ../../include/features.php:441 msgid "Tag Cloud" msgstr "Nube de etiquetas" -#: ../../include/features.php:423 +#: ../../include/features.php:442 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:434 +#: ../../include/features.php:453 msgid "Premium Channel" msgstr "Canal premium" -#: ../../include/features.php:435 +#: ../../include/features.php:454 msgid "" "Allows you to set restrictions and terms on those that connect with your " "channel" msgstr "Le permite configurar restricciones y normas de uso a aquellos que conectan con su canal" -#: ../../include/taxonomy.php:325 ../../include/taxonomy.php:346 +#: ../../include/taxonomy.php:377 ../../include/taxonomy.php:398 msgid "Tags" msgstr "Etiquetas" -#: ../../include/taxonomy.php:410 +#: ../../include/taxonomy.php:483 msgid "Keywords" msgstr "Palabras clave" -#: ../../include/taxonomy.php:431 +#: ../../include/taxonomy.php:504 msgid "have" msgstr "tener" -#: ../../include/taxonomy.php:431 +#: ../../include/taxonomy.php:504 msgid "has" msgstr "tiene" -#: ../../include/taxonomy.php:432 +#: ../../include/taxonomy.php:505 msgid "want" msgstr "quiero" -#: ../../include/taxonomy.php:432 +#: ../../include/taxonomy.php:505 msgid "wants" msgstr "quiere" -#: ../../include/taxonomy.php:433 +#: ../../include/taxonomy.php:506 msgid "likes" msgstr "gusta de" -#: ../../include/taxonomy.php:434 +#: ../../include/taxonomy.php:507 msgid "dislikes" msgstr "no gusta de" @@ -13344,283 +13479,283 @@ msgstr "Esta acción supera los límites establecidos por su plan de suscripció msgid "This action is not available under your subscription plan." msgstr "Esta acción no está disponible en su plan de suscripción." -#: ../../include/datetime.php:147 +#: ../../include/datetime.php:150 msgid "Birthday" msgstr "Cumpleaños" -#: ../../include/datetime.php:149 +#: ../../include/datetime.php:152 msgid "Age: " msgstr "Edad:" -#: ../../include/datetime.php:151 +#: ../../include/datetime.php:154 msgid "YYYY-MM-DD or MM-DD" msgstr "AAAA-MM-DD o MM-DD" -#: ../../include/datetime.php:292 +#: ../../include/datetime.php:298 msgid "less than a second ago" msgstr "hace un instante" -#: ../../include/datetime.php:310 +#: ../../include/datetime.php:316 #, php-format msgctxt "e.g. 22 hours ago, 1 minute ago" msgid "%1$d %2$s ago" msgstr "hace %1$d %2$s" -#: ../../include/datetime.php:321 +#: ../../include/datetime.php:327 msgctxt "relative_date" msgid "year" msgid_plural "years" msgstr[0] "año" msgstr[1] "años" -#: ../../include/datetime.php:324 +#: ../../include/datetime.php:330 msgctxt "relative_date" msgid "month" msgid_plural "months" msgstr[0] "mes" msgstr[1] "meses" -#: ../../include/datetime.php:327 +#: ../../include/datetime.php:333 msgctxt "relative_date" msgid "week" msgid_plural "weeks" msgstr[0] "semana" msgstr[1] "semanas" -#: ../../include/datetime.php:330 +#: ../../include/datetime.php:336 msgctxt "relative_date" msgid "day" msgid_plural "days" msgstr[0] "día" msgstr[1] "días" -#: ../../include/datetime.php:333 +#: ../../include/datetime.php:339 msgctxt "relative_date" msgid "hour" msgid_plural "hours" msgstr[0] "hora" msgstr[1] "horas" -#: ../../include/datetime.php:336 +#: ../../include/datetime.php:342 msgctxt "relative_date" msgid "minute" msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minutos" -#: ../../include/datetime.php:339 +#: ../../include/datetime.php:345 msgctxt "relative_date" msgid "second" msgid_plural "seconds" msgstr[0] "segundo" msgstr[1] "segundos" -#: ../../include/datetime.php:576 +#: ../../include/datetime.php:579 #, php-format msgid "%1$s's birthday" msgstr "Cumpleaños de %1$s" -#: ../../include/datetime.php:577 +#: ../../include/datetime.php:580 #, php-format msgid "Happy Birthday %1$s" msgstr "Feliz cumpleaños %1$s" -#: ../../include/nav.php:91 +#: ../../include/nav.php:98 msgid "Remote authentication" msgstr "Acceder desde su servidor" -#: ../../include/nav.php:91 +#: ../../include/nav.php:98 msgid "Click to authenticate to your home hub" msgstr "Pulsar para identificarse en su servidor de inicio" -#: ../../include/nav.php:98 +#: ../../include/nav.php:105 msgid "Network Activity" msgstr "Actividad de la red" -#: ../../include/nav.php:100 +#: ../../include/nav.php:107 msgid "Mark all activity notifications seen" msgstr "Marcar como vistas todas las notificaciones de actividad" -#: ../../include/nav.php:102 +#: ../../include/nav.php:109 msgid "Channel home" msgstr "Mi canal" -#: ../../include/nav.php:103 +#: ../../include/nav.php:110 msgid "View your channel home" msgstr "Ver su página principal del canal" -#: ../../include/nav.php:104 +#: ../../include/nav.php:111 msgid "Mark all channel notifications seen" msgstr "Marcar todas las notificaciones del canal como leídas" -#: ../../include/nav.php:109 +#: ../../include/nav.php:116 msgid "Registrations" msgstr "Registros" -#: ../../include/nav.php:112 +#: ../../include/nav.php:119 msgid "Notifications" msgstr "Notificaciones" -#: ../../include/nav.php:113 +#: ../../include/nav.php:120 msgid "View all notifications" msgstr "Ver todas las notificaciones" -#: ../../include/nav.php:114 +#: ../../include/nav.php:121 msgid "Mark all system notifications seen" msgstr "Marcar todas las notificaciones del sistema como leídas" -#: ../../include/nav.php:116 +#: ../../include/nav.php:123 msgid "Private mail" msgstr "Correo privado" -#: ../../include/nav.php:117 +#: ../../include/nav.php:124 msgid "View your private messages" msgstr "Ver sus mensajes privados" -#: ../../include/nav.php:118 +#: ../../include/nav.php:125 msgid "Mark all private messages seen" msgstr "Marcar todos los mensajes privados como leídos" -#: ../../include/nav.php:124 +#: ../../include/nav.php:131 msgid "Event Calendar" msgstr "Calendario de eventos" -#: ../../include/nav.php:129 ../../include/nav.php:215 +#: ../../include/nav.php:136 ../../include/nav.php:222 msgid "Manage Your Channels" msgstr "Gestionar sus canales" -#: ../../include/nav.php:132 ../../include/nav.php:217 +#: ../../include/nav.php:139 ../../include/nav.php:224 msgid "Account/Channel Settings" msgstr "Ajustes de cuenta/canales" -#: ../../include/nav.php:138 ../../include/nav.php:167 +#: ../../include/nav.php:145 ../../include/nav.php:174 msgid "End this session" msgstr "Finalizar esta sesión" -#: ../../include/nav.php:141 +#: ../../include/nav.php:148 msgid "Your profile page" msgstr "Su página del perfil" -#: ../../include/nav.php:144 +#: ../../include/nav.php:151 msgid "Manage/Edit profiles" msgstr "Administrar/editar perfiles" -#: ../../include/nav.php:146 +#: ../../include/nav.php:153 msgid "Edit your profile" msgstr "Editar su perfil" -#: ../../include/nav.php:153 ../../include/nav.php:157 +#: ../../include/nav.php:160 ../../include/nav.php:164 msgid "Sign in" msgstr "Acceder" -#: ../../include/nav.php:182 +#: ../../include/nav.php:189 msgid "Take me home" msgstr "Volver a la página principal" -#: ../../include/nav.php:184 +#: ../../include/nav.php:191 msgid "Log me out of this site" msgstr "Salir de este sitio" -#: ../../include/nav.php:189 +#: ../../include/nav.php:196 msgid "Create an account" msgstr "Crear una cuenta" -#: ../../include/nav.php:201 +#: ../../include/nav.php:208 msgid "Help and documentation" msgstr "Ayuda y documentación" -#: ../../include/nav.php:204 +#: ../../include/nav.php:211 msgid "Search site @name, #tag, ?docs, content" msgstr "Buscar en el sitio por @nombre, #etiqueta, ?ayuda o contenido" -#: ../../include/nav.php:224 +#: ../../include/nav.php:231 msgid "Site Setup and Configuration" msgstr "Ajustes y configuración del sitio" -#: ../../include/nav.php:311 +#: ../../include/nav.php:322 msgid "@name, #tag, ?doc, content" msgstr "@nombre, #etiqueta, ?ayuda, contenido" -#: ../../include/nav.php:312 +#: ../../include/nav.php:323 msgid "Please wait..." msgstr "Espere por favor…" -#: ../../include/nav.php:318 +#: ../../include/nav.php:329 msgid "Add Apps" msgstr "Añadir aplicaciones" -#: ../../include/nav.php:319 +#: ../../include/nav.php:330 msgid "Arrange Apps" msgstr "Organizar aplicaciones" -#: ../../include/nav.php:320 +#: ../../include/nav.php:331 msgid "Toggle System Apps" msgstr "Alternar aplicaciones de sistema" -#: ../../include/photos.php:123 +#: ../../include/photos.php:150 #, 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:130 +#: ../../include/photos.php:161 msgid "Image file is empty." msgstr "El fichero de imagen está vacío. " -#: ../../include/photos.php:268 +#: ../../include/photos.php:322 msgid "Photo storage failed." msgstr "La foto no ha podido ser guardada." -#: ../../include/photos.php:308 +#: ../../include/photos.php:364 msgid "a new photo" msgstr "una nueva foto" -#: ../../include/photos.php:312 +#: ../../include/photos.php:368 #, 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:605 +#: ../../include/photos.php:660 msgid "Upload New Photos" msgstr "Subir nuevas fotos" -#: ../../include/zot.php:654 +#: ../../include/zot.php:675 msgid "Invalid data packet" msgstr "Paquete de datos no válido" -#: ../../include/zot.php:681 +#: ../../include/zot.php:702 msgid "Unable to verify channel signature" msgstr "No ha sido posible de verificar la firma del canal" -#: ../../include/zot.php:2368 +#: ../../include/zot.php:2409 #, php-format msgid "Unable to verify site signature for %s" msgstr "No ha sido posible de verificar la firma del sitio para %s" -#: ../../include/group.php:26 +#: ../../include/group.php:22 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 "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente." -#: ../../include/group.php:268 +#: ../../include/group.php:264 msgid "Add new connections to this privacy group" msgstr "Añadir conexiones nuevas a este grupo de canales" -#: ../../include/group.php:310 +#: ../../include/group.php:306 msgid "edit" msgstr "editar" -#: ../../include/group.php:333 +#: ../../include/group.php:329 msgid "Edit group" msgstr "Editar grupo" -#: ../../include/group.php:334 +#: ../../include/group.php:330 msgid "Add privacy group" msgstr "Añadir un grupo de canales" -#: ../../include/group.php:335 +#: ../../include/group.php:331 msgid "Channels not in any privacy group" msgstr "Sin canales en ningún grupo" diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php index f5cfecb5a..b3714d087 100644 --- a/view/es-es/hstrings.php +++ b/view/es-es/hstrings.php @@ -71,6 +71,9 @@ App::$strings["2. Enter my \$Projectname network address into the site searchbar App::$strings["or visit"] = "o visitar"; App::$strings["3. Click [Connect]"] = "3. Pulse [conectar]"; App::$strings["Submit"] = "Enviar"; +App::$strings["Cards"] = "Fichas"; +App::$strings["Add Article"] = "Añadir un artículo"; +App::$strings["Articles"] = "Artículos"; App::$strings["Item not found"] = "Elemento no encontrado"; App::$strings["Layout Name"] = "Nombre de la plantilla"; App::$strings["Layout Description (Optional)"] = "Descripción de la plantilla (opcional)"; @@ -148,6 +151,7 @@ App::$strings["You may also export your posts and conversations for a particular App::$strings["To select all posts for a given year, such as this year, visit <a href=\"%1\$s\">%2\$s</a>"] = "Para seleccionar todos los mensajes de un año determinado, como este año, visite <a href=\"%1\$s\">%2\$s</a>"; App::$strings["To select all posts for a given month, such as January of this year, visit <a href=\"%1\$s\">%2\$s</a>"] = "Para seleccionar todos los mensajes de un mes determinado, como el de enero de este año, visite <a href=\"%1\$s\">%2\$s</a>"; App::$strings["These content files may be imported or restored by visiting <a href=\"%1\$s\">%2\$s</a> on any site containing your channel. For best results please import or restore these in date order (oldest first)."] = "Estos ficheros pueden ser importados o restaurados visitando <a href=\"%1\$s\">%2\$s</a> o cualquier sitio que contenga su canal. Para obtener los mejores resultados, por favor, importar o restaurar estos ficheros en orden de fecha (la más antigua primero)."; +App::$strings["Welcome to hubzilla!"] = "¡Bienvenido o bienvenida a Hubzilla!"; App::$strings["Public access denied."] = "Acceso público denegado."; App::$strings["Search"] = "Buscar"; App::$strings["Items tagged with: %s"] = "elementos etiquetados con: %s"; @@ -165,8 +169,10 @@ App::$strings["Sync Now"] = "Sincronizar ahora"; App::$strings["Please wait several minutes between consecutive operations."] = "Por favor, espere algunos minutos entre operaciones consecutivas."; App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "Cuando sea posible, elimine una ubicación iniciando sesión en el sitio web o \"hub\" y borrando su canal."; App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Utilice este formulario para eliminar la dirección si el \"hub\" no está funcionando desde hace tiempo."; -App::$strings["Change Order of Navigation Apps"] = "Cambiar el orden de las aplicaciones en la barra de navegación"; -App::$strings["Use arrows to move the corresponding app up or down in the display list"] = "Utilizar las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la lista de visualización"; +App::$strings["Change Order of Pinned Navbar Apps"] = "Cambiar el orden de las aplicaciones fijas en la barra de navegación"; +App::$strings["Change Order of App Tray Apps"] = "Cambiar el orden de las aplicaciones de la bandeja de aplicaciones"; +App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Use las flechas para mover la aplicación correspondiente a la izquierda (arriba) o derecha (abajo) en la barra de navegación."; +App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Use las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la bandeja de aplicaciones."; App::$strings["Menu not found."] = "Menú no encontrado"; App::$strings["Unable to create element."] = "No se puede crear el elemento."; App::$strings["Unable to update menu element."] = "No es posible actualizar el elemento del menú."; @@ -253,6 +259,10 @@ App::$strings["photo"] = "foto"; App::$strings["status"] = "el mensaje de estado"; App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s está siguiendo %3\$s de %2\$s"; App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s ha dejado de seguir %3\$s de %2\$s"; +App::$strings["Channel not found."] = "Canal no encontrado."; +App::$strings["Insert web link"] = "Insertar enlace web"; +App::$strings["Title (optional)"] = "Título (opcional)"; +App::$strings["Edit Article"] = "Editar el artículo"; 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["Imported file is empty."] = "El fichero importado está vacío."; @@ -582,10 +592,14 @@ App::$strings["Delivery interval"] = "Intervalo de entrega"; App::$strings["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."] = "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."; App::$strings["Deliveries per process"] = "Intentos de envío por proceso"; App::$strings["Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5."] = "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5."; +App::$strings["Queue Threshold"] = "Umbral de la cola de espera"; +App::$strings["Always defer immediate delivery if queue contains more than this number of entries."] = "Aplazar siempre la entrega inmediata si la cola contiene más de este número de entradas."; App::$strings["Poll interval"] = "Intervalo máximo de tiempo entre dos mensajes sucesivos"; App::$strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "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."; App::$strings["Path to ImageMagick convert program"] = "Ruta al programa de conversión de ImageMagick"; App::$strings["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"] = "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"; +App::$strings["Allow SVG thumbnails in file browser"] = "Permitir miniaturas SVG en el navegador de archivos"; +App::$strings["WARNING: SVG images may contain malicious code."] = "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso."; App::$strings["Maximum Load Average"] = "Carga media máxima"; App::$strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Carga máxima del sistema antes de que los procesos de entrega y envío se hayan retardado - por defecto, 50."; App::$strings["Expiration period in days for imported (grid/network) content"] = "Caducidad del contenido importado de otros sitios (en días)"; @@ -699,6 +713,7 @@ App::$strings["Maximum Friend Requests/Day:"] = "Máximo de solicitudes de amist App::$strings["May reduce spam activity"] = "Podría reducir la actividad de spam"; App::$strings["Default Privacy Group"] = "Grupo de canales predeterminado"; App::$strings["Use my default audience setting for the type of object published"] = "Usar los ajustes de mi audiencia predeterminada para el tipo de publicación"; +App::$strings["Profile to assign new connections"] = "Perfil para asignar a las nuevas conexiones"; App::$strings["Channel permissions category:"] = "Categoría de los permisos del canal:"; App::$strings["Default Permissions Group"] = "Grupo de permisos predeterminados"; App::$strings["Maximum private messages per day from unknown people:"] = "Máximo de mensajes privados por día de gente desconocida:"; @@ -734,6 +749,8 @@ App::$strings["New connections"] = "Nuevas conexiones"; App::$strings["System Registrations"] = "Registros del sistema"; App::$strings["Unseen shared files"] = "Ficheros compartidos no vistos"; App::$strings["Unseen public activity"] = "Actividad pública no vista"; +App::$strings["Email notification hub (hostname)"] = "Email de notificación del hub (nombre del host)"; +App::$strings["If your channel is mirrored to multiple hubs, set this to your preferred location. This will prevent duplicate email notifications. Example: %s"] = "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"; App::$strings["Also show new wall posts, private messages and connections under Notices"] = "Mostrar también en Avisos las nuevas publicaciones, los mensajes privados y las conexiones"; App::$strings["Notify me of events this many days in advance"] = "Avisarme de los eventos con algunos días de antelación"; App::$strings["Must be greater than 0"] = "Debe ser mayor que 0"; @@ -799,6 +816,8 @@ App::$strings["Minimum of 10 seconds, no maximum"] = "Mínimo de 10 segundos, si App::$strings["Maximum number of conversations to load at any time:"] = "Máximo número de conversaciones a cargar en cualquier momento:"; App::$strings["Maximum of 100 items"] = "Máximo de 100 elementos"; App::$strings["Show emoticons (smilies) as images"] = "Mostrar emoticonos (smilies) como imágenes"; +App::$strings["Provide channel menu in navigation bar"] = "Proporcionar un menú de canales en la barra de navegación"; +App::$strings["Default: channel menu located in app menu"] = "Predeterminado: menú de canales ubicado en el menú de aplicaciones"; App::$strings["Manual conversation updates"] = "Actualizaciones manuales de la conversación"; App::$strings["Default is on, turning this off may increase screen jumping"] = "El valor predeterminado está activado, al desactivarlo puede aumentar el salto de pantalla"; App::$strings["Link post titles to source"] = "Enlazar título de la publicación a la fuente original"; @@ -866,7 +885,6 @@ App::$strings["Authentication failed."] = "Falló la autenticación."; App::$strings["Remote Authentication"] = "Acceso desde su servidor"; App::$strings["Enter your channel address (e.g. channel@example.com)"] = "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)"; App::$strings["Authenticate"] = "Acceder"; -App::$strings["Channel not found."] = "Canal no encontrado."; App::$strings["Permissions denied."] = "Permisos denegados."; App::$strings["Import"] = "Importar"; App::$strings["Authorize application connection"] = "Autorizar una conexión de aplicación"; @@ -874,8 +892,6 @@ App::$strings["Return to your app and insert this Security Code:"] = "Vuelva a s App::$strings["Please login to continue."] = "Por favor inicie sesión para continuar."; App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "¿Desea autorizar a esta aplicación a acceder a sus publicaciones y contactos, y/o crear nuevas publicaciones por usted?"; App::$strings["Item not available."] = "Elemento no disponible"; -App::$strings["Insert web link"] = "Insertar enlace web"; -App::$strings["Title (optional)"] = "Título (opcional)"; App::$strings["Edit Block"] = "Modificar este bloque"; App::$strings["vcard"] = "vcard"; App::$strings["Apps"] = "Aplicaciones (apps)"; @@ -1047,6 +1063,7 @@ App::$strings["Layout not found."] = "Plantilla no encontrada"; App::$strings["Module Name:"] = "Nombre del módulo:"; App::$strings["Layout Help"] = "Ayuda para el diseño de plantillas de página"; App::$strings["Edit another layout"] = "Editar otro diseño"; +App::$strings["System layout"] = "Diseño del sistema"; App::$strings["Poke"] = "Toques y otras cosas"; App::$strings["Poke somebody"] = "Dar un toque a alguien"; App::$strings["Poke/Prod"] = "Toque/Incitación"; @@ -1210,12 +1227,17 @@ App::$strings["Help"] = "Ayuda"; App::$strings["Comanche page description language help"] = "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche"; App::$strings["Layout Description"] = "Descripción de la plantilla"; App::$strings["Download PDL file"] = "Descargar el fichero PDL"; +App::$strings["Unknown error"] = "Error desconocido"; +App::$strings["Post not found."] = "Mensaje no encontrado."; App::$strings["post"] = "la entrada"; App::$strings["comment"] = "el comentario"; 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["This setting requires special processing and editing has been blocked."] = "Este ajuste necesita de un proceso especial y la edición ha sido bloqueada."; App::$strings["Configuration Editor"] = "Editor de configuración"; 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."] = "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica."; +App::$strings["If enabled, connection requests will be approved without your interaction"] = "Si está habilitado, las solicitudes de conexión serán aprobadas sin su intervención."; +App::$strings["Automatic approval settings"] = "Opciones de autorización automática"; +App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "Es posible que se hayan preestablecido o bloqueado algunos permisos individuales según el tipo de canal y la configuración de privacidad."; App::$strings["Privacy group created."] = "El grupo de canales ha sido creado."; App::$strings["Could not create privacy group."] = "No se puede crear el grupo de canales"; App::$strings["Privacy group not found."] = "Grupo de canales no encontrado."; @@ -1308,7 +1330,6 @@ App::$strings["Make Default"] = "Convertir en predeterminado"; App::$strings["%d new messages"] = "%d mensajes nuevos"; App::$strings["%d new introductions"] = "%d nuevas solicitudes de conexión"; App::$strings["Delegated Channel"] = "Canal delegado"; -App::$strings["Cards"] = "Fichas"; App::$strings["Add Card"] = "Añadir una ficha"; App::$strings["This directory server requires an access token"] = "El servidor de este directorio necesita un \"token\" de acceso"; App::$strings["About this site"] = "Acerca de este sitio"; @@ -1415,7 +1436,7 @@ App::$strings["Connect"] = "Conectar"; App::$strings["Public Forum:"] = "Foro público:"; App::$strings["Keywords: "] = "Palabras clave:"; App::$strings["Don't suggest"] = "No sugerir:"; -App::$strings["Common connections:"] = "Conexiones comunes:"; +App::$strings["Common connections (estimated):"] = "Conexiones comunes (estimadas): "; App::$strings["Global Directory"] = "Directorio global:"; App::$strings["Local Directory"] = "Directorio local:"; App::$strings["Finding:"] = "Encontrar:"; @@ -1484,6 +1505,7 @@ App::$strings["Maximum daily site registrations exceeded. Please try again tomor App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Por favor, confirme que acepta los Términos del servicio. El registro ha fallado."; App::$strings["Passwords do not match."] = "Las contraseñas no coinciden."; App::$strings["Registration successful. Please check your email for validation instructions."] = "Registro realizado con éxito. Por favor, compruebe su correo electrónico para ver las instrucciones para validarlo."; +App::$strings["Registration successful. Continue to create your first channel..."] = "Registro exitoso. Continúe creando tu primer canal..."; App::$strings["Your registration is pending approval by the site owner."] = "Su registro está pendiente de aprobación por el propietario del sitio."; App::$strings["Your registration can not be processed."] = "Su registro no puede ser procesado."; App::$strings["Registration on this hub is disabled."] = "El registro está deshabilitado en este sitio."; @@ -1491,7 +1513,7 @@ App::$strings["Registration on this hub is by approval only."] = "El registro en App::$strings["<a href=\"pubsites\">Register at another affiliated hub.</a>"] = "<a href=\"pubsites\">Registrarse en otro hub afiliado.</a>"; App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Este sitio ha excedido el límite de inscripción diaria de cuentas. Por favor, inténtelo de nuevo mañana."; App::$strings["I accept the %s for this website"] = "Acepto los %s de este sitio"; -App::$strings["I am over 13 years of age and accept the %s for this website"] = "Tengo más de 13 años de edad y acepto los %s de este sitio"; +App::$strings["I am over %s years of age and accept the %s for this website"] = "Tengo más de %s años de edad y acepto los %s de este sitio web"; App::$strings["Your email address"] = "Su dirección de correo electrónico"; App::$strings["Choose a password"] = "Elija una contraseña"; App::$strings["Please re-enter your password"] = "Por favor, vuelva a escribir su contraseña"; @@ -1516,6 +1538,7 @@ App::$strings["Developers"] = "Desarrolladores"; App::$strings["Tutorials"] = "Tutoriales"; App::$strings["\$Projectname Documentation"] = "Documentación de \$Projectname"; App::$strings["Contents"] = "Contenidos"; +App::$strings["Article"] = "Artículo"; App::$strings["Item has been removed."] = "Se ha eliminado el elemento."; App::$strings["Tag removed"] = "Etiqueta eliminada."; App::$strings["Remove Item Tag"] = "Eliminar etiqueta del elemento."; @@ -1617,6 +1640,8 @@ App::$strings["Purchase"] = "Comprar"; App::$strings["Undelete"] = "Recuperar"; App::$strings["Add to app-tray"] = "Añadir a la bandeja de aplicaciones"; App::$strings["Remove from app-tray"] = "Quitar de la bandeja de aplicaciones"; +App::$strings["Pin to navbar"] = "Fijar en la barra de navegación"; +App::$strings["Unpin from navbar"] = "Quitar de la barra de navegación"; App::$strings["__ctx:permcat__ default"] = "por defecto"; App::$strings["__ctx:permcat__ follower"] = "seguidor"; App::$strings["__ctx:permcat__ contributor"] = "contribuidor"; @@ -1772,7 +1797,6 @@ App::$strings["Shared"] = "Compartido"; App::$strings["You are using %1\$s of your available file storage."] = "Está usando %1\$s de su espacio disponible para ficheros."; App::$strings["You are using %1\$s of %2\$s available file storage. (%3\$s%)"] = "Está usando %1\$s de %2\$s que tiene a su disposición para ficheros. (%3\$s%)"; App::$strings["WARNING:"] = "ATENCIÓN: "; -App::$strings["Please use DAV to upload large (video, audio) files.<br>See <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>"] = "Por favor, use DAV para subir ficheros de gran tamaño (vídeo, audio).<br>Mire en <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>"; App::$strings["Create new folder"] = "Crear nueva carpeta"; App::$strings["Upload file"] = "Subir fichero"; App::$strings["Drop files here to immediately upload"] = "Arrastre los ficheros aquí para subirlos de forma inmediata"; @@ -1802,6 +1826,8 @@ App::$strings["Events Tools"] = "Gestión de eventos"; App::$strings["Export Calendar"] = "Exportar el calendario"; App::$strings["Import Calendar"] = "Importar un calendario"; App::$strings["Suggested Chatrooms"] = "Salas de chat sugeridas"; +App::$strings["HQ Control Panel"] = "Panel de control de HQ"; +App::$strings["Create a new post"] = "Crear una nueva entrada"; App::$strings["Private Mail Menu"] = "Menú de correo privado"; App::$strings["Combined View"] = "Vista combinada"; App::$strings["Inbox"] = "Bandeja de entrada"; @@ -1830,8 +1856,8 @@ App::$strings["Remove term"] = "Eliminar término"; App::$strings["Saved Searches"] = "Búsquedas guardadas"; App::$strings["add"] = "añadir"; App::$strings["Notes"] = "Notas"; -App::$strings["Wiki Pages"] = "Páginas del wiki"; App::$strings["Add new page"] = "Añadir una nueva página"; +App::$strings["Wiki Pages"] = "Páginas del wiki"; App::$strings["Page name"] = "Nombre de la página"; App::$strings["Refresh"] = "Recargar"; App::$strings["Tasks"] = "Tareas"; @@ -1859,6 +1885,7 @@ App::$strings["New Network Activity"] = "Nueva actividad en la red"; App::$strings["New Network Activity Notifications"] = "Avisos de nueva actividad en la red"; App::$strings["View your network activity"] = "Ver su actividad en la red"; App::$strings["Mark all notifications read"] = "Marcar todas las notificaciones como leídas"; +App::$strings["Show new posts only"] = "Mostrar solo las entradas nuevas"; App::$strings["New Home Activity"] = "Nueva actividad en su página principal"; App::$strings["New Home Activity Notifications"] = "Avisos de nueva actividad en su página principal"; App::$strings["View your home activity"] = "Ver su actividad en su página principal"; @@ -1882,7 +1909,7 @@ App::$strings["New Registrations"] = "Registros nuevos"; App::$strings["New Registrations Notifications"] = "Notificaciones de nuevos registros"; App::$strings["Public Stream Notifications"] = "Avisos del \"stream\" público"; App::$strings["View the public stream"] = "Ver el \"stream\" público"; -App::$strings["Loading..."] = "Cargando..."; +App::$strings["Loading"] = "Cargando"; App::$strings["Source channel not found."] = "No se ha encontrado el canal de origen."; App::$strings["Create an account to access services and applications"] = "Crear una cuenta para acceder a los servicios y aplicaciones"; App::$strings["Logout"] = "Finalizar sesión"; @@ -2013,23 +2040,12 @@ App::$strings["InsaneJournal password"] = "Contraseña en InsaneJournal"; App::$strings["Post to InsaneJournal by default"] = "Publicar por defecto en InsaneJournal"; App::$strings["InsaneJournal Post Settings"] = "Ajustes de publicación en InsaneJournal"; App::$strings["Insane Journal Settings saved."] = "Se han guardado los ajustes de InsaneJournal."; -App::$strings["Upload a file"] = "Subir un fichero"; -App::$strings["Drop files here to upload"] = "Arrastre los ficheros aquí para subirlos"; -App::$strings["Failed"] = "Ha fallado"; -App::$strings["No files were uploaded."] = "No se han subido ficheros."; -App::$strings["Uploaded file is empty"] = "El fichero subido está vacío"; -App::$strings["Image exceeds size limit of "] = "La imagen supera el límite de tamaño de "; -App::$strings["File has an invalid extension, it should be one of "] = "El fichero tiene una extensión no válida, debería ser una de estas: "; -App::$strings["Upload was cancelled, or server error encountered"] = "Se canceló la carga o se encontró un error del servidor"; App::$strings["Post to Dreamwidth"] = "Publicar en Dreamwidth"; App::$strings["Enable Dreamwidth Post Plugin"] = "Activar el plugin de publicación en Dreamwidth"; App::$strings["Dreamwidth username"] = "Nombre de usuario en Dreamwidth"; App::$strings["Dreamwidth password"] = "Contraseña en Dreamwidth"; App::$strings["Post to Dreamwidth by default"] = "Publicar en Dreamwidth de forma predeterminada"; App::$strings["Dreamwidth Post Settings"] = "Ajustes de publicación en Dreamwidth"; -App::$strings["Install Firefox Sharing Tools"] = "Instalar las herramientas de compartición de Firefox"; -App::$strings["Share content from Firefox to \$Projectname"] = "Compartir contenido desde Firefox a \$Projectname"; -App::$strings["Install Firefox Sharing Tools to this web browser"] = "Instalar las herramientas de compartición de Firefox en este navegador"; App::$strings["Hubzilla Directory Stats"] = "Estadísticas de directorio de Hubzilla"; App::$strings["Total Hubs"] = "Número total de servidores"; App::$strings["Hubzilla Hubs"] = "Servidores (hubs) de Hubzilla"; @@ -2044,10 +2060,6 @@ App::$strings["Average Age"] = "Promedio de edad"; App::$strings["Known Chatrooms"] = "Salas de chat conocidas"; App::$strings["Known Tags"] = "Etiquetas conocidas"; 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,"] = "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refieren únicamente a aquellas de las que **este directorio** es consciente, y no a todos los conocidos en la red. Esto también es aplicable a las salas de chat,"; -App::$strings["Email notification hub"] = "Notificación por correo electrónico del hub"; -App::$strings["Hostname"] = "Nombre del host"; -App::$strings["Mailhost Settings"] = "Ajustes de Mailhost"; -App::$strings["MAILHOST Settings saved."] = "Se han guardado los ajustes de MAILHOST."; App::$strings["Your Webbie:"] = "Su webbie: "; App::$strings["Fontsize (px):"] = "Tamaño de fuente (px): "; App::$strings["Link:"] = "Enlace: "; @@ -2175,6 +2187,11 @@ App::$strings["Select default avatar image if none was found at Gravatar. See RE App::$strings["Rating of images"] = "Valoración de las imágenes"; App::$strings["Select the appropriate avatar rating for your site. See README"] = "Seleccione la valoración adecuada del avatar para su sitio. Ver README"; App::$strings["Gravatar settings updated."] = "Se han actualizado los ajustes de Gravatar."; +App::$strings["Hubzilla File Storage Import"] = "Importar del depósito de ficheros de Hubzilla"; +App::$strings["This will import all your cloud files from another server."] = "Esto importará todos sus ficheros en la nube desde otro servidor."; +App::$strings["Hubzilla Server base URL"] = "URL base del servidor Hubzilla"; +App::$strings["Since modified date yyyy-mm-dd"] = "Modificado desde la fecha yyyy-mm-dd"; +App::$strings["Until modified date yyyy-mm-dd"] = "Modificado hasta la fecha yyyy-mm-dd"; App::$strings["Recent Channel/Profile Viewers"] = "Visitantes recientes del canal o perfil"; App::$strings["This plugin/addon has not been configured."] = "El plugin o complemento no se ha configurado."; App::$strings["Please visit the Visage settings on %s"] = "Por favor, revise los ajustes de Visage en %s"; @@ -2255,6 +2272,8 @@ App::$strings["ActivityPub"] = "ActivityPub"; App::$strings["ActivityPub Protocol Settings updated."] = "Se han actualizado los ajustes del protocolo ActivityPub."; App::$strings["The ActivityPub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos."; App::$strings["Enable the ActivityPub protocol for this channel"] = "Activar el protocolo ActivityPub para este canal"; +App::$strings["Send multi-media HTML articles"] = "Enviar artículos multimedia en HTML"; +App::$strings["Not supported by some microblog services such as Mastodon"] = "No soportado por algunos servicios de microblog como Mastodon"; App::$strings["ActivityPub Protocol Settings"] = "Ajustes del protocolo ActivityPub"; App::$strings["Project Servers and Resources"] = "Servidores y recursos del proyecto"; App::$strings["Project Creator and Tech Lead"] = "Creador del proyecto y director técnico"; @@ -2440,7 +2459,7 @@ App::$strings["in lust"] = "lujurioso/a"; App::$strings["naked"] = "desnudo/a"; App::$strings["stinky"] = "apestoso/a"; App::$strings["sweaty"] = "sudoroso/a"; -App::$strings["bleeding out"] = "una maldición"; +App::$strings["bleeding out"] = "exánime"; App::$strings["victorious"] = "victorioso/a"; App::$strings["defeated"] = "derrotado/a"; App::$strings["envious"] = "envidioso/a"; @@ -2542,6 +2561,8 @@ App::$strings["Uncertain"] = "Indeterminado"; App::$strings["It's complicated"] = "Es complicado"; App::$strings["Don't care"] = "No me importa"; App::$strings["Ask me"] = "Pregúnteme"; +App::$strings["likes %1\$s's %2\$s"] = "gusta de %2\$s de %1\$s"; +App::$strings["doesn't like %1\$s's %2\$s"] = "no gusta de %2\$s de %1\$s"; App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s ahora está conectado/a con %2\$s"; App::$strings["%1\$s poked %2\$s"] = "%1\$s ha dado un toque a %2\$s"; App::$strings["poked"] = "ha dado un toque a"; @@ -2550,6 +2571,7 @@ App::$strings["Categories:"] = "Temas:"; App::$strings["Filed under:"] = "Archivado bajo:"; App::$strings["View in context"] = "Mostrar en su contexto"; App::$strings["remove"] = "eliminar"; +App::$strings["Loading..."] = "Cargando..."; App::$strings["Delete Selected Items"] = "Eliminar elementos seleccionados"; App::$strings["View Source"] = "Ver el código fuente de la entrada"; App::$strings["Follow Thread"] = "Seguir este hilo"; @@ -2606,6 +2628,8 @@ App::$strings["Files and Storage"] = "Ficheros y repositorio"; App::$strings["Bookmarks"] = "Marcadores"; App::$strings["Saved Bookmarks"] = "Marcadores guardados"; App::$strings["View Cards"] = "Ver las fichas"; +App::$strings["articles"] = "artículos"; +App::$strings["View Articles"] = "Ver los artículos"; App::$strings["View Webpages"] = "Ver páginas web"; App::$strings["__ctx:noun__ Attending"] = array( 0 => "Participaré", @@ -2919,9 +2943,10 @@ App::$strings["Post permissions %s cannot be changed %s after a post is shared.< App::$strings["Cannot locate DNS info for database server '%s'"] = "No se ha podido localizar información de DNS para el servidor de base de datos “%s”"; App::$strings["Image/photo"] = "Imagen/foto"; App::$strings["Encrypted content"] = "Contenido cifrado"; -App::$strings["Install %s element: "] = "Instalar el elemento %s:"; +App::$strings["Install %1\$s element %2\$s"] = "Instalar el elemento de%1\$s%2\$s"; App::$strings["This post contains an installable %s element, however you lack permissions to install it on this site."] = "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio."; App::$strings["card"] = "ficha"; +App::$strings["article"] = "artículo"; App::$strings["Click to open/close"] = "Pulsar para abrir/cerrar"; App::$strings["spoiler"] = "spoiler"; App::$strings["$1 wrote:"] = "$1 escribió:"; @@ -2929,7 +2954,7 @@ App::$strings[" by "] = "por"; App::$strings[" on "] = "en"; App::$strings["Embedded content"] = "Contenido incorporado"; App::$strings["Embedding disabled"] = "Incrustación deshabilitada"; -App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$sda la bienvenida a %2\$s"; +App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s da la bienvenida a %2\$s"; App::$strings["General Features"] = "Funcionalidades básicas"; App::$strings["Multiple Profiles"] = "Múltiples perfiles"; App::$strings["Ability to create multiple profiles"] = "Capacidad de crear múltiples perfiles"; @@ -2990,6 +3015,7 @@ App::$strings["Show friend and connection suggestions"] = "Mostrar sugerencias d App::$strings["Connection Filtering"] = "Filtrado de conexiones"; App::$strings["Filter incoming posts from connections based on keywords/content"] = "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido"; App::$strings["Post/Comment Tools"] = "Gestión de entradas y comentarios"; +App::$strings["Use markdown for editing posts"] = "Usar markdown para editar las entradas"; App::$strings["Community Tagging"] = "Etiquetas de la comunidad"; App::$strings["Ability to tag existing posts"] = "Capacidad de etiquetar entradas existentes"; App::$strings["Post Categories"] = "Temas de las entradas"; diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 08cf97173..01def9900 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -289,7 +289,7 @@ function string2bb(element) { $.fn.bbco_autocomplete = function(type) { if(type=='bbcode') { - var open_close_elements = ['bold', 'italic', 'underline', 'overline', 'strike', 'superscript', 'subscript', 'quote', 'code', 'open', 'spoiler', 'map', 'nobb', 'list', 'checklist', 'ul', 'ol', 'dl', 'li', 'table', 'tr', 'th', 'td', 'center', 'color', 'font', 'size', 'zrl', 'zmg', 'rpost', 'qr', 'observer', 'observer.language','embed', 'highlight']; + var open_close_elements = ['bold', 'italic', 'underline', 'overline', 'strike', 'superscript', 'subscript', 'quote', 'code', 'open', 'spoiler', 'map', 'nobb', 'list', 'checklist', 'ul', 'ol', 'dl', 'li', 'table', 'tr', 'th', 'td', 'center', 'color', 'font', 'size', 'zrl', 'zmg', 'rpost', 'qr', 'observer', 'observer.language','embed', 'highlight', 'url', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']; var open_elements = ['observer.baseurl', 'observer.address', 'observer.photo', 'observer.name', 'observer.webname', 'observer.url', '*', 'hr', ]; var elements = open_close_elements.concat(open_elements); diff --git a/view/tpl/msg-header.tpl b/view/tpl/msg-header.tpl index d71d432fb..b6856f139 100755 --- a/view/tpl/msg-header.tpl +++ b/view/tpl/msg-header.tpl @@ -26,7 +26,7 @@ }); $('#prvmail-attach-wrapper').click(function(event) { event.preventDefault(); $('#invisible-wall-file-upload').trigger('click'); return false;}); - $('#prvmail-attach-wrapper-sub').click(function(event) { event.preventDefault(); $('#invisible-wall-file-upload').trigger('click'); return false;}); + $('#prvmail-attach-sub').click(function(event) { event.preventDefault(); $('#invisible-wall-file-upload').trigger('click'); return false;}); }); diff --git a/view/tpl/navbar_default.tpl b/view/tpl/navbar_default.tpl index c4f5af1dc..2c9570938 100755 --- a/view/tpl/navbar_default.tpl +++ b/view/tpl/navbar_default.tpl @@ -64,7 +64,7 @@ <a id="nav-app-link" href="{{$url}}" class="nav-link text-truncate"> {{$sel.name}} {{if $sitelocation}} - <br><small class="text-muted">{{$sitelocation}}</small> + <br><small>{{$sitelocation}}</small> {{/if}} </a> </div> diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 0974045fe..299c07592 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -28,6 +28,9 @@ var path = $(this)[0].pathname.substr(1,7); var stateObj = { b64mid: b64mid }; + if(b64mid === 'undefined' && notify_id === 'undefined') + return; + {{if $module == 'display'}} history.pushState(stateObj, '', 'display/' + b64mid); {{/if}} |