diff options
925 files changed, 29978 insertions, 12339 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 96a76e666..782cd1d2a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,9 @@ # Select image from https://hub.docker.com/_/php/ #image: php:7.3 # Use a prepared Hubzilla image to optimise pipeline duration -image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3 +# image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3 + +image: php:8.0 stages: - test @@ -35,7 +37,12 @@ before_script: - if [ -f /usr/local/etc/php/conf.d/z_prod.ini ]; then mv /usr/local/etc/php/conf.d/z_prod.ini /usr/local/etc/php/conf.d/z_prod.ini.off; fi # Install & enable Xdebug for code coverage reports - pecl install xdebug +- apt-get update +- apt-get install zip unzip libjpeg-dev libpng-dev -yqq - docker-php-ext-enable xdebug +- docker-php-ext-install gd + + # Install composer - curl -sS https://getcomposer.org/installer | php # Install dev libraries from composer @@ -43,31 +50,38 @@ before_script: # php.ini settings - echo 'xdebug.mode=coverage' >> /usr/local/etc/php/php.ini -# hidden job definition with template for MySQL/MariaDB -.job_template_mysql: &job_definition_mysql +# hidden job definition with template for PHP +.job_template_php: &job_definition_php stage: test script: - - echo "USE $MYSQL_DATABASE; $(cat ./install/schema_mysql.sql)" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" - - echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" - - echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" - vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text + +# hidden job definition with template for MySQL/MariaDB +#.job_template_mysql: &job_definition_mysql +# stage: test +# script: +# - echo "USE $MYSQL_DATABASE; $(cat ./install/schema_mysql.sql)" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" +# - echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" +# - echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" +# - vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text + # hidden job definition with template for PostgreSQL -.job_template_postgres: &job_definition_postgres - stage: test - services: - - postgres:latest - script: - - export PGPASSWORD=$POSTGRES_PASSWORD - - psql --version - - psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT VERSION();" +#.job_template_postgres: &job_definition_postgres +# stage: test +# services: +# - postgres:latest +# script: +# - export PGPASSWORD=$POSTGRES_PASSWORD +# - psql --version +# - psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT VERSION();" # Import hubzilla's DB schema - - psql -h "postgres" -U "$POSTGRES_USER" -v ON_ERROR_STOP=1 --quiet "$POSTGRES_DB" < ./install/schema_postgres.sql +# - psql -h "postgres" -U "$POSTGRES_USER" -v ON_ERROR_STOP=1 --quiet "$POSTGRES_DB" < ./install/schema_postgres.sql # Show databases and relations/tables of hubzilla's database #- psql -h "postgres" -U "$POSTGRES_USER" -l #- psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\dt;" # Run the actual tests - - vendor/bin/phpunit --configuration tests/phpunit-pgsql.xml --testdox +# - vendor/bin/phpunit --configuration tests/phpunit-pgsql.xml --testdox # hidden job definition with artifacts config template .artifacts_template: @@ -82,36 +96,41 @@ before_script: - tests/results/ -# PHP7.3 with MySQL 5.7 -php7.3_mysql5.7: - <<: *job_definition_mysql - services: - - mysql:5.7 +# PHP8.0 +php8.0: + <<: *job_definition_php + +# PHP8.0 with MySQL 5.7 +#php8.0_mysql5.7: +# <<: *job_definition_mysql +# services: +# - mysql:5.7 -# PHP7.3 with MySQL 8 (latest) -php7.3_mysql8: - <<: *job_definition_mysql - services: - - name: mysql:8 - command: ["--default-authentication-plugin=mysql_native_password"] +# PHP8.0 with MySQL 8 (latest) +#php8.0_mysql8: +# <<: *job_definition_mysql +# services: +# - name: mysql:8 +# command: ["--default-authentication-plugin=mysql_native_password"] -# PHP7.3 with MariaDB 10.2 -php7.3_mariadb10.2: - <<: *job_definition_mysql - services: - - name: mariadb:10.2 - alias: mysql +# PHP8.0 with MariaDB 10.2 +#php8.0_mariadb10.2: +# <<: *job_definition_mysql +# services: +# - name: mariadb:10.2 +# alias: mysql -# PHP7.3 with MariaDB 10.3 (latest) -php7.3_mariadb10.3: - <<: *job_definition_mysql - image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3 - services: - - name: mariadb:10.3 - alias: mysql +# PHP8.0 with MariaDB 10.3 (latest) +#php8.0_mariadb10.3: +# <<: *job_definition_mysql +# image: php:8.0 + #image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3 +# services: +# - name: mariadb:10.3 +# alias: mysql # PHP7.3 with PostgreSQL latest (11) @@ -131,7 +150,7 @@ php7.3_mariadb10.3: pages: stage: deploy cache: {} - image: php:7-cli-alpine + image: php:8-cli-alpine before_script: - apk update - apk add doxygen ttf-freefont graphviz @@ -1,3 +1,42 @@ +Hubzilla 7.2 (2022-03-29) + - Streamline comment policy with downstream project + - Add new function is_local_url() + - Add helper function to escape URLs + - Add signing algorithm to zotinfo() + - Store signing algorithm in import_xchan() + - Use bootstrap-nightfall for redbasic:dark schema + - Add support for hs2019 + - Remove unused function script_path() + - Move login and register button into the hamburger menu for small screens + - Collect accept headers in an array instead of a concatenated string + - Update composer libs + - Enhanced content filters + - Improve mod gprobe to also deal with URLs + - Adapt unseen forum posts query in mod network to new forum post style + - Remove deprecated widgets + - Add inbound support for quoteUrl to Lib/Activity + - Add widget descriptions + - Add a GUI for the PDL editor + + Addons + - Pubcrawl: deprecate as.php in favor of core libs + - Pubcrawl: rewrite/modernize mod inbox + - Pubcrawl: reflect core enhanced content filter changes + - Diaspora: reflect core enhanced content filter changes + - Fediwordle: new addon - a distributed word game inspired by wordle + - Pubcrawl: streamline post_local hook with diaspora + + Bugfixes + - Fix comments_closed date on posts where comments are disabled + - Fix open redirect via rpath query param (CVE-2022-27256) + - Fix cross-site scripting via rpath query param (CVE-2022-27258) + - Fix local file inclusion in redbasic theme (CVE-2022-27257) + - Fix baseurl for css and js + - Fix duplicate IDs in login form + - Fix unknown author not fetched if w2w comment arrives + - Fix thr_parent lost across edits + + Hubzilla 7.0.3 (2022-02-10) - Allow to override the charset for the PDO connection string via $db_charset in .htconfig.php diff --git a/Zotlabs/Daemon/Gprobe.php b/Zotlabs/Daemon/Gprobe.php index 29efcf475..1124ead54 100644 --- a/Zotlabs/Daemon/Gprobe.php +++ b/Zotlabs/Daemon/Gprobe.php @@ -15,19 +15,31 @@ class Gprobe { return; $url = hex2bin($argv[1]); + $is_webbie = false; + $r = null; - if (!strpos($url, '@')) - return; + if (filter_var($url, FILTER_VALIDATE_EMAIL)) { + $is_webbie = true; - $r = q("select * from hubloc where hubloc_addr = '%s' and hubloc_network = 'zot6' limit 1", - dbesc($url) - ); + $r = q("select * from hubloc where hubloc_addr = '%s' and hubloc_network = 'zot6' limit 1", + dbesc($url) + ); + } + elseif (filter_var($url, FILTER_VALIDATE_URL)) { + $r = q("select * from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", + dbesc($url) + ); + } if (!$r) { - $href = Webfinger::zot_url(punify($url)); - if ($href) { - $zf = Zotfinger::exec($href, null); + if ($is_webbie) { + $url = Webfinger::zot_url(punify($url)); } + + if ($url) { + $zf = Zotfinger::exec($url, null); + } + if (is_array($zf) && array_path_exists('signature/signer', $zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) { Libzot::import_xchan($zf['data']); } diff --git a/Zotlabs/Lib/AccessList.php b/Zotlabs/Lib/AccessList.php index 026148c9f..f4b762eaa 100644 --- a/Zotlabs/Lib/AccessList.php +++ b/Zotlabs/Lib/AccessList.php @@ -311,55 +311,6 @@ class AccessList { return $o; } -/* deprecated - static function widget($every = "connections", $each = "lists", $edit = false, $group_id = 0, $cid = '', $mode = 1) { - - $groups = []; - - $r = q("SELECT * FROM pgrp WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", - intval($_SESSION['uid']) - ); - $member_of = []; - if ($cid) { - $member_of = self::containing(local_channel(), $cid); - } - - if ($r) { - foreach ($r as $rr) { - $selected = (($group_id == $rr['id']) ? ' group-selected' : ''); - - if ($edit) { - $groupedit = ['href' => "lists/" . $rr['id'], 'title' => t('edit')]; - } - else { - $groupedit = null; - } - - $groups[] = [ - 'id' => $rr['id'], - 'enc_cid' => base64url_encode($cid), - 'cid' => $cid, - 'text' => $rr['gname'], - 'selected' => $selected, - 'href' => (($mode == 0) ? $each . '?f=&gid=' . $rr['id'] : $each . "/" . $rr['id']) . ((x($_GET, 'new')) ? '&new=' . $_GET['new'] : '') . ((x($_GET, 'order')) ? '&order=' . $_GET['order'] : ''), - 'edit' => $groupedit, - 'ismember' => in_array($rr['id'], $member_of), - ]; - } - } - - return replace_macros(get_markup_template('group_side.tpl'), [ - '$title' => t('Privacy Groups'), - '$edittext' => t('Edit group'), - '$createtext' => t('Create new group'), - '$ungrouped' => (($every === 'contacts') ? t('Channels not in any privacy group') : ''), - '$groups' => $groups, - '$add' => t('Add'), - ]); - - } -*/ - static function expand($g) { if (!(is_array($g) && count($g))) { return []; diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index e51922c86..0c25605e7 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -501,7 +501,7 @@ class Activity { $ret['attributedTo'] = $i['author']['xchan_url']; - if ($i['id'] != $i['parent']) { + if ($i['mid'] !== $i['parent_mid']) { $ret['inReplyTo'] = ((strpos($i['thr_parent'], 'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent'])); } @@ -608,10 +608,10 @@ class Activity { $ptr = [$ptr]; } foreach ($ptr as $t) { - if (!array_key_exists('type', $t)) + if (is_array($t) && !array_key_exists('type', $t)) $t['type'] = 'Hashtag'; - if (array_key_exists('href', $t) && array_key_exists('name', $t)) { + if (is_array($t) && array_key_exists('href', $t) && array_key_exists('name', $t)) { switch ($t['type']) { case 'Hashtag': $ret[] = ['ttype' => TERM_HASHTAG, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'], 0, 1) === '#') ? substr($t['name'], 1) : $t['name'])]; @@ -875,7 +875,7 @@ class Activity { } } - if ($i['id'] != $i['parent']) { + if ($i['mid'] !== $i['parent_mid']) { $reply = true; // inReplyTo needs to be set in the activity for followup actions (Like, Dislike, Announce, etc.), @@ -1154,9 +1154,10 @@ class Activity { $ret['url'] = $p['xchan_url']; $ret['publicKey'] = [ - 'id' => $p['xchan_url'], - 'owner' => $p['xchan_url'], - 'publicKeyPem' => $p['xchan_pubkey'] + 'id' => $p['xchan_url'], + 'owner' => $p['xchan_url'], + 'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', + 'publicKeyPem' => $p['xchan_pubkey'] ]; if ($c) { @@ -1599,6 +1600,25 @@ class Activity { return; } + public static function drop($channel, $observer, $act) { + $r = q( + "select * from item where mid = '%s' and uid = %d limit 1", + dbesc((is_array($act->obj)) ? $act->obj['id'] : $act->obj), + intval($channel['channel_id']) + ); + + if (!$r) { + return; + } + + if (in_array($observer, [$r[0]['author_xchan'], $r[0]['owner_xchan']])) { + drop_item($r[0]['id'], false); + } elseif (in_array($act->actor['id'], [$r[0]['author_xchan'], $r[0]['owner_xchan']])) { + drop_item($r[0]['id'], false); + } + } + + static function actor_store($url, $person_obj, $force = false) { if (!is_array($person_obj)) { @@ -1618,6 +1638,7 @@ class Activity { $ap_hubloc = null; $hublocs = self::get_actor_hublocs($url); + $has_zot_hubloc = false; if ($hublocs) { foreach ($hublocs as $hub) { @@ -1625,6 +1646,7 @@ class Activity { $ap_hubloc = $hub; } if ($hub['hubloc_network'] === 'zot6') { + $has_zot_hubloc = true; Libzot::update_cached_hubloc($hub); } } @@ -1648,16 +1670,18 @@ class Activity { return; } - $inbox = $person_obj['inbox']; + $inbox = $person_obj['inbox'] ?? null; - // invalid identity + // invalid AP identity if (!$inbox || strpos($inbox, z_root()) !== false) { return; } // store the actor record in XConfig - XConfig::Set($url, 'system', 'actor_record', $person_obj); + + // we already store this in Activity::fetch() + // XConfig::Set($url, 'system', 'actor_record', $person_obj); $name = $person_obj['name']; if (!$name) { @@ -1814,12 +1838,12 @@ class Activity { // Adding zot discovery urls to the actor record will cause federation to fail with the 20-30 projects which don't accept arrays in the url field. $actor_protocols = self::get_actor_protocols($person_obj); - if (in_array('zot6', $actor_protocols)) { + if (!$has_zot_hubloc && in_array('zot6', $actor_protocols)) { $zx = q("select * from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6'", dbesc($url) ); - if (!$zx && $webfinger_addr) { - Master::Summon(['Gprobe', bin2hex($webfinger_addr)]); + if (!$zx) { + Master::Summon(['Gprobe', bin2hex($url)]); } } @@ -1922,11 +1946,6 @@ class Activity { } } - $abook = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", - dbesc($observer_hash), - intval($channel['channel_id']) - ); - $content = self::get_content($act->obj); if (!$content) { @@ -2004,15 +2023,23 @@ class Activity { } if ($channel['channel_system']) { - if (!MessageFilter::evaluate($s, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { + $incl = get_config('system','pubstream_incl'); + $excl = get_config('system','pubstream_excl'); + + if(($incl || $excl) && !MessageFilter::evaluate($s, $incl, $excl)) { logger('post is filtered'); return; } } + $abook = q("select * from abook where (abook_xchan = '%s' OR abook_xchan = '%s') and abook_channel = %d ", + dbesc($s['author_xchan']), + dbesc($s['owner_xchan']), + intval($channel['channel_id']) + ); if ($abook) { - if (!post_is_importable($s, $abook[0])) { + if (!post_is_importable($channel['channel_id'], $s, $abook)) { logger('post is filtered'); return; } @@ -2221,6 +2248,21 @@ class Activity { static function decode_note($act) { + $response_activity = false; + + $s = []; + + // These activities should have been handled separately in the Inbox module and should not be turned into posts + + if ( + in_array($act->type, ['Follow', 'Accept', 'Reject', 'Create', 'Update']) && + is_array($act->obj) && + array_key_exists('type', $act->obj) && + ($act->obj['type'] === 'Follow' || ActivityStreams::is_an_actor($act->obj['type'])) + ) { + return false; + } + // Within our family of projects, Follow/Unfollow of a thread is an internal activity which should not be transmitted, // hence if we receive it - ignore or reject it. // Unfollow is not defined by ActivityStreams, which prefers Undo->Follow. @@ -2230,22 +2272,31 @@ class Activity { return false; } - $response_activity = false; + if (!isset($act->actor['id'])) { + logger('No actor!'); + return false; + } - $s = []; + // ensure we store the original actor + self::actor_store($act->actor['id'], $act->actor); + + $s['owner_xchan'] = $act->actor['id']; + $s['author_xchan'] = $act->actor['id']; if (is_array($act->obj)) { $content = self::get_content($act->obj); } - $s['owner_xchan'] = $act->actor['id']; - $s['author_xchan'] = $act->actor['id']; + $s['mid'] = ((is_array($act->obj) && isset($act->obj['id'])) ? $act->obj['id'] : $act->obj); - // ensure we store the original actor - self::actor_store($act->actor['id'], $act->actor); + if (!$s['mid']) { + return false; + } + + // Friendica sends the diaspora guid in a nonstandard field via AP + // If no uuid is provided we will create an uuid v5 from the mid + $s['uuid'] = ((is_array($act->obj) && isset($act->obj['diaspora:guid'])) ? $act->obj['diaspora:guid'] : uuid_from_url($s['mid'])); - $s['mid'] = $act->obj['id']; - $s['uuid'] = $act->obj['diaspora:guid']; $s['parent_mid'] = $act->parent_id; if (array_key_exists('published', $act->data)) { @@ -2269,13 +2320,18 @@ class Activity { $s['expires'] = datetime_convert('UTC', 'UTC', $act->obj['expires']); } + if ($act->type === 'Invite' && is_array($act->obj) && array_key_exists('type', $act->obj) && $act->obj['type'] === 'Event') { + $s['mid'] = $s['parent_mid'] = $act->id; + } + if (ActivityStreams::is_response_activity($act->type)) { $response_activity = true; $s['mid'] = $act->id; - // $s['parent_mid'] = $act->obj['id']; - $s['uuid'] = $act->data['diaspora:guid']; + $s['uuid'] = ((is_array($act->data) && isset($act->data['diaspora:guid'])) ? $act->data['diaspora:guid'] : uuid_from_url($s['mid'])); + + $s['parent_mid'] = ((is_array($act->obj) && isset($act->obj['id'])) ? $act->obj['id'] : $act->obj); // over-ride the object timestamp with the activity @@ -2288,8 +2344,8 @@ class Activity { } $obj_actor = ((isset($act->obj['actor'])) ? $act->obj['actor'] : $act->get_actor('attributedTo', $act->obj)); - // ensure we store the original actor + // ensure we store the original actor self::actor_store($obj_actor['id'], $obj_actor); $mention = self::get_actor_bbmention($obj_actor['id']); @@ -2318,13 +2374,41 @@ class Activity { } if ($act->type === 'Announce') { - $content['content'] = sprintf(t('🔁 Repeated %1$s\'s %2$s'), $mention, $act->obj['type']); + $s['author_xchan'] = $obj_actor['id']; + $s['mid'] = $act->obj['id']; + $s['parent_mid'] = $act->obj['id']; } if ($act->type === 'emojiReaction') { $content['content'] = (($act->tgt && $act->tgt['type'] === 'Image') ? '[img=32x32]' . $act->tgt['url'] . '[/img]' : '&#x' . $act->tgt['name'] . ';'); } } + $s['item_thread_top'] = 0; + $s['comment_policy'] = 'authenticated'; + + if ($s['mid'] === $s['parent_mid']) { + $s['item_thread_top'] = 1; + + // it is a parent node - decode the comment policy info if present + if (isset($act->obj['commentPolicy'])) { + $until = strpos($act->obj['commentPolicy'], 'until='); + if ($until !== false) { + $s['comments_closed'] = datetime_convert('UTC', 'UTC', substr($act->obj['commentPolicy'], $until + 6)); + if ($s['comments_closed'] < datetime_convert()) { + $s['nocomment'] = true; + } + } + + $remainder = substr($act->obj['commentPolicy'], 0, (($until) ? $until : strlen($act->obj['commentPolicy']))); + if ($remainder) { + $s['comment_policy'] = $remainder; + } + if (!(isset($item['comment_policy']) && strlen($item['comment_policy']))) { + $s['comment_policy'] = 'contacts'; + } + } + } + if (!array_key_exists('created', $s)) $s['created'] = datetime_convert(); @@ -2335,6 +2419,16 @@ class Activity { $s['summary'] = self::bb_content($content, 'summary'); $s['body'] = ((self::bb_content($content, 'bbcode') && (!$response_activity)) ? self::bb_content($content, 'bbcode') : self::bb_content($content, 'content')); + if (isset($act->obj['quoteUrl'])) { + $quote_bbcode = self::get_quote_bbcode($act->obj['quoteUrl']); + + if ($s['body']) { + $s['body'] .= "\r\n\r\n"; + } + + $s['body'] .= $quote_bbcode; + } + $s['verb'] = self::activity_decode_mapper($act->type); // Mastodon does not provide update timestamps when updating poll tallies which means race conditions may occur here. @@ -2351,6 +2445,12 @@ class Activity { $s['obj_type'] = ACTIVITY_OBJ_COMMENT; } + $s['obj'] = $act->obj; + if (is_array($s['obj']) && array_path_exists('actor/id', $s['obj'])) { + $s['obj']['actor'] = $s['obj']['actor']['id']; + } + +/* $eventptr = null; if ($act->obj['type'] === 'Invite' && array_path_exists('object/type', $act->obj) && $act->obj['object']['type'] === 'Event') { @@ -2371,19 +2471,19 @@ class Activity { $s['obj']['asld'] = $eventptr; $s['obj']['type'] = ACTIVITY_OBJ_EVENT; $s['obj']['id'] = $eventptr['id']; - $s['obj']['title'] = $eventptr['name']; + $s['obj']['title'] = html2plain($eventptr['name']); if (strpos($act->obj['startTime'], 'Z')) $s['obj']['adjust'] = true; else - $s['obj']['adjust'] = false; + $s['obj']['adjust'] = true; $s['obj']['dtstart'] = datetime_convert('UTC', 'UTC', $eventptr['startTime']); if ($act->obj['endTime']) $s['obj']['dtend'] = datetime_convert('UTC', 'UTC', $eventptr['endTime']); else $s['obj']['nofinish'] = true; - $s['obj']['description'] = $eventptr['content']; + $s['obj']['description'] = html2bbcode($eventptr['content']); if (array_path_exists('location/content', $eventptr)) $s['obj']['location'] = $eventptr['location']['content']; @@ -2392,6 +2492,7 @@ class Activity { else { $s['obj'] = $act->obj; } +*/ $generator = $act->get_property_obj('generator'); if ((!$generator) && (!$response_activity)) { @@ -2431,7 +2532,7 @@ class Activity { if (array_key_exists('type', $act->obj)) { if ($act->obj['type'] === 'Note' && $s['attach']) { - $s['body'] .= self::bb_attach($s['attach'], $s['body']); + $s['body'] = self::bb_attach($s['attach'], $s['body']) . $s['body']; } if ($act->obj['type'] === 'Question' && in_array($act->type, ['Create', 'Update'])) { @@ -2459,31 +2560,57 @@ class Activity { 'video/webm' ]; - $mps = []; + $mps = []; + $poster = null; + $ptr = null; + + // try to find a poster to display on the video element + + if (array_key_exists('icon',$act->obj)) { + if (is_array($act->obj['icon'])) { + if (array_key_exists(0,$act->obj['icon'])) { + $ptr = $act->obj['icon']; + } + else { + $ptr = [ $act->obj['icon'] ]; + } + } + if ($ptr) { + foreach ($ptr as $foo) { + if (is_array($foo) && array_key_exists('type',$foo) && $foo['type'] === 'Image' && is_string($foo['url'])) { + $poster = $foo['url']; + } + } + } + } + + $tag = (($poster) ? '[video poster="' . $poster . '"]' : '[video]' ); $ptr = null; - if (array_key_exists('url', $act->obj)) { + if (array_key_exists('url',$act->obj)) { if (is_array($act->obj['url'])) { - if (array_key_exists(0, $act->obj['url'])) { + if (array_key_exists(0,$act->obj['url'])) { $ptr = $act->obj['url']; } else { - $ptr = [$act->obj['url']]; + $ptr = [ $act->obj['url'] ]; } - foreach ($ptr as $vurl) { - // peertube uses the non-standard element name 'mimeType' here - if (array_key_exists('mimeType', $vurl)) { - if (in_array($vurl['mimeType'], $vtypes)) { - if (!array_key_exists('width', $vurl)) { - $vurl['width'] = 0; - } - $mps[] = $vurl; + // handle peertube's weird url link tree if we find it here + // 0 => html link, 1 => application/x-mpegURL with 'tag' set to an array of actual media links + foreach ($ptr as $idex) { + if (is_array($idex) && array_key_exists('mediaType',$idex)) { + if ($idex['mediaType'] === 'application/x-mpegURL' && isset($idex['tag']) && is_array($idex['tag'])) { + $ptr = $idex['tag']; + break; } } - elseif (array_key_exists('mediaType', $vurl)) { + } + + foreach ($ptr as $vurl) { + if (array_key_exists('mediaType',$vurl)) { if (in_array($vurl['mediaType'], $vtypes)) { - if (!array_key_exists('width', $vurl)) { - $vurl['width'] = 0; + if (! array_key_exists('height',$vurl)) { + $vurl['height'] = 0; } $mps[] = $vurl; } @@ -2491,17 +2618,18 @@ class Activity { } } if ($mps) { - usort($mps, [__CLASS__, 'vid_sort']); + usort($mps,[ '\Zotlabs\Lib\Activity', 'vid_sort' ]); foreach ($mps as $m) { - if (intval($m['width']) < 500 && self::media_not_in_body($m['href'], $s['body'])) { - $s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]'; + if (intval($m['height']) < 500 && Activity::media_not_in_body($m['href'],$s['body'])) { + $s['body'] = $tag . $m['href'] . '[/video]' . "\n\n" . $s['body']; break; } } } - elseif (is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'], $s['body'])) { - $s['body'] .= "\n\n" . '[video]' . $act->obj['url'] . '[/video]'; + elseif (is_string($act->obj['url']) && Activity::media_not_in_body($act->obj['url'],$s['body'])) { + $s['body'] = $tag . $act->obj['url'] . '[/video]' . "\n\n" . $s['body']; } + } } @@ -2525,13 +2653,13 @@ class Activity { } foreach ($ptr as $vurl) { if (in_array($vurl['mediaType'], $atypes) && self::media_not_in_body($vurl['href'], $s['body'])) { - $s['body'] .= "\n\n" . '[audio]' . $vurl['href'] . '[/audio]'; + $s['body'] = '[audio]' . $vurl['href'] . '[/audio]' . "\n\n" . $s['body']; break; } } } elseif (is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'], $s['body'])) { - $s['body'] .= "\n\n" . '[audio]' . $act->obj['url'] . '[/audio]'; + $s['body'] = '[audio]' . $act->obj['url'] . '[/audio]' . "\n\n" . $s['body']; } } @@ -2606,7 +2734,6 @@ class Activity { } } - if (in_array($act->obj['type'], ['Note', 'Article', 'Page'])) { $ptr = null; @@ -2744,12 +2871,6 @@ class Activity { return; }*/ - // TODO: this his handled in pubcrawl atm. - // very unpleasant and imperfect way of determining a Mastodon DM - /*if ($act->raw_recips && array_key_exists('to',$act->raw_recips) && is_array($act->raw_recips['to']) && count($act->raw_recips['to']) === 1 && $act->raw_recips['to'][0] === channel_url($channel) && ! $act->raw_recips['cc']) { - $item['item_private'] = 2; - }*/ - if ($item['parent_mid'] && $item['parent_mid'] !== $item['mid']) { $is_child_node = true; } @@ -2914,19 +3035,23 @@ class Activity { return; if ($channel['channel_system']) { - if (!MessageFilter::evaluate($item, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { + $incl = get_config('system','pubstream_incl'); + $excl = get_config('system','pubstream_excl'); + + if(($incl || $excl) && !MessageFilter::evaluate($item, $incl, $excl)) { logger('post is filtered'); return; } } - $abook = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", - dbesc($observer_hash), + $abook = q("select * from abook where ( abook_xchan = '%s' OR abook_xchan = '%s') and abook_channel = %d ", + dbesc($item['author_xchan']), + dbesc($item['owner_xchan']), intval($channel['channel_id']) ); if ($abook) { - if (!post_is_importable($item, $abook[0])) { + if (!post_is_importable($channel['channel_id'], $item, $abook)) { logger('post is filtered'); return; } @@ -2996,6 +3121,19 @@ class Activity { $item['thr_parent'] = $parent[0]['parent_mid']; } $item['parent_mid'] = $parent[0]['parent_mid']; + //$item['item_private'] = $parent[0]['item_private']; + + } + + // An ugly and imperfect way to recognise a mastodon direct message + if ( + $item['item_private'] === 1 && + !isset($act->raw_recips['cc']) && + is_array($act->raw_recips['to']) && + in_array(channel_url($channel), $act->raw_recips['to']) && + !in_array($act->actor['followers'], $act->raw_recips['to']) + ) { + $item['item_private'] = 2; } // TODO: not implemented @@ -3006,6 +3144,12 @@ class Activity { intval($item['uid']) ); if ($r) { + + // If we already have the item, dismiss its announce + if ($act->type === 'Announce') { + return; + } + if ($item['edited'] > $r[0]['edited']) { $item['id'] = $r[0]['id']; $x = item_store_update($item); @@ -3022,12 +3166,12 @@ class Activity { logger('topfetch', LOGGER_DEBUG); // if the thread owner is a connnection, we will already receive any additional comments to their posts // but if they are not we can try to fetch others in the background - $x = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash + $connected = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d and abook_xchan = '%s' LIMIT 1", intval($channel['channel_id']), dbesc($parent[0]['owner_xchan']) ); - if (!$x) { + if (!$connected) { // determine if the top-level post provides a replies collection if ($parent[0]['obj']) { $parent[0]['obj'] = json_decode($parent[0]['obj'], true); @@ -3279,6 +3423,7 @@ class Activity { } +/* this is deprecated and not used anymore static function announce_note($channel, $observer_hash, $act) { $s = []; @@ -3409,6 +3554,7 @@ class Activity { } } +*/ static function like_note($channel, $observer_hash, $act) { @@ -3629,7 +3775,49 @@ class Activity { $event['nofinish'] = true; } } +/* + $eventptr = null; + + if ($act->obj['type'] === 'Invite' && array_path_exists('object/type', $act->obj) && $act->obj['object']['type'] === 'Event') { + $eventptr = $act->obj['object']; + $s['mid'] = $s['parent_mid'] = $act->obj['id']; + } + + if ($act->obj['type'] === 'Event') { + if ($act->type === 'Invite') { + $s['mid'] = $s['parent_mid'] = $act->id; + } + $eventptr = $act->obj; + } + + if ($eventptr) { + + $s['obj'] = []; + $s['obj']['asld'] = $eventptr; + $s['obj']['type'] = ACTIVITY_OBJ_EVENT; + $s['obj']['id'] = $eventptr['id']; + $s['obj']['title'] = html2plain($eventptr['name']); + + if (strpos($act->obj['startTime'], 'Z')) + $s['obj']['adjust'] = true; + else + $s['obj']['adjust'] = true; + + $s['obj']['dtstart'] = datetime_convert('UTC', 'UTC', $eventptr['startTime']); + if ($act->obj['endTime']) + $s['obj']['dtend'] = datetime_convert('UTC', 'UTC', $eventptr['endTime']); + else + $s['obj']['nofinish'] = true; + $s['obj']['description'] = html2bbcode($eventptr['content']); + if (array_path_exists('location/content', $eventptr)) + $s['obj']['location'] = $eventptr['location']['content']; + + } + else { + $s['obj'] = $act->obj; + } +*/ foreach (['name', 'summary', 'content'] as $a) { if (($x = self::get_textfield($act, $a)) !== false) { $content[$a] = $x; @@ -3786,7 +3974,7 @@ class Activity { return $ret; } - foreach ($tag as $t) { + foreach ($actor['tag'] as $t) { if ((isset($t['type']) && $t['type'] === 'PropertyValue') && (isset($t['name']) && $t['name'] === 'Protocol') && (isset($t['value']) && in_array($t['value'], ['zot6', 'activitypub', 'diaspora'])) @@ -3797,4 +3985,32 @@ class Activity { return $ret; } + + static function get_quote_bbcode($url) { + + $ret = ''; + + $a = self::fetch($url); + if ($a) { + $act = new ActivityStreams($a); + + if ($act->is_valid()) { + $content = self::get_content($act->obj); + + $ret .= "[share author='" . urlencode($act->actor['name']) . + "' profile='" . $act->actor['id'] . + "' avatar='" . $act->actor['icon']['url'] . + "' link='" . $act->obj['id'] . + "' auth='" . ((is_matrix_url($act->actor['id'])) ? 'true' : 'false') . + "' posted='" . $act->obj['published'] . + "' message_id='" . $act->obj['id'] . + "']"; + $ret .= self::bb_content($content, 'content'); + $ret .= '[/share]'; + } + } + + return $ret; + } + } diff --git a/Zotlabs/Lib/ActivityStreams.php b/Zotlabs/Lib/ActivityStreams.php index 275f6eff4..1c278f2ee 100644 --- a/Zotlabs/Lib/ActivityStreams.php +++ b/Zotlabs/Lib/ActivityStreams.php @@ -422,15 +422,19 @@ class ActivityStreams { static function get_accept_header_string($channel = null) { + $ret = ''; + $hookdata = []; if ($channel) $hookdata['channel'] = $channel; - $hookdata['data'] = 'application/x-zot-activity+json'; + $hookdata['data'] = ['application/x-zot-activity+json']; call_hooks('get_accept_header_string', $hookdata); - return $hookdata['data']; + $ret = implode(', ', $hookdata['data']); + + return $ret; } diff --git a/Zotlabs/Lib/Crypto.php b/Zotlabs/Lib/Crypto.php index f1794ae64..188c6bd81 100644 --- a/Zotlabs/Lib/Crypto.php +++ b/Zotlabs/Lib/Crypto.php @@ -87,6 +87,10 @@ class Crypto { return false; } + if (!$alg) { + $alg = 'sha256'; + } + try { $verify = openssl_verify($data, $sig, $key, $alg); } catch (Exception $e) { diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php index 2e483cb92..1421c72ae 100644 --- a/Zotlabs/Lib/Enotify.php +++ b/Zotlabs/Lib/Enotify.php @@ -845,6 +845,10 @@ class Enotify { // convert this logic into a json array just like the system notifications $who = (($item['verb'] === ACTIVITY_SHARE) ? 'owner' : 'author'); + $body = html2plain(bbcode($item['body'], ['drop_media']), 75, true); + if ($body) { + $body = htmlentities($body, ENT_QUOTES, 'UTF-8', false); + } $x = array( 'notify_link' => $item['llink'], @@ -858,7 +862,7 @@ class Enotify { //'b64mid' => ((in_array($item['verb'], [ACTIVITY_LIKE, ACTIVITY_DISLIKE])) ? gen_link_id($item['thr_parent']) : gen_link_id($item['mid'])), 'thread_top' => (($item['item_thread_top']) ? true : false), 'message' => bbcode(escape_tags($itemem_text)), - 'body' => htmlentities(html2plain(bbcode($item['body'], ['drop_media', true]), 75, true), ENT_QUOTES, 'UTF-8', false), + 'body' => $body, // these are for the superblock addon 'hash' => $item[$who]['xchan_hash'], 'uid' => $item['uid'], diff --git a/Zotlabs/Lib/LDSignatures.php b/Zotlabs/Lib/LDSignatures.php index 1c2095f10..00042bc7a 100644 --- a/Zotlabs/Lib/LDSignatures.php +++ b/Zotlabs/Lib/LDSignatures.php @@ -75,22 +75,23 @@ class LDSignatures { } static function hash($obj) { - - return hash('sha256',self::normalise($obj)); + return hash('sha256', self::normalise($obj)); } static function normalise($data) { + $ret = ''; + if(is_string($data)) { $data = json_decode($data); } if(! is_object($data)) - return ''; + return $ret; jsonld_set_document_loader('jsonld_document_loader'); try { - $d = jsonld_normalize($data,[ 'algorithm' => 'URDNA2015', 'format' => 'application/nquads' ]); + $ret = jsonld_normalize($data,[ 'algorithm' => 'URDNA2015', 'format' => 'application/nquads' ]); } catch (\Exception $e) { // Don't log the exception - this can exhaust memory @@ -98,7 +99,7 @@ class LDSignatures { logger('normalise error: ' . print_r($data,true)); } - return $d; + return $ret; } static function salmon_sign($data,$channel) { diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index e4d8d2275..2ed18d10b 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -676,6 +676,10 @@ class Libzot { logger('import_xchan: ' . $xchan_hash, LOGGER_DEBUG); + if (isset($arr['signing_algorithm']) && $arr['signing_algorithm']) { + set_xconfig($xchan_hash, 'system', 'signing_algorithm', $arr['signing_algorithm']); + } + $r = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($xchan_hash) ); @@ -1003,7 +1007,7 @@ class Libzot { $x = Crypto::unencapsulate($x, get_config('system', 'prvkey')); - if (!is_array($x)) { + if ($x && !is_array($x)) { $x = json_decode($x, true); } @@ -1227,6 +1231,16 @@ class Libzot { dbesc($AS->actor['id']) ); + if (! $r) { + // Author is unknown to this site. Perform channel discovery and try again. + $z = discover_by_webbie($AS->actor['id']); + if ($z) { + $r = q("select hubloc_hash, hubloc_network, hubloc_url from hubloc where hubloc_id_url = '%s'", + dbesc($AS->actor['id']) + ); + } + } + if ($r) { $r = self::zot_record_preferred($r); $arr['author_xchan'] = $r['hubloc_hash']; @@ -1280,22 +1294,12 @@ class Libzot { if ($AS->data['hubloc']) { $arr['item_verified'] = true; + } - if (!array_key_exists('comment_policy', $arr)) { - // set comment policy depending on source hub. Unknown or osada is ActivityPub. - // Anything else we'll say is zot - which could have a range of project names - $s = q("select site_project from site where site_url = '%s' limit 1", - dbesc($r[0]['hubloc_url']) - ); - - if ((!$s) || (in_array($s[0]['site_project'], ['', 'osada']))) { - $arr['comment_policy'] = 'authenticated'; - } - else { - $arr['comment_policy'] = 'contacts'; - } - } + if (!array_key_exists('comment_policy', $arr)) { + $arr['comment_policy'] = 'authenticated'; } + if ($AS->meta['signed_data']) { IConfig::Set($arr, 'activitypub', 'signed_data', $AS->meta['signed_data'], false); } @@ -1568,7 +1572,11 @@ class Libzot { $local_public = false; continue; } - if (!MessageFilter::evaluate($arr, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { + + $incl = get_config('system','pubstream_incl'); + $excl = get_config('system','pubstream_excl'); + + if(($incl || $excl) && !MessageFilter::evaluate($arr, $incl, $excl)) { $local_public = false; continue; } @@ -1743,11 +1751,13 @@ class Libzot { } } - $ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", + // This is used to fetch allow/deny rules if either the sender + // or owner is a connection. post_is_importable() evaluates all of them + $abook = q("select * from abook where abook_channel = %d and ( abook_xchan = '%s' OR abook_xchan = '%s' )", intval($channel['channel_id']), - dbesc($arr['owner_xchan']) + dbesc($arr['owner_xchan']), + dbesc($arr['author_xchan']) ); - $abook = (($ab) ? $ab[0] : null); if (intval($arr['item_deleted'])) { @@ -1798,17 +1808,18 @@ class Libzot { elseif ($arr['edited'] > $r[0]['edited']) { $arr['id'] = $r[0]['id']; $arr['uid'] = $channel['channel_id']; - if (($arr['mid'] == $arr['parent_mid']) && (!post_is_importable($arr, $abook))) { - $DR->update('update ignored'); - $result[] = $DR->get(); - } - else { - $item_result = self::update_imported_item($sender, $arr, $r[0], $channel['channel_id'], $tag_delivery); - $DR->update('updated'); - $result[] = $DR->get(); - if (!$relay) - add_source_route($item_id, $sender); - } + + if (post_is_importable($channel['channel_id'], $arr, $abook)) { + $item_result = self::update_imported_item($sender, $arr, $r[0], $channel['channel_id'], $tag_delivery); + $DR->update('updated'); + $result[] = $DR->get(); + if (!$relay) { + add_source_route($item_id, $sender); + } + } else { + $DR->update('update ignored'); + $result[] = $DR->get(); + } } else { $DR->update('update ignored'); @@ -1838,20 +1849,29 @@ class Libzot { $item_id = 0; - if (($arr['mid'] == $arr['parent_mid']) && (!post_is_importable($arr, $abook))) { - $DR->update('post ignored'); - $result[] = $DR->get(); + $maxlen = get_max_import_size(); + + if ($maxlen && mb_strlen($arr['body']) > $maxlen) { + $arr['body'] = mb_substr($arr['body'], 0, $maxlen, 'UTF-8'); + logger('message length exceeds max_import_size: truncated'); } - else { + + if ($maxlen && mb_strlen($arr['summary']) > $maxlen) { + $arr['summary'] = mb_substr($arr['summary'], 0, $maxlen, 'UTF-8'); + logger('message summary length exceeds max_import_size: truncated'); + } + + if (post_is_importable($arr['uid'], $arr, $abook)) { $item_result = item_store($arr); if ($item_result['success']) { $item_id = $item_result['item_id']; - $parr = [ + $parr = [ 'item_id' => $item_id, - 'item' => $arr, - 'sender' => $sender, + 'item' => $arr, + 'sender' => $sender, 'channel' => $channel ]; + /** * @hooks activity_received * Called when an activity (post, comment, like, etc.) has been received from a zot source. @@ -1861,13 +1881,19 @@ class Libzot { * * \e array \b channel */ call_hooks('activity_received', $parr); + // don't add a source route if it's a relay or later recipients will get a route mismatch - if (!$relay) + if (!$relay) { add_source_route($item_id, $sender); + } } $DR->update(($item_id) ? 'posted' : 'storage failed: ' . $item_result['message']); $result[] = $DR->get(); + } else { + $DR->update('post ignored'); + $result[] = $DR->get(); } + } // preserve conversations with which you are involved from expiration @@ -2845,6 +2871,7 @@ class Libzot { ]; $ret['public_key'] = $e['xchan_pubkey']; + $ret['signing_algorithm'] = 'rsa-sha256'; $ret['username'] = $e['channel_address']; $ret['name'] = $e['xchan_name']; $ret['name_updated'] = $e['xchan_name_date']; diff --git a/Zotlabs/Lib/MessageFilter.php b/Zotlabs/Lib/MessageFilter.php index 21e6ca26a..95721e7c7 100644 --- a/Zotlabs/Lib/MessageFilter.php +++ b/Zotlabs/Lib/MessageFilter.php @@ -2,85 +2,104 @@ namespace Zotlabs\Lib; - +require_once('include/html2plain.php'); class MessageFilter { + public static function evaluate($item, $incl, $excl) { - static public function evaluate($item,$incl,$excl) { - - require_once('include/html2plain.php'); - - $text = prepare_text($item['body'],$item['mimetype']); + $text = prepare_text($item['body'],((isset($item['mimetype'])) ? $item['mimetype'] : 'text/x-multicode')); $text = html2plain(($item['title']) ? $item['title'] . ' ' . $text : $text); - $lang = null; - if((strpos($incl,'lang=') !== false) || (strpos($excl,'lang=') !== false) || (strpos($incl,'lang!=') !== false) || (strpos($excl,'lang!=') !== false)) { + if ((strpos($incl, 'lang=') !== false) || (strpos($excl, 'lang=') !== false) || (strpos($incl, 'lang!=') !== false) || (strpos($excl, 'lang!=') !== false)) { $lang = detect_language($text); } - $tags = ((is_array($item['term']) && count($item['term'])) ? $item['term'] : false); + $tags = ((isset($item['term']) && is_array($item['term']) && count($item['term'])) ? $item['term'] : false); // exclude always has priority - $exclude = (($excl) ? explode("\n",$excl) : null); + $exclude = (($excl) ? explode("\n", $excl) : null); - if($exclude) { - foreach($exclude as $word) { + if ($exclude) { + foreach ($exclude as $word) { $word = trim($word); - if(! $word) + if (! $word) { continue; - if(substr($word,0,1) === '#' && $tags) { - foreach($tags as $t) - if((($t['ttype'] == TERM_HASHTAG) || ($t['ttype'] == TERM_COMMUNITYTAG)) && (($t['term'] === substr($word,1)) || (substr($word,1) === '*'))) - return false; } - elseif(substr($word,0,1) === '$' && $tags) { - foreach($tags as $t) - if(($t['ttype'] == TERM_CATEGORY) && (($t['term'] === substr($word,1)) || (substr($word,1) === '*'))) + if (substr($word, 0, 1) === '#' && $tags) { + foreach ($tags as $t) { + if ((($t['ttype'] == TERM_HASHTAG) || ($t['ttype'] == TERM_COMMUNITYTAG)) && (($t['term'] === substr($word, 1)) || (substr($word, 1) === '*'))) { return false; - } - elseif((strpos($word,'/') === 0) && preg_match($word,$text)) + } + } + } elseif (substr($word, 0, 1) === '$' && $tags) { + foreach ($tags as $t) { + if (($t['ttype'] == TERM_CATEGORY) && (($t['term'] === substr($word, 1)) || (substr($word, 1) === '*'))) { + return false; + } + } + } elseif (substr($word, 0, 2) === '?+') { + if (self::test_condition(substr($word, 2), $item['obj'])) { + return false; + } + } elseif (substr($word, 0, 1) === '?') { + if (self::test_condition(substr($word, 1), $item)) { + return false; + } + } elseif ((strpos($word, '/') === 0) && preg_match($word, $text)) { return false; - elseif((strpos($word,'lang=') === 0) && ($lang) && (strcasecmp($lang,trim(substr($word,5))) == 0)) + } elseif ((strpos($word, 'lang=') === 0) && ($lang) && (strcasecmp($lang, trim(substr($word, 5))) == 0)) { return false; - elseif((strpos($word,'lang!=') === 0) && ($lang) && (strcasecmp($lang,trim(substr($word,6))) != 0)) + } elseif ((strpos($word, 'lang!=') === 0) && ($lang) && (strcasecmp($lang, trim(substr($word, 6))) != 0)) { return false; - elseif(stristr($text,$word) !== false) + } elseif (stristr($text, $word) !== false) { return false; + } } } - $include = (($incl) ? explode("\n",$incl) : null); + $include = (($incl) ? explode("\n", $incl) : null); - if($include) { - foreach($include as $word) { + if ($include) { + foreach ($include as $word) { $word = trim($word); - if(! $word) + if (! $word) { continue; - if(substr($word,0,1) === '#' && $tags) { - foreach($tags as $t) - if((($t['ttype'] == TERM_HASHTAG) || ($t['ttype'] == TERM_COMMUNITYTAG)) && (($t['term'] === substr($word,1)) || (substr($word,1) === '*'))) - return true; } - elseif(substr($word,0,1) === '$' && $tags) { - foreach($tags as $t) - if(($t['ttype'] == TERM_CATEGORY) && (($t['term'] === substr($word,1)) || (substr($word,1) === '*'))) + if (substr($word, 0, 1) === '#' && $tags) { + foreach ($tags as $t) { + if ((($t['ttype'] == TERM_HASHTAG) || ($t['ttype'] == TERM_COMMUNITYTAG)) && (($t['term'] === substr($word, 1)) || (substr($word, 1) === '*'))) { return true; - } - elseif((strpos($word,'/') === 0) && preg_match($word,$text)) + } + } + } elseif (substr($word, 0, 1) === '$' && $tags) { + foreach ($tags as $t) { + if (($t['ttype'] == TERM_CATEGORY) && (($t['term'] === substr($word, 1)) || (substr($word, 1) === '*'))) { + return true; + } + } + } elseif (substr($word, 0, 2) === '?+') { + if (self::test_condition(substr($word, 2), $item['obj'])) { + return true; + } + } elseif (substr($word, 0, 1) === '?') { + if (self::test_condition(substr($word, 1), $item)) { + return true; + } + } elseif ((strpos($word, '/') === 0) && preg_match($word, $text)) { return true; - elseif((strpos($word,'lang=') === 0) && ($lang) && (strcasecmp($lang,trim(substr($word,5))) == 0)) + } elseif ((strpos($word, 'lang=') === 0) && ($lang) && (strcasecmp($lang, trim(substr($word, 5))) == 0)) { return true; - elseif((strpos($word,'lang!=') === 0) && ($lang) && (strcasecmp($lang,trim(substr($word,6))) != 0)) + } elseif ((strpos($word, 'lang!=') === 0) && ($lang) && (strcasecmp($lang, trim(substr($word, 6))) != 0)) { return true; - elseif(stristr($text,$word) !== false) + } elseif (stristr($text, $word) !== false) { return true; + } } - } - else { + } else { return true; } @@ -88,4 +107,113 @@ class MessageFilter { } + /** + * @brief Test for Conditional Execution conditions. Shamelessly ripped off from Code/Render/Comanche + * + * This is extensible. The first version of variable testing supports tests of the forms: + * + * - ?foo ~= baz which will check if item.foo contains the string 'baz'; + * - ?foo == baz which will check if item.foo is the string 'baz'; + * - ?foo != baz which will check if item.foo is not the string 'baz'; + * - ?foo >= 3 which will check if item.foo is greater than or equal to 3; + * - ?foo > 3 which will check if item.foo is greater than 3; + * - ?foo <= 3 which will check if item.foo is less than or equal to 3; + * - ?foo < 3 which will check if item.foo is less than 3; + * + * - ?foo {} baz which will check if 'baz' is an array element in item.foo + * - ?foo {*} baz which will check if 'baz' is an array key in item.foo + * - ?foo which will check for a return of a true condition for item.foo; + * + * The values 0, '', an empty array, and an unset value will all evaluate to false. + * + * @param string $s + * @param array $item + * @return bool + */ + + public static function test_condition($s,$item) { + + if (preg_match('/(.*?)\s\~\=\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if (stripos($x, trim($matches[2])) !== false) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\=\=\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x == trim($matches[2])) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\!\=\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x != trim($matches[2])) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\>\=\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x >= trim($matches[2])) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\<\=\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x <= trim($matches[2])) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\>\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x > trim($matches[2])) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\>\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x < trim($matches[2])) { + return true; + } + return false; + } + + if (preg_match('/[\$](.*?)\s\{\}\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if (is_array($x) && in_array(trim($matches[2]), $x)) { + return true; + } + return false; + } + + if (preg_match('/(.*?)\s\{\*\}\s(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if (is_array($x) && array_key_exists(trim($matches[2]), $x)) { + return true; + } + return false; + } + + if (preg_match('/(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if ($x) { + return true; + } + return false; + } + + return false; + } + } diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php index b39887c9e..da37c582f 100644 --- a/Zotlabs/Module/Directory.php +++ b/Zotlabs/Module/Directory.php @@ -254,21 +254,21 @@ class Directory extends Controller { $connect_link = ''; $location = ''; - if(strlen($rr['locale'])) + if(isset($rr['locale'])) $location .= $rr['locale']; - if(strlen($rr['region'])) { - if(strlen($rr['locale'])) + if(isset($rr['region'])) { + if($location) $location .= ', '; $location .= $rr['region']; } - if(strlen($rr['country'])) { - if(strlen($location)) + if(isset($rr['country'])) { + if($location) $location .= ', '; $location .= $rr['country']; } $age = ''; - if(strlen($rr['birthday'])) { + if(isset($rr['birthday'])) { if(($years = age($rr['birthday'],'UTC','')) > 0) $age = $years; } diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php index 29b0df739..5001bbe62 100644 --- a/Zotlabs/Module/Hq.php +++ b/Zotlabs/Module/Hq.php @@ -27,6 +27,8 @@ class Hq extends \Zotlabs\Web\Controller { return; } + $item_hash = ''; + if(argc() > 1 && argv(1) !== 'load') { $item_hash = unpack_link_id(argv(1)); } @@ -97,7 +99,7 @@ class Hq extends \Zotlabs\Web\Controller { 'allow_location' => ((intval(get_pconfig($channel['channel_id'],'system','use_browser_location'))) ? '1' : ''), 'default_location' => $channel['channel_location'], 'nickname' => $channel['channel_address'], - 'lockstate' => (($group || $cid || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), + 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), 'acl' => populate_acl($channel_acl,true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'), 'permissions' => $channel_acl, 'bang' => '', @@ -112,6 +114,7 @@ class Hq extends \Zotlabs\Web\Controller { 'reset' => t('Reset form') ]; + $a = ''; $o = status_editor($a, $x, true); } diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 41a4e120d..574a90c1a 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -695,6 +695,7 @@ class Item extends Controller { $expires = $orig_post['expires']; $comments_closed = $orig_post['comments_closed']; $mid = $orig_post['mid']; + $thr_parent = $orig_post['thr_parent']; $parent_mid = $orig_post['parent_mid']; $plink = $orig_post['plink']; } @@ -1092,7 +1093,7 @@ class Item extends Controller { $datarray['created'] = $created; $datarray['edited'] = (($orig_post) ? datetime_convert() : $created); $datarray['expires'] = $expires; - $datarray['comments_closed'] = $comments_closed; + $datarray['comments_closed'] = (($nocomment) ? $created : $comments_closed); $datarray['commented'] = (($orig_post) ? datetime_convert() : $created); $datarray['received'] = (($orig_post) ? datetime_convert() : $created); $datarray['changed'] = (($orig_post) ? datetime_convert() : $created); diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index 016a0a309..f4f6cc8d1 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -272,15 +272,17 @@ class Network extends \Zotlabs\Web\Controller { $likes_sql = " AND verb NOT IN ('" . dbesc(ACTIVITY_LIKE) . "', '" . dbesc(ACTIVITY_DISLIKE) . "') "; // This is for nouveau view public forum cid queries (if a forum notification is clicked) - $p = q("SELECT oid AS parent FROM term WHERE uid = %d AND ttype = %d AND term = '%s'", - intval(local_channel()), - intval(TERM_FORUM), - dbesc($cid_r[0]['xchan_name']) - ); - - $p_str = ids_to_querystr($p, 'parent'); - if($p_str) - $p_sql = " OR item.parent IN ( $p_str ) "; + //$p = q("SELECT oid AS parent FROM term WHERE uid = %d AND ttype = %d AND term = '%s'", + //intval(local_channel()), + //intval(TERM_FORUM), + //dbesc($cid_r[0]['xchan_name']) + //); + + //$p_str = ids_to_querystr($p, 'parent'); + + $p_sql = ''; + //if($p_str) + //$p_sql = " OR item.parent IN ( $p_str ) "; $sql_extra = " AND ( owner_xchan = '" . protect_sprintf(dbesc($cid_r[0]['abook_xchan'])) . "' OR owner_xchan = '" . protect_sprintf(dbesc($cid_r[0]['abook_xchan'])) . "' $p_sql ) AND item_unseen = 1 $likes_sql "; } diff --git a/Zotlabs/Module/Pdledit_gui.php b/Zotlabs/Module/Pdledit_gui.php new file mode 100644 index 000000000..b550b92d3 --- /dev/null +++ b/Zotlabs/Module/Pdledit_gui.php @@ -0,0 +1,553 @@ +<?php + +namespace Zotlabs\Module; + +use App; +use Zotlabs\Web\Controller; +use Zotlabs\Render\Comanche; +use Zotlabs\Lib\Libsync; + +class Pdledit_gui extends Controller { + + function post() { + + if (!local_channel()) { + return; + } + + if (!$_REQUEST['module']) { + return; + } + + $module = $_REQUEST['module']; + + $ret = [ + 'success' => false, + 'module' => $module + ]; + + if ($_REQUEST['reset']) { + del_pconfig(local_channel(), 'system', 'mod_' . $module . '.pdl'); + Libsync::build_sync_packet(); + $ret['success'] = true; + json_return_and_die($ret); + } + + if ($_REQUEST['save']) { + if (!$_REQUEST['data']) { + return $ret; + } + + $data = json_decode($_REQUEST['data'],true); + $stored_pdl_result = self::get_pdl($module); + $pdl = $stored_pdl_result['pdl']; + + foreach ($data as $region => $entries) { + $region_pdl = ''; + foreach ($entries as $entry) { + $region_pdl .= base64_decode($entry) . "\r\n"; + } + $pdl = preg_replace('/\[region=' . $region . '\](.*?)\[\/region\]/ism', '[region=' . $region . ']' . "\r\n" . $region_pdl . "\r\n" . '[/region]', $pdl); + } + + set_pconfig(local_channel(), 'system', 'mod_' . $module . '.pdl', escape_tags($pdl)); + Libsync::build_sync_packet(); + + $ret['success'] = true; + json_return_and_die($ret); + } + + if ($_REQUEST['save_src']) { + set_pconfig(local_channel(), 'system', 'mod_' . $module . '.pdl', escape_tags($_REQUEST['src'])); + Libsync::build_sync_packet(); + + $ret['success'] = true; + json_return_and_die($ret); + } + + if ($_REQUEST['save_template']) { + if (!$_REQUEST['data']) { + return $ret; + } + + $template = $_REQUEST['data'][0]['value']; + $pdl_result = self::get_pdl($module); + $stored_template = self::get_template($pdl_result['pdl']); + + if ($template === $stored_template) { + $ret['success'] = true; + return $ret; + } + + $cnt = preg_match("/\[template\](.*?)\[\/template\]/ism", $pdl_result['pdl'], $matches); + if ($cnt) { + $pdl = str_replace('[template]' . $stored_template . '[/template]', '[template]' . $template . '[/template]', $pdl_result['pdl']); + } + else { + $pdl = '[template]' . $template . '[/template]' . "\r\n"; + $pdl .= $pdl_result['pdl']; + } + + set_pconfig(local_channel(), 'system', 'mod_' . $module . '.pdl', escape_tags($pdl)); + Libsync::build_sync_packet(); + + $ret['success'] = true; + json_return_and_die($ret); + } + + } + + function get() { + + if(! local_channel()) { + return EMPTY_STR; + } + + $module = argv(1); + + if (!$module) { + goaway(z_root() . '/pdledit_gui/hq'); + } + + $pdl_result = self::get_pdl($module); + + $pdl = $pdl_result['pdl']; + $modified = $pdl_result['modified']; + + if(!$pdl) { + return t('Layout not found'); + } + + $template = self::get_template($pdl); + + $template_info = self::get_template_info($template); + + if(empty($template_info['contentregion'])) { + return t('This template does not support pdledi_gui (no content regions defined)'); + } + + App::$page['template'] = $template; + + $regions = self::get_regions($pdl); + + foreach ($regions as $k => $v) { + $region_str = ''; + if (is_array($v)) { + ksort($v); + foreach ($v as $entry) { + // Get the info from the file and replace entry if we get anything useful + $widget_info = get_widget_info($entry['name']); + $entry['name'] = (($widget_info['name']) ? $widget_info['name'] : $entry['name']); + $entry['desc'] = (($widget_info['description']) ? $widget_info['description'] : $entry['desc']); + + $region_str .= replace_macros(get_markup_template('pdledit_gui_item.tpl'), [ + '$entry' => $entry + ]); + } + } + App::$layout['region_' . $k] = $region_str; + } + + $templates = self::get_templates(); + $templates_html = replace_macros(get_markup_template('pdledit_gui_templates.tpl'), [ + '$templates' => $templates, + '$active' => $template + ]); + + $items_html = ''; + + //$items_html .= replace_macros(get_markup_template('pdledit_gui_item.tpl'), [ + //'$entry' => [ + //'type' => 'content', + //'name' => t('Main page content'), + //'src' => base64_encode('$content') + //], + //'$disable_controls' => true + //]); + + foreach (self::get_widgets($module) as $entry) { + $items_html .= replace_macros(get_markup_template('pdledit_gui_item.tpl'), [ + '$entry' => $entry, + '$disable_controls' => true + ]); + } + + foreach (self::get_menus() as $entry) { + $items_html .= replace_macros(get_markup_template('pdledit_gui_item.tpl'), [ + '$entry' => $entry, + '$disable_controls' => true + ]); + } + + foreach (self::get_blocks() as $entry) { + $items_html .= replace_macros(get_markup_template('pdledit_gui_item.tpl'), [ + '$entry' => $entry, + '$disable_controls' => true + ]); + } + + App::$layout['region_content'] .= replace_macros(get_markup_template('pdledit_gui.tpl'), [ + '$content_regions' => $template_info['contentregion'], + '$page_src' => base64_encode($pdl), + '$templates' => base64_encode($templates_html), + '$modules' => base64_encode(self::get_modules()), + '$items' => base64_encode($items_html), + '$module_modified' => $modified, + '$module' => $module + ]); + + } + + function get_templates() { + $ret = []; + + $files = glob('view/php/*.php'); + if($files) { + foreach($files as $f) { + $name = basename($f, '.php'); + $x = get_template_info($name); + if(!empty($x['contentregion'])) { + $ret[] = [ + 'name' => $name, + 'desc' => $x['description'] + ]; + } + } + } + + return $ret; + } + + function get_modules() { + $ret = ''; + + $files = glob('Zotlabs/Module/*.php'); + if($files) { + foreach($files as $f) { + $name = lcfirst(basename($f,'.php')); + + if ($name === 'admin' && !is_site_admin()) { + continue; + } + + $x = theme_include('mod_' . $name . '.pdl'); + if($x) { + $ret .= '<div class="mb-2"><a href="pdledit_gui/' . $name . '">' . $name . '</a></div>'; + } + } + } + + return $ret; + } + + function get_widgets($module) { + $ret = []; + + $checkpaths = [ + 'Zotlabs/Widget/*.php' + ]; + + foreach ($checkpaths as $path) { + $files = glob($path); + if($files) { + foreach($files as $f) { + $name = lcfirst(basename($f, '.php')); + + $widget_info = get_widget_info($name); + if ($widget_info['requires'] && strpos($widget_info['requires'], 'admin') !== false && !is_site_admin()) { + continue; + } + + if ($widget_info['requires'] && strpos($widget_info['requires'], $module) === false) { + continue; + } + + $ret[] = [ + 'type' => 'widget', + 'name' => $widget_info['name'] ?? $name, + 'desc' => $widget_info['description'] ?? '', + 'src' => base64_encode('[widget=' . $name . '][/widget]') + ]; + } + } + } + + return $ret; + } + + function get_menus() { + $ret = []; + + $r = q("select * from menu where menu_channel_id = %d and menu_flags = 0", + intval(local_channel()) + ); + + foreach ($r as $rr) { + $name = $rr['menu_name']; + $desc = $rr['menu_desc']; + $ret[] = [ + 'type' => 'menu', + 'name' => $name, + 'desc' => $desc, + 'src' => base64_encode('[menu]' . $name . '[/menu]') + ]; + } + + return $ret; + } + + function get_blocks() { + $ret = []; + + $r = q("select v, title, summary from item join iconfig on iconfig.iid = item.id and item.uid = %d + and iconfig.cat = 'system' and iconfig.k = 'BUILDBLOCK'", + intval(local_channel()) + ); + + foreach ($r as $rr) { + $name = $rr['v']; + $desc = (($rr['title']) ? $rr['title'] : $rr['summary']); + $ret[] = [ + 'type' => 'block', + 'name' => $name, + 'desc' => $desc, + 'src' => base64_encode('[block]' . $name . '[/block]') + ]; + } + + return $ret; + } + + function get_template($pdl) { + $ret = 'default'; + + $cnt = preg_match("/\[template\](.*?)\[\/template\]/ism", $pdl, $matches); + if($cnt && isset($matches[1])) { + $ret = trim($matches[1]); + } + + return $ret; + } + + function get_regions($pdl) { + $ret = []; + $supported_regions = ['aside', 'content', 'right_aside']; + + $cnt = preg_match_all("/\[region=(.*?)\](.*?)\[\/region\]/ism", $pdl, $matches, PREG_SET_ORDER); + if($cnt) { + foreach($matches as $mtch) { + if (!in_array($mtch[1], $supported_regions)) { + continue; + } + $ret[$mtch[1]] = self::parse_region($mtch[2]); + } + } + + return $ret; + } + + function parse_region($pdl) { + $ret = []; + + $cnt = preg_match_all('/\$content\b/ism', $pdl, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); + if($cnt) { + foreach($matches as $mtch) { + $offset = intval($mtch[0][1]); + $name = trim($mtch[0][0]); + //$src = base64url_encode(preg_replace(['/\s*\[/', '/\]\s*/'], ['[', ']'], $mtch[0][0])); + $src = base64_encode($mtch[0][0]); + $ret[$offset] = [ + 'type' => 'content', + 'name' => t('Main page content'), + 'desc' => t('The main page content can not be edited!'), + 'src' => $src + ]; + } + } + + $cnt = preg_match_all("/\[menu\](.*?)\[\/menu\]/ism", $pdl, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); + if($cnt) { + foreach($matches as $mtch) { + $offset = intval($mtch[1][1]); + $name = trim($mtch[1][0]); + //$src = base64url_encode(preg_replace(['/\s*\[/', '/\]\s*/'], ['[', ']'], $mtch[0][0])); + $src = base64_encode($mtch[0][0]); + + $ret[$offset] = [ + 'type' => 'menu', + 'name' => $name, + 'desc' => '', + 'src' => $src + ]; + } + } + + // menu class e.g. [menu=horizontal]my_menu[/menu] or [menu=tabbed]my_menu[/menu] + // allows different menu renderings to be applied + + //$cnt = preg_match_all("/\[menu=(.*?)\](.*?)\[\/menu\]/ism", $s, $matches, PREG_SET_ORDER); + //if($cnt) { + //foreach($matches as $mtch) { + //$s = str_replace($mtch[0],$this->menu(trim($mtch[2]),$mtch[1]),$s); + //} + //} + + + $cnt = preg_match_all("/\[block\](.*?)\[\/block\]/ism", $pdl, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); + if($cnt) { + foreach($matches as $mtch) { + $offset = intval($mtch[1][1]); + $name = trim($mtch[1][0]); + //$src = base64url_encode(preg_replace(['/\s*\[/', '/\]\s*/'], ['[', ']'], $mtch[0][0])); + $src = base64_encode($mtch[0][0]); + $ret[$offset] = [ + 'type' => 'block', + 'name' => $name, + 'desc' => '', + 'src' => $src + ]; + } + } + + //$cnt = preg_match_all("/\[block=(.*?)\](.*?)\[\/block\]/ism", $s, $matches, PREG_SET_ORDER); + //if($cnt) { + //foreach($matches as $mtch) { + //$s = str_replace($mtch[0],$this->block(trim($mtch[2]),trim($mtch[1])),$s); + //} + //} + + //$cnt = preg_match_all("/\[js\](.*?)\[\/js\]/ism", $s, $matches, PREG_SET_ORDER); + //if($cnt) { + //foreach($matches as $mtch) { + //$s = str_replace($mtch[0],$this->js(trim($mtch[1])),$s); + //} + //} + + //$cnt = preg_match_all("/\[css\](.*?)\[\/css\]/ism", $s, $matches, PREG_SET_ORDER); + //if($cnt) { + //foreach($matches as $mtch) { + //$s = str_replace($mtch[0],$this->css(trim($mtch[1])),$s); + //} + //} + + // need to modify this to accept parameters + + $cnt = preg_match_all("/\[widget=(.*?)\](.*?)\[\/widget\]/ism", $pdl, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); + + if($cnt) { + foreach($matches as $mtch) { + $offset = intval($mtch[1][1]); + $name = trim($mtch[1][0]); + //$src = base64url_encode(preg_replace(['/\s*\[/', '/\]\s*/'], ['[', ']'], $mtch[0][0])); + $src = base64_encode($mtch[0][0]); + $ret[$offset] = [ + 'type' => 'widget', + 'name' => $name, + 'desc' => '', + 'src' => $src + ]; + } + } + + return $ret; + + } + + + /** + * @brief Parse template comment in search of template info. + * + * like + * \code + * * Name: MyWidget + * * Description: A widget + * * Version: 1.2.3 + * * Author: John <profile url> + * * Author: Jane <email> + * * ContentRegionID: some_id + * * ContentRegionID: some_other_id + * * + *\endcode + * @param string $template the name of the template + * @return array with the information + */ + function get_template_info($template){ + $m = []; + $info = [ + 'name' => $template, + 'description' => '', + 'author' => [], + 'maintainer' => [], + 'version' => '', + 'contentregion' => [] + ]; + + $checkpaths = [ + 'view/php/' . $template . '.php', + ]; + + $template_found = false; + + foreach ($checkpaths as $path) { + if (is_file($path)) { + $template_found = true; + $f = file_get_contents($path); + break; + } + } + + if(!($template_found && $f)) + return $info; + + $f = escape_tags($f); + $r = preg_match('|/\*.*\*/|msU', $f, $m); + + if ($r) { + $ll = explode("\n", $m[0]); + foreach($ll as $l) { + $l = trim($l, "\t\n\r */"); + if ($l != ''){ + list($k, $v) = array_map('trim', explode(':', $l, 2)); + $k = strtolower($k); + if (in_array($k, ['author', 'maintainer'])){ + $r = preg_match('|([^<]+)<([^>]+)>|', $v, $m); + if ($r) { + $info[$k][] = array('name' => $m[1], 'link' => $m[2]); + } else { + $info[$k][] = array('name' => $v); + } + } + elseif (in_array($k, ['contentregion'])){ + $info[$k][] = array_map('trim', explode(',', $v)); + } + else { + $info[$k] = $v; + } + } + } + } + + return $info; + } + + function get_pdl($module) { + $ret = [ + 'pdl' => null, + 'modified' => true + ]; + + $pdl_path = 'mod_' . $module . '.pdl'; + + $ret['pdl'] = get_pconfig(local_channel(), 'system', $pdl_path); + + if(!$ret['pdl']) { + $pdl_path = theme_include($pdl_path); + if ($pdl_path) { + $ret['pdl'] = file_get_contents($pdl_path); + $ret['modified'] = false; + } + } + + return $ret; + } +} diff --git a/Zotlabs/Module/Settings/Calendar.php b/Zotlabs/Module/Settings/Calendar.php index ab85eb450..65240c635 100644 --- a/Zotlabs/Module/Settings/Calendar.php +++ b/Zotlabs/Module/Settings/Calendar.php @@ -11,14 +11,14 @@ class Calendar { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -34,14 +34,14 @@ class Calendar { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Calendar Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Channel.php b/Zotlabs/Module/Settings/Channel.php index a0da020b7..840efc162 100644 --- a/Zotlabs/Module/Settings/Channel.php +++ b/Zotlabs/Module/Settings/Channel.php @@ -35,6 +35,8 @@ class Channel { $pageflags = $channel['channel_pageflags']; $existing_adult = (($pageflags & PAGE_ADULT) ? 1 : 0); $expire = ((x($_POST, 'expire')) ? intval($_POST['expire']) : 0); + $incl = ((x($_POST['message_filter_incl'])) ? htmlspecialchars_decode(trim($_POST['message_filter_incl']), ENT_QUOTES) : ''); + $excl = ((x($_POST['message_filter_excl'])) ? htmlspecialchars_decode(trim($_POST['message_filter_excl']), ENT_QUOTES) : ''); if ($adult != $existing_adult) { $pageflags = ($pageflags ^ PAGE_ADULT); @@ -131,6 +133,8 @@ class Channel { set_pconfig(local_channel(), 'system', 'photo_path', $photo_path); set_pconfig(local_channel(), 'system', 'attach_path', $attach_path); set_pconfig(local_channel(), 'system', 'email_notify_host', $mailhost); + set_pconfig(local_channel(), 'system', 'message_filter_incl', $incl); + set_pconfig(local_channel(), 'system', 'message_filter_excl', $excl); $r = q("update channel set channel_pageflags = %d, channel_timezone = '%s', channel_location = '%s', channel_notifyflags = %d, channel_expire_days = %d @@ -277,6 +281,8 @@ class Channel { '$removeme' => t('Remove Channel'), '$removechannel' => t('Remove this channel.'), '$expire' => ['expire', t('Expire other channel content after this many days'), $expire, t('0 or blank to use the website limit.') . ' ' . ((intval($sys_expire)) ? sprintf(t('This website expires after %d days.'), intval($sys_expire)) : t('This website does not expire imported content.')) . ' ' . t('The website limit takes precedence if lower than your limit.')], + '$message_filter_excl' => ['message_filter_excl', t('Do not import posts with this text'), get_pconfig(local_channel(), 'system', 'message_filter_excl', ''), t('Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - leave blank to import all posts')], + '$message_filter_incl' => ['message_filter_incl', t('Only import posts with this text'), get_pconfig(local_channel(), 'system', 'message_filter_incl', ''), t('Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - leave blank to import all posts')] ]); call_hooks('settings_form', $o); diff --git a/Zotlabs/Module/Settings/Channel_home.php b/Zotlabs/Module/Settings/Channel_home.php index e8faa7fb2..470dbe4c3 100644 --- a/Zotlabs/Module/Settings/Channel_home.php +++ b/Zotlabs/Module/Settings/Channel_home.php @@ -13,7 +13,7 @@ class Channel_home { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); @@ -25,10 +25,10 @@ class Channel_home { $channel_menu = ((x($_POST['channel_menu'])) ? htmlspecialchars_decode(trim($_POST['channel_menu']),ENT_QUOTES) : ''); set_pconfig(local_channel(),'system','channel_menu',$channel_menu); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -82,7 +82,7 @@ class Channel_home { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Channel Home Settings'), @@ -90,7 +90,7 @@ class Channel_home { '$extra_settings_html' => $extra_settings_html, '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Connections.php b/Zotlabs/Module/Settings/Connections.php index 4369deb27..52a95a3d1 100644 --- a/Zotlabs/Module/Settings/Connections.php +++ b/Zotlabs/Module/Settings/Connections.php @@ -11,14 +11,14 @@ class Connections { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -34,14 +34,14 @@ class Connections { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Connections Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Directory.php b/Zotlabs/Module/Settings/Directory.php index d1dd0677e..09ea61f60 100644 --- a/Zotlabs/Module/Settings/Directory.php +++ b/Zotlabs/Module/Settings/Directory.php @@ -11,14 +11,14 @@ class Directory { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -34,14 +34,14 @@ class Directory { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Directory Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Editor.php b/Zotlabs/Module/Settings/Editor.php index cf6dd2807..85c3e69ae 100644 --- a/Zotlabs/Module/Settings/Editor.php +++ b/Zotlabs/Module/Settings/Editor.php @@ -11,14 +11,14 @@ class Editor { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -34,14 +34,14 @@ class Editor { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Editor Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Events.php b/Zotlabs/Module/Settings/Events.php index ab393c932..0a0e3516c 100644 --- a/Zotlabs/Module/Settings/Events.php +++ b/Zotlabs/Module/Settings/Events.php @@ -11,14 +11,14 @@ class Events { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -34,14 +34,14 @@ class Events { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Events Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Manage.php b/Zotlabs/Module/Settings/Manage.php index cbc494cf8..6fb57eafb 100644 --- a/Zotlabs/Module/Settings/Manage.php +++ b/Zotlabs/Module/Settings/Manage.php @@ -12,14 +12,14 @@ class Manage { $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -35,14 +35,14 @@ class Manage { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Channel Manager Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Network.php b/Zotlabs/Module/Settings/Network.php index 9f5bdb2e5..eae963a25 100644 --- a/Zotlabs/Module/Settings/Network.php +++ b/Zotlabs/Module/Settings/Network.php @@ -21,10 +21,10 @@ class Network { $network_divmore_height = 50; set_pconfig(local_channel(),'system','network_divmore_height', $network_divmore_height); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -53,7 +53,7 @@ class Network { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Stream Settings'), @@ -61,7 +61,7 @@ class Network { '$extra_settings_html' => $extra_settings_html, '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Photos.php b/Zotlabs/Module/Settings/Photos.php index 8195d660b..f68c8847b 100644 --- a/Zotlabs/Module/Settings/Photos.php +++ b/Zotlabs/Module/Settings/Photos.php @@ -7,18 +7,18 @@ use Zotlabs\Lib\Libsync; class Photos { function post() { - + $module = substr(strrchr(strtolower(static::class), '\\'), 1); check_form_security_token_redirectOnErr('/settings/' . $module, 'settings_' . $module); - + $features = get_module_features($module); process_module_features_post(local_channel(), $features, $_POST); - + Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -34,14 +34,14 @@ class Photos { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Photos Settings'), '$features' => process_module_features_get(local_channel(), $features), '$submit' => t('Submit') )); - + return $o; } diff --git a/Zotlabs/Module/Settings/Privacy.php b/Zotlabs/Module/Settings/Privacy.php index fbda78a6f..847bb3b8f 100644 --- a/Zotlabs/Module/Settings/Privacy.php +++ b/Zotlabs/Module/Settings/Privacy.php @@ -119,7 +119,7 @@ class Privacy { ], '$autoperms' => ['autoperms', t('Automatically approve new contacts'), $autoperms, '', [t('No'), t('Yes')]], '$index_opt_out' => ['index_opt_out', t('Opt-out of search engine indexing'), $index_opt_out, '', [t('No'), t('Yes')]], - '$group_actor' => ['group_actor', t('Group actor'), $group_actor, t('Allow this channel to act as a forum'), [t('No'), t('Yes')]], + '$group_actor' => ['group_actor', t('Group actor'), $group_actor, t('Allow this channel to act as a forum'), [t('No'), t('Yes')]] ]); return $o; diff --git a/Zotlabs/Module/Settings/Profiles.php b/Zotlabs/Module/Settings/Profiles.php index a1a1b8d96..0ff2dfb6d 100644 --- a/Zotlabs/Module/Settings/Profiles.php +++ b/Zotlabs/Module/Settings/Profiles.php @@ -23,7 +23,7 @@ class Profiles { Libsync::build_sync_packet(); - if($_POST['rpath']) + if(isset($_POST['rpath']) && is_local_url($_POST['rpath'])) goaway($_POST['rpath']); return; @@ -43,7 +43,7 @@ class Profiles { $tpl = get_markup_template("settings_module.tpl"); $o .= replace_macros($tpl, array( - '$rpath' => $rpath, + '$rpath' => escape_url($rpath), '$action_url' => 'settings/' . $module, '$form_security_token' => get_form_security_token('settings_' . $module), '$title' => t('Profiles Settings'), diff --git a/Zotlabs/Photo/PhotoDriver.php b/Zotlabs/Photo/PhotoDriver.php index 4c4f26e32..6bdb89ab1 100644 --- a/Zotlabs/Photo/PhotoDriver.php +++ b/Zotlabs/Photo/PhotoDriver.php @@ -2,7 +2,7 @@ namespace Zotlabs\Photo; -use Zotlabs\Lib\Hashpath; +use Zotlabs\Lib\Hashpath; /** * @brief Abstract photo driver class. @@ -494,11 +494,11 @@ abstract class PhotoDriver { ( aid, uid, xchan, resource_id, created, edited, filename, mimetype, album, height, width, content, os_storage, filesize, imgscale, photo_usage, title, description, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid, expires, profile ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)", intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), dbescdate($p['created']), dbescdate($p['edited']), dbesc(basename($p['filename'])), dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), dbesc($p['os_path']), dbesc($p['display_path']), dbesc($p['allow_cid']), dbesc($p['allow_gid']), dbesc($p['deny_cid']), dbesc($p['deny_gid']), dbescdate($p['expires']), intval($p['profile'])); } - logger('Photo save imgscale ' . $p['imgscale'] . ' returned ' . intval($r)); + logger('Photo save imgscale ' . $p['imgscale'] . ' returned: ' . (($r) ? 1 : 0)); return $r; } - + /** * @brief Stores thumbnail to database or filesystem. * @@ -530,13 +530,13 @@ abstract class PhotoDriver { } else $arr['os_storage'] = 0; - + if(! $this->save($arr)) { if(array_key_exists('os_syspath', $arr)) @unlink($arr['os_syspath']); return false; } - + return true; } diff --git a/Zotlabs/Web/HTTPSig.php b/Zotlabs/Web/HTTPSig.php index a7a59b8cf..4177477a1 100644 --- a/Zotlabs/Web/HTTPSig.php +++ b/Zotlabs/Web/HTTPSig.php @@ -127,6 +127,7 @@ class HTTPSig { if (array_key_exists($h, $headers)) { $signed_data .= $h . ': ' . $headers[$h] . "\n"; } + if ($h === 'date') { $d = new DateTime($headers[$h]); $d->setTimeZone(new DateTimeZone('UTC')); @@ -142,20 +143,34 @@ class HTTPSig { $signed_data = rtrim($signed_data, "\n"); $algorithm = null; + if ($sig_block['algorithm'] === 'rsa-sha256') { $algorithm = 'sha256'; } + if ($sig_block['algorithm'] === 'rsa-sha512') { $algorithm = 'sha512'; } - if (!array_key_exists('keyId', $sig_block)) + if (!array_key_exists('keyId', $sig_block)) { return $result; + } $result['signer'] = $sig_block['keyId']; $cached_key = self::get_key($key, $keytype, $result['signer']); + if ($sig_block['algorithm'] === 'hs2019') { + if (isset($cached_key['algorithm'])) { + if (strpos($cached_key['algorithm'], 'rsa-sha256') !== false) { + $algorithm = 'sha256'; + } + + if (strpos($cached_key['algorithm'], 'rsa-sha512') !== false) { + $algorithm = 'sha512'; + } + } + } if (!($cached_key && $cached_key['public_key'])) { return $result; @@ -296,7 +311,7 @@ class HTTPSig { $best = Libzot::zot_record_preferred($x); } if ($best && $best['xchan_pubkey']) { - return ['portable_id' => $best['xchan_hash'], 'public_key' => $best['xchan_pubkey'], 'hubloc' => $best]; + return ['portable_id' => $best['xchan_hash'], 'public_key' => $best['xchan_pubkey'], 'algorithm' => get_xconfig($best['xchan_hash'], 'system', 'signing_algorithm'), 'hubloc' => $best]; } } @@ -308,12 +323,38 @@ class HTTPSig { // The record wasn't in cache. Fetch it now. $r = ActivityStreams::fetch($id); + $signatureAlgorithm = EMPTY_STR; if ($r) { if (array_key_exists('publicKey', $r) && array_key_exists('publicKeyPem', $r['publicKey']) && array_key_exists('id', $r['publicKey'])) { if ($r['publicKey']['id'] === $id || $r['id'] === $id) { $portable_id = ((array_key_exists('owner', $r['publicKey'])) ? $r['publicKey']['owner'] : EMPTY_STR); - return ['public_key' => self::convertKey($r['publicKey']['publicKeyPem']), 'portable_id' => $portable_id, 'hubloc' => []]; + + // the w3c sec context has conflicting names and no defined values for this property except + // "http://www.w3.org/2000/09/xmldsig#rsa-sha1" + + // Since the names conflict, it could mess up LD-signatures but we will accept both, and at this + // time we will only look for the substrings 'rsa-sha256' and 'rsa-sha512' within those properties. + // We will also accept a toplevel 'sigAlgorithm' regardless of namespace with the same constraints. + // Default to rsa-sha256 if we can't figure out. If they're sending 'hs2019' we have to + // look for something. + + if (isset($r['publicKey']['signingAlgorithm'])) { + $signatureAlgorithm = $r['publicKey']['signingAlgorithm']; + set_xconfig($portable_id, 'system', 'signing_algorithm', $signatureAlgorithm); + } + + if (isset($r['publicKey']['signatureAlgorithm'])) { + $signatureAlgorithm = $r['publicKey']['signatureAlgorithm']; + set_xconfig($portable_id, 'system', 'signing_algorithm', $signatureAlgorithm); + } + + if (isset($r['sigAlgorithm'])) { + $signatureAlgorithm = $r['sigAlgorithm']; + set_xconfig($portable_id, 'system', 'signing_algorithm', $signatureAlgorithm); + } + + return ['public_key' => self::convertKey($r['publicKey']['publicKeyPem']), 'portable_id' => $portable_id, 'algorithm' => (($signatureAlgorithm) ? $signatureAlgorithm : 'rsa-sha256'), 'hubloc' => []]; } } } @@ -343,7 +384,7 @@ class HTTPSig { } if ($best && $best['xchan_pubkey']) { - return ['portable_id' => $best['xchan_hash'], 'public_key' => $best['xchan_pubkey'], 'hubloc' => $best]; + return ['portable_id' => $best['xchan_hash'], 'public_key' => $best['xchan_pubkey'], 'algorithm' => get_xconfig($best['xchan_hash'], 'system', 'signing_algorithm'), 'hubloc' => $best]; } } @@ -389,7 +430,7 @@ class HTTPSig { } if ($best && $best['xchan_pubkey']) { - return ['portable_id' => $best['xchan_hash'], 'public_key' => $best['xchan_pubkey'], 'hubloc' => $best]; + return ['portable_id' => $best['xchan_hash'], 'public_key' => $best['xchan_pubkey'], 'algorithm' => get_xconfig($best['xchan_hash'], 'system', 'signing_algorithm'), 'hubloc' => $best]; } } @@ -461,6 +502,9 @@ class HTTPSig { $x = self::sign($head, $prvkey, $alg); + // TODO: should we default to hs2019? + // $headerval = 'keyId="' . $keyid . '",algorithm="' . (($algorithm === 'rsa-sha256') ? 'hs2019' : $algorithm) . '",headers="' . $x['headers'] . '",signature="' . $x['signature'] . '"'; + $headerval = 'keyId="' . $keyid . '",algorithm="' . $algorithm . '",headers="' . $x['headers'] . '",signature="' . $x['signature'] . '"'; if ($encryption) { @@ -528,11 +572,14 @@ class HTTPSig { if ($head) { foreach ($head as $k => $v) { - $headers .= strtolower($k) . ': ' . trim($v) . "\n"; + $k = strtolower($k); + $v = (($v) ? trim($v) : ''); + + $headers .= $k . ': ' . $v . "\n"; if ($fields) $fields .= ' '; - $fields .= strtolower($k); + $fields .= $k; } // strip the trailing linefeed $headers = rtrim($headers, "\n"); diff --git a/Zotlabs/Web/WebServer.php b/Zotlabs/Web/WebServer.php index de0d5a883..70c6eb9b8 100644 --- a/Zotlabs/Web/WebServer.php +++ b/Zotlabs/Web/WebServer.php @@ -107,7 +107,8 @@ class WebServer { $Router->Dispatch(); - $this->set_homebase(); + // TODO: this is not used for anything atm and messes up comanche templates by adding some javascript + //$this->set_homebase(); // now that we've been through the module content, see if the page reported // a permission problem and if so, a 403 response would seem to be in order. diff --git a/Zotlabs/Widget/Activity.php b/Zotlabs/Widget/Activity.php index 5d9795c7e..34e0f67dc 100644 --- a/Zotlabs/Widget/Activity.php +++ b/Zotlabs/Widget/Activity.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Activity + * * Description: Shows the unseen activity count per contact + */ + namespace Zotlabs\Widget; class Activity { diff --git a/Zotlabs/Widget/Activity_filter.php b/Zotlabs/Widget/Activity_filter.php index b7a69752e..daaf5fb67 100644 --- a/Zotlabs/Widget/Activity_filter.php +++ b/Zotlabs/Widget/Activity_filter.php @@ -1,5 +1,12 @@ <?php +/** + * * Name: Activity filters + * * Description: Filters for the network stream + * * Requires: network + */ + + namespace Zotlabs\Widget; use App; diff --git a/Zotlabs/Widget/Activity_order.php b/Zotlabs/Widget/Activity_order.php index d3fe2a30f..e8ee11508 100644 --- a/Zotlabs/Widget/Activity_order.php +++ b/Zotlabs/Widget/Activity_order.php @@ -2,6 +2,12 @@ namespace Zotlabs\Widget; +/** + * * Name: Activity order + * * Description: Order the network stream by posted date, last commented or by date unthreaded + * * Requires: network + */ + class Activity_order { function widget($arr) { @@ -22,7 +28,7 @@ class Activity_order { switch($_GET['order']){ case 'post': $postord_active = 'active'; - set_pconfig(local_channel(), 'mod_network', 'order', 1); + set_pconfig(local_channel(), 'mod_network', 'order', 1); break; case 'comment': $commentord_active = 'active'; diff --git a/Zotlabs/Widget/Admin.php b/Zotlabs/Widget/Admin.php index f349377a0..0a7a6925f 100644 --- a/Zotlabs/Widget/Admin.php +++ b/Zotlabs/Widget/Admin.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Admin menu + * * Requires: admin + */ + namespace Zotlabs\Widget; class Admin { diff --git a/Zotlabs/Widget/Affinity.php b/Zotlabs/Widget/Affinity.php index 572af0503..e083e576c 100644 --- a/Zotlabs/Widget/Affinity.php +++ b/Zotlabs/Widget/Affinity.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Affinity Tool + * * Description: Filter the network stream by affinity, requires the Affinity Tool App + * * Requires: network + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\Apps; @@ -13,7 +19,7 @@ class Affinity { if(! Apps::system_app_installed(local_channel(),'Affinity Tool')) return; - + $default_cmin = ((Apps::system_app_installed(local_channel(),'Affinity Tool')) ? get_pconfig(local_channel(),'affinity','cmin',0) : 0); $default_cmax = ((Apps::system_app_installed(local_channel(),'Affinity Tool')) ? get_pconfig(local_channel(),'affinity','cmax',99) : 99); @@ -54,7 +60,7 @@ class Affinity { '$refresh' => t('Refresh'), '$labels' => $label_str, )); - + $arr = array('html' => $x); call_hooks('main_slider',$arr); @@ -63,4 +69,4 @@ class Affinity { } } - + diff --git a/Zotlabs/Widget/Album.php b/Zotlabs/Widget/Album.php index f359e6d0f..003f6f49d 100644 --- a/Zotlabs/Widget/Album.php +++ b/Zotlabs/Widget/Album.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Album + * * Description: Displays an album with a title which can be defined via the 'album' and 'title' variable + * * Requires: channel, articles, cards, wiki + */ + namespace Zotlabs\Widget; require_once('include/attach.php'); @@ -99,7 +105,7 @@ class Album { '$upload_form' => $upload_form, '$usage' => $usage_message )); - + return $o; } } diff --git a/Zotlabs/Widget/Appcategories.php b/Zotlabs/Widget/Appcategories.php index e916f095f..31fb2542e 100644 --- a/Zotlabs/Widget/Appcategories.php +++ b/Zotlabs/Widget/Appcategories.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: App categories + * * Description: Shows a menu with various app categories + * * Requires: apps + */ + namespace Zotlabs\Widget; class Appcategories { diff --git a/Zotlabs/Widget/Appcloud.php b/Zotlabs/Widget/Appcloud.php index 2a4671eee..791d534c2 100644 --- a/Zotlabs/Widget/Appcloud.php +++ b/Zotlabs/Widget/Appcloud.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: App cloud + * * Description: Shows a cloud with various app categories + * * Requires: apps + */ + namespace Zotlabs\Widget; class Appcloud { diff --git a/Zotlabs/Widget/Appstore.php b/Zotlabs/Widget/Appstore.php index da05c0b62..d8499152a 100644 --- a/Zotlabs/Widget/Appstore.php +++ b/Zotlabs/Widget/Appstore.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: App store menu + * * Description: Shows a menu with links to installed and available apps + * * Requires: apps + */ + namespace Zotlabs\Widget; diff --git a/Zotlabs/Widget/Archive.php b/Zotlabs/Widget/Archive.php index 9adaac38f..e712a8236 100644 --- a/Zotlabs/Widget/Archive.php +++ b/Zotlabs/Widget/Archive.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Archive + * * Description: A menu with links to content sorted by years and months + * * Requires: channel, articles, cards + */ + namespace Zotlabs\Widget; diff --git a/Zotlabs/Widget/Bookmarkedchats.php b/Zotlabs/Widget/Bookmarkedchats.php index d64bbdb4b..5d6d000c1 100644 --- a/Zotlabs/Widget/Bookmarkedchats.php +++ b/Zotlabs/Widget/Bookmarkedchats.php @@ -1,14 +1,15 @@ <?php +/** + * * Name: Bookmarked chats + * * Description: A menu with bookmarked chats + */ + namespace Zotlabs\Widget; class Bookmarkedchats { function widget($arr) { - - if(! feature_enabled(\App::$profile['profile_uid'],'ajaxchat')) - return ''; - $h = get_observer_hash(); if(! $h) return; diff --git a/Zotlabs/Widget/Catcloud.php b/Zotlabs/Widget/Catcloud.php index c53f9bbf6..5740caab7 100644 --- a/Zotlabs/Widget/Catcloud.php +++ b/Zotlabs/Widget/Catcloud.php @@ -2,6 +2,13 @@ namespace Zotlabs\Widget; +/** + * * Name: Category cloud + * * Description: Display category links in a cloud + * * Requires: channel, cards, articles + */ + + class Catcloud { function widget($arr) { @@ -22,7 +29,7 @@ class Catcloud { return card_catblock(\App::$profile['profile_uid'], $limit, '', \App::$profile['channel_hash']); case 'articles': - + if(! perm_is_allowed(\App::$profile['profile_uid'], get_observer_hash(), 'view_pages')) return ''; diff --git a/Zotlabs/Widget/Catcloud_wall.php b/Zotlabs/Widget/Catcloud_wall.php index 3795987cc..4ee30d023 100644 --- a/Zotlabs/Widget/Catcloud_wall.php +++ b/Zotlabs/Widget/Catcloud_wall.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Category cloud wall + * * Description: Display category links in a cloud restricted to wall posts + * * Requires: channel + */ + namespace Zotlabs\Widget; class Catcloud_wall { diff --git a/Zotlabs/Widget/Categories.php b/Zotlabs/Widget/Categories.php index 94ad469da..0c6996d55 100644 --- a/Zotlabs/Widget/Categories.php +++ b/Zotlabs/Widget/Categories.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Categories + * * Description: Display a menu with links to categories + * * Requires: channel, articles, cards, cloud + */ + namespace Zotlabs\Widget; use App; diff --git a/Zotlabs/Widget/Cdav.php b/Zotlabs/Widget/Cdav.php index ce716b455..f84f5cb04 100644 --- a/Zotlabs/Widget/Cdav.php +++ b/Zotlabs/Widget/Cdav.php @@ -1,8 +1,12 @@ <?php -namespace Zotlabs\Widget; - +/** + * * Name: CalDAV/CardDAV tools + * * Description: A widget with various CalDAV and CardDAV tools + * * Requires: cdav + */ +namespace Zotlabs\Widget; class Cdav { @@ -164,7 +168,7 @@ class Cdav { 'uri' => $sabreabook['uri'], 'displayname' => $sabreabook['{DAV:}displayname'], 'id' => $sabreabook['id'] - + ]; } diff --git a/Zotlabs/Widget/Chatroom_list.php b/Zotlabs/Widget/Chatroom_list.php index e2aad0e05..d80e40bf9 100644 --- a/Zotlabs/Widget/Chatroom_list.php +++ b/Zotlabs/Widget/Chatroom_list.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Chatroom list + * * Description: A menu with links to your chatrooms + * * Requires: chat, channel, articles, cards, wiki + */ + namespace Zotlabs\Widget; class Chatroom_list { diff --git a/Zotlabs/Widget/Chatroom_members.php b/Zotlabs/Widget/Chatroom_members.php index 8ed77fb3c..0846192ce 100644 --- a/Zotlabs/Widget/Chatroom_members.php +++ b/Zotlabs/Widget/Chatroom_members.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Chatroom members + * * Description: A widget that shows members of a chatroom + * * Requires: chat + */ + namespace Zotlabs\Widget; class Chatroom_members { diff --git a/Zotlabs/Widget/Clock.php b/Zotlabs/Widget/Clock.php index b63b5f748..3b9751cc5 100644 --- a/Zotlabs/Widget/Clock.php +++ b/Zotlabs/Widget/Clock.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Clock + * * Description: A simple widget that shows the current time + */ + namespace Zotlabs\Widget; class Clock { diff --git a/Zotlabs/Widget/Collections.php b/Zotlabs/Widget/Collections.php deleted file mode 100644 index ad1a10f4b..000000000 --- a/Zotlabs/Widget/Collections.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -namespace Zotlabs\Widget; - -use Zotlabs\Lib\AccessList; - -class Collections { - - function widget($args) { - - if(argc() < 2) - // return; - - $mode = ((array_key_exists('mode',$args)) ? $args['mode'] : 'conversation'); - switch($mode) { - case 'conversation': - $every = argv(0); - $each = argv(0); - $edit = true; - $current = $_REQUEST['gid']; - $abook_id = 0; - $wmode = 0; - break; - case 'connections': - $every = 'connections'; - $each = 'group'; - $edit = true; - $current = $_REQUEST['gid']; - $abook_id = 0; - $wmode = 0; - case 'groups': - $every = 'connections'; - $each = argv(0); - $edit = false; - $current = intval(argv(1)); - $abook_id = 0; - $wmode = 1; - break; - case 'abook': - $every = 'connections'; - $each = 'group'; - $edit = false; - $current = 0; - $abook_id = \App::$poi['abook_xchan']; - $wmode = 1; - break; - default: - return ''; - break; - } - - return AccessList::widget($every, $each, $edit, $current, $abook_id, $wmode); - } -} diff --git a/Zotlabs/Widget/Common_friends.php b/Zotlabs/Widget/Common_friends.php index a67b9312c..6024f82f5 100644 --- a/Zotlabs/Widget/Common_friends.php +++ b/Zotlabs/Widget/Common_friends.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Common friends + * * Description: Display common friends to visitors + * * Requires: channel, articles, cards, wiki + */ + namespace Zotlabs\Widget; require_once('include/contact_widgets.php'); @@ -8,7 +14,7 @@ class Common_friends { function widget($arr) { - if((! \App::$profile['profile_uid']) + if((! \App::$profile['profile_uid']) || (! perm_is_allowed(\App::$profile['profile_uid'],get_observer_hash(),'view_contacts'))) { return ''; } diff --git a/Zotlabs/Widget/Cover_photo.php b/Zotlabs/Widget/Cover_photo.php index 97323ea8c..11d9c4715 100644 --- a/Zotlabs/Widget/Cover_photo.php +++ b/Zotlabs/Widget/Cover_photo.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Cover photo + * * Description: Display a cover photo in the banner region + * * Requires: disabled_for_pdledit_gui + */ + namespace Zotlabs\Widget; class Cover_photo { diff --git a/Zotlabs/Widget/Design_tools.php b/Zotlabs/Widget/Design_tools.php index a15c0c98d..0f94577d8 100644 --- a/Zotlabs/Widget/Design_tools.php +++ b/Zotlabs/Widget/Design_tools.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Design tools + * * Description: Links to useful tools for webpages + * * Requires: webpages + */ + namespace Zotlabs\Widget; class Design_tools { @@ -11,4 +17,4 @@ class Design_tools { return EMPTY_STR; } -}
\ No newline at end of file +} diff --git a/Zotlabs/Widget/Dirsort.php b/Zotlabs/Widget/Dirsort.php index 2fb38b7df..569782bb9 100644 --- a/Zotlabs/Widget/Dirsort.php +++ b/Zotlabs/Widget/Dirsort.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Dirsort + * * Description: Various options to provide different vies of the directory + * * Requires: directory + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\Libzotdir; diff --git a/Zotlabs/Widget/Dirtags.php b/Zotlabs/Widget/Dirtags.php index 246c47dde..183c2f20f 100644 --- a/Zotlabs/Widget/Dirtags.php +++ b/Zotlabs/Widget/Dirtags.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Directory tags + * * Description: Show directory tags in a cloud + * * Requires: directory + */ + namespace Zotlabs\Widget; class Dirtags { diff --git a/Zotlabs/Widget/Eventstools.php b/Zotlabs/Widget/Eventstools.php deleted file mode 100644 index 7efd3f72e..000000000 --- a/Zotlabs/Widget/Eventstools.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php - -namespace Zotlabs\Widget; - -class Eventstools { - - function widget($arr) { - - if(! local_channel()) - return; - - return replace_macros(get_markup_template('events_tools_side.tpl'), array( - '$title' => t('Events Tools'), - '$export' => t('Export Calendar'), - '$import' => t('Import Calendar'), - '$submit' => t('Submit') - )); - } -} diff --git a/Zotlabs/Widget/Filer.php b/Zotlabs/Widget/Filer.php index 5d6f96a87..6c5ac47a9 100644 --- a/Zotlabs/Widget/Filer.php +++ b/Zotlabs/Widget/Filer.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Saved folders + * * Description: A menu containing saved folders + * * Requires: network + */ + namespace Zotlabs\Widget; require_once('include/contact_widgets.php'); @@ -10,7 +16,6 @@ class Filer { if(! local_channel()) return ''; - $selected = ((x($_REQUEST,'file')) ? $_REQUEST['file'] : ''); $terms = array(); diff --git a/Zotlabs/Widget/Findpeople.php b/Zotlabs/Widget/Findpeople.php index f450b96ae..45d62bb7f 100644 --- a/Zotlabs/Widget/Findpeople.php +++ b/Zotlabs/Widget/Findpeople.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Find channels + * * Description: A simple form to search for channels in the directory + */ + namespace Zotlabs\Widget; require_once('include/contact_widgets.php'); diff --git a/Zotlabs/Widget/Follow.php b/Zotlabs/Widget/Follow.php index c4aecc8e1..2a0abb027 100644 --- a/Zotlabs/Widget/Follow.php +++ b/Zotlabs/Widget/Follow.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Follow + * * Description: A simple form which allows you to enter an address and send a follow request + */ + namespace Zotlabs\Widget; @@ -24,7 +29,7 @@ class Follow { else { $abook_usage_message = ''; } - + return replace_macros(get_markup_template('follow.tpl'),array( '$connect' => t('Add New Connection'), '$desc' => t('Enter channel address'), diff --git a/Zotlabs/Widget/Forums.php b/Zotlabs/Widget/Forums.php index 2af7347f1..c40556273 100644 --- a/Zotlabs/Widget/Forums.php +++ b/Zotlabs/Widget/Forums.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Forums + * * Description: A list of forum channels with unseen item counts + */ + namespace Zotlabs\Widget; class Forums { @@ -21,35 +26,7 @@ class Forums { $unseen = 1; $perms_sql = item_permissions_sql(local_channel()) . item_normal(); - - $xf = false; - - $x1 = q("select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'send_stream' and v = '0'", - intval(local_channel()) - ); - if($x1) { - $xc = ids_to_querystr($x1,'xchan',true); - - $x2 = q("select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'tag_deliver' and v = '1' and xchan in (" . $xc . ") ", - intval(local_channel()) - ); - - if($x2) { - $xf = ids_to_querystr($x2,'xchan',true); - - // private forums - $x3 = q("select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'post_wall' and v = '1' and xchan in (" . $xc . ") and not xchan in (" . $xf . ") ", - intval(local_channel()) - ); - if($x3) { - $xf = ids_to_querystr(array_merge($x2,$x3),'xchan',true); - } - } - } - - $sql_extra = (($xf) ? " and ( xchan_hash in (" . $xf . ") or xchan_pubforum = 1 ) " : " and xchan_pubforum = 1 "); - - + $sql_extra = " and xchan_pubforum = 1 "; $r1 = q("select abook_id, xchan_hash, xchan_name, xchan_url, xchan_photo_s from abook left join xchan on abook_xchan = xchan_hash where xchan_deleted = 0 and abook_channel = %d and abook_pending = 0 and abook_ignored = 0 and abook_blocked = 0 and abook_archived = 0 $sql_extra order by xchan_name $limit ", intval(local_channel()) diff --git a/Zotlabs/Widget/Fullprofile.php b/Zotlabs/Widget/Fullprofile.php index e8ed13811..edff88e31 100644 --- a/Zotlabs/Widget/Fullprofile.php +++ b/Zotlabs/Widget/Fullprofile.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Full profile + * * Description: Profile card with extended profile info + * * Requires: channel, articles, cards, wiki, cloud, photos + */ + namespace Zotlabs\Widget; class Fullprofile { diff --git a/Zotlabs/Widget/Helpindex.php b/Zotlabs/Widget/Helpindex.php index 6c8748194..fbcd8c8b2 100644 --- a/Zotlabs/Widget/Helpindex.php +++ b/Zotlabs/Widget/Helpindex.php @@ -1,11 +1,18 @@ <?php +/** + * * Name: Help index + * * Description: Help pages index + */ + namespace Zotlabs\Widget; class Helpindex { function widget($arr) { + require_once('include/help.php'); + $o .= '<div class="widget">'; $level_0 = get_help_content('sitetoc'); diff --git a/Zotlabs/Widget/Hq_controls.php b/Zotlabs/Widget/Hq_controls.php index 91335fd76..7b1fe817d 100644 --- a/Zotlabs/Widget/Hq_controls.php +++ b/Zotlabs/Widget/Hq_controls.php @@ -1,5 +1,12 @@ <?php +/** + * * Name: HQ Controls + * * Description: Control buttons for the HQ module + * * Author: Mario Vavti + * * Requires: hq + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\Apps; diff --git a/Zotlabs/Widget/Item.php b/Zotlabs/Widget/Item.php index 273d5649c..9fd703dfe 100644 --- a/Zotlabs/Widget/Item.php +++ b/Zotlabs/Widget/Item.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Item + * * Description: Display a webpage by title or mid, + * * Requires: channel, articles, cards, wiki + */ + namespace Zotlabs\Widget; require_once('include/security.php'); @@ -35,7 +41,7 @@ class Item { ); } else { - $r = q("select * from item where mid = '%s' and uid = %d and item_type = " + $r = q("select * from item where mid = '%s' and uid = %d and item_type = " . intval(ITEM_TYPE_WEBPAGE) . " $sql_extra limit 1", dbesc($arr['mid']), intval($channel_id) diff --git a/Zotlabs/Widget/Menu_preview.php b/Zotlabs/Widget/Menu_preview.php index 51218f6cf..ddeb4d12c 100644 --- a/Zotlabs/Widget/Menu_preview.php +++ b/Zotlabs/Widget/Menu_preview.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Menu preview + * * Description: Shows a preview of the current menu + * * Requires: mitem + */ + namespace Zotlabs\Widget; require_once('include/menu.php'); diff --git a/Zotlabs/Widget/Messages.php b/Zotlabs/Widget/Messages.php index 71f4bd310..d045ae85b 100644 --- a/Zotlabs/Widget/Messages.php +++ b/Zotlabs/Widget/Messages.php @@ -1,5 +1,13 @@ <?php +/** + * * Name: HQ Messages + * * Description: Quick access to messages, direct messages, starred messages (if enabled) and notifications + * * Author: Mario Vavti + * * Requires: hq + */ + + namespace Zotlabs\Widget; use App; @@ -17,8 +25,8 @@ class Messages { $tpl = get_markup_template('messages_widget.tpl'); $o = replace_macros($tpl, [ - '$entries' => $page['entries'], - '$offset' => $page['offset'], + '$entries' => $page['entries'] ?? [], + '$offset' => $page['offset'] ?? 0, '$feature_star' => feature_enabled(local_channel(), 'star_posts'), '$strings' => [ 'messages_title' => t('Public and restricted messages'), @@ -37,11 +45,11 @@ class Messages { if (!local_channel()) return; - if ($options['offset'] == -1) { + if (isset($options['offset']) && $options['offset'] == -1) { return; } - if ($options['type'] == 'notification') { + if (isset($options['type']) && $options['type'] == 'notification') { return self::get_notices_page($options); } @@ -103,13 +111,20 @@ class Messages { if (!$summary) { $summary = $item['summary']; } + if (!$summary) { - $summary = htmlentities(html2plain(bbcode($item['body'], ['drop_media' => true]), 75, true), ENT_QUOTES, 'UTF-8', false); + $summary = html2plain(bbcode($item['body'], ['drop_media' => true]), 75, true); + if ($summary) { + $summary = htmlentities($summary, ENT_QUOTES, 'UTF-8', false); + } } + if (!$summary) { $summary = '...'; } - $summary = substr_words($summary, 68); + else { + $summary = substr_words($summary, 68); + } switch(intval($item['item_private'])) { case 1: diff --git a/Zotlabs/Widget/Newmember.php b/Zotlabs/Widget/Newmember.php index 224f7a8a2..70a858fb0 100644 --- a/Zotlabs/Widget/Newmember.php +++ b/Zotlabs/Widget/Newmember.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: New member + * * Description: Display useful links for new members to help them get started + */ + namespace Zotlabs\Widget; class Newmember { @@ -29,7 +34,7 @@ class Newmember { $options = [ t('Profile Creation'), - [ + [ 'profile_photo' => t('Upload profile photo'), 'cover_photo' => t('Upload cover photo'), 'profiles' => t('Edit your profile'), @@ -84,4 +89,4 @@ class Newmember { } - + diff --git a/Zotlabs/Widget/Notes.php b/Zotlabs/Widget/Notes.php index 659b62390..2e8e04e93 100644 --- a/Zotlabs/Widget/Notes.php +++ b/Zotlabs/Widget/Notes.php @@ -1,5 +1,13 @@ <?php +/** + * * Name: Notes + * * Description: A simple notes widget, requires the Notes App + * * Author: Mike Macgirvin + * * Author: Mario Vavti + * * Maintainer: Mario Vavti + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\Apps; @@ -33,9 +41,6 @@ class Notes { ] )); - - - return $o; } } diff --git a/Zotlabs/Widget/Notifications.php b/Zotlabs/Widget/Notifications.php index a818ae40a..0e02d5cc1 100644 --- a/Zotlabs/Widget/Notifications.php +++ b/Zotlabs/Widget/Notifications.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Notifications + * * Description: Shows all kind of notifications + * * Author: Mario Vavti + */ + namespace Zotlabs\Widget; class Notifications { diff --git a/Zotlabs/Widget/Permcats.php b/Zotlabs/Widget/Permcats.php index a908f6220..9226b3c71 100644 --- a/Zotlabs/Widget/Permcats.php +++ b/Zotlabs/Widget/Permcats.php @@ -1,5 +1,12 @@ <?php +/** + * * Name: Contact roles + * * Description: Display a menu with all defined contact roles and contacts which are assigned to the selected role + * * Author: Mario Vavti + * * Requires: permcats + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\Permcat; diff --git a/Zotlabs/Widget/Photo.php b/Zotlabs/Widget/Photo.php index 10031f028..5ad6c604c 100644 --- a/Zotlabs/Widget/Photo.php +++ b/Zotlabs/Widget/Photo.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Photo + * * Description: Displays a single photo + */ + + namespace Zotlabs\Widget; diff --git a/Zotlabs/Widget/Photo_albums.php b/Zotlabs/Widget/Photo_albums.php index 6df8ddf3c..2ce916048 100644 --- a/Zotlabs/Widget/Photo_albums.php +++ b/Zotlabs/Widget/Photo_albums.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Photo albums + * * Description: Displays a menu with links to existing photo albums + * * Requires: photos + */ + namespace Zotlabs\Widget; require_once('include/photos.php'); diff --git a/Zotlabs/Widget/Photo_rand.php b/Zotlabs/Widget/Photo_rand.php index af80a3b9f..cfe026b19 100644 --- a/Zotlabs/Widget/Photo_rand.php +++ b/Zotlabs/Widget/Photo_rand.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Random photo + * * Description: Display a random photo + */ + namespace Zotlabs\Widget; require_once('include/photos.php'); @@ -40,15 +45,15 @@ class Photo_rand { if(strpos($url, 'http') !== 0) return ''; - + if(array_key_exists('style', $arr) && isset($arr['style'])) $style = $arr['style']; - + // ensure they can't sneak in an eval(js) function if(strpos($style,'(') !== false) return ''; - + $url = zid($url); $o = '<div class="widget">'; diff --git a/Zotlabs/Widget/Pinned.php b/Zotlabs/Widget/Pinned.php index 66d06bbd3..83036e98c 100644 --- a/Zotlabs/Widget/Pinned.php +++ b/Zotlabs/Widget/Pinned.php @@ -1,11 +1,14 @@ <?php namespace Zotlabs\Widget; -/* - * Show pinned content - * +/** + * * Name: Pinned items + * * Description: Display pinned items + * * Author: Max Kostikov + * * Requires: disabled_for_pdledit_gui */ + class Pinned { private $allowed_types = 0; diff --git a/Zotlabs/Widget/Portfolio.php b/Zotlabs/Widget/Portfolio.php index 0cd043246..a06f56e30 100644 --- a/Zotlabs/Widget/Portfolio.php +++ b/Zotlabs/Widget/Portfolio.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Portfolio + * * Description: Display a photo album in a portfolio style + * * Requires: channel, articles, cards, wiki + */ + namespace Zotlabs\Widget; require_once('include/attach.php'); @@ -8,11 +14,9 @@ class Portfolio { function widget($args) { - $owner_uid = \App::$profile_uid; $sql_extra = permissions_sql($owner_uid); - if(! perm_is_allowed($owner_uid,get_observer_hash(),'view_storage')) return ''; @@ -112,7 +116,7 @@ class Portfolio { '$upload_form' => $upload_form, '$usage' => $usage_message )); - + return $o; } } diff --git a/Zotlabs/Widget/Privacygroups.php b/Zotlabs/Widget/Privacygroups.php index a6b16c552..62f343ea6 100644 --- a/Zotlabs/Widget/Privacygroups.php +++ b/Zotlabs/Widget/Privacygroups.php @@ -1,5 +1,12 @@ <?php +/** + * * Name: Privacy Groups + * * Description: Display a menu with links to existing privacy groups + * * Requires: group + */ + + namespace Zotlabs\Widget; use Zotlabs\Lib\AccessList; diff --git a/Zotlabs/Widget/Profile.php b/Zotlabs/Widget/Profile.php index 0e5444a56..a0bb1a66a 100644 --- a/Zotlabs/Widget/Profile.php +++ b/Zotlabs/Widget/Profile.php @@ -1,5 +1,12 @@ <?php +/** + * * Name: Profile + * * Description: Your profile card + * * Requires: channel, articles, cards, wiki, cloud, photos + */ + + namespace Zotlabs\Widget; use App; diff --git a/Zotlabs/Widget/Pubsites.php b/Zotlabs/Widget/Pubsites.php deleted file mode 100644 index 958ba68c2..000000000 --- a/Zotlabs/Widget/Pubsites.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php - -namespace Zotlabs\Widget; - -class Pubsites { - - // used by site ratings pages to provide a return link - - function widget($arr) { - if(\App::$poi) - return; - return '<div class="widget"><ul class="nav nav-pills"><li><a href="pubsites">' . t('Public Hubs') . '</a></li></ul></div>'; - } -} - - diff --git a/Zotlabs/Widget/Pubtagcloud.php b/Zotlabs/Widget/Pubtagcloud.php index 826e3e6ae..db7ea02e7 100644 --- a/Zotlabs/Widget/Pubtagcloud.php +++ b/Zotlabs/Widget/Pubtagcloud.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Public stream tags + * * Description: Display public stream tags in a cloud + */ + namespace Zotlabs\Widget; class Pubtagcloud { diff --git a/Zotlabs/Widget/Random_block.php b/Zotlabs/Widget/Random_block.php index 465a51f97..9052bea03 100644 --- a/Zotlabs/Widget/Random_block.php +++ b/Zotlabs/Widget/Random_block.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Random block + * * Description: Display a random block item + */ + namespace Zotlabs\Widget; class Random_block { diff --git a/Zotlabs/Widget/Rating.php b/Zotlabs/Widget/Rating.php index 5e09f457b..20c27ff1c 100644 --- a/Zotlabs/Widget/Rating.php +++ b/Zotlabs/Widget/Rating.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Rating + * * Description: Deprecated rating tool + * * Requires: disabled_for_pdledit_gui + */ + namespace Zotlabs\Widget; class Rating { diff --git a/Zotlabs/Widget/Savedsearch.php b/Zotlabs/Widget/Savedsearch.php index 378c27139..660fd6d81 100644 --- a/Zotlabs/Widget/Savedsearch.php +++ b/Zotlabs/Widget/Savedsearch.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Saved searches + * * Description: A search form which also displays saved searches if the feature is enabled + * * Requires: network + */ + namespace Zotlabs\Widget; class Savedsearch { diff --git a/Zotlabs/Widget/Settings_menu.php b/Zotlabs/Widget/Settings_menu.php index 4d0f1d2dd..ef269d84b 100644 --- a/Zotlabs/Widget/Settings_menu.php +++ b/Zotlabs/Widget/Settings_menu.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Settings menu + * * Description: Display the channel settings menu + */ + namespace Zotlabs\Widget; class Settings_menu { diff --git a/Zotlabs/Widget/Shortprofile.php b/Zotlabs/Widget/Shortprofile.php deleted file mode 100644 index 9c2a46e75..000000000 --- a/Zotlabs/Widget/Shortprofile.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -namespace Zotlabs\Widget; - -class Shortprofile { - - function widget($arr) { - - if(! \App::$profile['profile_uid']) - return; - - $block = observer_prohibited(); - - return profile_sidebar(\App::$profile, $block, true, true); - } - -} - diff --git a/Zotlabs/Widget/Sitesearch.php b/Zotlabs/Widget/Sitesearch.php index b3a25d76a..a5f1a5935 100644 --- a/Zotlabs/Widget/Sitesearch.php +++ b/Zotlabs/Widget/Sitesearch.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Search + * * Description: A search form + * * Requires: search, network, channel + */ + namespace Zotlabs\Widget; diff --git a/Zotlabs/Widget/Suggestedchats.php b/Zotlabs/Widget/Suggestedchats.php index 7df42944d..75df0c9e6 100644 --- a/Zotlabs/Widget/Suggestedchats.php +++ b/Zotlabs/Widget/Suggestedchats.php @@ -1,14 +1,18 @@ <?php +/** + * * Name: Suggested chats + * * Description: A menu with chatroom suggestions + * * Requires: disabled_due_to_reasons + */ + + namespace Zotlabs\Widget; class Suggestedchats { function widget($arr) { - if(! feature_enabled(\App::$profile['profile_uid'],'ajaxchat')) - return ''; - // There are reports that this tool does not ever remove chatrooms on dead sites, // and also will happily link to private chats which you cannot enter. // For those reasons, it will be disabled until somebody decides it's worth diff --git a/Zotlabs/Widget/Suggestions.php b/Zotlabs/Widget/Suggestions.php index b4f384e9d..e7d23bda4 100644 --- a/Zotlabs/Widget/Suggestions.php +++ b/Zotlabs/Widget/Suggestions.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Suggestions + * * Description: Display suggestions for new contacts + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\Apps; @@ -12,7 +17,7 @@ class Suggestions { function widget($arr) { - if((! local_channel()) || (! Apps::system_app_installed(local_channel(), 'Suggest Channels'))) + if(! local_channel()) return EMPTY_STR; $r = suggestion_query(local_channel(),get_observer_hash(),0,20); @@ -23,14 +28,14 @@ class Suggestions { $arr = array(); - // Get two random entries from the top 20 returned. + // Get four random entries from the top 20 returned. // We'll grab the first one and the one immediately following. // This will throw some entropy intot he situation so you won't // be looking at the same two mug shots every time the widget runs - $index = ((count($r) > 2) ? mt_rand(0,count($r) - 2) : 0); + $index = ((count($r) > 4) ? mt_rand(0,count($r) - 4) : 0); - for($x = $index; $x <= ($index+1); $x ++) { + for($x = $index; $x <= ($index+3); $x ++) { $rr = $r[$x]; if(! $rr['xchan_url']) break; diff --git a/Zotlabs/Widget/Tagcloud.php b/Zotlabs/Widget/Tagcloud.php index f79bd59ad..00456f24f 100644 --- a/Zotlabs/Widget/Tagcloud.php +++ b/Zotlabs/Widget/Tagcloud.php @@ -2,6 +2,11 @@ namespace Zotlabs\Widget; +/** + * * Name: Tag cloud + * * Description: Display hashtags of your network items in a cloud + * * Requires: network, hq + */ class Tagcloud { diff --git a/Zotlabs/Widget/Tagcloud_wall.php b/Zotlabs/Widget/Tagcloud_wall.php index 7cff6ce09..20def4ab1 100644 --- a/Zotlabs/Widget/Tagcloud_wall.php +++ b/Zotlabs/Widget/Tagcloud_wall.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Tag cloud wall + * * Description: Display hashtags of your channel wall items in a cloud if the feature is enabled + * * Requires: channel + */ + namespace Zotlabs\Widget; class Tagcloud_wall { diff --git a/Zotlabs/Widget/Tasklist.php b/Zotlabs/Widget/Tasklist.php index 56342bd17..5ecfd5a27 100644 --- a/Zotlabs/Widget/Tasklist.php +++ b/Zotlabs/Widget/Tasklist.php @@ -1,8 +1,11 @@ <?php -namespace Zotlabs\Widget; +/** + * * Name: Task list + * * Description: Simple task list mangager + */ -require_once('include/event.php'); +namespace Zotlabs\Widget; class Tasklist { @@ -20,7 +23,7 @@ class Tasklist { } </script>'; - $o .= '<div class="widget">' . '<h3>' . t('Tasks') . '</h3><div class="tasklist-tasks">'; + $o .= '<div class="widget">' . '<h3>' . t('Tasks') . '</h3><div class="tasklist-tasks mb-1">'; $o .= '</div><form id="tasklist-new-form" action="" ><input class="form-control" id="tasklist-new-summary" type="text" name="summary" value="" /></form>'; $o .= '</div>'; return $o; diff --git a/Zotlabs/Widget/Tokens.php b/Zotlabs/Widget/Tokens.php index 8c31003fc..69452d628 100644 --- a/Zotlabs/Widget/Tokens.php +++ b/Zotlabs/Widget/Tokens.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Tokens + * * Description: Display a menu with links to existing guest access tokens + * * Requires: tokens + */ + namespace Zotlabs\Widget; class Tokens { diff --git a/Zotlabs/Widget/Vcard.php b/Zotlabs/Widget/Vcard.php index cab05dfdd..25bb8592c 100644 --- a/Zotlabs/Widget/Vcard.php +++ b/Zotlabs/Widget/Vcard.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Vcard + * * Description: Your default profile card + */ + namespace Zotlabs\Widget; class Vcard { diff --git a/Zotlabs/Widget/Website_portation_tools.php b/Zotlabs/Widget/Website_portation_tools.php index 1cf3bb78a..61fe48169 100644 --- a/Zotlabs/Widget/Website_portation_tools.php +++ b/Zotlabs/Widget/Website_portation_tools.php @@ -1,7 +1,12 @@ <?php -namespace Zotlabs\Widget; +/** + * * Name: Website import/export + * * Description: Tools to import and export websites + * * Requires: website + */ +namespace Zotlabs\Widget; class Website_portation_tools { diff --git a/Zotlabs/Widget/Wiki_list.php b/Zotlabs/Widget/Wiki_list.php index 64c988ee7..217ab8706 100644 --- a/Zotlabs/Widget/Wiki_list.php +++ b/Zotlabs/Widget/Wiki_list.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Wiki list + * * Description: A list of existing wikis + */ + namespace Zotlabs\Widget; class Wiki_list { diff --git a/Zotlabs/Widget/Wiki_page_history.php b/Zotlabs/Widget/Wiki_page_history.php index dbb322dc3..3c9f5ed1a 100644 --- a/Zotlabs/Widget/Wiki_page_history.php +++ b/Zotlabs/Widget/Wiki_page_history.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Wiki page history + * * Description: History of an existing wiki page + * * Requires: wiki + */ + namespace Zotlabs\Widget; class Wiki_page_history { @@ -10,7 +16,7 @@ class Wiki_page_history { $resource_id = ((array_key_exists('resource_id', $arr)) ? $arr['resource_id'] : ''); $pageHistory = \Zotlabs\Lib\NativeWikiPage::page_history([ - 'channel_id' => \App::$profile_uid, + 'channel_id' => \App::$profile_uid, 'observer_hash' => get_observer_hash(), 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName diff --git a/Zotlabs/Widget/Wiki_pages.php b/Zotlabs/Widget/Wiki_pages.php index dee0a2229..ece712334 100644 --- a/Zotlabs/Widget/Wiki_pages.php +++ b/Zotlabs/Widget/Wiki_pages.php @@ -1,5 +1,11 @@ <?php +/** + * * Name: Wiki pages + * * Description: A list of existing pages of a wiki + * * Requires: wiki + */ + namespace Zotlabs\Widget; use Zotlabs\Lib\NativeWiki; @@ -34,7 +40,7 @@ class Wiki_pages { '$addnew' => t('Add new page'), '$typelock' => $typelock, '$lockedtype' => $w['mimeType'], - '$mimetype' => mimetype_select(0,$w['mimeType'], + '$mimetype' => mimetype_select(0,$w['mimeType'], [ 'text/markdown' => t('Markdown'), 'text/bbcode' => t('BBcode'), 'text/plain' => t('Text') ]), '$pageName' => array('missingPageName', 'Create Page' , $pageName), '$refresh' => $arr['refresh'], @@ -91,7 +97,7 @@ class Wiki_pages { '$addnew' => t('Add new page'), '$typelock' => $typelock, '$lockedtype' => $w['mimeType'], - '$mimetype' => mimetype_select(0,$w['mimeType'], + '$mimetype' => mimetype_select(0,$w['mimeType'], [ 'text/markdown' => t('Markdown'), 'text/bbcode' => t('BBcode'), 'text/plain' => t('Text') ]), '$pageName' => array('pageName', t('Page name')), '$refresh' => $arr['refresh'], diff --git a/Zotlabs/Widget/Zcard.php b/Zotlabs/Widget/Zcard.php index 12e53eaab..35362c50e 100644 --- a/Zotlabs/Widget/Zcard.php +++ b/Zotlabs/Widget/Zcard.php @@ -1,5 +1,10 @@ <?php +/** + * * Name: Zcard + * * Description: Your default profile card including your cover photo + */ + namespace Zotlabs\Widget; class Zcard { diff --git a/app/pdledit.apd b/app/pdledit_gui.apd index e13c04cb5..85a95a067 100644 --- a/app/pdledit.apd +++ b/app/pdledit_gui.apd @@ -1,5 +1,5 @@ -version: 3 -url: $baseurl/pdledit +version: 1 +url: $baseurl/pdledit_gui requires: local_channel name: PDL Editor photo: icon:object-group @@ -60,7 +60,7 @@ require_once('include/bbcode.php'); require_once('include/items.php'); define('PLATFORM_NAME', 'hubzilla'); -define('STD_VERSION', '7.0.3'); +define('STD_VERSION', '7.2'); define('ZOT_REVISION', '6.0'); define('DB_UPDATE_VERSION', 1252); @@ -915,9 +915,14 @@ class App { if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") { self::$query_string = str_replace(['<', '>'], ['<', '>'], substr($_SERVER['QUERY_STRING'], 2)); + // removing trailing / - maybe a nginx problem if (substr(self::$query_string, 0, 1) == "/") self::$query_string = substr(self::$query_string, 1); + + // trim trailing '&' if no extra args are present + self::$query_string = rtrim(self::$query_string, '&'); + // change the first & to ? self::$query_string = preg_replace('/&/', '?', self::$query_string, 1); } @@ -1687,7 +1692,7 @@ function fix_system_urls($oldurl, $newurl) { * @param boolean $login_page (optional) default true * @return string Parsed HTML code. */ -function login($register = false, $form_id = 'main-login', $hiddens = false, $login_page = true) { +function login($register = false, $form_id = 'main_login', $hiddens = false, $login_page = true) { $o = ''; $reg = null; @@ -1747,9 +1752,9 @@ function login($register = false, $form_id = 'main-login', $hiddens = false, $lo '$login' => t('Login'), '$remote_login' => t('Remote Authentication'), '$form_id' => $form_id, - '$lname' => ['username', $lname_label], - '$lpassword' => ['password', t('Password')], - '$remember_me' => [(($login_page) ? 'remember' : 'remember_me'), t('Remember me'), '', '', [t('No'), t('Yes')]], + '$lname' => [$form_id . '_username', $lname_label], + '$lpassword' => [$form_id . '_password', t('Password')], + '$remember_me' => [$form_id . '_remember', t('Remember me'), '', '', [t('No'), t('Yes')]], '$hiddens' => $hiddens, '$register' => $reg, '$lostpass' => t('Forgot your password?'), diff --git a/composer.json b/composer.json index 868ee5fce..fca3cccdc 100644 --- a/composer.json +++ b/composer.json @@ -23,14 +23,12 @@ "source": "https://framagit.org/hubzilla/core/" }, "require": { - "php": ">=7.3", + "php": ">=8.0.2", "ext-curl": "*", - "ext-gd": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-openssl": "*", "ext-json": "*", - "ext-zip": "*", "ext-posix": "*", "sabre/dav": "^4.0", "michelf/php-markdown": "^1.7", @@ -41,7 +39,7 @@ "pear/text_languagedetect": "^1.0", "commerceguys/intl": "~1.1.0", "lukasreschke/id3parser": "^0.0.3", - "smarty/smarty": "~3.1", + "smarty/smarty": "^4.1", "ramsey/uuid": "^4.1", "twbs/bootstrap": "^5.0.1", "blueimp/jquery-file-upload": "^10.3", diff --git a/composer.lock b/composer.lock index eff89e299..31d6f1403 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "42ed33170ee08f16ca173e0f21dc65e5", + "content-hash": "5df6dff4ab3b8919cba538bc54452d77", "packages": [ { "name": "blueimp/jquery-file-upload", @@ -195,16 +195,16 @@ }, { "name": "commerceguys/intl", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/commerceguys/intl.git", - "reference": "90b4f75c4917927a1960c0dcaa002a91ab97f5d5" + "reference": "cab3b55dbf8c1753fe54457404082c777a8c154f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/commerceguys/intl/zipball/90b4f75c4917927a1960c0dcaa002a91ab97f5d5", - "reference": "90b4f75c4917927a1960c0dcaa002a91ab97f5d5", + "url": "https://api.github.com/repos/commerceguys/intl/zipball/cab3b55dbf8c1753fe54457404082c777a8c154f", + "reference": "cab3b55dbf8c1753fe54457404082c777a8c154f", "shasum": "" }, "require": { @@ -237,9 +237,9 @@ "description": "Internationalization library powered by CLDR data.", "support": { "issues": "https://github.com/commerceguys/intl/issues", - "source": "https://github.com/commerceguys/intl/tree/v1.1.0" + "source": "https://github.com/commerceguys/intl/tree/v1.1.1" }, - "time": "2021-05-17T08:25:58+00:00" + "time": "2021-10-30T18:07:14+00:00" }, { "name": "desandro/imagesloaded", @@ -286,32 +286,29 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75", + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75", "shasum": "" }, "require": { "php": ">=5.2" }, - "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" - }, "type": "library", "autoload": { - "psr-0": { - "HTMLPurifier": "library/" - }, "files": [ "library/HTMLPurifier.composer.php" ], + "psr-0": { + "HTMLPurifier": "library/" + }, "exclude-from-classmap": [ "/library/HTMLPurifier/Language/" ] @@ -334,31 +331,31 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/master" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0" }, - "time": "2020-06-29T00:56:53+00:00" + "time": "2021-12-25T01:21:49+00:00" }, { "name": "jbroadway/urlify", - "version": "1.2.2-stable", + "version": "1.2.3-stable", "source": { "type": "git", "url": "https://github.com/jbroadway/urlify.git", - "reference": "9b227e8548f16268cef55b5eb5d659a801fa824b" + "reference": "b7c142a247bd5fac2bb62ca2491bd151c4d1dee4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbroadway/urlify/zipball/9b227e8548f16268cef55b5eb5d659a801fa824b", - "reference": "9b227e8548f16268cef55b5eb5d659a801fa824b", + "url": "https://api.github.com/repos/jbroadway/urlify/zipball/b7c142a247bd5fac2bb62ca2491bd151c4d1dee4", + "reference": "b7c142a247bd5fac2bb62ca2491bd151c4d1dee4", "shasum": "" }, "require": { - "php": ">=7.2.0", + "php": ">=7.2", "voku/portable-ascii": "^1.4", "voku/stop-words": "^2.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -382,37 +379,45 @@ "homepage": "http://www.johnnybroadway.com/" } ], - "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.", + "description": "A fast PHP slug generator and transliteration library that converts non-ascii characters for use in URLs.", "homepage": "https://github.com/jbroadway/urlify", "keywords": [ + "ascii", + "blogging", + "blogs", + "downcode", "encode", "iconv", "link", + "seo", "slug", + "slugify", + "slugs", "translit", "transliterate", "transliteration", + "unicode", "url", "urlify" ], "support": { "issues": "https://github.com/jbroadway/urlify/issues", - "source": "https://github.com/jbroadway/urlify/tree/master" + "source": "https://github.com/jbroadway/urlify/tree/1.2.3-stable" }, - "time": "2020-06-14T17:15:34+00:00" + "time": "2021-12-29T21:23:40+00:00" }, { "name": "league/html-to-markdown", - "version": "5.0.1", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "e5600a2c5ce7b7571b16732c7086940f56f7abec" + "reference": "e0fc8cf07bdabbcd3765341ecb50c34c271d64e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/e5600a2c5ce7b7571b16732c7086940f56f7abec", - "reference": "e5600a2c5ce7b7571b16732c7086940f56f7abec", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/e0fc8cf07bdabbcd3765341ecb50c34c271d64e1", + "reference": "e0fc8cf07bdabbcd3765341ecb50c34c271d64e1", "shasum": "" }, "require": { @@ -422,11 +427,11 @@ }, "require-dev": { "mikehaertl/php-shellcommand": "^1.1.0", - "phpstan/phpstan": "^0.12.82", + "phpstan/phpstan": "^0.12.99", "phpunit/phpunit": "^8.5 || ^9.2", "scrutinizer/ocular": "^1.6", "unleashedtech/php-coding-standard": "^2.7", - "vimeo/psalm": "^4.6" + "vimeo/psalm": "^4.22" }, "bin": [ "bin/html-to-markdown" @@ -434,7 +439,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-master": "5.2-dev" } }, "autoload": { @@ -468,7 +473,7 @@ ], "support": { "issues": "https://github.com/thephpleague/html-to-markdown/issues", - "source": "https://github.com/thephpleague/html-to-markdown/tree/5.0.1" + "source": "https://github.com/thephpleague/html-to-markdown/tree/5.1.0" }, "funding": [ { @@ -488,7 +493,7 @@ "type": "tidelift" } ], - "time": "2021-09-17T20:00:27+00:00" + "time": "2022-03-02T17:24:08+00:00" }, { "name": "lukasreschke/id3parser", @@ -532,16 +537,16 @@ }, { "name": "michelf/php-markdown", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/michelf/php-markdown.git", - "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c" + "reference": "5024d623c1a057dcd2d076d25b7d270a1d0d55f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/c83178d49e372ca967d1a8c77ae4e051b3a3c75c", - "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/5024d623c1a057dcd2d076d25b7d270a1d0d55f3", + "reference": "5024d623c1a057dcd2d076d25b7d270a1d0d55f3", "shasum": "" }, "require": { @@ -579,9 +584,9 @@ ], "support": { "issues": "https://github.com/michelf/php-markdown/issues", - "source": "https://github.com/michelf/php-markdown/tree/1.9.0" + "source": "https://github.com/michelf/php-markdown/tree/1.9.1" }, - "time": "2019-12-02T02:32:27+00:00" + "time": "2021-11-24T02:52:38+00:00" }, { "name": "pear/text_languagedetect", @@ -633,16 +638,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.33", + "version": "2.0.36", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "fb53b7889497ec7c1362c94e61d8127ac67ea094" + "reference": "a97547126396548c224703a267a30af1592be146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/fb53b7889497ec7c1362c94e61d8127ac67ea094", - "reference": "fb53b7889497ec7c1362c94e61d8127ac67ea094", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/a97547126396548c224703a267a30af1592be146", + "reference": "a97547126396548c224703a267a30af1592be146", "shasum": "" }, "require": { @@ -722,7 +727,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.33" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.36" }, "funding": [ { @@ -738,34 +743,34 @@ "type": "tidelift" } ], - "time": "2021-08-16T04:20:12+00:00" + "time": "2022-01-30T08:48:36+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -786,9 +791,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "ramsey/collection", @@ -934,12 +939,12 @@ } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -969,16 +974,16 @@ }, { "name": "sabre/dav", - "version": "4.1.5", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/sabre-io/dav.git", - "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22" + "reference": "130abb7017f56e0d99b04eb94b041e000a8e9b39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", - "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/130abb7017f56e0d99b04eb94b041e000a8e9b39", + "reference": "130abb7017f56e0d99b04eb94b041e000a8e9b39", "shasum": "" }, "require": { @@ -993,7 +998,7 @@ "ext-spl": "*", "lib-libxml": ">=2.7.0", "php": "^7.1.0 || ^8.0", - "psr/log": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", "sabre/event": "^5.0", "sabre/http": "^5.0.5", "sabre/uri": "^2.0", @@ -1020,8 +1025,8 @@ "autoload": { "psr-4": { "Sabre\\DAV\\": "lib/DAV/", - "Sabre\\DAVACL\\": "lib/DAVACL/", "Sabre\\CalDAV\\": "lib/CalDAV/", + "Sabre\\DAVACL\\": "lib/DAVACL/", "Sabre\\CardDAV\\": "lib/CardDAV/" } }, @@ -1051,40 +1056,40 @@ "issues": "https://github.com/sabre-io/dav/issues", "source": "https://github.com/fruux/sabre-dav" }, - "time": "2021-02-12T07:54:23+00:00" + "time": "2022-01-20T13:59:29+00:00" }, { "name": "sabre/event", - "version": "5.1.2", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sabre-io/event.git", - "reference": "c120bec57c17b6251a496efc82b732418b49d50a" + "reference": "d7da22897125d34d7eddf7977758191c06a74497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/c120bec57c17b6251a496efc82b732418b49d50a", - "reference": "c120bec57c17b6251a496efc82b732418b49d50a", + "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497", + "reference": "d7da22897125d34d7eddf7977758191c06a74497", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, "type": "library", "autoload": { - "psr-4": { - "Sabre\\Event\\": "lib/" - }, "files": [ "lib/coroutine.php", "lib/Loop/functions.php", "lib/Promise/functions.php" - ] + ], + "psr-4": { + "Sabre\\Event\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1117,20 +1122,20 @@ "issues": "https://github.com/sabre-io/event/issues", "source": "https://github.com/fruux/sabre-event" }, - "time": "2020-10-03T11:02:22+00:00" + "time": "2021-11-04T06:51:17+00:00" }, { "name": "sabre/http", - "version": "5.1.1", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sabre-io/http.git", - "reference": "d0aafede6961df6195ce7a8dad49296b0aaee22e" + "reference": "315f592adfcba8aeb73c2fd64285205747acbbd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/http/zipball/d0aafede6961df6195ce7a8dad49296b0aaee22e", - "reference": "d0aafede6961df6195ce7a8dad49296b0aaee22e", + "url": "https://api.github.com/repos/sabre-io/http/zipball/315f592adfcba8aeb73c2fd64285205747acbbd7", + "reference": "315f592adfcba8aeb73c2fd64285205747acbbd7", "shasum": "" }, "require": { @@ -1142,7 +1147,7 @@ "sabre/uri": "^2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, @@ -1180,27 +1185,27 @@ "issues": "https://github.com/sabre-io/http/issues", "source": "https://github.com/fruux/sabre-http" }, - "time": "2020-10-03T11:27:32+00:00" + "time": "2021-11-04T07:02:36+00:00" }, { "name": "sabre/uri", - "version": "2.2.1", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/sabre-io/uri.git", - "reference": "f502edffafea8d746825bd5f0b923a60fd2715ff" + "reference": "7cb0f489578afad5006e85cd60f18ff33f2d440d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/f502edffafea8d746825bd5f0b923a60fd2715ff", - "reference": "f502edffafea8d746825bd5f0b923a60fd2715ff", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/7cb0f489578afad5006e85cd60f18ff33f2d440d", + "reference": "7cb0f489578afad5006e85cd60f18ff33f2d440d", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, @@ -1237,20 +1242,20 @@ "issues": "https://github.com/sabre-io/uri/issues", "source": "https://github.com/fruux/sabre-uri" }, - "time": "2020-10-03T10:33:23+00:00" + "time": "2021-11-04T09:29:58+00:00" }, { "name": "sabre/vobject", - "version": "4.3.5", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83" + "reference": "06feff370141fd3118609f808e86d9315864bf14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d8a0a9ae215a8acfb51afc29101c7344670b9c83", - "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/06feff370141fd3118609f808e86d9315864bf14", + "reference": "06feff370141fd3118609f808e86d9315864bf14", "shasum": "" }, "require": { @@ -1341,20 +1346,20 @@ "issues": "https://github.com/sabre-io/vobject/issues", "source": "https://github.com/fruux/sabre-vobject" }, - "time": "2021-02-12T06:28:04+00:00" + "time": "2021-12-07T09:45:33+00:00" }, { "name": "sabre/xml", - "version": "2.2.3", + "version": "2.2.5", "source": { "type": "git", "url": "https://github.com/sabre-io/xml.git", - "reference": "c3b959f821c19b36952ec4a595edd695c216bfc6" + "reference": "a6af111850e7536d200d9637c34885cd3c77a86c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/xml/zipball/c3b959f821c19b36952ec4a595edd695c216bfc6", - "reference": "c3b959f821c19b36952ec4a595edd695c216bfc6", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/a6af111850e7536d200d9637c34885cd3c77a86c", + "reference": "a6af111850e7536d200d9637c34885cd3c77a86c", "shasum": "" }, "require": { @@ -1366,19 +1371,19 @@ "sabre/uri": ">=1.0,<3.0.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, "type": "library", "autoload": { - "psr-4": { - "Sabre\\Xml\\": "lib/" - }, "files": [ "lib/Deserializer/functions.php", "lib/Serializer/functions.php" - ] + ], + "psr-4": { + "Sabre\\Xml\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1410,20 +1415,20 @@ "issues": "https://github.com/sabre-io/xml/issues", "source": "https://github.com/fruux/sabre-xml" }, - "time": "2020-10-03T10:08:14+00:00" + "time": "2021-11-04T06:37:27+00:00" }, { "name": "simplepie/simplepie", - "version": "1.5.6", + "version": "1.5.8", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6" + "reference": "d1d80f37264c9f1ed7fa3434eca14d179cb689b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6", - "reference": "1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/d1d80f37264c9f1ed7fa3434eca14d179cb689b1", + "reference": "d1d80f37264c9f1ed7fa3434eca14d179cb689b1", "shasum": "" }, "require": { @@ -1433,7 +1438,7 @@ "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~5.4.3 || ~6.5" + "yoast/phpunit-polyfills": "^1.0.1" }, "suggest": { "ext-curl": "", @@ -1482,36 +1487,36 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/1.5.6", + "source": "https://github.com/simplepie/simplepie/tree/1.5.8", "issues": "https://github.com/simplepie/simplepie/issues" }, - "time": "2020-10-14T07:17:22+00:00" + "time": "2021-12-24T02:53:50+00:00" }, { "name": "smarty/smarty", - "version": "v3.1.39", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "e27da524f7bcd7361e3ea5cdfa99c4378a7b5419" + "reference": "9e0536de18b53ba193364291ef0303b0ab9903e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/e27da524f7bcd7361e3ea5cdfa99c4378a7b5419", - "reference": "e27da524f7bcd7361e3ea5cdfa99c4378a7b5419", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/9e0536de18b53ba193364291ef0303b0ab9903e1", + "reference": "9e0536de18b53ba193364291ef0303b0ab9903e1", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^6.5 || ^5.7 || ^4.8", + "phpunit/phpunit": "^8.5 || ^7.5", "smarty/smarty-lexer": "^3.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1535,38 +1540,44 @@ { "name": "Rodney Rehm", "email": "rodney.rehm@medialize.de" + }, + { + "name": "Simon Wisselink", + "homepage": "https://www.iwink.nl/" } ], "description": "Smarty - the compiling PHP template engine", - "homepage": "http://www.smarty.net", + "homepage": "https://smarty-php.github.io/smarty/", "keywords": [ "templating" ], "support": { - "forum": "http://www.smarty.net/forums/", - "irc": "irc://irc.freenode.org/smarty", + "forum": "https://github.com/smarty-php/smarty/discussions", "issues": "https://github.com/smarty-php/smarty/issues", - "source": "https://github.com/smarty-php/smarty/tree/v3.1.39" + "source": "https://github.com/smarty-php/smarty/tree/v4.1.0" }, - "time": "2021-02-17T21:57:51+00:00" + "time": "2022-02-06T20:34:27+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, @@ -1581,12 +1592,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1611,7 +1622,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" }, "funding": [ { @@ -1627,20 +1638,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { @@ -1657,12 +1668,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -1694,7 +1705,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" }, "funding": [ { @@ -1710,20 +1721,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2021-09-13T13:58:33+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -1740,12 +1751,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -1773,7 +1784,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" }, "funding": [ { @@ -1789,7 +1800,7 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "twbs/bootstrap", @@ -1843,16 +1854,16 @@ }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { @@ -1889,7 +1900,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" }, "funding": [ { @@ -1913,7 +1924,7 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-01-24T18:55:24+00:00" }, { "name": "voku/stop-words", @@ -1966,36 +1977,37 @@ "packages-dev": [ { "name": "behat/behat", - "version": "v3.8.1", + "version": "v3.10.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "fbb065457d523d9856d4b50775b4151a7598b510" + "reference": "a55661154079cf881ef643b303bfaf67bae3a09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/fbb065457d523d9856d4b50775b4151a7598b510", - "reference": "fbb065457d523d9856d4b50775b4151a7598b510", + "url": "https://api.github.com/repos/Behat/Behat/zipball/a55661154079cf881ef643b303bfaf67bae3a09f", + "reference": "a55661154079cf881ef643b303bfaf67bae3a09f", "shasum": "" }, "require": { - "behat/gherkin": "^4.6.0", + "behat/gherkin": "^4.9.0", "behat/transliterator": "^1.2", "ext-mbstring": "*", "php": "^7.2 || ^8.0", "psr/container": "^1.0", - "symfony/config": "^4.4 || ^5.0", - "symfony/console": "^4.4 || ^5.0", - "symfony/dependency-injection": "^4.4 || ^5.0", - "symfony/event-dispatcher": "^4.4 || ^5.0", - "symfony/translation": "^4.4 || ^5.0", - "symfony/yaml": "^4.4 || ^5.0" + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/console": "^4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", + "symfony/translation": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { "container-interop/container-interop": "^1.2", "herrera-io/box": "~1.6.1", "phpunit/phpunit": "^8.5 || ^9.0", - "symfony/process": "^4.4 || ^5.0" + "symfony/process": "^4.4 || ^5.0 || ^6.0", + "vimeo/psalm": "^4.8" }, "suggest": { "ext-dom": "Needed to output test results in JUnit format." @@ -2006,11 +2018,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { + "Behat\\Hook\\": "src/Behat/Hook/", + "Behat\\Step\\": "src/Behat/Step/", "Behat\\Behat\\": "src/Behat/Behat/", "Behat\\Testwork\\": "src/Behat/Testwork/" } @@ -2044,31 +2058,30 @@ ], "support": { "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.8.1" + "source": "https://github.com/Behat/Behat/tree/v3.10.0" }, - "time": "2020-11-07T15:55:18+00:00" + "time": "2021-11-02T20:09:40+00:00" }, { "name": "behat/gherkin", - "version": "v4.8.0", + "version": "v4.9.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", "shasum": "" }, "require": { "php": "~7.2|~8.0" }, "require-dev": { - "cucumber/cucumber": "dev-gherkin-16.0.0", + "cucumber/cucumber": "dev-gherkin-22.0.0", "phpunit/phpunit": "~8|~9", - "symfony/phpunit-bridge": "~3|~4|~5", "symfony/yaml": "~3|~4|~5" }, "suggest": { @@ -2077,7 +2090,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-master": "4.x-dev" } }, "autoload": { @@ -2108,32 +2121,33 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.8.0" + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" }, - "time": "2021-02-04T12:44:21+00:00" + "time": "2021-10-12T13:05:09+00:00" }, { "name": "behat/mink", - "version": "v1.8.1", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887" + "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/07c6a9fe3fa98c2de074b25d9ed26c22904e3887", - "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e35f4695de8800fc776af34ebf665ad58ebdd996", + "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996", "shasum": "" }, "require": { - "php": ">=5.3.1", + "php": ">=5.4", "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20", - "symfony/debug": "^2.7|^3.0|^4.0", - "symfony/phpunit-bridge": "^3.4.38 || ^5.0.5" + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5 || ^9.5", + "symfony/debug": "^2.7|^3.0|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4.38 || ^4.4 || ^5.0.5", + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", @@ -2145,7 +2159,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -2165,7 +2179,7 @@ } ], "description": "Browser controller/emulator abstraction for PHP", - "homepage": "http://mink.behat.org/", + "homepage": "https://mink.behat.org/", "keywords": [ "browser", "testing", @@ -2173,39 +2187,43 @@ ], "support": { "issues": "https://github.com/minkphp/Mink/issues", - "source": "https://github.com/minkphp/Mink/tree/v1.8.1" + "source": "https://github.com/minkphp/Mink/tree/v1.9.0" }, - "time": "2020-03-11T15:45:53+00:00" + "time": "2021-10-11T11:58:47+00:00" }, { "name": "behat/mink-browserkit-driver", - "version": "v1.3.4", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee" + "reference": "0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/e3b90840022ebcd544c7b394a3c9597ae242cbee", - "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4", + "reference": "0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4", "shasum": "" }, "require": { - "behat/mink": "^1.7.1@dev", - "php": ">=5.3.6", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0" + "behat/mink": "^1.9.0@dev", + "php": ">=7.2", + "symfony/browser-kit": "^4.4 || ^5.0", + "symfony/dom-crawler": "^4.4 || ^5.0" }, "require-dev": { "mink/driver-testsuite": "dev-master", - "symfony/debug": "^2.7|^3.0|^4.0", - "symfony/http-kernel": "~2.3|~3.0|~4.0" + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/error-handler": "^4.4 || ^5.0", + "symfony/http-client": "^4.4 || ^5.0", + "symfony/http-kernel": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "yoast/phpunit-polyfills": "^1.0" }, "type": "mink-driver", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2225,7 +2243,7 @@ } ], "description": "Symfony2 BrowserKit driver for Mink framework", - "homepage": "http://mink.behat.org/", + "homepage": "https://mink.behat.org/", "keywords": [ "Mink", "Symfony2", @@ -2234,9 +2252,9 @@ ], "support": { "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", - "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.3.4" + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v2.0.0" }, - "time": "2020-03-11T09:49:45+00:00" + "time": "2021-12-13T10:31:49+00:00" }, { "name": "behat/mink-extension", @@ -2303,31 +2321,31 @@ }, { "name": "behat/mink-goutte-driver", - "version": "v1.2.1", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/minkphp/MinkGoutteDriver.git", - "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca" + "reference": "a60fba46520c17d39b839151831cbc0710764b56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/8b9ad6d2d95bc70b840d15323365f52fcdaea6ca", - "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca", + "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/a60fba46520c17d39b839151831cbc0710764b56", + "reference": "a60fba46520c17d39b839151831cbc0710764b56", "shasum": "" }, "require": { - "behat/mink": "~1.6@dev", - "behat/mink-browserkit-driver": "~1.2@dev", - "fabpot/goutte": "~1.0.4|~2.0|~3.1", - "php": ">=5.3.1" + "behat/mink-browserkit-driver": "^2.0@dev", + "fabpot/goutte": "^4.0", + "php": ">=7.2" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "mink/driver-testsuite": "dev-master", + "symfony/error-handler": "^4.4 || ^5.0" }, "type": "mink-driver", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2347,7 +2365,7 @@ } ], "description": "Goutte driver for Mink framework", - "homepage": "http://mink.behat.org/", + "homepage": "https://mink.behat.org/", "keywords": [ "browser", "goutte", @@ -2356,9 +2374,9 @@ ], "support": { "issues": "https://github.com/minkphp/MinkGoutteDriver/issues", - "source": "https://github.com/minkphp/MinkGoutteDriver/tree/master" + "source": "https://github.com/minkphp/MinkGoutteDriver/tree/v2.0.0" }, - "time": "2016-03-05T09:04:22+00:00" + "time": "2021-12-29T10:56:50+00:00" }, { "name": "behat/transliterator", @@ -2410,26 +2428,99 @@ "time": "2020-01-14T16:39:13+00:00" }, { + "name": "composer/pcre", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/1.0.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-21T20:24:37+00:00" + }, + { "name": "composer/xdebug-handler", - "version": "2.0.2", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", - "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", "shasum": "" }, "require": { + "composer/pcre": "^1", "php": "^5.3.2 || ^7.0 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, "type": "library", "autoload": { @@ -2455,7 +2546,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" + "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" }, "funding": [ { @@ -2471,7 +2562,7 @@ "type": "tidelift" } ], - "time": "2021-07-31T17:03:58+00:00" + "time": "2022-02-24T20:20:32+00:00" }, { "name": "dms/phpunit-arraysubset-asserts", @@ -2589,34 +2680,30 @@ }, { "name": "fabpot/goutte", - "version": "v3.3.1", + "version": "v4.0.2", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/Goutte.git", - "reference": "80a23b64f44d54dd571d114c473d9d7e9ed84ca5" + "reference": "f51940fbe0db060bc4fc0b3f1d19bc4ff3054b17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/80a23b64f44d54dd571d114c473d9d7e9ed84ca5", - "reference": "80a23b64f44d54dd571d114c473d9d7e9ed84ca5", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/f51940fbe0db060bc4fc0b3f1d19bc4ff3054b17", + "reference": "f51940fbe0db060bc4fc0b3f1d19bc4ff3054b17", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.0", "php": ">=7.1.3", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dom-crawler": "^4.4|^5.0" + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.0" + "symfony/phpunit-bridge": "^5.0|^6.0" }, "type": "application", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { "psr-4": { "Goutte\\": "Goutte" @@ -2642,308 +2729,44 @@ ], "support": { "issues": "https://github.com/FriendsOfPHP/Goutte/issues", - "source": "https://github.com/FriendsOfPHP/Goutte/tree/v3.3.1" + "source": "https://github.com/FriendsOfPHP/Goutte/tree/v4.0.2" }, - "time": "2020-11-01T09:30:18+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" - }, - "time": "2020-06-16T21:01:06+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2021-10-07T13:05:22+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.8.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", - "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2021-10-05T13:56:00+00:00" + "time": "2021-12-17T17:15:01+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.10.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "c6a951b75d684fd43fbbd69617488e1e2e8924ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/c6a951b75d684fd43fbbd69617488e1e2e8924ba", + "reference": "c6a951b75d684fd43fbbd69617488e1e2e8924ba", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2959,7 +2782,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.3" }, "funding": [ { @@ -2967,20 +2790,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-02T14:16:47+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.0", + "version": "v4.13.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "50953a2691a922aa1769461637869a0a2faa3f53" + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53", - "reference": "50953a2691a922aa1769461637869a0a2faa3f53", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", "shasum": "" }, "require": { @@ -3021,29 +2844,29 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" }, - "time": "2021-09-20T12:20:58+00:00" + "time": "2021-11-30T19:35:32+00:00" }, { "name": "pdepend/pdepend", - "version": "2.10.0", + "version": "2.10.3", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "1fd30f4352b630ad53fec3fd5e8b8ba760f85596" + "reference": "da3166a06b4a89915920a42444f707122a1584c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/1fd30f4352b630ad53fec3fd5e8b8ba760f85596", - "reference": "1fd30f4352b630ad53fec3fd5e8b8ba760f85596", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/da3166a06b4a89915920a42444f707122a1584c9", + "reference": "da3166a06b4a89915920a42444f707122a1584c9", "shasum": "" }, "require": { "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5", - "symfony/filesystem": "^2.3.0|^3|^4|^5" + "symfony/config": "^2.3.0|^3|^4|^5|^6.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" }, "require-dev": { "easy-doc/easy-doc": "0.0.0|^1.2.3", @@ -3072,7 +2895,7 @@ "description": "Official version of pdepend to be handled with Composer", "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.10.0" + "source": "https://github.com/pdepend/pdepend/tree/2.10.3" }, "funding": [ { @@ -3080,7 +2903,7 @@ "type": "tidelift" } ], - "time": "2021-07-20T09:56:09+00:00" + "time": "2022-02-23T07:53:09+00:00" }, { "name": "phar-io/manifest", @@ -3144,16 +2967,16 @@ }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -3189,22 +3012,22 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "php-mock/php-mock", - "version": "2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/php-mock/php-mock.git", - "reference": "a3142f257153b71c09bf9146ecf73430b3818b7c" + "reference": "9a55bd8ba40e6da2e97a866121d2c69dedd4952b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-mock/php-mock/zipball/a3142f257153b71c09bf9146ecf73430b3818b7c", - "reference": "a3142f257153b71c09bf9146ecf73430b3818b7c", + "url": "https://api.github.com/repos/php-mock/php-mock/zipball/9a55bd8ba40e6da2e97a866121d2c69dedd4952b", + "reference": "9a55bd8ba40e6da2e97a866121d2c69dedd4952b", "shasum": "" }, "require": { @@ -3258,7 +3081,7 @@ ], "support": { "issues": "https://github.com/php-mock/php-mock/issues", - "source": "https://github.com/php-mock/php-mock/tree/2.3.0" + "source": "https://github.com/php-mock/php-mock/tree/2.3.1" }, "funding": [ { @@ -3266,7 +3089,7 @@ "type": "github" } ], - "time": "2020-12-11T19:20:04+00:00" + "time": "2022-02-07T18:57:52+00:00" }, { "name": "php-mock/php-mock-integration", @@ -3438,16 +3261,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -3458,7 +3281,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -3488,22 +3312,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { @@ -3538,28 +3362,28 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpmd/phpmd", - "version": "2.10.2", + "version": "2.11.1", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "1bc74db7cf834662d83abebae265be11bb2eec3a" + "reference": "08b60a2eb7e14c23f46ff8865b510ae08b75d0fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/1bc74db7cf834662d83abebae265be11bb2eec3a", - "reference": "1bc74db7cf834662d83abebae265be11bb2eec3a", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/08b60a2eb7e14c23f46ff8865b510ae08b75d0fd", + "reference": "08b60a2eb7e14c23f46ff8865b510ae08b75d0fd", "shasum": "" }, "require": { "composer/xdebug-handler": "^1.0 || ^2.0", "ext-xml": "*", - "pdepend/pdepend": "^2.10.0", + "pdepend/pdepend": "^2.10.2", "php": ">=5.3.9" }, "require-dev": { @@ -3615,7 +3439,7 @@ "support": { "irc": "irc://irc.freenode.org/phpmd", "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.10.2" + "source": "https://github.com/phpmd/phpmd/tree/2.11.1" }, "funding": [ { @@ -3623,20 +3447,20 @@ "type": "tidelift" } ], - "time": "2021-07-22T09:56:23+00:00" + "time": "2021-12-17T11:25:43+00:00" }, { "name": "phpspec/prophecy", - "version": "1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { @@ -3688,29 +3512,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" }, - "time": "2021-09-10T09:02:12+00:00" + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.7", + "version": "9.2.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218" + "reference": "9f4d60b6afe5546421462b76cd4e633ebc364ab4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218", - "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f4d60b6afe5546421462b76cd4e633ebc364ab4", + "reference": "9f4d60b6afe5546421462b76cd4e633ebc364ab4", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.12.0", + "nikic/php-parser": "^4.13.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3759,7 +3583,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.14" }, "funding": [ { @@ -3767,20 +3591,20 @@ "type": "github" } ], - "time": "2021-09-17T05:39:03+00:00" + "time": "2022-02-28T12:38:02+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -3819,7 +3643,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -3827,7 +3651,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -4012,16 +3836,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "9.5.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5ff8c545a50226c569310a35f4fa89d79f1ddfdc", + "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc", "shasum": "" }, "require": { @@ -4037,7 +3861,7 @@ "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -4072,11 +3896,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4099,11 +3923,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.16" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -4111,24 +3935,24 @@ "type": "github" } ], - "time": "2021-09-25T07:38:51+00:00" + "time": "2022-02-23T17:10:58+00:00" }, { "name": "psr/container", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", "autoload": { @@ -4157,9 +3981,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -4212,103 +4036,6 @@ "time": "2019-01-08T18:20:26+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { "name": "sebastian/cli-parser", "version": "1.0.1", "source": { @@ -4737,16 +4464,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { @@ -4795,14 +4522,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" }, "funding": [ { @@ -4810,20 +4537,20 @@ "type": "github" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-11-11T14:18:36+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -4866,7 +4593,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -4874,7 +4601,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -5274,16 +5001,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.6.0", + "version": "3.6.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625" + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", "shasum": "" }, "require": { @@ -5326,32 +5053,32 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2021-04-09T00:54:41+00:00" + "time": "2021-12-12T21:44:58+00:00" }, { "name": "symfony/browser-kit", - "version": "v4.4.27", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b" + "reference": "18e73179c6a33d520de1b644941eba108dd811ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9629d1524d8ced5a4ec3e94abdbd638b4ec8319b", - "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/18e73179c6a33d520de1b644941eba108dd811ad", + "reference": "18e73179c6a33d520de1b644941eba108dd811ad", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "php": ">=7.2.5", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/http-client": "^4.3|^5.0", - "symfony/mime": "^4.3|^5.0", - "symfony/process": "^3.4|^4.0|^5.0" + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/process": "" @@ -5382,7 +5109,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v4.4.27" + "source": "https://github.com/symfony/browser-kit/tree/v5.4.3" }, "funding": [ { @@ -5398,20 +5125,20 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:19:41+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/config", - "version": "v4.4.30", + "version": "v4.4.37", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "d9ea72de055cd822e5228ff898e2aad2f52f76b0" + "reference": "e8c2d2c951ddedecb6d28954d336cb7d2e852d0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/d9ea72de055cd822e5228ff898e2aad2f52f76b0", - "reference": "d9ea72de055cd822e5228ff898e2aad2f52f76b0", + "url": "https://api.github.com/repos/symfony/config/zipball/e8c2d2c951ddedecb6d28954d336cb7d2e852d0e", + "reference": "e8c2d2c951ddedecb6d28954d336cb7d2e852d0e", "shasum": "" }, "require": { @@ -5460,7 +5187,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v4.4.30" + "source": "https://github.com/symfony/config/tree/v4.4.37" }, "funding": [ { @@ -5476,30 +5203,30 @@ "type": "tidelift" } ], - "time": "2021-08-04T20:31:23+00:00" + "time": "2022-01-03T09:46:22+00:00" }, { "name": "symfony/console", - "version": "v5.3.7", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", + "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { "psr/log": ">=3", @@ -5514,12 +5241,12 @@ }, "require-dev": { "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -5559,7 +5286,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.7" + "source": "https://github.com/symfony/console/tree/v5.4.5" }, "funding": [ { @@ -5575,20 +5302,20 @@ "type": "tidelift" } ], - "time": "2021-08-25T20:02:16+00:00" + "time": "2022-02-24T12:45:35+00:00" }, { "name": "symfony/css-selector", - "version": "v5.3.4", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90" + "reference": "b0a190285cd95cb019237851205b8140ef6e368e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", + "reference": "b0a190285cd95cb019237851205b8140ef6e368e", "shasum": "" }, "require": { @@ -5625,7 +5352,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.4" + "source": "https://github.com/symfony/css-selector/tree/v5.4.3" }, "funding": [ { @@ -5641,20 +5368,20 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:38:00+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.4.31", + "version": "v4.4.38", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "75dd7094870feaa5be9ed2b6b1efcfc2b7d3b9b4" + "reference": "f6d1ca0eb363cd8c729e45cff419fb34158afec5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/75dd7094870feaa5be9ed2b6b1efcfc2b7d3b9b4", - "reference": "75dd7094870feaa5be9ed2b6b1efcfc2b7d3b9b4", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f6d1ca0eb363cd8c729e45cff419fb34158afec5", + "reference": "f6d1ca0eb363cd8c729e45cff419fb34158afec5", "shasum": "" }, "require": { @@ -5667,7 +5394,7 @@ "symfony/config": "<4.3|>=5.0", "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" + "symfony/yaml": "<4.4.26" }, "provide": { "psr/container-implementation": "1.0", @@ -5676,7 +5403,7 @@ "require-dev": { "symfony/config": "^4.3", "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/yaml": "^4.4.26|^5.0" }, "suggest": { "symfony/config": "", @@ -5711,7 +5438,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v4.4.31" + "source": "https://github.com/symfony/dependency-injection/tree/v4.4.38" }, "funding": [ { @@ -5727,29 +5454,29 @@ "type": "tidelift" } ], - "time": "2021-09-21T06:20:06+00:00" + "time": "2022-02-24T08:43:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -5778,7 +5505,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" }, "funding": [ { @@ -5794,24 +5521,25 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-11-01T23:48:49+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.30", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4" + "reference": "50777f44e7dc37e16959ca65041df2acd6a65775" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4632ae3567746c7e915c33c67a2fb6ab746090c4", - "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/50777f44e7dc37e16959ca65041df2acd6a65775", + "reference": "50777f44e7dc37e16959ca65041df2acd6a65775", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.16" @@ -5821,7 +5549,7 @@ }, "require-dev": { "masterminds/html5": "^2.6", - "symfony/css-selector": "^3.4|^4.0|^5.0" + "symfony/css-selector": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/css-selector": "" @@ -5852,7 +5580,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.30" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.5" }, "funding": [ { @@ -5868,26 +5596,26 @@ "type": "tidelift" } ], - "time": "2021-08-28T15:40:01+00:00" + "time": "2022-01-31T16:08:03+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.7", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130" + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", "symfony/polyfill-php80": "^1.16" }, "conflict": { @@ -5899,13 +5627,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -5937,7 +5665,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" }, "funding": [ { @@ -5953,24 +5681,24 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { @@ -5979,7 +5707,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -6016,7 +5744,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" }, "funding": [ { @@ -6032,25 +5760,26 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-07-15T12:33:35+00:00" }, { "name": "symfony/filesystem", - "version": "v5.3.4", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" + "reference": "797680071ea8f71b94eb958680c50d0e002638f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", - "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/797680071ea8f71b94eb958680c50d0e002638f5", + "reference": "797680071ea8f71b94eb958680c50d0e002638f5", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, "type": "library", @@ -6079,7 +5808,169 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.4" + "source": "https://github.com/symfony/filesystem/tree/v5.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-27T10:31:47+00:00" + }, + { + "name": "symfony/http-client", + "version": "v6.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "a8f87328930932c455cffd048f965d1223d91915" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/a8f87328930932c455cffd048f965d1223d91915", + "reference": "a8f87328930932c455cffd048f965d1223d91915", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-27T08:47:28+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "265f03fed057044a8e4dc159aa33596d0f48ed3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/265f03fed057044a8e4dc159aa33596d0f48ed3f", + "reference": "265f03fed057044a8e4dc159aa33596d0f48ed3f", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.0.0" }, "funding": [ { @@ -6095,20 +5986,101 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:40:44+00:00" + "time": "2021-11-03T13:44:55+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "2cd9601efd040e56f43360daa68f3c6b0534923a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/2cd9601efd040e56f43360daa68f3c6b0534923a", + "reference": "2cd9601efd040e56f43360daa68f3c6b0534923a", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { @@ -6128,12 +6100,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6160,7 +6132,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" }, "funding": [ { @@ -6176,20 +6148,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-23T21:10:46+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", "shasum": "" }, "require": { @@ -6211,12 +6183,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6247,7 +6219,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" }, "funding": [ { @@ -6263,11 +6235,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-09-14T14:02:44+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -6296,12 +6268,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6331,7 +6303,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" }, "funding": [ { @@ -6351,21 +6323,24 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, @@ -6380,12 +6355,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6411,7 +6386,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" }, "funding": [ { @@ -6427,11 +6402,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -6457,12 +6432,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6487,7 +6462,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" }, "funding": [ { @@ -6507,16 +6482,16 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", "shasum": "" }, "require": { @@ -6533,12 +6508,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6566,7 +6541,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" }, "funding": [ { @@ -6582,26 +6557,29 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-06-05T21:20:04+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.0", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + "reference": "d664541b99d6fb0247ec5ff32e87238582236204" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204", + "reference": "d664541b99d6fb0247ec5ff32e87238582236204", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1" }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, "suggest": { "symfony/service-implementation": "" }, @@ -6645,7 +6623,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.1" }, "funding": [ { @@ -6661,44 +6639,46 @@ "type": "tidelift" } ], - "time": "2021-04-01T10:43:52+00:00" + "time": "2021-11-04T16:37:19+00:00" }, { "name": "symfony/string", - "version": "v5.3.7", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -6728,7 +6708,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.7" + "source": "https://github.com/symfony/string/tree/v6.0.3" }, "funding": [ { @@ -6744,20 +6724,20 @@ "type": "tidelift" } ], - "time": "2021-08-26T08:00:08+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/translation", - "version": "v4.4.32", + "version": "v4.4.37", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5" + "reference": "4ce00d6875230b839f5feef82e51971f6c886e00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/db0ba1e85280d8ff11e38d53c70f8814d4d740f5", - "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5", + "url": "https://api.github.com/repos/symfony/translation/zipball/4ce00d6875230b839f5feef82e51971f6c886e00", + "reference": "4ce00d6875230b839f5feef82e51971f6c886e00", "shasum": "" }, "require": { @@ -6817,7 +6797,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v4.4.32" + "source": "https://github.com/symfony/translation/tree/v4.4.37" }, "funding": [ { @@ -6833,20 +6813,20 @@ "type": "tidelift" } ], - "time": "2021-08-26T05:57:13+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", + "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", "shasum": "" }, "require": { @@ -6858,7 +6838,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6895,7 +6875,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" }, "funding": [ { @@ -6911,32 +6891,31 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-08-17T14:20:01+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.6", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7" + "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", - "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e77f3ea0b21141d771d4a5655faa54f692b34af5", + "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "php": ">=8.0.2", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.4|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -6970,7 +6949,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.6" + "source": "https://github.com/symfony/yaml/tree/v6.0.3" }, "funding": [ { @@ -6986,7 +6965,7 @@ "type": "tidelift" } ], - "time": "2021-07-29T06:20:01+00:00" + "time": "2022-01-26T17:23:29+00:00" }, { "name": "theseer/tokenizer", @@ -7107,16 +7086,14 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.3", + "php": ">=8.0.2", "ext-curl": "*", - "ext-gd": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-openssl": "*", "ext-json": "*", - "ext-zip": "*", "ext-posix": "*" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.2.0" } diff --git a/include/auth.php b/include/auth.php index 8eeb077b5..07b8e2971 100644 --- a/include/auth.php +++ b/include/auth.php @@ -30,9 +30,9 @@ require_once('include/security.php'); * The return array is dependent on the login mechanism. * $ret['account'] will be set if either an email or channel address validation was successful (local login). * $ret['channel'] will be set if a channel address validation was successful. - * $ret['xchan'] will be set if a guest access token validation was successful. - * Keys will exist for invalid return arrays but will be set to null. - * This function does not perform a login. It merely validates systems passwords and tokens. + * $ret['xchan'] will be set if a guest access token validation was successful. + * Keys will exist for invalid return arrays but will be set to null. + * This function does not perform a login. It merely validates systems passwords and tokens. * */ @@ -44,7 +44,7 @@ function account_verify_password($login, $pass) { $email_verify = get_config('system', 'verify_email'); $register_policy = get_config('system', 'register_policy'); - if(! $login) + if(!$login || !$pass) return null; $account = null; @@ -72,7 +72,7 @@ function account_verify_password($login, $pass) { $ret['account'] = $addon_auth['user_record']; return $ret; } - else { + else { if(! strpos($login,'@')) { $channel = channelx_by_nick($login); if(! $channel) { @@ -102,7 +102,7 @@ function account_verify_password($login, $pass) { $account = $a[0]; // Currently we only verify email address if there is an open registration policy. - // This isn't because of any policy - it's because the workflow gets too complicated if + // This isn't because of any policy - it's because the workflow gets too complicated if // you have to verify the email and then go through the account approval workflow before // letting them login. @@ -112,7 +112,7 @@ function account_verify_password($login, $pass) { } if($channel) { - // Try the authentication plugin again since weve determined we are using the channel login instead of account login + // Try the authentication plugin again since weve determined we are using the channel login instead of account login $addon_auth = [ 'username' => $account['account_email'], 'password' => trim($pass), @@ -128,7 +128,7 @@ function account_verify_password($login, $pass) { } } - if(($account['account_flags'] == ACCOUNT_OK) + if(($account['account_flags'] == ACCOUNT_OK) && (hash('whirlpool',$account['account_salt'] . $pass) === $account['account_password'])) { logger('password verified for ' . $login); $ret['account'] = $account; @@ -193,7 +193,7 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) && $_SESSION = $_SESSION['delegate_push']; info( t('Delegation session ended.') . EOL); } - else { + else { App::$session->nuke(); info( t('Logged out.') . EOL); } @@ -280,8 +280,11 @@ else { // handle a fresh login request - if((x($_POST, 'password')) && strlen($_POST['password'])) - $encrypted = hash('whirlpool', trim($_POST['password'])); + $password = $_POST['main_login_password'] ?? $_POST['modal_login_password']; + $username = $_POST['main_login_username'] ?? $_POST['modal_login_username']; + + if($password) + $encrypted = hash('whirlpool', trim($password)); if((x($_POST, 'auth-params')) && $_POST['auth-params'] === 'login') { @@ -289,10 +292,10 @@ else { $account = null; $channel = null; - $verify = account_verify_password($_POST['username'], $_POST['password']); + $verify = account_verify_password($username, $password); if($verify && array_key_exists('reason',$verify) && $verify['reason'] === 'unvalidated') { notice( t('Email validation is incomplete. Please check your email.')); - goaway(z_root() . '/email_validation/' . bin2hex(punify(trim(escape_tags($_POST['username']))))); + goaway(z_root() . '/email_validation/' . bin2hex(punify(trim(escape_tags($username))))); } elseif($verify) { $atoken = $verify['xchan']; @@ -311,8 +314,8 @@ else { } if(! ($account || $atoken)) { - $error = 'authenticate: failed login attempt: ' . notags(trim($_POST['username'])) . ' from IP ' . $_SERVER['REMOTE_ADDR']; - logger($error); + $error = 'authenticate: failed login attempt: ' . notags(trim($username)) . ' from IP ' . $_SERVER['REMOTE_ADDR']; + logger($error); // Also log failed logins to a separate auth log to reduce overhead for server side intrusion prevention $authlog = get_config('system', 'authlog'); if ($authlog) @@ -334,7 +337,9 @@ else { // (i.e. expire when the browser is closed), even when there's a time expiration // on the cookie - if(($_POST['remember_me']) || ($_POST['remember'])) { + $remember = $_POST['main_login_remember'] ?? $_POST['modal_login_remember']; + + if($remember) { $_SESSION['remember_me'] = 1; App::$session->new_cookie(31449600); // one year } @@ -360,7 +365,7 @@ else { * and returns the corresponding channel_id. * * @fixme How do we prevent that an OpenID identity is used more than once? - * + * * @param string $authid * The given openid_identity * @return int|bool diff --git a/include/bbcode.php b/include/bbcode.php index 03115effe..794cb25d0 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -488,9 +488,9 @@ function getAttachmentData($body) { $data["preview"] = html_entity_decode($preview, ENT_QUOTES, 'UTF-8'); } - $data["description"] = trim($match[3]); + $data["description"] = ((isset($match[3])) ? trim($match[3]) : ''); - $data["after"] = trim($match[4]); + $data["after"] = ((isset($match[4])) ? trim($match[4]) : ''); return $data; } diff --git a/include/event.php b/include/event.php index 440f559da..3d3dda035 100644 --- a/include/event.php +++ b/include/event.php @@ -70,8 +70,87 @@ function format_event_html($ev) { } function format_event_obj($jobject) { + $event = []; + $object = json_decode($jobject, true); + +/******* + This is our encoded format + + $x = [ + 'type' => 'Event', + 'id' => z_root() . '/event/' . $r[0]['resource_id'], + 'summary' => bbcode($arr['summary']), + // RFC3339 Section 4.3 + 'startTime' => (($arr['adjust']) ? datetime_convert('UTC','UTC',$arr['dtstart'], ATOM_TIME) : datetime_convert('UTC','UTC',$arr['dtstart'],'Y-m-d\\TH:i:s-00:00')), + 'content' => bbcode($arr['description']), + 'location' => [ 'type' => 'Place', 'content' => $arr['location'] ], + 'source' => [ 'content' => format_event_bbcode($arr), 'mediaType' => 'text/x-multicode' ], + 'url' => [ [ 'mediaType' => 'text/calendar', 'href' => z_root() . '/events/ical/' . $event['event_hash'] ] ], + 'actor' => Activity::encode_person($r[0],false), + ]; + if(! $arr['nofinish']) { + $x['endTime'] = (($arr['adjust']) ? datetime_convert('UTC','UTC',$arr['dtend'], ATOM_TIME) : datetime_convert('UTC','UTC',$arr['dtend'],'Y-m-d\\TH:i:s-00:00')); + } + +******/ + + if (is_array($object) && (array_key_exists('summary', $object) || array_key_exists('name', $object))) { + + $dtend = ((array_key_exists('endTime', $object)) ? $object['endTime'] : NULL_DATE); + $title = ((isset($object['summary']) && $object['summary']) ? zidify_links(smilies(bbcode($object['summary']))) : $object['name']); + + // mobilizon sets a timezone in the object + // we will assume that events with an timezone should be adjusted + $tz = $object['timezone'] ?? ''; + + // friendica has its own flag for adjust + $dfrn_adjust = $object['dfrn:adjust'] ?? ''; + + $adjust = ((strpos($object['startTime'], 'Z') !== false) || $tz || $dfrn_adjust); + + $allday = (($adjust) ? false : true); + + $dtstart = new DateTime($object['startTime']); + $dtend_obj = new DateTime($dtend); + + $dtdiff = $dtstart->diff($dtend_obj); + + if($allday && ($dtdiff->days < 2)) + $oneday = true; + + if($allday && !$oneday) { + // Subtract one day from the end date so we can use the "first day - last day" format for display. + $dtend_obj->modify('-1 day'); + $dtend = datetime_convert('UTC', 'UTC', $dtend_obj->format('Y-m-d H:i:s')); + } + + $bd_format = (($allday) ? t('l F d, Y') : t('l F d, Y \@ g:i A')); // Friday January 18, 2011 @ 8:01 AM or Friday January 18, 2011 for allday events + + $event['header'] = replace_macros(get_markup_template('event_item_header.tpl'), array( + '$title' => $title, + '$dtstart_label' => t('Start:'), + '$dtstart_title' => datetime_convert('UTC', 'UTC', $object['startTime'], ((strpos($object['startTime'], 'Z')) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), + '$dtstart_dt' => (($adjust) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['startTime'], $bd_format)) : day_translate(datetime_convert('UTC', 'UTC', $object['startTime'], $bd_format))), + '$finish' => ((array_key_exists('endTime', $object)) ? true : false), + '$dtend_label' => t('End:'), + '$dtend_title' => datetime_convert('UTC', 'UTC', $dtend, ((strpos($object['startTime'], 'Z')) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), + '$dtend_dt' => (($adjust) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $dtend, $bd_format)) : day_translate(datetime_convert('UTC', 'UTC', $dtend, $bd_format))), + '$allday' => $allday, + '$oneday' => $oneday, + '$event_tz' => ['label' => t('Timezone'), 'value' => (($tz === date_default_timezone_get()) ? '' : $tz)] + )); + $event['content'] = replace_macros(get_markup_template('event_item_content.tpl'), array( + '$description' => $object['content'], + '$location_label' => t('Location:'), + '$location' => ((array_path_exists('location/name', $object)) ? zidify_links(smilies(bbcode($object['location']['name']))) : EMPTY_STR) + )); + } + + return $event; +/* + $event = []; $object = json_decode($jobject,true); $event_tz = ''; @@ -136,6 +215,7 @@ function format_event_obj($jobject) { )); return $event; +*/ } function ical_wrapper($ev) { @@ -1122,34 +1202,35 @@ function event_store_item($arr, $event) { if($r) { - set_iconfig($r[0]['id'], 'event', 'timezone', $arr['timezone'], true); - xchan_query($r); - $r = fetch_post_tags($r,true); - - $object = json_encode(array( - 'type' => ACTIVITY_OBJ_EVENT, - 'id' => z_root() . '/event/' . $r[0]['resource_id'], - 'title' => $arr['summary'], - 'timezone' => $arr['timezone'], - 'dtstart' => $arr['dtstart'], - 'dtend' => $arr['dtend'], - 'nofinish' => $arr['nofinish'], - 'description' => $arr['description'], - 'location' => $arr['location'], - 'adjust' => $arr['adjust'], - 'content' => format_event_bbcode($arr), + //set_iconfig($r[0]['id'], 'event', 'timezone', $arr['timezone'], true); + //xchan_query($r); + //$r = fetch_post_tags($r,true); + + $x = [ + 'type' => 'Event', + 'id' => z_root() . '/event/' . $r[0]['resource_id'], + 'name' => $arr['summary'], +// 'summary' => bbcode($arr['summary']), + // RFC3339 Section 4.3 + 'startTime' => (($arr['adjust']) ? datetime_convert('UTC', 'UTC', $arr['dtstart'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $arr['dtstart'], 'Y-m-d\\TH:i:s-00:00')), + 'content' => bbcode($arr['description']), + 'location' => [ 'type' => 'Place', 'name' => $arr['location'] ], + 'source' => [ 'content' => format_event_bbcode($arr), 'mediaType' => 'text/x-multicode' ], + 'url' => [ [ 'mediaType' => 'text/calendar', 'href' => z_root() . '/events/ical/' . $event['event_hash'] ] ], + 'actor' => Activity::encode_person($r[0], false), 'attachment' => Activity::encode_attachment($r[0]), - 'author' => array( - 'name' => $r[0]['author']['xchan_name'], - 'address' => $r[0]['author']['xchan_addr'], - 'guid' => $r[0]['author']['xchan_guid'], - 'guid_sig' => $r[0]['author']['xchan_guid_sig'], - 'link' => array( - array('rel' => 'alternate', 'type' => 'text/html', 'href' => $r[0]['author']['xchan_url']), - array('rel' => 'photo', 'type' => $r[0]['author']['xchan_photo_mimetype'], 'href' => $r[0]['author']['xchan_photo_m']) - ), - ), - )); + 'tag' => Activity::encode_taxonomy($r[0]) + ]; + + if (! $arr['nofinish']) { + $x['endTime'] = (($arr['adjust']) ? datetime_convert('UTC', 'UTC', $arr['dtend'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $arr['dtend'], 'Y-m-d\\TH:i:s-00:00')); + } + + if ($event['event_repeat']) { + $x['eventRepeat'] = $event['event_repeat']; + } + + $object = json_encode($x); $private = (($arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid']) ? 1 : 0); @@ -1285,29 +1366,30 @@ function event_store_item($arr, $event) { dbesc($arr['event_xchan']) ); if($x) { - $item_arr['obj'] = json_encode(array( - 'type' => ACTIVITY_OBJ_EVENT, - 'id' => z_root() . '/event/' . $event['event_hash'], - 'title' => $arr['summary'], - 'timezone' => $arr['timezone'], - 'dtstart' => $arr['dtstart'], - 'dtend' => $arr['dtend'], - 'nofinish' => $arr['nofinish'], - 'description' => $arr['description'], - 'location' => $arr['location'], - 'adjust' => $arr['adjust'], - 'content' => format_event_bbcode($arr), - 'attachment' => Activity::encode_attachment($item_arr), - 'author' => array( - 'name' => $x[0]['xchan_name'], - 'address' => $x[0]['xchan_addr'], - 'guid' => $x[0]['xchan_guid'], - 'guid_sig' => $x[0]['xchan_guid_sig'], - 'link' => array( - array('rel' => 'alternate', 'type' => 'text/html', 'href' => $x[0]['xchan_url']), - array('rel' => 'photo', 'type' => $x[0]['xchan_photo_mimetype'], 'href' => $x[0]['xchan_photo_m'])), - ), - )); + $y = [ + 'type' => 'Event', + 'id' => z_root() . '/event/' . $event['event_hash'], + 'name' => $arr['summary'], +// 'summary' => bbcode($arr['summary']), + // RFC3339 Section 4.3 + 'startTime' => (($arr['adjust']) ? datetime_convert('UTC', 'UTC', $arr['dtstart'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $arr['dtstart'], 'Y-m-d\\TH:i:s-00:00')), + 'content' => bbcode($arr['description']), + 'location' => [ 'type' => 'Place', 'name' => bbcode($arr['location']) ], + 'source' => [ 'content' => format_event_bbcode($arr), 'mediaType' => 'text/x-multicode' ], + 'url' => [ [ 'mediaType' => 'text/calendar', 'href' => z_root() . '/events/ical/' . $event['event_hash'] ] ], + 'actor' => Activity::encode_person($z, false), + 'attachment' => Activity::encode_attachment($item_arr), + 'tag' => Activity::encode_taxonomy($item_arr) + ]; + + if (! $arr['nofinish']) { + $y['endTime'] = (($arr['adjust']) ? datetime_convert('UTC', 'UTC', $arr['dtend'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $arr['dtend'], 'Y-m-d\\TH:i:s-00:00')); + } + if ($arr['event_repeat']) { + $y['eventRepeat'] = $arr['event_repeat']; + } + + $item_arr['obj'] = json_encode($y); } // propagate the event resource_id so that posts containing it are easily searchable in downstream copies diff --git a/include/feedutils.php b/include/feedutils.php index 1c653325d..734018922 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -194,14 +194,14 @@ function construct_activity_object($item) { $r = json_decode($item['obj'],false); if(! $r) - return ''; - if($r->type) + return EMPTY_STR; + if(isset($r->type)) $o .= '<as:obj_type>' . xmlify($r->type) . '</as:obj_type>' . "\r\n"; - if($r->id) + if(isset($r->id)) $o .= '<id>' . xmlify($r->id) . '</id>' . "\r\n"; - if($r->title) + if(isset($r->title)) $o .= '<title>' . xmlify($r->title) . '</title>' . "\r\n"; - if($r->links) { + if(isset($r->links)) { /** @FIXME!! */ if(substr($r->link,0,1) === '<') { $r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link); @@ -210,7 +210,7 @@ function construct_activity_object($item) { else $o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n"; } - if($r->content) { + if(isset($r->content)) { $o .= '<content type="html" >' . xmlify(bbcode($r->content)) . '</content>' . "\r\n"; } $o .= '</as:object>' . "\r\n"; @@ -218,7 +218,7 @@ function construct_activity_object($item) { return $o; } - return ''; + return EMPTY_STR; } function construct_activity_target($item) { @@ -1060,6 +1060,8 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { return; } + + $sys_expire = intval(get_config('system', 'default_expire_days')); $chn_expire = intval($importer['channel_expire_days']); @@ -1353,7 +1355,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { } } - if(! post_is_importable($datarray, $contact)) + if(! post_is_importable($importer['channel_id'], $datarray, [$contact])) continue; $datarray['parent_mid'] = $datarray['mid']; @@ -1509,7 +1511,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { } } - if(! post_is_importable($datarray, $contact)) + if(! post_is_importable($importer['channel_id'], $datarray, [$contact])) continue; logger('author: ' . print_r($author, true), LOGGER_DEBUG); diff --git a/include/html2bbcode.php b/include/html2bbcode.php index 173ea63bd..cc67a5666 100644 --- a/include/html2bbcode.php +++ b/include/html2bbcode.php @@ -87,7 +87,7 @@ function deletenode(&$doc, $node) function html2bbcode($message) { - if(!$message) + if(!is_string($message) && !$message) return; $message = str_replace("\r", "", $message); diff --git a/include/items.php b/include/items.php index 0b33d876d..8a2faa623 100644 --- a/include/items.php +++ b/include/items.php @@ -10,6 +10,7 @@ use Zotlabs\Lib\MarkdownSoap; use Zotlabs\Lib\MessageFilter; use Zotlabs\Lib\ThreadListener; use Zotlabs\Lib\IConfig; +use Zotlabs\Lib\PConfig; use Zotlabs\Lib\Activity; use Zotlabs\Lib\Libsync; use Zotlabs\Lib\Libzot; @@ -1072,21 +1073,6 @@ function encode_item($item,$mirror = false,$zap_compat = false) { $x['type'] = 'activity'; $x['encoding'] = 'zot'; - $r = q("select channel_id from channel where channel_id = %d limit 1", - intval($item['uid']) - ); - - if($r) - $comment_scope = PermissionLimits::Get($item['uid'],'post_comments'); - else - $comment_scope = 0; - - $scope = $item['public_policy']; - if(! $scope) - $scope = 'public'; - - $c_scope = map_scope($comment_scope); - $key = get_config('system','prvkey'); // If we're trying to backup an item so that it's recoverable or for export/imprt, @@ -1179,10 +1165,7 @@ function encode_item($item,$mirror = false,$zap_compat = false) { $x['public_scope'] = $scope; - if($item['item_nocomment']) - $x['comment_scope'] = 'none'; - else - $x['comment_scope'] = $c_scope; + $x['comment_scope'] = $item['comment_policy']; if(! empty($item['term'])) $x['tags'] = encode_item_terms($item['term'],$mirror); @@ -2218,9 +2201,9 @@ function item_store_update($arr, $allow_exec = false, $deliver = true) { $arr['deny_gid'] = ((array_key_exists('deny_gid',$arr)) ? trim($arr['deny_gid']) : $orig[0]['deny_gid']); $arr['item_private'] = ((array_key_exists('item_private',$arr)) ? intval($arr['item_private']) : $orig[0]['item_private']); - $arr['title'] = ((array_key_exists('title',$arr) && strlen($arr['title'])) ? trim($arr['title']) : ''); - $arr['body'] = ((array_key_exists('body',$arr) && strlen($arr['body'])) ? trim($arr['body']) : ''); - $arr['html'] = ((array_key_exists('html',$arr) && strlen($arr['html'])) ? trim($arr['html']) : ''); + $arr['title'] = ((array_key_exists('title',$arr) && $arr['title']) ? trim($arr['title']) : ''); + $arr['body'] = ((array_key_exists('body',$arr) && $arr['body']) ? trim($arr['body']) : ''); + $arr['html'] = ((array_key_exists('html',$arr) && $arr['html']) ? trim($arr['html']) : ''); $arr['attach'] = ((array_key_exists('attach',$arr)) ? notags(trim($arr['attach'])) : $orig[0]['attach']); $arr['app'] = ((array_key_exists('app',$arr)) ? notags(trim($arr['app'])) : $orig[0]['app']); @@ -3495,24 +3478,57 @@ function check_item_source($uid, $item) { return false; } -function post_is_importable($item,$abook) { - if(! $abook) - return true; +// Checks an incoming item against the per-channel and per-connection content filter. +// This implements the backend of the 'Content Filter' system app - if(($abook['abook_channel']) && (! feature_enabled($abook['abook_channel'],'connfilter'))) - return true; +function post_is_importable($channel_id, $item, $abook) { - if(! $item) + if (! $item) { return false; + } - if(! ($abook['abook_incl'] || $abook['abook_excl'])) + $incl = PConfig::get($channel_id, 'system', 'message_filter_incl', EMPTY_STR); + $excl = PConfig::get($channel_id, 'system', 'message_filter_excl', EMPTY_STR); + + if ($incl || $excl) { + $x = MessageFilter::evaluate($item, $incl, $excl); + if (! $x) { + logger('MessageFilter: channel blocked content', LOGGER_DEBUG, LOG_INFO); + return false; + } + } + + if(!feature_enabled($channel_id, 'connfilter')) { return true; + } - return MessageFilter::evaluate($item,$abook['abook_incl'],$abook['abook_excl']); + if (! $abook) { + return true; + } + foreach ($abook as $ab) { + // check eligibility + if (intval($ab['abook_self'])) { + continue; + } + if (! ($ab['abook_incl'] || $ab['abook_excl'])) { + continue; + } + + $evaluator = MessageFilter::evaluate($item, $ab['abook_incl'], $ab['abook_excl']); + // A negative assessment for any individual connections + // is an instant fail + if (! $evaluator) { + logger('MessageFilter: connection blocked content', LOGGER_DEBUG, LOG_INFO); + return false; + } + } + + return true; } + function fix_private_photos($s, $uid, $item = null, $cid = 0) { logger('fix_private_photos', LOGGER_DEBUG); diff --git a/include/language.php b/include/language.php index d291deb63..23aff0a02 100644 --- a/include/language.php +++ b/include/language.php @@ -311,6 +311,11 @@ function string_plural_select_default($n) { * @return string Language code in 2-letter ISO 639-1 (en, de, fr) format */ function detect_language($s) { + + if (!$s) { + return EMPTY_STR; + } + $min_length = get_config('system', 'language_detect_min_length'); if ($min_length === false) $min_length = LANGUAGE_DETECT_MIN_LENGTH; diff --git a/include/nav.php b/include/nav.php index 9278c1587..b9b24e34c 100644 --- a/include/nav.php +++ b/include/nav.php @@ -118,11 +118,11 @@ function nav($template = 'default') { else { if (!get_account_id()) { if (App::$module === 'channel') { - $nav['login'] = login(true, 'main-login', false, false); + $nav['login'] = login(true, 'modal_login', false, false); $nav['loginmenu'][] = ['login', t('Login'), '', t('Sign in'), '']; } else { - $nav['login'] = login(true, 'main-login', false, false); + $nav['login'] = login(true, 'modal_login', false, false); $nav['loginmenu'][] = ['login', t('Login'), '', t('Sign in'), 'login_nav_btn']; App::$page['content'] .= replace_macros(get_markup_template('nav_login.tpl'), diff --git a/include/network.php b/include/network.php index 64605749d..a236a6f8e 100644 --- a/include/network.php +++ b/include/network.php @@ -365,9 +365,14 @@ function z_post_url($url, $params, $redirects = 0, $opts = array()) { if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307 || $http_code == 308) { $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); - $newurl = trim(array_pop($matches)); - if(strpos($newurl,'/') === 0) + + $newurl = ''; + if (array_pop($matches)) + $newurl = trim(array_pop($matches)); + + if($newurl && strpos($newurl,'/') === 0) $newurl = $url . $newurl; + $url_parsed = @parse_url($newurl); if (isset($url_parsed)) { curl_close($ch); @@ -554,6 +559,14 @@ function z_dns_check($h,$check_mx = 0) { return((@dns_get_record($h,$opts) || filter_var($h, FILTER_VALIDATE_IP)) ? true : false); } +function is_local_url($url) { + if (str_starts_with($url, z_root()) || str_starts_with($url, '/')) { + return true; + } + + return false; +} + /** * @brief Validates a given URL. * @@ -1986,6 +1999,10 @@ function getBestSupportedMimeType($mimeTypes = null, $acceptedTypes = false) { if($acceptedTypes === false) $acceptedTypes = $_SERVER['HTTP_ACCEPT']; + if (!$acceptedTypes) { + return null; + } + // Accept header is case insensitive, and whitespace isn’t important $accept = strtolower(str_replace(' ', '', $acceptedTypes)); // divide it into parts in the place of a "," diff --git a/include/oembed.php b/include/oembed.php index 9a25686fa..36938c577 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -134,6 +134,7 @@ function oembed_fetch_url($embedurl){ } $txt = null; + $j = null; // we should try to cache this and avoid a lookup on each render $is_matrix = is_matrix_url($embedurl); @@ -160,7 +161,7 @@ function oembed_fetch_url($embedurl){ if(is_null($txt)) { - $txt = ""; + $txt = EMPTY_STR; if ($action !== 'block') { // try oembed autodiscovery @@ -168,7 +169,7 @@ function oembed_fetch_url($embedurl){ $result = z_fetch_url($furl, false, $redirects, [ 'timeout' => 30, - 'accept_content' => "text/*", + 'accept_content' => 'text/*', 'novalidate' => true, 'session' => ((local_channel() && $zrl) ? true : false) ] @@ -227,9 +228,10 @@ function oembed_fetch_url($embedurl){ $txt = $x['embed']; } - $txt=trim($txt); + $txt = trim($txt); - if ($txt[0]!="{") $txt='{"type":"error"}'; + if (substr($txt, 0, 1) !== '{') + $txt = '{"type":"error"}'; // save in cache @@ -247,7 +249,7 @@ function oembed_fetch_url($embedurl){ } if($action === 'filter') { - if($j['html']) { + if(isset($j['html']) && $j['html']) { $orig = $j['html']; $allow_position = (($is_matrix) ? true : false); diff --git a/include/plugin.php b/include/plugin.php index 95c9882d0..f9cee7ed6 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -794,6 +794,79 @@ function get_theme_info($theme){ } /** + * @brief Parse template comment in search of template info. + * + * like + * \code + * * Name: MyWidget + * * Description: A widget + * * Version: 1.2.3 + * * Author: John <profile url> + * * Author: Jane <email> + * * ContentRegionID: some_id + * * ContentRegionID: some_other_id + * * + *\endcode + * @param string $widget the name of the widget + * @return array with the information + */ +function get_template_info($template){ + $m = array(); + $info = array( + 'name' => $template, + 'description' => '', + 'author' => array(), + 'maintainer' => array(), + 'version' => '', + 'content_regions' => [] + ); + + $checkpaths = [ + "view/php/$template.php", + ]; + + $template_found = false; + + foreach ($checkpaths as $path) { + if (is_file($path)) { + $template_found = true; + $f = file_get_contents($path); + break; + } + } + + if(! ($template_found && $f)) + return $info; + + $f = escape_tags($f); + $r = preg_match("|/\*.*\*/|msU", $f, $m); + + if ($r) { + $ll = explode("\n", $m[0]); + foreach( $ll as $l ) { + $l = trim($l, "\t\n\r */"); + if ($l != ""){ + list($k, $v) = array_map("trim", explode(":", $l, 2)); + $k = strtolower($k); + if ($k == 'author' || $k == 'maintainer'){ + $r = preg_match("|([^<]+)<([^>]+)>|", $v, $m); + if ($r) { + $info[$k][] = array('name' => $m[1], 'link' => $m[2]); + } else { + $info[$k][] = array('name' => $v); + } + } + else { + $info[$k] = $v; + } + } + } + } + + return $info; +} + +/** * @brief Returns the theme's screenshot. * * The screenshot is expected as view/theme/$theme/img/screenshot.[png|jpg]. @@ -868,9 +941,7 @@ function head_get_links() { function format_css_if_exists($source) { - // script_path() returns https://yoursite.tld - - $path_prefix = script_path(); + $path_prefix = z_root(); $script = $source[0]; @@ -892,44 +963,6 @@ function format_css_if_exists($source) { } } -/** - * This basically calculates the baseurl. We have other functions to do that, but - * there was an issue with script paths and mixed-content whose details are arcane - * and perhaps lost in the message archives. The short answer is that we're ignoring - * the URL which we are "supposed" to use, and generating script paths relative to - * the URL which we are currently using; in order to ensure they are found and aren't - * blocked due to mixed content issues. - * - * @return string - */ -function script_path() { - if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS']) - $scheme = 'https'; - elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) - $scheme = 'https'; - elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') - $scheme = 'https'; - else - $scheme = 'http'; - - // Some proxy setups may require using http_host - - if(isset(App::$config['system']['script_path_use_http_host']) && intval(App::$config['system']['script_path_use_http_host'])) - $server_var = 'HTTP_HOST'; - else - $server_var = 'SERVER_NAME'; - - - if(x($_SERVER,$server_var)) { - $hostname = $_SERVER[$server_var]; - } - else { - return z_root(); - } - - return $scheme . '://' . $hostname; -} - function head_add_js($src, $priority = 0) { if(isset(App::$js_sources[$priority]) && !is_array(App::$js_sources[$priority])) App::$js_sources[$priority] = []; @@ -981,7 +1014,7 @@ function head_get_main_js() { } function format_js_if_exists($source) { - $path_prefix = script_path(); + $path_prefix = z_root(); if(strpos($source,'/') !== false) { // The source is a known path on the system diff --git a/include/text.php b/include/text.php index 29a2ab3b1..0c806d009 100644 --- a/include/text.php +++ b/include/text.php @@ -108,9 +108,24 @@ function notags($string) { * @return string */ function escape_tags($string) { - return(htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false)); + if (!$string) { + return EMPTY_STR; + } + return (htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false)); } +/** + * Escape URL's so they're safe for use in HTML and in HTML element attributes. + */ +function escape_url($input) { + if (empty($input)) { + return EMPTY_STR; + } + + // This is a bit crude but seems to do the trick for now. It makes no + // guarantees that the URL is valid for use after escaping. + return htmlspecialchars($input, ENT_HTML5 | ENT_QUOTES); +} function z_input_filter($s,$type = 'text/bbcode',$allow_code = false) { @@ -3531,7 +3546,7 @@ function text_highlight($s, $lang) { // echo (($xml->asXML('data.xml')) ? 'Your XML file has been generated successfully!' : 'Error generating XML file!'); function arrtoxml($root_elem,$arr) { - $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><' . $root_elem . '></' . $root_elem . '>', null, false); + $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><' . $root_elem . '></' . $root_elem . '>', 0, false); array2XML($xml,$arr); return $xml->asXML(); @@ -4054,9 +4069,10 @@ function sanitize_text_field($str) { */ function substr_words($str, $max_length, $suffix = '...') { + $ret = ''; + if (strlen($str) > $max_length) { $words = preg_split('/\s/', $str); - $ret = ''; $i = 0; while (true) { $length = (strlen($ret) + strlen($words[$i])); diff --git a/include/zid.php b/include/zid.php index ae7d9e252..5710d9f3f 100644 --- a/include/zid.php +++ b/include/zid.php @@ -58,6 +58,8 @@ function zid($s, $address = '') { $mine_parsed = parse_url($mine); $s_parsed = parse_url($s); + + $url_match = false; if(isset($mine_parsed['host']) && isset($s_parsed['host']) && $mine_parsed['host'] === $s_parsed['host']) $url_match = true; diff --git a/tests/unit/AntiXSSTest.php b/tests/unit/AntiXSSTest.php index b45042a1e..09642726f 100644 --- a/tests/unit/AntiXSSTest.php +++ b/tests/unit/AntiXSSTest.php @@ -24,6 +24,26 @@ class AntiXSSTest extends TestCase { $this->assertEquals("<submit type="button" onclick="alert('failed!');" />", $escapedString); } + /** + * @dataProvider urlTestProvider + */ + public function testEscapeURL($url, $expected) : void { + $this->assertEquals($expected, escape_url($url)); + } + + public function urlTestProvider() : array { + return [ + [ + "https://example.com/settings/calendar/?f=&rpath=https://example.com/cdav/calendar'><script>alert('boom')</script>", + "https://example.com/settings/calendar/?f=&rpath=https://example.com/cdav/calendar'><script>alert('boom')</script>" + ], + [ + "settings/calendar/?f=&rpath=https://example.com'+accesskey=x+onclick=alert(/boom/);a='", + "settings/calendar/?f=&rpath=https://example.com'+accesskey=x+onclick=alert(/boom/);a='" + ], + ]; + } + /** *xmlify and unxmlify */ diff --git a/tests/unit/Photo/PhotoGdTest.php b/tests/unit/Photo/PhotoGdTest.php index ae7382c43..1324043c4 100644 --- a/tests/unit/Photo/PhotoGdTest.php +++ b/tests/unit/Photo/PhotoGdTest.php @@ -71,11 +71,14 @@ class PhotoGdTest extends UnitTestCase { /** * Tests PhotoGd->getImage() */ + /* TODO: fix for PHP8 public function testGetimageReturnsAResource() { $res = $this->photoGd->getImage(); $this->assertIsResource($res); $this->assertEquals('gd', get_resource_type($res)); } + */ + public function testGetimageReturnsFalseOnFailure() { $this->photoGd = new PhotoGd(''); $this->assertFalse($this->photoGd->getImage()); @@ -94,11 +97,13 @@ class PhotoGdTest extends UnitTestCase { /** * Tests PhotoGd->rotate() */ + /* TODO: fix for PHP8 public function testRotate360DegreesCreatesANewImage() { $data = $this->photoGd->getImage(); $this->photoGd->rotate(360); $this->assertNotEquals($data, $this->photoGd->getImage()); } + */ /** * Tests PhotoGd->flip() diff --git a/tests/unit/includes/LanguageTest.php b/tests/unit/includes/LanguageTest.php index 9f1af2b50..9525c783d 100644 --- a/tests/unit/includes/LanguageTest.php +++ b/tests/unit/includes/LanguageTest.php @@ -63,11 +63,6 @@ class LanguageTest extends UnitTestCase { public function languageExamplesProvider() { return [ - 'empty text' => [ - '', - '', - null - ], 'English' => [ 'English is a West Germanic language that was first spoken in early medieval England and is now a global lingua franca.[4][5] Named after the Angles, one of the Germanic tribes that migrated to England, it ultimately derives its name from the Anglia (Angeln) peninsula in the Baltic Sea. It is closely related to the Frisian languages, but its vocabulary has been significantly influenced by other Germanic languages, particularly Norse (a North Germanic language), as well as by Latin and Romance languages, especially French.', 'en', diff --git a/tests/unit/includes/NetworkTest.php b/tests/unit/includes/NetworkTest.php new file mode 100644 index 000000000..0b9b42e00 --- /dev/null +++ b/tests/unit/includes/NetworkTest.php @@ -0,0 +1,33 @@ +<?php +/** + * tests function from include/network.php + * + * @package test.util + */ + +use PHPUnit\Framework\TestCase; + +require_once('include/network.php'); + +class NetworkTest extends TestCase { + + public function setup() : void { + \App::set_baseurl("https://mytest.org"); + } + + /** + * @dataProvider localUrlTestProvider + */ + public function testIsLocalURL($url, $expected) { + $this->assertEquals($expected, is_local_url($url)); + } + + public function localUrlTestProvider() : array { + return [ + [ '/some/path', true ], + [ 'https://mytest.org/some/path', true ], + [ 'https://other.site/some/path', false ], + ]; + } +} + diff --git a/util/hmessages.po b/util/hmessages.po index e8f3f24da..f531aafb2 100644 --- a/util/hmessages.po +++ b/util/hmessages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 7.1\n" +"Project-Id-Version: 7.2RC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-21 07:17+0000\n" +"POT-Creation-Date: 2022-03-23 20:16+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,11 +17,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: ../../store/[data]/smarty3/compiled/2cbde885645602969010e846a38817a1297aafb9_0.file.cover_photo.tpl.php:127 +msgid "Cover Photo" +msgstr "" + #: ../../view/theme/redbasic/php/config.php:15 #: ../../addon/cart/submodules/orderoptions.php:335 #: ../../addon/cart/submodules/orderoptions.php:359 #: ../../addon/cart/submodules/orderoptions.php:435 -#: ../../addon/cart/submodules/orderoptions.php:459 ../../include/text.php:3425 +#: ../../addon/cart/submodules/orderoptions.php:459 ../../include/text.php:3451 #: ../../Zotlabs/Module/Admin/Site.php:251 msgid "Default" msgstr "" @@ -75,12 +79,11 @@ msgstr "" #: ../../addon/ljpost/Mod_Ljpost.php:80 ../../addon/hzfiles/hzfiles.php:86 #: ../../addon/pageheader/Mod_Pageheader.php:52 ../../addon/irc/irc.php:45 #: ../../addon/xmpp/Mod_Xmpp.php:70 ../../include/js_strings.php:22 -#: ../../Zotlabs/Widget/Wiki_pages.php:42 -#: ../../Zotlabs/Widget/Wiki_pages.php:99 -#: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Module/Tokens.php:294 +#: ../../Zotlabs/Widget/Wiki_pages.php:48 +#: ../../Zotlabs/Widget/Wiki_pages.php:105 ../../Zotlabs/Module/Tokens.php:294 #: ../../Zotlabs/Module/Import_items.php:125 -#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Setup.php:306 -#: ../../Zotlabs/Module/Setup.php:346 ../../Zotlabs/Module/Group.php:150 +#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Setup.php:316 +#: ../../Zotlabs/Module/Setup.php:356 ../../Zotlabs/Module/Group.php:150 #: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Oauth.php:109 #: ../../Zotlabs/Module/Chat.php:207 ../../Zotlabs/Module/Chat.php:246 #: ../../Zotlabs/Module/Poke.php:215 ../../Zotlabs/Module/Mitem.php:259 @@ -90,13 +93,13 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Features.php:66 #: ../../Zotlabs/Module/Admin/Security.php:120 #: ../../Zotlabs/Module/Admin/Accounts.php:309 -#: ../../Zotlabs/Module/Admin/Site.php:412 +#: ../../Zotlabs/Module/Admin/Site.php:415 #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Channels.php:147 #: ../../Zotlabs/Module/Admin/Account_edit.php:73 #: ../../Zotlabs/Module/Admin/Profs.php:178 #: ../../Zotlabs/Module/Admin/Addons.php:442 -#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Permcats.php:228 +#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Permcats.php:257 #: ../../Zotlabs/Module/Mood.php:156 ../../Zotlabs/Module/Appman.php:221 #: ../../Zotlabs/Module/Contactedit.php:429 #: ../../Zotlabs/Module/Contactedit.php:462 @@ -107,7 +110,7 @@ msgstr "" #: ../../Zotlabs/Module/Affinity.php:84 #: ../../Zotlabs/Module/Settings/Network.php:62 #: ../../Zotlabs/Module/Settings/Features.php:48 -#: ../../Zotlabs/Module/Settings/Channel.php:224 +#: ../../Zotlabs/Module/Settings/Channel.php:228 #: ../../Zotlabs/Module/Settings/Account.php:107 #: ../../Zotlabs/Module/Settings/Events.php:42 #: ../../Zotlabs/Module/Settings/Manage.php:43 @@ -191,13 +194,13 @@ msgstr "" #: ../../Zotlabs/Module/Filestorage.php:203 #: ../../Zotlabs/Module/Filestorage.php:211 #: ../../Zotlabs/Module/Admin/Site.php:319 -#: ../../Zotlabs/Module/Permcats.php:218 +#: ../../Zotlabs/Module/Permcats.php:247 #: ../../Zotlabs/Module/Contactedit.php:284 #: ../../Zotlabs/Module/Contactedit.php:329 ../../Zotlabs/Module/Api.php:99 #: ../../Zotlabs/Module/Photos.php:677 ../../Zotlabs/Module/Profiles.php:676 #: ../../Zotlabs/Module/Profiles.php:686 ../../Zotlabs/Module/Profiles.php:694 #: ../../Zotlabs/Module/Profiles.php:698 -#: ../../Zotlabs/Module/Settings/Channel.php:219 +#: ../../Zotlabs/Module/Settings/Channel.php:223 #: ../../Zotlabs/Module/Settings/Display.php:86 #: ../../Zotlabs/Module/Settings/Privacy.php:120 #: ../../Zotlabs/Module/Settings/Privacy.php:121 @@ -210,7 +213,7 @@ msgstr "" #: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310 #: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312 #: ../../Zotlabs/Storage/Browser.php:389 ../../Zotlabs/Storage/Browser.php:391 -#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1743 +#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1757 msgid "No" msgstr "" @@ -266,12 +269,12 @@ msgstr "" #: ../../Zotlabs/Module/Filestorage.php:203 #: ../../Zotlabs/Module/Filestorage.php:211 #: ../../Zotlabs/Module/Admin/Site.php:321 -#: ../../Zotlabs/Module/Permcats.php:218 +#: ../../Zotlabs/Module/Permcats.php:247 #: ../../Zotlabs/Module/Contactedit.php:284 ../../Zotlabs/Module/Api.php:98 #: ../../Zotlabs/Module/Photos.php:677 ../../Zotlabs/Module/Profiles.php:676 #: ../../Zotlabs/Module/Profiles.php:686 ../../Zotlabs/Module/Profiles.php:694 #: ../../Zotlabs/Module/Profiles.php:698 -#: ../../Zotlabs/Module/Settings/Channel.php:219 +#: ../../Zotlabs/Module/Settings/Channel.php:223 #: ../../Zotlabs/Module/Settings/Display.php:86 #: ../../Zotlabs/Module/Settings/Privacy.php:120 #: ../../Zotlabs/Module/Settings/Privacy.php:121 @@ -284,7 +287,7 @@ msgstr "" #: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311 #: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:389 #: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:552 -#: ../../boot.php:1743 +#: ../../boot.php:1757 msgid "Yes" msgstr "" @@ -439,7 +442,7 @@ msgid "Channel Reputation" msgstr "" #: ../../addon/channelreputation/channelreputation.php:233 -#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:158 +#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:161 #: ../../Zotlabs/Module/Photos.php:1279 ../../Zotlabs/Lib/ThreadItem.php:533 #: ../../Zotlabs/Storage/Browser.php:411 msgid "Close" @@ -654,8 +657,8 @@ msgstr "" msgid "Queueworker Settings" msgstr "" -#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1146 -#: ../../include/text.php:1158 ../../Zotlabs/Module/Admin/Profs.php:94 +#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1168 +#: ../../include/text.php:1180 ../../Zotlabs/Module/Admin/Profs.php:94 #: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Cards.php:111 #: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Module/Articles.php:115 #: ../../Zotlabs/Module/Rbmark.php:31 ../../Zotlabs/Module/Rbmark.php:103 @@ -726,7 +729,7 @@ msgstr "" #: ../../addon/openid/Mod_Id.php:53 ../../addon/pumpio/pumpio.php:44 #: ../../addon/keepout/keepout.php:36 ../../include/photos.php:30 -#: ../../include/items.php:3881 ../../include/attach.php:156 +#: ../../include/items.php:3897 ../../include/attach.php:156 #: ../../include/attach.php:205 ../../include/attach.php:278 #: ../../include/attach.php:329 ../../include/attach.php:424 #: ../../include/attach.php:438 ../../include/attach.php:445 @@ -736,7 +739,7 @@ msgstr "" #: ../../Zotlabs/Module/Attach_edit.php:90 #: ../../Zotlabs/Module/Attach_edit.php:99 #: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Network.php:18 -#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Setup.php:208 +#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Setup.php:218 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 #: ../../Zotlabs/Module/Channel.php:220 ../../Zotlabs/Module/Channel.php:376 @@ -750,7 +753,7 @@ msgstr "" #: ../../Zotlabs/Module/Channel_calendar.php:232 #: ../../Zotlabs/Module/Like.php:248 ../../Zotlabs/Module/Poke.php:157 #: ../../Zotlabs/Module/Item.php:501 ../../Zotlabs/Module/Item.php:520 -#: ../../Zotlabs/Module/Item.php:530 ../../Zotlabs/Module/Item.php:1445 +#: ../../Zotlabs/Module/Item.php:530 ../../Zotlabs/Module/Item.php:1446 #: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99 #: ../../Zotlabs/Module/Profile.php:114 #: ../../Zotlabs/Module/Sharedwithme.php:19 @@ -792,7 +795,7 @@ msgstr "" #: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 #: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Locs.php:98 #: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Lib/Chatroom.php:135 -#: ../../Zotlabs/Web/WebServer.php:116 +#: ../../Zotlabs/Web/WebServer.php:117 msgid "Permission denied." msgstr "" @@ -815,7 +818,7 @@ msgstr "" msgid "Welcome %s. Remote authentication successful." msgstr "" -#: ../../addon/openid/Mod_Openid.php:189 ../../include/auth.php:320 +#: ../../addon/openid/Mod_Openid.php:189 ../../include/auth.php:323 msgid "Login failed." msgstr "" @@ -838,7 +841,7 @@ msgid "Last Name" msgstr "" #: ../../addon/openid/MysqlProvider.php:54 ../../addon/redred/Mod_Redred.php:73 -#: ../../boot.php:1732 +#: ../../boot.php:1746 msgid "Nickname" msgstr "" @@ -848,7 +851,7 @@ msgstr "" #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:69 -#: ../../addon/rtof/Mod_Rtof.php:55 ../../include/network.php:1743 +#: ../../addon/rtof/Mod_Rtof.php:55 ../../include/network.php:1768 #: ../../Zotlabs/Module/Cdav.php:1376 #: ../../Zotlabs/Module/Admin/Accounts.php:316 #: ../../Zotlabs/Module/Admin/Accounts.php:330 @@ -886,7 +889,7 @@ msgstr "" msgid "Profile Photo 128px" msgstr "" -#: ../../addon/openid/MysqlProvider.php:67 ../../include/event.php:123 +#: ../../addon/openid/MysqlProvider.php:67 ../../include/event.php:141 msgid "Timezone" msgstr "" @@ -1071,7 +1074,7 @@ msgstr "" msgid "Channel is required." msgstr "" -#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:325 +#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:327 msgid "Invalid channel." msgstr "" @@ -1117,12 +1120,12 @@ msgstr "" #: ../../addon/redphotos/redphotos.php:119 #: ../../addon/redfiles/redfiles.php:109 ../../addon/hzfiles/hzfiles.php:75 -#: ../../include/items.php:440 ../../Zotlabs/Module/Import_items.php:116 +#: ../../include/items.php:441 ../../Zotlabs/Module/Import_items.php:116 #: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:108 #: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Cloud.php:123 #: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:89 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:55 -#: ../../Zotlabs/Web/WebServer.php:115 +#: ../../Zotlabs/Web/WebServer.php:116 msgid "Permission denied" msgstr "" @@ -1165,11 +1168,11 @@ msgstr "" msgid "0 or blank to import all available" msgstr "" -#: ../../addon/redphotos/redphotohelper.php:71 ../../addon/pubcrawl/as.php:1943 -#: ../../addon/diaspora/Receiver.php:1629 ../../include/text.php:2302 +#: ../../addon/redphotos/redphotohelper.php:71 ../../addon/pubcrawl/as.php:1958 +#: ../../addon/diaspora/Receiver.php:1643 ../../include/text.php:2328 #: ../../include/conversation.php:128 ../../Zotlabs/Module/Like.php:445 #: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:115 -#: ../../Zotlabs/Lib/Activity.php:3391 +#: ../../Zotlabs/Lib/Activity.php:3613 msgid "photo" msgstr "" @@ -1296,7 +1299,7 @@ msgid "Post to GNU social" msgstr "" #: ../../addon/statusnet/statusnet.php:593 -#: ../../Zotlabs/Module/Admin/Site.php:420 +#: ../../Zotlabs/Module/Admin/Site.php:423 msgid "Site name" msgstr "" @@ -1542,7 +1545,7 @@ msgid "Preview" msgstr "" #: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1462 -#: ../../Zotlabs/Widget/Cdav.php:136 ../../Zotlabs/Module/Webpages.php:253 +#: ../../Zotlabs/Widget/Cdav.php:140 ../../Zotlabs/Module/Webpages.php:253 #: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1084 #: ../../Zotlabs/Module/Wiki.php:298 ../../Zotlabs/Module/Layouts.php:194 msgid "Share" @@ -1720,7 +1723,7 @@ msgstr "" #: ../../addon/rendezvous/rendezvous.php:82 ../../addon/twitter/twitter.php:493 #: ../../addon/msgfooter/msgfooter.php:54 ../../addon/diaspora/diaspora.php:104 #: ../../addon/piwik/piwik.php:116 ../../addon/logrot/logrot.php:54 -#: ../../addon/xmpp/xmpp.php:54 ../../Zotlabs/Module/Settings/Channel.php:146 +#: ../../addon/xmpp/xmpp.php:54 ../../Zotlabs/Module/Settings/Channel.php:150 #: ../../Zotlabs/Module/Defperms.php:111 msgid "Settings updated." msgstr "" @@ -1778,26 +1781,25 @@ msgstr "" msgid "Enter some text" msgstr "" -#: ../../addon/pubcrawl/as.php:1332 ../../addon/pubcrawl/as.php:1776 -#: ../../addon/pubcrawl/as.php:1987 ../../include/network.php:1742 -#: ../../Zotlabs/Lib/Activity.php:3241 ../../Zotlabs/Lib/Activity.php:3433 +#: ../../addon/pubcrawl/as.php:1332 ../../addon/pubcrawl/as.php:2002 +#: ../../include/network.php:1767 ../../Zotlabs/Lib/Activity.php:3655 msgid "ActivityPub" msgstr "" -#: ../../addon/pubcrawl/as.php:1943 ../../addon/diaspora/Receiver.php:1629 +#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1643 #: ../../Zotlabs/Module/Like.php:445 ../../Zotlabs/Module/Subthread.php:115 msgid "status" msgstr "" -#: ../../addon/pubcrawl/as.php:1978 ../../addon/diaspora/Receiver.php:1575 +#: ../../addon/pubcrawl/as.php:1993 ../../addon/diaspora/Receiver.php:1589 #: ../../include/conversation.php:174 ../../Zotlabs/Module/Like.php:477 -#: ../../Zotlabs/Lib/Activity.php:3424 +#: ../../Zotlabs/Lib/Activity.php:3646 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" -#: ../../addon/pubcrawl/as.php:1980 ../../include/conversation.php:177 -#: ../../Zotlabs/Module/Like.php:479 ../../Zotlabs/Lib/Activity.php:3426 +#: ../../addon/pubcrawl/as.php:1995 ../../include/conversation.php:177 +#: ../../Zotlabs/Module/Like.php:479 ../../Zotlabs/Lib/Activity.php:3648 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "" @@ -1835,6 +1837,45 @@ msgstr "" msgid "Activitypub Protocol" msgstr "" +#: ../../addon/fediwordle/fediwordle.php:211 +msgid "ERROR: word length is not correct!" +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:22 +msgid "Fediwordle App" +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:23 +msgid "A distributed word game inspired by wordle." +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:24 +msgid "" +"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel " +"post." +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:25 +msgid "Your contacts can post their guess in the comments." +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:26 +msgid "" +"Your channel will evaluate the guess and automatically post the response." +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:28 +msgid "Correct letters" +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:29 +msgid "Letters contained in the word but at the wrong spot" +msgstr "" + +#: ../../addon/fediwordle/Mod_Fediwordle.php:30 +msgid "Letters not contained in the word" +msgstr "" + #: ../../addon/ldapauth/ldapauth.php:101 msgid "An account has been created for you." msgstr "" @@ -2074,7 +2115,7 @@ msgid "Let's meet here" msgstr "" #: ../../addon/rendezvous/rendezvous.php:172 -#: ../../Zotlabs/Widget/Wiki_page_history.php:22 +#: ../../Zotlabs/Widget/Wiki_page_history.php:28 #: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth.php:137 #: ../../Zotlabs/Module/Chat.php:255 ../../Zotlabs/Module/Cdav.php:1372 #: ../../Zotlabs/Module/Sharedwithme.php:106 @@ -2169,7 +2210,7 @@ msgstr "" msgid "You have no rendezvous. Press the button above to create a rendezvous!" msgstr "" -#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:720 +#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:730 msgid "Errors encountered creating database tables." msgstr "" @@ -2837,22 +2878,22 @@ msgstr "" msgid "Diaspora Protocol" msgstr "" -#: ../../addon/diaspora/Receiver.php:1579 +#: ../../addon/diaspora/Receiver.php:1593 #, php-format msgid "%1$s dislikes %2$s's %3$s" msgstr "" -#: ../../addon/diaspora/Receiver.php:2208 ../../Zotlabs/Module/Like.php:487 +#: ../../addon/diaspora/Receiver.php:2222 ../../Zotlabs/Module/Like.php:487 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "" -#: ../../addon/diaspora/Receiver.php:2210 ../../Zotlabs/Module/Like.php:489 +#: ../../addon/diaspora/Receiver.php:2224 ../../Zotlabs/Module/Like.php:489 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "" -#: ../../addon/diaspora/Receiver.php:2212 ../../Zotlabs/Module/Like.php:491 +#: ../../addon/diaspora/Receiver.php:2226 ../../Zotlabs/Module/Like.php:491 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "" @@ -2954,7 +2995,7 @@ msgstr "" msgid "Brief description or title" msgstr "" -#: ../../addon/workflow/workflow.php:2625 ../../Zotlabs/Widget/Notes.php:26 +#: ../../addon/workflow/workflow.php:2625 ../../Zotlabs/Widget/Notes.php:34 #: ../../Zotlabs/Lib/Apps.php:374 msgid "Notes" msgstr "" @@ -3170,7 +3211,7 @@ msgid "Set/edit permissions" msgstr "" #: ../../addon/flashcards/Mod_Flashcards.php:291 -#: ../../addon/flashcards/Mod_Flashcards.php:292 ../../include/items.php:3804 +#: ../../addon/flashcards/Mod_Flashcards.php:292 ../../include/items.php:3820 #: ../../Zotlabs/Module/Filestorage.php:29 #: ../../Zotlabs/Module/Admin/Themes.php:72 #: ../../Zotlabs/Module/Admin/Addons.php:260 @@ -3582,9 +3623,9 @@ msgstr "" msgid "Posted by" msgstr "" -#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2166 -#: ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:214 +#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2192 +#: ../../Zotlabs/Widget/Wiki_pages.php:44 +#: ../../Zotlabs/Widget/Wiki_pages.php:101 ../../Zotlabs/Module/Wiki.php:214 #: ../../Zotlabs/Module/Wiki.php:368 msgid "Markdown" msgstr "" @@ -3689,315 +3730,315 @@ msgstr "" msgid "XMPP Settings" msgstr "" -#: ../../include/text.php:525 +#: ../../include/text.php:546 msgid "prev" msgstr "" -#: ../../include/text.php:527 +#: ../../include/text.php:548 msgid "first" msgstr "" -#: ../../include/text.php:556 +#: ../../include/text.php:577 msgid "last" msgstr "" -#: ../../include/text.php:559 +#: ../../include/text.php:580 msgid "next" msgstr "" -#: ../../include/text.php:577 +#: ../../include/text.php:598 msgid "older" msgstr "" -#: ../../include/text.php:579 +#: ../../include/text.php:600 msgid "newer" msgstr "" -#: ../../include/text.php:1033 ../../include/features.php:133 +#: ../../include/text.php:1055 ../../include/features.php:133 #: ../../Zotlabs/Module/Connections.php:390 ../../Zotlabs/Lib/Apps.php:337 msgid "Connections" msgstr "" -#: ../../include/text.php:1041 ../../Zotlabs/Module/Viewconnections.php:80 +#: ../../include/text.php:1063 ../../Zotlabs/Module/Viewconnections.php:80 #: ../../Zotlabs/Module/Connections.php:297 msgid "Accepts" msgstr "" -#: ../../include/text.php:1044 ../../Zotlabs/Module/Viewconnections.php:83 +#: ../../include/text.php:1066 ../../Zotlabs/Module/Viewconnections.php:83 #: ../../Zotlabs/Module/Connections.php:300 msgid "Comments" msgstr "" -#: ../../include/text.php:1049 ../../Zotlabs/Module/Viewconnections.php:88 +#: ../../include/text.php:1071 ../../Zotlabs/Module/Viewconnections.php:88 #: ../../Zotlabs/Module/Connections.php:305 msgid "Stream items" msgstr "" -#: ../../include/text.php:1054 ../../Zotlabs/Module/Viewconnections.php:93 +#: ../../include/text.php:1076 ../../Zotlabs/Module/Viewconnections.php:93 #: ../../Zotlabs/Module/Connections.php:310 msgid "Wall posts" msgstr "" -#: ../../include/text.php:1058 ../../Zotlabs/Module/Viewconnections.php:97 +#: ../../include/text.php:1080 ../../Zotlabs/Module/Viewconnections.php:97 #: ../../Zotlabs/Module/Connections.php:314 msgid "Nothing" msgstr "" -#: ../../include/text.php:1071 +#: ../../include/text.php:1093 #, php-format msgid "View all %s connections" msgstr "" -#: ../../include/text.php:1134 +#: ../../include/text.php:1156 #, php-format msgid "Network: %s" msgstr "" -#: ../../include/text.php:1145 ../../include/text.php:1157 +#: ../../include/text.php:1167 ../../include/text.php:1179 #: ../../include/nav.php:190 ../../include/acl_selectors.php:149 -#: ../../Zotlabs/Widget/Sitesearch.php:31 -#: ../../Zotlabs/Widget/Activity_filter.php:203 -#: ../../Zotlabs/Module/Search.php:45 ../../Zotlabs/Module/Connections.php:394 +#: ../../Zotlabs/Widget/Sitesearch.php:37 +#: ../../Zotlabs/Widget/Activity_filter.php:210 +#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:394 #: ../../Zotlabs/Lib/Apps.php:357 msgid "Search" msgstr "" -#: ../../include/text.php:1237 ../../include/text.php:1241 +#: ../../include/text.php:1259 ../../include/text.php:1263 msgid "poke" msgstr "" -#: ../../include/text.php:1237 ../../include/text.php:1241 +#: ../../include/text.php:1259 ../../include/text.php:1263 #: ../../include/conversation.php:267 msgid "poked" msgstr "" -#: ../../include/text.php:1242 +#: ../../include/text.php:1264 msgid "ping" msgstr "" -#: ../../include/text.php:1242 +#: ../../include/text.php:1264 msgid "pinged" msgstr "" -#: ../../include/text.php:1243 +#: ../../include/text.php:1265 msgid "prod" msgstr "" -#: ../../include/text.php:1243 +#: ../../include/text.php:1265 msgid "prodded" msgstr "" -#: ../../include/text.php:1244 +#: ../../include/text.php:1266 msgid "slap" msgstr "" -#: ../../include/text.php:1244 +#: ../../include/text.php:1266 msgid "slapped" msgstr "" -#: ../../include/text.php:1245 +#: ../../include/text.php:1267 msgid "finger" msgstr "" -#: ../../include/text.php:1245 +#: ../../include/text.php:1267 msgid "fingered" msgstr "" -#: ../../include/text.php:1246 +#: ../../include/text.php:1268 msgid "rebuff" msgstr "" -#: ../../include/text.php:1246 +#: ../../include/text.php:1268 msgid "rebuffed" msgstr "" -#: ../../include/text.php:1269 +#: ../../include/text.php:1291 msgid "happy" msgstr "" -#: ../../include/text.php:1270 +#: ../../include/text.php:1292 msgid "sad" msgstr "" -#: ../../include/text.php:1271 +#: ../../include/text.php:1293 msgid "mellow" msgstr "" -#: ../../include/text.php:1272 +#: ../../include/text.php:1294 msgid "tired" msgstr "" -#: ../../include/text.php:1273 +#: ../../include/text.php:1295 msgid "perky" msgstr "" -#: ../../include/text.php:1274 +#: ../../include/text.php:1296 msgid "angry" msgstr "" -#: ../../include/text.php:1275 +#: ../../include/text.php:1297 msgid "stupefied" msgstr "" -#: ../../include/text.php:1276 +#: ../../include/text.php:1298 msgid "puzzled" msgstr "" -#: ../../include/text.php:1277 +#: ../../include/text.php:1299 msgid "interested" msgstr "" -#: ../../include/text.php:1278 +#: ../../include/text.php:1300 msgid "bitter" msgstr "" -#: ../../include/text.php:1279 +#: ../../include/text.php:1301 msgid "cheerful" msgstr "" -#: ../../include/text.php:1280 +#: ../../include/text.php:1302 msgid "alive" msgstr "" -#: ../../include/text.php:1281 +#: ../../include/text.php:1303 msgid "annoyed" msgstr "" -#: ../../include/text.php:1282 +#: ../../include/text.php:1304 msgid "anxious" msgstr "" -#: ../../include/text.php:1283 +#: ../../include/text.php:1305 msgid "cranky" msgstr "" -#: ../../include/text.php:1284 +#: ../../include/text.php:1306 msgid "disturbed" msgstr "" -#: ../../include/text.php:1285 +#: ../../include/text.php:1307 msgid "frustrated" msgstr "" -#: ../../include/text.php:1286 +#: ../../include/text.php:1308 msgid "depressed" msgstr "" -#: ../../include/text.php:1287 +#: ../../include/text.php:1309 msgid "motivated" msgstr "" -#: ../../include/text.php:1288 +#: ../../include/text.php:1310 msgid "relaxed" msgstr "" -#: ../../include/text.php:1289 +#: ../../include/text.php:1311 msgid "surprised" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:99 +#: ../../include/text.php:1499 ../../include/js_strings.php:99 msgid "Monday" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:100 +#: ../../include/text.php:1499 ../../include/js_strings.php:100 msgid "Tuesday" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:101 +#: ../../include/text.php:1499 ../../include/js_strings.php:101 msgid "Wednesday" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:102 +#: ../../include/text.php:1499 ../../include/js_strings.php:102 msgid "Thursday" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:103 +#: ../../include/text.php:1499 ../../include/js_strings.php:103 msgid "Friday" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:104 +#: ../../include/text.php:1499 ../../include/js_strings.php:104 msgid "Saturday" msgstr "" -#: ../../include/text.php:1477 ../../include/js_strings.php:98 +#: ../../include/text.php:1499 ../../include/js_strings.php:98 msgid "Sunday" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:74 +#: ../../include/text.php:1503 ../../include/js_strings.php:74 msgid "January" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:75 +#: ../../include/text.php:1503 ../../include/js_strings.php:75 msgid "February" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:76 +#: ../../include/text.php:1503 ../../include/js_strings.php:76 msgid "March" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:77 +#: ../../include/text.php:1503 ../../include/js_strings.php:77 msgid "April" msgstr "" -#: ../../include/text.php:1481 +#: ../../include/text.php:1503 msgid "May" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:79 +#: ../../include/text.php:1503 ../../include/js_strings.php:79 msgid "June" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:80 +#: ../../include/text.php:1503 ../../include/js_strings.php:80 msgid "July" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:81 +#: ../../include/text.php:1503 ../../include/js_strings.php:81 msgid "August" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:82 +#: ../../include/text.php:1503 ../../include/js_strings.php:82 msgid "September" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:83 +#: ../../include/text.php:1503 ../../include/js_strings.php:83 msgid "October" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:84 +#: ../../include/text.php:1503 ../../include/js_strings.php:84 msgid "November" msgstr "" -#: ../../include/text.php:1481 ../../include/js_strings.php:85 +#: ../../include/text.php:1503 ../../include/js_strings.php:85 msgid "December" msgstr "" -#: ../../include/text.php:1539 +#: ../../include/text.php:1565 msgid "Unknown Attachment" msgstr "" -#: ../../include/text.php:1541 ../../Zotlabs/Module/Sharedwithme.php:108 +#: ../../include/text.php:1567 ../../Zotlabs/Module/Sharedwithme.php:108 #: ../../Zotlabs/Storage/Browser.php:379 msgid "Size" msgstr "" -#: ../../include/text.php:1541 ../../include/feedutils.php:874 +#: ../../include/text.php:1567 ../../include/feedutils.php:874 msgid "unknown" msgstr "" -#: ../../include/text.php:1582 +#: ../../include/text.php:1608 msgid "remove category" msgstr "" -#: ../../include/text.php:1659 +#: ../../include/text.php:1685 msgid "remove from file" msgstr "" -#: ../../include/text.php:1843 +#: ../../include/text.php:1869 msgid "Download binary/encrypted content" msgstr "" -#: ../../include/text.php:1901 ../../include/text.php:1910 -#: ../../include/text.php:1937 ../../include/text.php:1946 +#: ../../include/text.php:1927 ../../include/text.php:1936 +#: ../../include/text.php:1963 ../../include/text.php:1972 #, php-format msgctxt "noun" msgid "%d Vote" @@ -4005,7 +4046,7 @@ msgid_plural "%d Votes" msgstr[0] "" msgstr[1] "" -#: ../../include/text.php:1953 +#: ../../include/text.php:1979 #, php-format msgctxt "noun" msgid "%d Vote in total" @@ -4013,173 +4054,173 @@ msgid_plural "%d Votes in total" msgstr[0] "" msgstr[1] "" -#: ../../include/text.php:1959 +#: ../../include/text.php:1985 msgid "Poll has ended" msgstr "" -#: ../../include/text.php:1962 +#: ../../include/text.php:1988 #, php-format msgid "Poll ends in %s" msgstr "" -#: ../../include/text.php:1969 ../../Zotlabs/Lib/ThreadItem.php:482 +#: ../../include/text.php:1995 ../../Zotlabs/Lib/ThreadItem.php:482 msgid "Vote" msgstr "" -#: ../../include/text.php:2124 +#: ../../include/text.php:2150 msgid "Link to Source" msgstr "" -#: ../../include/text.php:2146 ../../include/language.php:428 +#: ../../include/text.php:2172 ../../include/language.php:433 msgid "default" msgstr "" -#: ../../include/text.php:2154 +#: ../../include/text.php:2180 msgid "Page layout" msgstr "" -#: ../../include/text.php:2154 +#: ../../include/text.php:2180 msgid "You can create your own with the layouts tool" msgstr "" -#: ../../include/text.php:2164 ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:214 +#: ../../include/text.php:2190 ../../Zotlabs/Widget/Wiki_pages.php:44 +#: ../../Zotlabs/Widget/Wiki_pages.php:101 ../../Zotlabs/Module/Wiki.php:214 #: ../../Zotlabs/Module/Wiki.php:368 msgid "BBcode" msgstr "" -#: ../../include/text.php:2165 +#: ../../include/text.php:2191 msgid "HTML" msgstr "" -#: ../../include/text.php:2167 ../../Zotlabs/Widget/Wiki_pages.php:38 -#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:214 +#: ../../include/text.php:2193 ../../Zotlabs/Widget/Wiki_pages.php:44 +#: ../../Zotlabs/Widget/Wiki_pages.php:101 ../../Zotlabs/Module/Wiki.php:214 msgid "Text" msgstr "" -#: ../../include/text.php:2168 +#: ../../include/text.php:2194 msgid "Comanche Layout" msgstr "" -#: ../../include/text.php:2173 +#: ../../include/text.php:2199 msgid "PHP" msgstr "" -#: ../../include/text.php:2182 +#: ../../include/text.php:2208 msgid "Page content type" msgstr "" -#: ../../include/text.php:2305 ../../include/event.php:1259 +#: ../../include/text.php:2331 ../../include/event.php:1340 #: ../../include/conversation.php:132 #: ../../Zotlabs/Module/Channel_calendar.php:221 #: ../../Zotlabs/Module/Like.php:447 ../../Zotlabs/Module/Tagger.php:75 msgid "event" msgstr "" -#: ../../include/text.php:2308 ../../include/conversation.php:158 +#: ../../include/text.php:2334 ../../include/conversation.php:158 #: ../../include/bbcode.php:555 ../../include/markdown.php:205 -#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3391 +#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3613 msgid "post" msgstr "" -#: ../../include/text.php:2310 ../../include/conversation.php:160 +#: ../../include/text.php:2336 ../../include/conversation.php:160 #: ../../Zotlabs/Module/Tagger.php:81 msgid "comment" msgstr "" -#: ../../include/text.php:2315 +#: ../../include/text.php:2341 msgid "activity" msgstr "" -#: ../../include/text.php:2318 +#: ../../include/text.php:2344 msgid "poll" msgstr "" -#: ../../include/text.php:2431 +#: ../../include/text.php:2457 msgid "a-z, 0-9, -, and _ only" msgstr "" -#: ../../include/text.php:2736 +#: ../../include/text.php:2762 msgid "Design Tools" msgstr "" -#: ../../include/text.php:2739 ../../Zotlabs/Module/Blocks.php:154 +#: ../../include/text.php:2765 ../../Zotlabs/Module/Blocks.php:154 msgid "Blocks" msgstr "" -#: ../../include/text.php:2740 ../../Zotlabs/Module/Menu.php:171 +#: ../../include/text.php:2766 ../../Zotlabs/Module/Menu.php:171 msgid "Menus" msgstr "" -#: ../../include/text.php:2741 ../../Zotlabs/Module/Layouts.php:184 +#: ../../include/text.php:2767 ../../Zotlabs/Module/Layouts.php:184 msgid "Layouts" msgstr "" -#: ../../include/text.php:2742 +#: ../../include/text.php:2768 msgid "Pages" msgstr "" -#: ../../include/text.php:2754 +#: ../../include/text.php:2780 msgid "Import" msgstr "" -#: ../../include/text.php:2755 +#: ../../include/text.php:2781 msgid "Import website..." msgstr "" -#: ../../include/text.php:2756 +#: ../../include/text.php:2782 msgid "Select folder to import" msgstr "" -#: ../../include/text.php:2757 +#: ../../include/text.php:2783 msgid "Import from a zipped folder:" msgstr "" -#: ../../include/text.php:2758 +#: ../../include/text.php:2784 msgid "Import from cloud files:" msgstr "" -#: ../../include/text.php:2759 +#: ../../include/text.php:2785 msgid "/cloud/channel/path/to/folder" msgstr "" -#: ../../include/text.php:2760 +#: ../../include/text.php:2786 msgid "Enter path to website files" msgstr "" -#: ../../include/text.php:2761 +#: ../../include/text.php:2787 msgid "Select folder" msgstr "" -#: ../../include/text.php:2762 +#: ../../include/text.php:2788 msgid "Export website..." msgstr "" -#: ../../include/text.php:2763 +#: ../../include/text.php:2789 msgid "Export to a zip file" msgstr "" -#: ../../include/text.php:2764 +#: ../../include/text.php:2790 msgid "website.zip" msgstr "" -#: ../../include/text.php:2765 +#: ../../include/text.php:2791 msgid "Enter a name for the zip file." msgstr "" -#: ../../include/text.php:2766 +#: ../../include/text.php:2792 msgid "Export to cloud files" msgstr "" -#: ../../include/text.php:2767 +#: ../../include/text.php:2793 msgid "/path/to/export/folder" msgstr "" -#: ../../include/text.php:2768 +#: ../../include/text.php:2794 msgid "Enter a path to a cloud files destination." msgstr "" -#: ../../include/text.php:2769 +#: ../../include/text.php:2795 msgid "Specify folder" msgstr "" @@ -4188,7 +4229,7 @@ msgstr "" msgid "This is the home page of %s." msgstr "" -#: ../../include/event.php:33 ../../include/event.php:110 +#: ../../include/event.php:33 ../../include/event.php:128 msgid "l F d, Y \\@ g:i A" msgstr "" @@ -4200,80 +4241,80 @@ msgstr "" msgid "Finishes:" msgstr "" -#: ../../include/event.php:63 ../../include/event.php:134 +#: ../../include/event.php:63 ../../include/event.php:146 #: ../../include/channel.php:1625 ../../Zotlabs/Module/Directory.php:353 msgid "Location:" msgstr "" -#: ../../include/event.php:110 +#: ../../include/event.php:128 msgid "l F d, Y" msgstr "" -#: ../../include/event.php:114 +#: ../../include/event.php:132 msgid "Start:" msgstr "" -#: ../../include/event.php:118 +#: ../../include/event.php:136 msgid "End:" msgstr "" -#: ../../include/event.php:1106 +#: ../../include/event.php:1186 msgid "This event has been added to your calendar." msgstr "" -#: ../../include/event.php:1337 +#: ../../include/event.php:1419 msgid "Not specified" msgstr "" -#: ../../include/event.php:1338 +#: ../../include/event.php:1420 msgid "Needs Action" msgstr "" -#: ../../include/event.php:1339 +#: ../../include/event.php:1421 msgid "Completed" msgstr "" -#: ../../include/event.php:1340 +#: ../../include/event.php:1422 msgid "In Process" msgstr "" -#: ../../include/event.php:1341 +#: ../../include/event.php:1423 msgid "Cancelled" msgstr "" -#: ../../include/event.php:1422 ../../include/connections.php:752 +#: ../../include/event.php:1504 ../../include/connections.php:752 #: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Connedit.php:741 msgid "Mobile" msgstr "" -#: ../../include/event.php:1423 ../../include/connections.php:753 -#: ../../Zotlabs/Widget/Notifications.php:36 ../../Zotlabs/Module/Cdav.php:1382 +#: ../../include/event.php:1505 ../../include/connections.php:753 +#: ../../Zotlabs/Widget/Notifications.php:42 ../../Zotlabs/Module/Cdav.php:1382 #: ../../Zotlabs/Module/Connedit.php:742 msgid "Home" msgstr "" -#: ../../include/event.php:1424 ../../include/connections.php:754 +#: ../../include/event.php:1506 ../../include/connections.php:754 msgid "Home, Voice" msgstr "" -#: ../../include/event.php:1425 ../../include/connections.php:755 +#: ../../include/event.php:1507 ../../include/connections.php:755 msgid "Home, Fax" msgstr "" -#: ../../include/event.php:1426 ../../include/connections.php:756 +#: ../../include/event.php:1508 ../../include/connections.php:756 #: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Connedit.php:743 msgid "Work" msgstr "" -#: ../../include/event.php:1427 ../../include/connections.php:757 +#: ../../include/event.php:1509 ../../include/connections.php:757 msgid "Work, Voice" msgstr "" -#: ../../include/event.php:1428 ../../include/connections.php:758 +#: ../../include/event.php:1510 ../../include/connections.php:758 msgid "Work, Fax" msgstr "" -#: ../../include/event.php:1429 ../../include/event.php:1436 +#: ../../include/event.php:1511 ../../include/event.php:1518 #: ../../include/selectors.php:64 ../../include/selectors.php:81 #: ../../include/selectors.php:119 ../../include/selectors.php:155 #: ../../include/connections.php:759 ../../include/connections.php:766 @@ -4486,7 +4527,7 @@ msgstr "" msgid "Change channels directly from within the navigation dropdown menu" msgstr "" -#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:16 +#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:22 #: ../../Zotlabs/Module/Connections.php:338 msgid "Network" msgstr "" @@ -4507,7 +4548,7 @@ msgstr "" msgid "Ability to display only polls" msgstr "" -#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:83 +#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89 msgid "Saved Searches" msgstr "" @@ -4516,8 +4557,8 @@ msgid "Save search terms for re-use" msgstr "" #: ../../include/features.php:318 ../../include/contact_widgets.php:53 -#: ../../Zotlabs/Widget/Activity_filter.php:189 -#: ../../Zotlabs/Widget/Filer.php:28 +#: ../../Zotlabs/Widget/Activity_filter.php:196 +#: ../../Zotlabs/Widget/Filer.php:33 msgid "Saved Folders" msgstr "" @@ -4748,7 +4789,7 @@ msgstr "" msgid "Pin to the top" msgstr "" -#: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:155 +#: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:158 #: ../../Zotlabs/Lib/ThreadItem.php:509 msgid "Unpin from the top" msgstr "" @@ -5014,43 +5055,59 @@ msgstr "" msgid "Upload New Photos" msgstr "" -#: ../../include/network.php:1737 ../../include/network.php:1738 +#: ../../include/network.php:412 +msgid "url: " +msgstr "" + +#: ../../include/network.php:413 +msgid "error_code: " +msgstr "" + +#: ../../include/network.php:414 +msgid "error_string: " +msgstr "" + +#: ../../include/network.php:415 +msgid "content-type: " +msgstr "" + +#: ../../include/network.php:1762 ../../include/network.php:1763 msgid "Friendica" msgstr "" -#: ../../include/network.php:1739 +#: ../../include/network.php:1764 msgid "OStatus" msgstr "" -#: ../../include/network.php:1740 +#: ../../include/network.php:1765 msgid "GNU-Social" msgstr "" -#: ../../include/network.php:1741 +#: ../../include/network.php:1766 msgid "RSS/Atom" msgstr "" -#: ../../include/network.php:1744 +#: ../../include/network.php:1769 msgid "Diaspora" msgstr "" -#: ../../include/network.php:1745 +#: ../../include/network.php:1770 msgid "Facebook" msgstr "" -#: ../../include/network.php:1746 +#: ../../include/network.php:1771 msgid "Zot" msgstr "" -#: ../../include/network.php:1747 +#: ../../include/network.php:1772 msgid "LinkedIn" msgstr "" -#: ../../include/network.php:1748 +#: ../../include/network.php:1773 msgid "XMPP/IM" msgstr "" -#: ../../include/network.php:1749 +#: ../../include/network.php:1774 msgid "MySpace" msgstr "" @@ -5085,7 +5142,7 @@ msgstr[0] "" msgstr[1] "" #: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145 -#: ../../Zotlabs/Module/Admin/Site.php:416 +#: ../../Zotlabs/Module/Admin/Site.php:419 msgid "Advanced" msgstr "" @@ -5128,15 +5185,15 @@ msgstr "" msgid "Advanced example: name=fred and country=iceland" msgstr "" -#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:115 -#: ../../include/contact_widgets.php:159 ../../include/contact_widgets.php:204 -#: ../../include/contact_widgets.php:239 -#: ../../Zotlabs/Widget/Appcategories.php:46 ../../Zotlabs/Widget/Filer.php:31 +#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:119 +#: ../../include/contact_widgets.php:163 ../../include/contact_widgets.php:208 +#: ../../include/contact_widgets.php:243 +#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36 msgid "Everything" msgstr "" -#: ../../include/contact_widgets.php:112 ../../include/contact_widgets.php:156 -#: ../../include/contact_widgets.php:201 ../../include/contact_widgets.php:236 +#: ../../include/contact_widgets.php:116 ../../include/contact_widgets.php:160 +#: ../../include/contact_widgets.php:205 ../../include/contact_widgets.php:240 #: ../../include/taxonomy.php:420 ../../include/taxonomy.php:502 #: ../../include/taxonomy.php:522 ../../include/taxonomy.php:543 #: ../../Zotlabs/Module/Cdav.php:1070 ../../Zotlabs/Storage/Browser.php:293 @@ -5144,16 +5201,16 @@ msgstr "" msgid "Categories" msgstr "" -#: ../../include/contact_widgets.php:269 +#: ../../include/contact_widgets.php:273 msgid "Common Connections" msgstr "" -#: ../../include/contact_widgets.php:273 +#: ../../include/contact_widgets.php:277 #, php-format msgid "View all %d common connections" msgstr "" -#: ../../include/language.php:441 +#: ../../include/language.php:446 msgid "Select an alternate language" msgstr "" @@ -5178,7 +5235,7 @@ msgstr "" msgid "Click to authenticate to your home hub" msgstr "" -#: ../../include/nav.php:98 ../../Zotlabs/Widget/Admin.php:24 +#: ../../include/nav.php:98 ../../Zotlabs/Widget/Admin.php:29 #: ../../Zotlabs/Module/Admin/Channels.php:146 #: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116 msgid "Channels" @@ -5188,8 +5245,8 @@ msgstr "" msgid "Manage your channels" msgstr "" -#: ../../include/nav.php:101 ../../Zotlabs/Widget/Settings_menu.php:66 -#: ../../Zotlabs/Widget/Newmember.php:53 +#: ../../include/nav.php:101 ../../Zotlabs/Widget/Settings_menu.php:71 +#: ../../Zotlabs/Widget/Newmember.php:58 #: ../../Zotlabs/Module/Admin/Themes.php:125 #: ../../Zotlabs/Module/Admin/Addons.php:345 ../../Zotlabs/Lib/Apps.php:343 msgid "Settings" @@ -5200,7 +5257,7 @@ msgid "Account/Channel Settings" msgstr "" #: ../../include/nav.php:107 ../../include/nav.php:137 -#: ../../include/nav.php:158 ../../boot.php:1737 +#: ../../include/nav.php:158 ../../boot.php:1751 msgid "Logout" msgstr "" @@ -5221,12 +5278,12 @@ msgstr "" msgid "Manage/Edit profiles" msgstr "" -#: ../../include/nav.php:115 ../../Zotlabs/Widget/Newmember.php:35 +#: ../../include/nav.php:115 ../../Zotlabs/Widget/Newmember.php:40 msgid "Edit your profile" msgstr "" #: ../../include/nav.php:122 ../../include/nav.php:126 -#: ../../Zotlabs/Lib/Apps.php:340 ../../boot.php:1738 +#: ../../Zotlabs/Lib/Apps.php:340 ../../boot.php:1752 msgid "Login" msgstr "" @@ -5243,7 +5300,7 @@ msgid "Log me out of this site" msgstr "" #: ../../include/nav.php:163 ../../Zotlabs/Module/Register.php:542 -#: ../../boot.php:1715 +#: ../../boot.php:1729 msgid "Register" msgstr "" @@ -5259,7 +5316,7 @@ msgstr "" msgid "Search site @name, !forum, #tag, ?docs, content" msgstr "" -#: ../../include/nav.php:196 ../../Zotlabs/Widget/Admin.php:55 +#: ../../include/nav.php:196 ../../Zotlabs/Widget/Admin.php:60 msgid "Admin" msgstr "" @@ -5267,8 +5324,8 @@ msgstr "" msgid "Site Setup and Configuration" msgstr "" -#: ../../include/nav.php:319 ../../Zotlabs/Widget/Messages.php:28 -#: ../../Zotlabs/Widget/Notifications.php:166 +#: ../../include/nav.php:319 ../../Zotlabs/Widget/Messages.php:36 +#: ../../Zotlabs/Widget/Notifications.php:172 #: ../../Zotlabs/Module/New_channel.php:157 #: ../../Zotlabs/Module/New_channel.php:164 #: ../../Zotlabs/Module/Defperms.php:254 @@ -5320,7 +5377,7 @@ msgstr "" msgid "Profile Details" msgstr "" -#: ../../include/nav.php:455 ../../Zotlabs/Widget/Notifications.php:101 +#: ../../include/nav.php:455 ../../Zotlabs/Widget/Notifications.php:107 #: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:344 #: ../../Zotlabs/Storage/Browser.php:351 msgid "Files" @@ -5331,7 +5388,7 @@ msgid "Files and Storage" msgstr "" #: ../../include/nav.php:480 ../../include/nav.php:483 -#: ../../Zotlabs/Widget/Chatroom_list.php:16 ../../Zotlabs/Lib/Apps.php:334 +#: ../../Zotlabs/Widget/Chatroom_list.php:22 ../../Zotlabs/Lib/Apps.php:334 msgid "Chatrooms" msgstr "" @@ -5371,7 +5428,7 @@ msgstr "" msgid "View Webpages" msgstr "" -#: ../../include/nav.php:539 ../../Zotlabs/Widget/Wiki_list.php:15 +#: ../../include/nav.php:539 ../../Zotlabs/Widget/Wiki_list.php:20 #: ../../Zotlabs/Module/Wiki.php:203 msgid "Wikis" msgstr "" @@ -5388,15 +5445,15 @@ msgstr "" msgid "Logged out." msgstr "" -#: ../../include/auth.php:294 +#: ../../include/auth.php:297 msgid "Email validation is incomplete. Please check your email." msgstr "" -#: ../../include/auth.php:310 +#: ../../include/auth.php:313 msgid "Failed authentication" msgstr "" -#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:51 +#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56 #: ../../Zotlabs/Module/Profiles.php:753 msgid "Miscellaneous" msgstr "" @@ -5413,7 +5470,7 @@ msgstr "" msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: ../../include/datetime.php:238 ../../boot.php:2751 +#: ../../include/datetime.php:238 ../../boot.php:2768 msgid "never" msgstr "" @@ -5496,10 +5553,10 @@ msgstr "" #: ../../include/cdav.php:158 ../../include/cdav.php:159 #: ../../include/cdav.php:167 ../../include/conversation.php:1238 -#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Pinned.php:268 -#: ../../Zotlabs/Widget/Portfolio.php:95 +#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Pinned.php:271 +#: ../../Zotlabs/Widget/Portfolio.php:99 #: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:799 -#: ../../Zotlabs/Module/Photos.php:1259 ../../Zotlabs/Lib/Activity.php:1656 +#: ../../Zotlabs/Module/Photos.php:1259 ../../Zotlabs/Lib/Activity.php:1691 #: ../../Zotlabs/Lib/Apps.php:1146 ../../Zotlabs/Lib/Apps.php:1230 msgid "Unknown" msgstr "" @@ -5564,37 +5621,37 @@ msgctxt "title" msgid "Dislikes" msgstr "" -#: ../../include/conversation.php:654 ../../Zotlabs/Widget/Pinned.php:77 +#: ../../include/conversation.php:654 ../../Zotlabs/Widget/Pinned.php:80 #: ../../Zotlabs/Module/Photos.php:1120 msgctxt "title" msgid "Agree" msgstr "" -#: ../../include/conversation.php:655 ../../Zotlabs/Widget/Pinned.php:78 +#: ../../include/conversation.php:655 ../../Zotlabs/Widget/Pinned.php:81 #: ../../Zotlabs/Module/Photos.php:1120 msgctxt "title" msgid "Disagree" msgstr "" -#: ../../include/conversation.php:656 ../../Zotlabs/Widget/Pinned.php:79 +#: ../../include/conversation.php:656 ../../Zotlabs/Widget/Pinned.php:82 #: ../../Zotlabs/Module/Photos.php:1120 msgctxt "title" msgid "Abstain" msgstr "" -#: ../../include/conversation.php:657 ../../Zotlabs/Widget/Pinned.php:66 +#: ../../include/conversation.php:657 ../../Zotlabs/Widget/Pinned.php:69 #: ../../Zotlabs/Module/Photos.php:1121 msgctxt "title" msgid "Attending" msgstr "" -#: ../../include/conversation.php:658 ../../Zotlabs/Widget/Pinned.php:67 +#: ../../include/conversation.php:658 ../../Zotlabs/Widget/Pinned.php:70 #: ../../Zotlabs/Module/Photos.php:1121 msgctxt "title" msgid "Not attending" msgstr "" -#: ../../include/conversation.php:659 ../../Zotlabs/Widget/Pinned.php:68 +#: ../../include/conversation.php:659 ../../Zotlabs/Widget/Pinned.php:71 #: ../../Zotlabs/Module/Photos.php:1121 msgctxt "title" msgid "Might attend" @@ -5613,7 +5670,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Accounts.php:320 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:176 -#: ../../Zotlabs/Module/Permcats.php:232 +#: ../../Zotlabs/Module/Permcats.php:261 #: ../../Zotlabs/Module/Contactedit.php:667 ../../Zotlabs/Module/Blocks.php:162 #: ../../Zotlabs/Module/Editblock.php:139 #: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Photos.php:1185 @@ -5632,12 +5689,12 @@ msgstr "" msgid "Private Message" msgstr "" -#: ../../include/conversation.php:751 ../../Zotlabs/Widget/Pinned.php:88 +#: ../../include/conversation.php:751 ../../Zotlabs/Widget/Pinned.php:91 #: ../../Zotlabs/Lib/ThreadItem.php:314 msgid "Message signature validated" msgstr "" -#: ../../include/conversation.php:752 ../../Zotlabs/Widget/Pinned.php:89 +#: ../../include/conversation.php:752 ../../Zotlabs/Widget/Pinned.php:92 #: ../../Zotlabs/Lib/ThreadItem.php:315 msgid "Message signature incorrect" msgstr "" @@ -5662,19 +5719,19 @@ msgstr "" msgid "Filed under:" msgstr "" -#: ../../include/conversation.php:823 ../../Zotlabs/Widget/Pinned.php:132 +#: ../../include/conversation.php:823 ../../Zotlabs/Widget/Pinned.php:135 #: ../../Zotlabs/Lib/ThreadItem.php:466 #, php-format msgid "from %s" msgstr "" -#: ../../include/conversation.php:826 ../../Zotlabs/Widget/Pinned.php:135 +#: ../../include/conversation.php:826 ../../Zotlabs/Widget/Pinned.php:138 #: ../../Zotlabs/Lib/ThreadItem.php:469 #, php-format msgid "last edited: %s" msgstr "" -#: ../../include/conversation.php:827 ../../Zotlabs/Widget/Pinned.php:136 +#: ../../include/conversation.php:827 ../../Zotlabs/Widget/Pinned.php:139 #: ../../Zotlabs/Lib/ThreadItem.php:470 #, php-format msgid "Expires: %s" @@ -5722,8 +5779,8 @@ msgid "Recent Activity" msgstr "" #: ../../include/conversation.php:1117 ../../include/connections.php:112 -#: ../../include/channel.php:1610 ../../Zotlabs/Widget/Suggestions.php:46 -#: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Module/Directory.php:369 +#: ../../include/channel.php:1610 ../../Zotlabs/Widget/Suggestions.php:51 +#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Directory.php:369 #: ../../Zotlabs/Module/Connections.php:356 ../../Zotlabs/Module/Suggest.php:69 msgid "Connect" msgstr "" @@ -6043,7 +6100,7 @@ msgid "Sex Addict" msgstr "" #: ../../include/selectors.php:138 ../../include/channel.php:456 -#: ../../include/channel.php:459 ../../Zotlabs/Widget/Affinity.php:32 +#: ../../include/channel.php:459 ../../Zotlabs/Widget/Affinity.php:38 #: ../../Zotlabs/Module/Contactedit.php:297 #: ../../Zotlabs/Module/Connedit.php:581 msgid "Friends" @@ -6157,7 +6214,7 @@ msgid "edit" msgstr "" #: ../../include/group.php:327 ../../include/acl_selectors.php:87 -#: ../../Zotlabs/Widget/Activity_filter.php:88 +#: ../../Zotlabs/Widget/Activity_filter.php:95 #: ../../Zotlabs/Module/Group.php:143 ../../Zotlabs/Lib/Apps.php:368 msgid "Privacy Groups" msgstr "" @@ -6174,7 +6231,7 @@ msgstr "" msgid "Channels not in any privacy group" msgstr "" -#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:84 +#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90 msgid "add" msgstr "" @@ -6183,7 +6240,7 @@ msgid "Trending" msgstr "" #: ../../include/taxonomy.php:323 ../../include/taxonomy.php:460 -#: ../../include/taxonomy.php:481 ../../Zotlabs/Widget/Tagcloud.php:22 +#: ../../include/taxonomy.php:481 ../../Zotlabs/Widget/Tagcloud.php:27 msgid "Tags" msgstr "" @@ -6223,110 +6280,109 @@ msgstr "" msgid "dislikes" msgstr "" -#: ../../include/items.php:979 ../../include/items.php:1039 +#: ../../include/items.php:980 ../../include/items.php:1040 msgid "(Unknown)" msgstr "" -#: ../../include/items.php:1246 +#: ../../include/items.php:1229 msgid "Visible to anybody on the internet." msgstr "" -#: ../../include/items.php:1248 +#: ../../include/items.php:1231 msgid "Visible to you only." msgstr "" -#: ../../include/items.php:1250 +#: ../../include/items.php:1233 msgid "Visible to anybody in this network." msgstr "" -#: ../../include/items.php:1252 +#: ../../include/items.php:1235 msgid "Visible to anybody authenticated." msgstr "" -#: ../../include/items.php:1254 +#: ../../include/items.php:1237 #, php-format msgid "Visible to anybody on %s." msgstr "" -#: ../../include/items.php:1256 +#: ../../include/items.php:1239 msgid "Visible to all connections." msgstr "" -#: ../../include/items.php:1258 +#: ../../include/items.php:1241 msgid "Visible to approved connections." msgstr "" -#: ../../include/items.php:1260 +#: ../../include/items.php:1243 msgid "Visible to specific connections." msgstr "" -#: ../../include/items.php:3322 ../../Zotlabs/Module/Share.php:104 -#: ../../Zotlabs/Lib/Activity.php:2310 +#: ../../include/items.php:3305 ../../Zotlabs/Module/Share.php:104 #, php-format msgid "🔁 Repeated %1$s's %2$s" msgstr "" -#: ../../include/items.php:4381 ../../Zotlabs/Module/Group.php:62 +#: ../../include/items.php:4397 ../../Zotlabs/Module/Group.php:62 #: ../../Zotlabs/Module/Group.php:206 msgid "Privacy group not found." msgstr "" -#: ../../include/items.php:4397 +#: ../../include/items.php:4413 msgid "Privacy group is empty." msgstr "" -#: ../../include/items.php:4404 +#: ../../include/items.php:4420 #, php-format msgid "Privacy group: %s" msgstr "" -#: ../../include/items.php:4414 +#: ../../include/items.php:4430 #, php-format msgid "Connection: %s" msgstr "" -#: ../../include/items.php:4416 +#: ../../include/items.php:4432 msgid "Connection not found." msgstr "" -#: ../../include/items.php:4762 ../../Zotlabs/Module/Cover_photo.php:297 +#: ../../include/items.php:4778 ../../Zotlabs/Module/Cover_photo.php:297 msgid "female" msgstr "" -#: ../../include/items.php:4763 ../../Zotlabs/Module/Cover_photo.php:298 +#: ../../include/items.php:4779 ../../Zotlabs/Module/Cover_photo.php:298 #, php-format msgid "%1$s updated her %2$s" msgstr "" -#: ../../include/items.php:4764 ../../Zotlabs/Module/Cover_photo.php:299 +#: ../../include/items.php:4780 ../../Zotlabs/Module/Cover_photo.php:299 msgid "male" msgstr "" -#: ../../include/items.php:4765 ../../Zotlabs/Module/Cover_photo.php:300 +#: ../../include/items.php:4781 ../../Zotlabs/Module/Cover_photo.php:300 #, php-format msgid "%1$s updated his %2$s" msgstr "" -#: ../../include/items.php:4767 ../../Zotlabs/Module/Cover_photo.php:302 +#: ../../include/items.php:4783 ../../Zotlabs/Module/Cover_photo.php:302 #, php-format msgid "%1$s updated their %2$s" msgstr "" -#: ../../include/items.php:4769 +#: ../../include/items.php:4785 msgid "profile photo" msgstr "" -#: ../../include/items.php:4962 +#: ../../include/items.php:4978 #, php-format msgid "[Edited %s]" msgstr "" -#: ../../include/items.php:4962 +#: ../../include/items.php:4978 msgctxt "edit_activity" msgid "Post" msgstr "" -#: ../../include/items.php:4962 +#: ../../include/items.php:4978 msgctxt "edit_activity" msgid "Comment" msgstr "" @@ -6511,8 +6567,8 @@ msgid "%1$s's bookmarks" msgstr "" #: ../../include/menu.php:120 ../../include/channel.php:1530 -#: ../../include/channel.php:1534 ../../Zotlabs/Widget/Cdav.php:138 -#: ../../Zotlabs/Widget/Cdav.php:175 ../../Zotlabs/Module/Article_edit.php:97 +#: ../../include/channel.php:1534 ../../Zotlabs/Widget/Cdav.php:142 +#: ../../Zotlabs/Widget/Cdav.php:179 ../../Zotlabs/Module/Article_edit.php:97 #: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Card_edit.php:99 #: ../../Zotlabs/Module/Oauth.php:171 ../../Zotlabs/Module/Editwebpage.php:142 #: ../../Zotlabs/Module/Webpages.php:252 @@ -6816,7 +6872,7 @@ msgid "cover photo" msgstr "" #: ../../include/channel.php:2610 ../../Zotlabs/Module/Rmagic.php:96 -#: ../../boot.php:1739 +#: ../../boot.php:1753 msgid "Remote Authentication" msgstr "" @@ -6846,10 +6902,10 @@ msgstr "" msgid "Private Forum" msgstr "" -#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:100 -#: ../../Zotlabs/Widget/Activity_filter.php:123 -#: ../../Zotlabs/Widget/Notifications.php:124 -#: ../../Zotlabs/Widget/Notifications.php:125 +#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77 +#: ../../Zotlabs/Widget/Activity_filter.php:130 +#: ../../Zotlabs/Widget/Notifications.php:130 +#: ../../Zotlabs/Widget/Notifications.php:131 msgid "Forums" msgstr "" @@ -6888,102 +6944,102 @@ msgid "" "permissions set who is allowed to view the post." msgstr "" -#: ../../include/oembed.php:153 +#: ../../include/oembed.php:154 msgid "View PDF" msgstr "" -#: ../../include/oembed.php:365 +#: ../../include/oembed.php:367 msgid " by " msgstr "" -#: ../../include/oembed.php:366 +#: ../../include/oembed.php:368 msgid " on " msgstr "" -#: ../../include/oembed.php:395 +#: ../../include/oembed.php:397 msgid "Embedded content" msgstr "" -#: ../../include/oembed.php:404 +#: ../../include/oembed.php:406 msgid "Embedding disabled" msgstr "" -#: ../../include/zid.php:406 +#: ../../include/zid.php:408 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:90 +#: ../../Zotlabs/Widget/Activity_order.php:96 msgid "Commented Date" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:94 +#: ../../Zotlabs/Widget/Activity_order.php:100 msgid "Order by last commented date" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:97 +#: ../../Zotlabs/Widget/Activity_order.php:103 msgid "Posted Date" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:101 +#: ../../Zotlabs/Widget/Activity_order.php:107 msgid "Order by last posted date" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:104 +#: ../../Zotlabs/Widget/Activity_order.php:110 msgid "Date Unthreaded" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:108 +#: ../../Zotlabs/Widget/Activity_order.php:114 msgid "Order unthreaded by date" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:123 +#: ../../Zotlabs/Widget/Activity_order.php:129 msgid "Stream Order" msgstr "" -#: ../../Zotlabs/Widget/Tokens.php:35 +#: ../../Zotlabs/Widget/Tokens.php:41 msgid "Add new guest" msgstr "" -#: ../../Zotlabs/Widget/Tokens.php:43 ../../Zotlabs/Module/Lockview.php:226 +#: ../../Zotlabs/Widget/Tokens.php:49 ../../Zotlabs/Module/Lockview.php:226 msgid "Guest access" msgstr "" -#: ../../Zotlabs/Widget/Archive.php:43 +#: ../../Zotlabs/Widget/Archive.php:49 msgid "Archives" msgstr "" -#: ../../Zotlabs/Widget/Wiki_pages.php:34 -#: ../../Zotlabs/Widget/Wiki_pages.php:91 +#: ../../Zotlabs/Widget/Wiki_pages.php:40 +#: ../../Zotlabs/Widget/Wiki_pages.php:97 msgid "Add new page" msgstr "" -#: ../../Zotlabs/Widget/Wiki_pages.php:41 -#: ../../Zotlabs/Widget/Wiki_pages.php:98 ../../Zotlabs/Module/Dreport.php:129 +#: ../../Zotlabs/Widget/Wiki_pages.php:47 +#: ../../Zotlabs/Widget/Wiki_pages.php:104 ../../Zotlabs/Module/Dreport.php:130 msgid "Options" msgstr "" -#: ../../Zotlabs/Widget/Wiki_pages.php:85 +#: ../../Zotlabs/Widget/Wiki_pages.php:91 msgid "Wiki Pages" msgstr "" -#: ../../Zotlabs/Widget/Wiki_pages.php:96 +#: ../../Zotlabs/Widget/Wiki_pages.php:102 msgid "Page name" msgstr "" -#: ../../Zotlabs/Widget/Album.php:78 ../../Zotlabs/Widget/Portfolio.php:87 +#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Portfolio.php:91 #: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:793 #: ../../Zotlabs/Module/Photos.php:1337 msgid "View Photo" msgstr "" -#: ../../Zotlabs/Widget/Album.php:95 ../../Zotlabs/Widget/Portfolio.php:108 +#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112 #: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:824 msgid "Edit Album" msgstr "" -#: ../../Zotlabs/Widget/Album.php:97 ../../Zotlabs/Widget/Cdav.php:146 -#: ../../Zotlabs/Widget/Cdav.php:182 ../../Zotlabs/Widget/Portfolio.php:110 +#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Cdav.php:150 +#: ../../Zotlabs/Widget/Cdav.php:186 ../../Zotlabs/Widget/Portfolio.php:114 #: ../../Zotlabs/Module/Embedphotos.php:189 #: ../../Zotlabs/Module/Profile_photo.php:543 #: ../../Zotlabs/Module/Cover_photo.php:423 ../../Zotlabs/Module/Photos.php:692 @@ -6991,119 +7047,115 @@ msgstr "" msgid "Upload" msgstr "" -#: ../../Zotlabs/Widget/Tasklist.php:23 +#: ../../Zotlabs/Widget/Tasklist.php:26 msgid "Tasks" msgstr "" -#: ../../Zotlabs/Widget/Pubsites.php:12 ../../Zotlabs/Module/Pubsites.php:24 -msgid "Public Hubs" -msgstr "" - -#: ../../Zotlabs/Widget/Chatroom_members.php:11 +#: ../../Zotlabs/Widget/Chatroom_members.php:17 msgid "Chat Members" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:235 +#: ../../Zotlabs/Widget/Pinned.php:73 ../../Zotlabs/Lib/ThreadItem.php:235 msgid "I will attend" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:235 +#: ../../Zotlabs/Widget/Pinned.php:73 ../../Zotlabs/Lib/ThreadItem.php:235 msgid "I will not attend" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:235 +#: ../../Zotlabs/Widget/Pinned.php:73 ../../Zotlabs/Lib/ThreadItem.php:235 msgid "I might attend" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:249 +#: ../../Zotlabs/Widget/Pinned.php:84 ../../Zotlabs/Lib/ThreadItem.php:249 msgid "I agree" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:249 +#: ../../Zotlabs/Widget/Pinned.php:84 ../../Zotlabs/Lib/ThreadItem.php:249 msgid "I disagree" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:249 +#: ../../Zotlabs/Widget/Pinned.php:84 ../../Zotlabs/Lib/ThreadItem.php:249 msgid "I abstain" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:99 ../../Zotlabs/Lib/ThreadItem.php:359 +#: ../../Zotlabs/Widget/Pinned.php:102 ../../Zotlabs/Lib/ThreadItem.php:359 msgid "Share This" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:99 ../../Zotlabs/Lib/ThreadItem.php:359 +#: ../../Zotlabs/Widget/Pinned.php:102 ../../Zotlabs/Lib/ThreadItem.php:359 msgid "share" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:122 ../../Zotlabs/Widget/Pinned.php:123 +#: ../../Zotlabs/Widget/Pinned.php:125 ../../Zotlabs/Widget/Pinned.php:126 #, php-format msgid "View %s's profile - %s" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:127 ../../Zotlabs/Widget/Messages.php:99 +#: ../../Zotlabs/Widget/Pinned.php:130 ../../Zotlabs/Widget/Messages.php:107 #: ../../Zotlabs/Lib/ThreadItem.php:450 msgid "via" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:141 ../../Zotlabs/Lib/ThreadItem.php:481 +#: ../../Zotlabs/Widget/Pinned.php:144 ../../Zotlabs/Lib/ThreadItem.php:481 msgid "Attendance Options" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:142 ../../Zotlabs/Lib/ThreadItem.php:483 +#: ../../Zotlabs/Widget/Pinned.php:145 ../../Zotlabs/Lib/ThreadItem.php:483 msgid "Voting Options" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:154 ../../Zotlabs/Lib/ThreadItem.php:507 +#: ../../Zotlabs/Widget/Pinned.php:157 ../../Zotlabs/Lib/ThreadItem.php:507 msgid "Pinned post" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:156 +#: ../../Zotlabs/Widget/Pinned.php:159 msgid "Don't show" msgstr "" -#: ../../Zotlabs/Widget/Activity.php:50 +#: ../../Zotlabs/Widget/Activity.php:55 msgctxt "widget" msgid "Activity" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:37 +#: ../../Zotlabs/Widget/Cdav.php:41 msgid "Select Channel" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:42 +#: ../../Zotlabs/Widget/Cdav.php:46 msgid "Read-write" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:43 +#: ../../Zotlabs/Widget/Cdav.php:47 msgid "Read-only" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:127 +#: ../../Zotlabs/Widget/Cdav.php:131 msgid "Channel Calendar" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:129 ../../Zotlabs/Widget/Cdav.php:143 +#: ../../Zotlabs/Widget/Cdav.php:133 ../../Zotlabs/Widget/Cdav.php:147 #: ../../Zotlabs/Module/Cdav.php:1054 msgid "CalDAV Calendars" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:131 +#: ../../Zotlabs/Widget/Cdav.php:135 msgid "Shared CalDAV Calendars" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:135 +#: ../../Zotlabs/Widget/Cdav.php:139 msgid "Share this calendar" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:137 +#: ../../Zotlabs/Widget/Cdav.php:141 msgid "Calendar name and color" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:139 +#: ../../Zotlabs/Widget/Cdav.php:143 msgid "Create new CalDAV calendar" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:140 ../../Zotlabs/Widget/Cdav.php:178 +#: ../../Zotlabs/Widget/Cdav.php:144 ../../Zotlabs/Widget/Cdav.php:182 #: ../../Zotlabs/Module/Cdav.php:1058 ../../Zotlabs/Module/Cdav.php:1387 #: ../../Zotlabs/Module/Webpages.php:251 #: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Blocks.php:159 @@ -7113,482 +7165,470 @@ msgstr "" msgid "Create" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:141 +#: ../../Zotlabs/Widget/Cdav.php:145 msgid "Calendar Name" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:142 +#: ../../Zotlabs/Widget/Cdav.php:146 msgid "Calendar Tools" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:143 ../../Zotlabs/Module/Cdav.php:1054 +#: ../../Zotlabs/Widget/Cdav.php:147 ../../Zotlabs/Module/Cdav.php:1054 msgid "Channel Calendars" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:144 +#: ../../Zotlabs/Widget/Cdav.php:148 msgid "Import calendar" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:145 +#: ../../Zotlabs/Widget/Cdav.php:149 msgid "Select a calendar to import to" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:172 +#: ../../Zotlabs/Widget/Cdav.php:176 msgid "Addressbooks" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:174 +#: ../../Zotlabs/Widget/Cdav.php:178 msgid "Addressbook name" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:176 +#: ../../Zotlabs/Widget/Cdav.php:180 msgid "Create new addressbook" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:177 +#: ../../Zotlabs/Widget/Cdav.php:181 msgid "Addressbook Name" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:179 +#: ../../Zotlabs/Widget/Cdav.php:183 msgid "Addressbook Tools" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:180 +#: ../../Zotlabs/Widget/Cdav.php:184 msgid "Import addressbook" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:181 +#: ../../Zotlabs/Widget/Cdav.php:185 msgid "Select an addressbook to import to" msgstr "" -#: ../../Zotlabs/Widget/Savedsearch.php:75 +#: ../../Zotlabs/Widget/Savedsearch.php:81 msgid "Remove term" msgstr "" -#: ../../Zotlabs/Widget/Suggestedchats.php:32 +#: ../../Zotlabs/Widget/Suggestedchats.php:36 msgid "Suggested Chatrooms" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:32 +#: ../../Zotlabs/Widget/Settings_menu.php:37 msgid "Account settings" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:38 +#: ../../Zotlabs/Widget/Settings_menu.php:43 msgid "Channel settings" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:44 +#: ../../Zotlabs/Widget/Settings_menu.php:49 msgid "Privacy settings" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:51 +#: ../../Zotlabs/Widget/Settings_menu.php:56 msgid "Display settings" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:58 +#: ../../Zotlabs/Widget/Settings_menu.php:63 msgid "Manage locations" msgstr "" -#: ../../Zotlabs/Widget/Chatroom_list.php:20 +#: ../../Zotlabs/Widget/Chatroom_list.php:26 msgid "Overview" msgstr "" -#: ../../Zotlabs/Widget/Suggestions.php:48 ../../Zotlabs/Module/Suggest.php:71 +#: ../../Zotlabs/Widget/Suggestions.php:53 ../../Zotlabs/Module/Suggest.php:71 msgid "Ignore/Hide" msgstr "" -#: ../../Zotlabs/Widget/Suggestions.php:53 +#: ../../Zotlabs/Widget/Suggestions.php:58 msgid "Suggestions" msgstr "" -#: ../../Zotlabs/Widget/Suggestions.php:54 +#: ../../Zotlabs/Widget/Suggestions.php:59 msgid "See more..." msgstr "" -#: ../../Zotlabs/Widget/Bookmarkedchats.php:24 +#: ../../Zotlabs/Widget/Bookmarkedchats.php:25 msgid "Bookmarked Chatrooms" msgstr "" -#: ../../Zotlabs/Widget/Appcategories.php:43 +#: ../../Zotlabs/Widget/Appcategories.php:49 msgid "App Categories" msgstr "" -#: ../../Zotlabs/Widget/Wiki_page_history.php:23 +#: ../../Zotlabs/Widget/Wiki_page_history.php:29 #: ../../Zotlabs/Lib/NativeWikiPage.php:583 msgctxt "wiki_history" msgid "Message" msgstr "" -#: ../../Zotlabs/Widget/Wiki_page_history.php:24 +#: ../../Zotlabs/Widget/Wiki_page_history.php:30 #: ../../Zotlabs/Lib/NativeWikiPage.php:584 msgid "Date" msgstr "" -#: ../../Zotlabs/Widget/Wiki_page_history.php:25 +#: ../../Zotlabs/Widget/Wiki_page_history.php:31 #: ../../Zotlabs/Module/Wiki.php:364 ../../Zotlabs/Lib/NativeWikiPage.php:585 msgid "Revert" msgstr "" -#: ../../Zotlabs/Widget/Wiki_page_history.php:26 +#: ../../Zotlabs/Widget/Wiki_page_history.php:32 #: ../../Zotlabs/Lib/NativeWikiPage.php:586 msgid "Compare" msgstr "" -#: ../../Zotlabs/Widget/Hq_controls.php:17 +#: ../../Zotlabs/Widget/Hq_controls.php:24 msgid "Toggle post editor" msgstr "" -#: ../../Zotlabs/Widget/Hq_controls.php:28 +#: ../../Zotlabs/Widget/Hq_controls.php:35 msgid "Toggle personal notes" msgstr "" -#: ../../Zotlabs/Widget/Permcats.php:35 +#: ../../Zotlabs/Widget/Permcats.php:42 msgid "Add new role" msgstr "" -#: ../../Zotlabs/Widget/Permcats.php:86 +#: ../../Zotlabs/Widget/Permcats.php:93 #: ../../Zotlabs/Module/Contactedit.php:409 msgid "Contact roles" msgstr "" -#: ../../Zotlabs/Widget/Permcats.php:87 +#: ../../Zotlabs/Widget/Permcats.php:94 msgid "Role members" msgstr "" -#: ../../Zotlabs/Widget/Photo.php:48 ../../Zotlabs/Widget/Photo_rand.php:58 +#: ../../Zotlabs/Widget/Photo.php:54 ../../Zotlabs/Widget/Photo_rand.php:63 msgid "photo/image" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:411 +#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:414 msgid "Site" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:23 +#: ../../Zotlabs/Widget/Admin.php:28 #: ../../Zotlabs/Module/Admin/Accounts.php:308 #: ../../Zotlabs/Module/Admin/Accounts.php:327 #: ../../Zotlabs/Module/Admin.php:95 msgid "Accounts" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:23 ../../Zotlabs/Widget/Admin.php:60 +#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:65 msgid "Member registrations waiting for confirmation" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:25 ../../Zotlabs/Module/Admin/Security.php:99 +#: ../../Zotlabs/Widget/Admin.php:30 ../../Zotlabs/Module/Admin/Security.php:99 msgid "Security" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:26 ../../Zotlabs/Lib/Apps.php:362 +#: ../../Zotlabs/Widget/Admin.php:31 ../../Zotlabs/Lib/Apps.php:362 msgid "Features" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Addons.php:343 +#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:343 #: ../../Zotlabs/Module/Admin/Addons.php:441 msgid "Addons" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Module/Admin/Themes.php:123 +#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:123 #: ../../Zotlabs/Module/Admin/Themes.php:157 msgid "Themes" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:29 +#: ../../Zotlabs/Widget/Admin.php:34 msgid "Inspect queue" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:30 ../../Zotlabs/Module/Admin/Profs.php:168 +#: ../../Zotlabs/Widget/Admin.php:35 ../../Zotlabs/Module/Admin/Profs.php:168 msgid "Profile Fields" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:31 +#: ../../Zotlabs/Widget/Admin.php:36 msgid "DB updates" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:48 ../../Zotlabs/Widget/Admin.php:58 +#: ../../Zotlabs/Widget/Admin.php:53 ../../Zotlabs/Widget/Admin.php:63 #: ../../Zotlabs/Module/Admin/Logs.php:83 msgid "Logs" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:56 +#: ../../Zotlabs/Widget/Admin.php:61 msgid "Addon Features" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:37 -#: ../../Zotlabs/Widget/Notifications.php:55 +#: ../../Zotlabs/Widget/Activity_filter.php:44 +#: ../../Zotlabs/Widget/Notifications.php:61 msgid "Direct Messages" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:41 +#: ../../Zotlabs/Widget/Activity_filter.php:48 msgid "Show direct (private) messages" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:46 -#: ../../Zotlabs/Widget/Notifications.php:74 +#: ../../Zotlabs/Widget/Activity_filter.php:53 +#: ../../Zotlabs/Widget/Notifications.php:80 msgid "Events" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:50 +#: ../../Zotlabs/Widget/Activity_filter.php:57 msgid "Show posts that include events" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:56 +#: ../../Zotlabs/Widget/Activity_filter.php:63 msgid "Polls" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:60 +#: ../../Zotlabs/Widget/Activity_filter.php:67 msgid "Show posts that include polls" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:83 +#: ../../Zotlabs/Widget/Activity_filter.php:90 #, php-format msgid "Show posts related to the %s privacy group" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:92 +#: ../../Zotlabs/Widget/Activity_filter.php:99 msgid "Show my privacy groups" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:116 +#: ../../Zotlabs/Widget/Activity_filter.php:123 msgid "Show posts to this forum" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:127 +#: ../../Zotlabs/Widget/Activity_filter.php:134 msgid "Show forums" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:141 +#: ../../Zotlabs/Widget/Activity_filter.php:148 msgid "Starred Posts" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:145 +#: ../../Zotlabs/Widget/Activity_filter.php:152 msgid "Show posts that I have starred" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:156 +#: ../../Zotlabs/Widget/Activity_filter.php:163 msgid "Personal Posts" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:160 +#: ../../Zotlabs/Widget/Activity_filter.php:167 msgid "Show posts that mention or involve me" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:183 +#: ../../Zotlabs/Widget/Activity_filter.php:190 #, php-format msgid "Show posts that I have filed to %s" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:193 +#: ../../Zotlabs/Widget/Activity_filter.php:200 msgid "Show filed post categories" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:207 +#: ../../Zotlabs/Widget/Activity_filter.php:214 msgid "Panel search" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:217 +#: ../../Zotlabs/Widget/Activity_filter.php:224 msgid "Filter by name" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:232 +#: ../../Zotlabs/Widget/Activity_filter.php:239 msgid "Remove active filter" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:248 +#: ../../Zotlabs/Widget/Activity_filter.php:255 msgid "Stream Filters" msgstr "" -#: ../../Zotlabs/Widget/Appstore.php:10 +#: ../../Zotlabs/Widget/Appstore.php:16 msgid "App Collections" msgstr "" -#: ../../Zotlabs/Widget/Appstore.php:12 +#: ../../Zotlabs/Widget/Appstore.php:18 msgid "Installed apps" msgstr "" -#: ../../Zotlabs/Widget/Appstore.php:13 ../../Zotlabs/Module/Apps.php:50 +#: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:50 msgid "Available Apps" msgstr "" -#: ../../Zotlabs/Widget/Eventstools.php:13 -msgid "Events Tools" -msgstr "" - -#: ../../Zotlabs/Widget/Eventstools.php:14 -msgid "Export Calendar" -msgstr "" - -#: ../../Zotlabs/Widget/Eventstools.php:15 -msgid "Import Calendar" -msgstr "" - -#: ../../Zotlabs/Widget/Privacygroups.php:38 +#: ../../Zotlabs/Widget/Privacygroups.php:45 msgid "Add new group" msgstr "" -#: ../../Zotlabs/Widget/Privacygroups.php:47 +#: ../../Zotlabs/Widget/Privacygroups.php:54 #: ../../Zotlabs/Module/Contactedit.php:443 msgid "Privacy groups" msgstr "" -#: ../../Zotlabs/Widget/Rating.php:51 +#: ../../Zotlabs/Widget/Rating.php:57 msgid "Rating Tools" msgstr "" -#: ../../Zotlabs/Widget/Rating.php:55 ../../Zotlabs/Widget/Rating.php:57 +#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63 msgid "Rate Me" msgstr "" -#: ../../Zotlabs/Widget/Rating.php:60 +#: ../../Zotlabs/Widget/Rating.php:66 msgid "View Ratings" msgstr "" -#: ../../Zotlabs/Widget/Cover_photo.php:65 +#: ../../Zotlabs/Widget/Cover_photo.php:71 msgid "Click to show more" msgstr "" -#: ../../Zotlabs/Widget/Follow.php:22 ../../Zotlabs/Module/Connections.php:368 +#: ../../Zotlabs/Widget/Follow.php:27 ../../Zotlabs/Module/Connections.php:368 #, php-format msgid "You have %1$.0f of %2$.0f allowed connections." msgstr "" -#: ../../Zotlabs/Widget/Follow.php:29 +#: ../../Zotlabs/Widget/Follow.php:34 msgid "Add New Connection" msgstr "" -#: ../../Zotlabs/Widget/Follow.php:30 +#: ../../Zotlabs/Widget/Follow.php:35 msgid "Enter channel address" msgstr "" -#: ../../Zotlabs/Widget/Follow.php:31 +#: ../../Zotlabs/Widget/Follow.php:36 msgid "Examples: bob@example.com, https://example.com/barbara" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:24 +#: ../../Zotlabs/Widget/Messages.php:32 msgid "Public and restricted messages" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:25 +#: ../../Zotlabs/Widget/Messages.php:33 msgid "Direct messages" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:26 +#: ../../Zotlabs/Widget/Messages.php:34 msgid "Starred messages" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:27 -#: ../../Zotlabs/Widget/Notifications.php:109 -#: ../../Zotlabs/Widget/Notifications.php:110 +#: ../../Zotlabs/Widget/Messages.php:35 +#: ../../Zotlabs/Widget/Notifications.php:115 +#: ../../Zotlabs/Widget/Notifications.php:116 msgid "Notices" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:29 +#: ../../Zotlabs/Widget/Messages.php:37 msgid "No messages" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:31 +#: ../../Zotlabs/Widget/Newmember.php:36 msgid "Profile Creation" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:33 +#: ../../Zotlabs/Widget/Newmember.php:38 msgid "Upload profile photo" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:34 +#: ../../Zotlabs/Widget/Newmember.php:39 msgid "Upload cover photo" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:38 +#: ../../Zotlabs/Widget/Newmember.php:43 msgid "Find and Connect with others" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:40 +#: ../../Zotlabs/Widget/Newmember.php:45 msgid "View the directory" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:41 ../../Zotlabs/Module/Go.php:38 +#: ../../Zotlabs/Widget/Newmember.php:46 ../../Zotlabs/Module/Go.php:38 msgid "View friend suggestions" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:42 +#: ../../Zotlabs/Widget/Newmember.php:47 msgid "Manage your connections" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:45 +#: ../../Zotlabs/Widget/Newmember.php:50 msgid "Communicate" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:47 +#: ../../Zotlabs/Widget/Newmember.php:52 msgid "View your channel homepage" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:48 +#: ../../Zotlabs/Widget/Newmember.php:53 msgid "View your network stream" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:54 +#: ../../Zotlabs/Widget/Newmember.php:59 msgid "Documentation" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:57 +#: ../../Zotlabs/Widget/Newmember.php:62 msgid "Missing Features?" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:59 +#: ../../Zotlabs/Widget/Newmember.php:64 msgid "Pin apps to navigation bar" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:60 +#: ../../Zotlabs/Widget/Newmember.php:65 msgid "Install more apps" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:71 +#: ../../Zotlabs/Widget/Newmember.php:76 msgid "View public stream" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:75 +#: ../../Zotlabs/Widget/Newmember.php:80 #: ../../Zotlabs/Module/Settings/Display.php:200 msgid "New Member Links" msgstr "" -#: ../../Zotlabs/Widget/Notes.php:27 +#: ../../Zotlabs/Widget/Notes.php:35 msgid "Read mode" msgstr "" -#: ../../Zotlabs/Widget/Notes.php:28 +#: ../../Zotlabs/Widget/Notes.php:36 msgid "Edit mode" msgstr "" -#: ../../Zotlabs/Widget/Notes.php:29 +#: ../../Zotlabs/Widget/Notes.php:37 msgid "Editing" msgstr "" -#: ../../Zotlabs/Widget/Notes.php:30 +#: ../../Zotlabs/Widget/Notes.php:38 msgid "Saving" msgstr "" -#: ../../Zotlabs/Widget/Notes.php:31 +#: ../../Zotlabs/Widget/Notes.php:39 msgid "Saved" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:30 +#: ../../Zotlabs/Widget/Affinity.php:36 #: ../../Zotlabs/Module/Contactedit.php:295 #: ../../Zotlabs/Module/Connedit.php:579 msgid "Me" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:31 +#: ../../Zotlabs/Widget/Affinity.php:37 #: ../../Zotlabs/Module/Contactedit.php:296 #: ../../Zotlabs/Module/Connedit.php:580 msgid "Family" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:33 +#: ../../Zotlabs/Widget/Affinity.php:39 #: ../../Zotlabs/Module/Contactedit.php:298 #: ../../Zotlabs/Module/Connedit.php:582 msgid "Acquaintances" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:34 +#: ../../Zotlabs/Widget/Affinity.php:40 #: ../../Zotlabs/Module/Contactedit.php:299 #: ../../Zotlabs/Module/Connections.php:97 #: ../../Zotlabs/Module/Connections.php:111 @@ -7596,118 +7636,118 @@ msgstr "" msgid "All" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:54 +#: ../../Zotlabs/Widget/Affinity.php:60 msgid "Refresh" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:17 +#: ../../Zotlabs/Widget/Notifications.php:23 msgid "New network activity notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:20 +#: ../../Zotlabs/Widget/Notifications.php:26 msgid "Network stream" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:23 -#: ../../Zotlabs/Widget/Notifications.php:62 +#: ../../Zotlabs/Widget/Notifications.php:29 +#: ../../Zotlabs/Widget/Notifications.php:68 msgid "Mark all notifications read" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:26 -#: ../../Zotlabs/Widget/Notifications.php:46 -#: ../../Zotlabs/Widget/Notifications.php:65 -#: ../../Zotlabs/Widget/Notifications.php:157 +#: ../../Zotlabs/Widget/Notifications.php:32 +#: ../../Zotlabs/Widget/Notifications.php:52 +#: ../../Zotlabs/Widget/Notifications.php:71 +#: ../../Zotlabs/Widget/Notifications.php:163 msgid "Show new posts only" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:27 -#: ../../Zotlabs/Widget/Notifications.php:47 -#: ../../Zotlabs/Widget/Notifications.php:66 -#: ../../Zotlabs/Widget/Notifications.php:127 -#: ../../Zotlabs/Widget/Notifications.php:158 +#: ../../Zotlabs/Widget/Notifications.php:33 +#: ../../Zotlabs/Widget/Notifications.php:53 +#: ../../Zotlabs/Widget/Notifications.php:72 +#: ../../Zotlabs/Widget/Notifications.php:133 +#: ../../Zotlabs/Widget/Notifications.php:164 msgid "Filter by name or address" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:37 +#: ../../Zotlabs/Widget/Notifications.php:43 msgid "New home activity notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:40 +#: ../../Zotlabs/Widget/Notifications.php:46 msgid "Home stream" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:43 -#: ../../Zotlabs/Widget/Notifications.php:154 +#: ../../Zotlabs/Widget/Notifications.php:49 +#: ../../Zotlabs/Widget/Notifications.php:160 msgid "Mark all notifications seen" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:56 +#: ../../Zotlabs/Widget/Notifications.php:62 msgid "New direct messages notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:59 +#: ../../Zotlabs/Widget/Notifications.php:65 msgid "Direct messages stream" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:75 +#: ../../Zotlabs/Widget/Notifications.php:81 msgid "New events notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:78 +#: ../../Zotlabs/Widget/Notifications.php:84 msgid "View events" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:81 +#: ../../Zotlabs/Widget/Notifications.php:87 msgid "Mark all events seen" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:89 +#: ../../Zotlabs/Widget/Notifications.php:95 #: ../../Zotlabs/Module/Connections.php:165 msgid "New Connections" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:90 +#: ../../Zotlabs/Widget/Notifications.php:96 msgid "New connections notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:93 +#: ../../Zotlabs/Widget/Notifications.php:99 msgid "View all connections" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:102 +#: ../../Zotlabs/Widget/Notifications.php:108 msgid "New files notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:113 +#: ../../Zotlabs/Widget/Notifications.php:119 msgid "View all notices" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:116 +#: ../../Zotlabs/Widget/Notifications.php:122 msgid "Mark all notices seen" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:137 +#: ../../Zotlabs/Widget/Notifications.php:143 msgid "Registrations" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:138 +#: ../../Zotlabs/Widget/Notifications.php:144 msgid "New registrations notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:147 +#: ../../Zotlabs/Widget/Notifications.php:153 #: ../../Zotlabs/Module/Pubstream.php:100 ../../Zotlabs/Lib/Apps.php:379 msgid "Public Stream" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:148 +#: ../../Zotlabs/Widget/Notifications.php:154 msgid "New public stream notifications" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:151 +#: ../../Zotlabs/Widget/Notifications.php:157 msgid "Public stream" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:165 +#: ../../Zotlabs/Widget/Notifications.php:171 msgid "Sorry, you have got no notifications at the moment" msgstr "" @@ -7804,7 +7844,7 @@ msgid "Search Results For:" msgstr "" #: ../../Zotlabs/Module/Network.php:208 ../../Zotlabs/Module/Channel.php:267 -#: ../../Zotlabs/Module/Hq.php:112 ../../Zotlabs/Module/Pubstream.php:90 +#: ../../Zotlabs/Module/Hq.php:114 ../../Zotlabs/Module/Pubstream.php:90 #: ../../Zotlabs/Module/Display.php:87 msgid "Reset form" msgstr "" @@ -8104,7 +8144,7 @@ msgid "This will help to review your registration" msgstr "" #: ../../Zotlabs/Module/Register.php:520 -#: ../../Zotlabs/Module/Admin/Site.php:413 +#: ../../Zotlabs/Module/Admin/Site.php:416 msgid "Registration" msgstr "" @@ -8117,430 +8157,430 @@ msgid "" "This site has exceeded the number of allowed daily account registrations." msgstr "" -#: ../../Zotlabs/Module/Search.php:22 +#: ../../Zotlabs/Module/Search.php:23 #: ../../Zotlabs/Module/Viewconnections.php:23 #: ../../Zotlabs/Module/Display.php:28 ../../Zotlabs/Module/Directory.php:72 #: ../../Zotlabs/Module/Directory.php:77 ../../Zotlabs/Module/Photos.php:523 msgid "Public access denied." msgstr "" -#: ../../Zotlabs/Module/Search.php:239 +#: ../../Zotlabs/Module/Search.php:256 #, php-format msgid "Items tagged with: %s" msgstr "" -#: ../../Zotlabs/Module/Search.php:241 +#: ../../Zotlabs/Module/Search.php:258 #, php-format msgid "Search results for: %s" msgstr "" -#: ../../Zotlabs/Module/Setup.php:169 +#: ../../Zotlabs/Module/Setup.php:179 msgid "$Projectname Server - Setup" msgstr "" -#: ../../Zotlabs/Module/Setup.php:173 +#: ../../Zotlabs/Module/Setup.php:183 msgid "Could not connect to database." msgstr "" -#: ../../Zotlabs/Module/Setup.php:177 +#: ../../Zotlabs/Module/Setup.php:187 msgid "" "Could not connect to specified site URL. Possible SSL certificate or DNS " "issue." msgstr "" -#: ../../Zotlabs/Module/Setup.php:184 +#: ../../Zotlabs/Module/Setup.php:194 msgid "Could not create table." msgstr "" -#: ../../Zotlabs/Module/Setup.php:190 +#: ../../Zotlabs/Module/Setup.php:200 msgid "Your site database has been installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:196 +#: ../../Zotlabs/Module/Setup.php:206 msgid "" "You may need to import the file \"install/schema_xxx.sql\" manually using a " "database client." msgstr "" -#: ../../Zotlabs/Module/Setup.php:197 ../../Zotlabs/Module/Setup.php:261 -#: ../../Zotlabs/Module/Setup.php:768 +#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271 +#: ../../Zotlabs/Module/Setup.php:778 msgid "Please see the file \"install/INSTALL.txt\"." msgstr "" -#: ../../Zotlabs/Module/Setup.php:258 +#: ../../Zotlabs/Module/Setup.php:268 msgid "System check" msgstr "" -#: ../../Zotlabs/Module/Setup.php:262 ../../Zotlabs/Module/Cdav.php:1035 +#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Cdav.php:1035 #: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Photos.php:962 msgid "Next" msgstr "" -#: ../../Zotlabs/Module/Setup.php:263 +#: ../../Zotlabs/Module/Setup.php:273 msgid "Check again" msgstr "" -#: ../../Zotlabs/Module/Setup.php:284 +#: ../../Zotlabs/Module/Setup.php:294 msgid "Database connection" msgstr "" -#: ../../Zotlabs/Module/Setup.php:285 +#: ../../Zotlabs/Module/Setup.php:295 msgid "" "In order to install $Projectname we need to know how to connect to your " "database." msgstr "" -#: ../../Zotlabs/Module/Setup.php:286 +#: ../../Zotlabs/Module/Setup.php:296 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "" -#: ../../Zotlabs/Module/Setup.php:287 +#: ../../Zotlabs/Module/Setup.php:297 msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "" -#: ../../Zotlabs/Module/Setup.php:291 +#: ../../Zotlabs/Module/Setup.php:301 msgid "Database Server Name" msgstr "" -#: ../../Zotlabs/Module/Setup.php:291 +#: ../../Zotlabs/Module/Setup.php:301 msgid "Default is 127.0.0.1" msgstr "" -#: ../../Zotlabs/Module/Setup.php:292 +#: ../../Zotlabs/Module/Setup.php:302 msgid "Database Port" msgstr "" -#: ../../Zotlabs/Module/Setup.php:292 +#: ../../Zotlabs/Module/Setup.php:302 msgid "Communication port number - use 0 for default" msgstr "" -#: ../../Zotlabs/Module/Setup.php:293 +#: ../../Zotlabs/Module/Setup.php:303 msgid "Database Login Name" msgstr "" -#: ../../Zotlabs/Module/Setup.php:294 +#: ../../Zotlabs/Module/Setup.php:304 msgid "Database Login Password" msgstr "" -#: ../../Zotlabs/Module/Setup.php:295 +#: ../../Zotlabs/Module/Setup.php:305 msgid "Database Name" msgstr "" -#: ../../Zotlabs/Module/Setup.php:296 +#: ../../Zotlabs/Module/Setup.php:306 msgid "Database Type" msgstr "" -#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:338 +#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348 msgid "Site administrator email address" msgstr "" -#: ../../Zotlabs/Module/Setup.php:298 ../../Zotlabs/Module/Setup.php:338 +#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348 msgid "" "Your account email address must match this in order to use the web admin " "panel." msgstr "" -#: ../../Zotlabs/Module/Setup.php:299 ../../Zotlabs/Module/Setup.php:340 +#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350 msgid "Website URL" msgstr "" -#: ../../Zotlabs/Module/Setup.php:299 ../../Zotlabs/Module/Setup.php:340 +#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350 msgid "Please use SSL (https) URL if available." msgstr "" -#: ../../Zotlabs/Module/Setup.php:300 ../../Zotlabs/Module/Setup.php:342 +#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352 msgid "Please select a default timezone for your website" msgstr "" -#: ../../Zotlabs/Module/Setup.php:327 +#: ../../Zotlabs/Module/Setup.php:337 msgid "Site settings" msgstr "" -#: ../../Zotlabs/Module/Setup.php:381 +#: ../../Zotlabs/Module/Setup.php:391 msgid "PHP version 7.1 or greater is required." msgstr "" -#: ../../Zotlabs/Module/Setup.php:382 +#: ../../Zotlabs/Module/Setup.php:392 msgid "PHP version" msgstr "" -#: ../../Zotlabs/Module/Setup.php:398 +#: ../../Zotlabs/Module/Setup.php:408 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "" -#: ../../Zotlabs/Module/Setup.php:399 +#: ../../Zotlabs/Module/Setup.php:409 msgid "" "If you don't have a command line version of PHP installed on server, you " "will not be able to run background polling via cron." msgstr "" -#: ../../Zotlabs/Module/Setup.php:403 +#: ../../Zotlabs/Module/Setup.php:413 msgid "PHP executable path" msgstr "" -#: ../../Zotlabs/Module/Setup.php:403 +#: ../../Zotlabs/Module/Setup.php:413 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." msgstr "" -#: ../../Zotlabs/Module/Setup.php:408 +#: ../../Zotlabs/Module/Setup.php:418 msgid "Command line PHP" msgstr "" -#: ../../Zotlabs/Module/Setup.php:418 +#: ../../Zotlabs/Module/Setup.php:428 msgid "" "Unable to check command line PHP, as shell_exec() is disabled. This is " "required." msgstr "" -#: ../../Zotlabs/Module/Setup.php:422 +#: ../../Zotlabs/Module/Setup.php:432 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "" -#: ../../Zotlabs/Module/Setup.php:423 +#: ../../Zotlabs/Module/Setup.php:433 msgid "This is required for message delivery to work." msgstr "" -#: ../../Zotlabs/Module/Setup.php:426 +#: ../../Zotlabs/Module/Setup.php:436 msgid "PHP register_argc_argv" msgstr "" -#: ../../Zotlabs/Module/Setup.php:446 +#: ../../Zotlabs/Module/Setup.php:456 msgid "" "This is not sufficient to upload larger images or files. You should be able " "to upload at least 4 MB at once." msgstr "" -#: ../../Zotlabs/Module/Setup.php:448 +#: ../../Zotlabs/Module/Setup.php:458 #, php-format msgid "" "Your max allowed total upload size is set to %s. Maximum size of one file to " "upload is set to %s. You are allowed to upload up to %d files at once." msgstr "" -#: ../../Zotlabs/Module/Setup.php:454 +#: ../../Zotlabs/Module/Setup.php:464 msgid "You can adjust these settings in the server php.ini file." msgstr "" -#: ../../Zotlabs/Module/Setup.php:456 +#: ../../Zotlabs/Module/Setup.php:466 msgid "PHP upload limits" msgstr "" -#: ../../Zotlabs/Module/Setup.php:479 +#: ../../Zotlabs/Module/Setup.php:489 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "" -#: ../../Zotlabs/Module/Setup.php:480 +#: ../../Zotlabs/Module/Setup.php:490 msgid "" "If running under Windows, please see \"http://www.php.net/manual/en/openssl." "installation.php\"." msgstr "" -#: ../../Zotlabs/Module/Setup.php:483 +#: ../../Zotlabs/Module/Setup.php:493 msgid "Generate encryption keys" msgstr "" -#: ../../Zotlabs/Module/Setup.php:500 +#: ../../Zotlabs/Module/Setup.php:510 msgid "libCurl PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:501 +#: ../../Zotlabs/Module/Setup.php:511 msgid "GD graphics PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:502 +#: ../../Zotlabs/Module/Setup.php:512 msgid "OpenSSL PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:503 +#: ../../Zotlabs/Module/Setup.php:513 msgid "PDO database PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:504 +#: ../../Zotlabs/Module/Setup.php:514 msgid "mb_string PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:505 +#: ../../Zotlabs/Module/Setup.php:515 msgid "xml PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:506 +#: ../../Zotlabs/Module/Setup.php:516 msgid "zip PHP module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:510 ../../Zotlabs/Module/Setup.php:512 +#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522 msgid "Apache mod_rewrite module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:510 +#: ../../Zotlabs/Module/Setup.php:520 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:516 ../../Zotlabs/Module/Setup.php:519 +#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529 msgid "exec" msgstr "" -#: ../../Zotlabs/Module/Setup.php:516 +#: ../../Zotlabs/Module/Setup.php:526 msgid "" "Error: exec is required but is either not installed or has been disabled in " "php.ini" msgstr "" -#: ../../Zotlabs/Module/Setup.php:522 ../../Zotlabs/Module/Setup.php:525 +#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535 msgid "shell_exec" msgstr "" -#: ../../Zotlabs/Module/Setup.php:522 +#: ../../Zotlabs/Module/Setup.php:532 msgid "" "Error: shell_exec is required but is either not installed or has been " "disabled in php.ini" msgstr "" -#: ../../Zotlabs/Module/Setup.php:530 +#: ../../Zotlabs/Module/Setup.php:540 msgid "Error: libCURL PHP module required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:534 +#: ../../Zotlabs/Module/Setup.php:544 msgid "" "Error: GD PHP module with JPEG support or ImageMagick graphics library " "required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:538 +#: ../../Zotlabs/Module/Setup.php:548 msgid "Error: openssl PHP module required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:544 +#: ../../Zotlabs/Module/Setup.php:554 msgid "" "Error: PDO database PHP module missing a driver for either mysql or pgsql." msgstr "" -#: ../../Zotlabs/Module/Setup.php:549 +#: ../../Zotlabs/Module/Setup.php:559 msgid "Error: PDO database PHP module required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:553 +#: ../../Zotlabs/Module/Setup.php:563 msgid "Error: mb_string PHP module required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:557 +#: ../../Zotlabs/Module/Setup.php:567 msgid "Error: xml PHP module required for DAV but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:561 +#: ../../Zotlabs/Module/Setup.php:571 msgid "Error: zip PHP module required but not installed." msgstr "" -#: ../../Zotlabs/Module/Setup.php:580 ../../Zotlabs/Module/Setup.php:589 +#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599 msgid ".htconfig.php is writable" msgstr "" -#: ../../Zotlabs/Module/Setup.php:585 +#: ../../Zotlabs/Module/Setup.php:595 msgid "" "The web installer needs to be able to create a file called \".htconfig.php\" " "in the top folder of your web server and it is unable to do so." msgstr "" -#: ../../Zotlabs/Module/Setup.php:586 +#: ../../Zotlabs/Module/Setup.php:596 msgid "" "This is most often a permission setting, as the web server may not be able " "to write files in your folder - even if you can." msgstr "" -#: ../../Zotlabs/Module/Setup.php:587 +#: ../../Zotlabs/Module/Setup.php:597 msgid "Please see install/INSTALL.txt for additional information." msgstr "" -#: ../../Zotlabs/Module/Setup.php:603 +#: ../../Zotlabs/Module/Setup.php:613 msgid "" "This software uses the Smarty3 template engine to render its web views. " "Smarty3 compiles templates to PHP to speed up rendering." msgstr "" -#: ../../Zotlabs/Module/Setup.php:604 +#: ../../Zotlabs/Module/Setup.php:614 #, php-format msgid "" "In order to store these compiled templates, the web server needs to have " "write access to the directory %s under the top level web folder." msgstr "" -#: ../../Zotlabs/Module/Setup.php:605 ../../Zotlabs/Module/Setup.php:626 +#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has " "write access to this folder." msgstr "" -#: ../../Zotlabs/Module/Setup.php:606 +#: ../../Zotlabs/Module/Setup.php:616 #, php-format msgid "" "Note: as a security measure, you should give the web server write access to " "%s only--not the template files (.tpl) that it contains." msgstr "" -#: ../../Zotlabs/Module/Setup.php:609 +#: ../../Zotlabs/Module/Setup.php:619 #, php-format msgid "%s is writable" msgstr "" -#: ../../Zotlabs/Module/Setup.php:625 +#: ../../Zotlabs/Module/Setup.php:635 msgid "" "This software uses the store directory to save uploaded files. The web " "server needs to have write access to the store directory under the top level " "web folder" msgstr "" -#: ../../Zotlabs/Module/Setup.php:629 +#: ../../Zotlabs/Module/Setup.php:639 msgid "store is writable" msgstr "" -#: ../../Zotlabs/Module/Setup.php:661 +#: ../../Zotlabs/Module/Setup.php:671 msgid "" "SSL certificate cannot be validated. Fix certificate or disable https access " "to this site." msgstr "" -#: ../../Zotlabs/Module/Setup.php:662 +#: ../../Zotlabs/Module/Setup.php:672 msgid "" "If you have https access to your website or allow connections to TCP port " "443 (the https: port), you MUST use a browser-valid certificate. You MUST " "NOT use self-signed certificates!" msgstr "" -#: ../../Zotlabs/Module/Setup.php:663 +#: ../../Zotlabs/Module/Setup.php:673 msgid "" "This restriction is incorporated because public posts from you may for " "example contain references to images on your own hub." msgstr "" -#: ../../Zotlabs/Module/Setup.php:664 +#: ../../Zotlabs/Module/Setup.php:674 msgid "" "If your certificate is not recognized, members of other sites (who may " "themselves have valid certificates) will get a warning message on their own " "site complaining about security issues." msgstr "" -#: ../../Zotlabs/Module/Setup.php:665 +#: ../../Zotlabs/Module/Setup.php:675 msgid "" "This can cause usability issues elsewhere (not just on your own site) so we " "must insist on this requirement." msgstr "" -#: ../../Zotlabs/Module/Setup.php:666 +#: ../../Zotlabs/Module/Setup.php:676 msgid "" "Providers are available that issue free certificates which are browser-valid." msgstr "" -#: ../../Zotlabs/Module/Setup.php:667 +#: ../../Zotlabs/Module/Setup.php:677 msgid "" "If you are confident that the certificate is valid and signed by a trusted " "authority, check to see if you have failed to install an intermediate cert. " @@ -8548,32 +8588,32 @@ msgid "" "server communications." msgstr "" -#: ../../Zotlabs/Module/Setup.php:669 +#: ../../Zotlabs/Module/Setup.php:679 msgid "SSL certificate validation" msgstr "" -#: ../../Zotlabs/Module/Setup.php:675 +#: ../../Zotlabs/Module/Setup.php:685 msgid "" "Url rewrite in .htaccess is not working. Check your server configuration." "Test: " msgstr "" -#: ../../Zotlabs/Module/Setup.php:678 +#: ../../Zotlabs/Module/Setup.php:688 msgid "Url rewrite is working" msgstr "" -#: ../../Zotlabs/Module/Setup.php:691 +#: ../../Zotlabs/Module/Setup.php:701 msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " "server root." msgstr "" -#: ../../Zotlabs/Module/Setup.php:766 +#: ../../Zotlabs/Module/Setup.php:776 msgid "<h1>What next?</h1>" msgstr "" -#: ../../Zotlabs/Module/Setup.php:767 +#: ../../Zotlabs/Module/Setup.php:777 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the poller." msgstr "" @@ -8591,6 +8631,10 @@ msgstr "" msgid "View Connections" msgstr "" +#: ../../Zotlabs/Module/Pubsites.php:24 +msgid "Public Hubs" +msgstr "" + #: ../../Zotlabs/Module/Pubsites.php:27 msgid "" "The listed hubs allow public registration for the $Projectname network. All " @@ -8641,7 +8685,7 @@ msgid "Only posts" msgstr "" #: ../../Zotlabs/Module/Channel.php:159 ../../Zotlabs/Module/Channel.php:181 -#: ../../Zotlabs/Module/Hq.php:39 ../../Zotlabs/Module/Pubstream.php:47 +#: ../../Zotlabs/Module/Hq.php:41 ../../Zotlabs/Module/Pubstream.php:47 #: ../../Zotlabs/Module/Display.php:47 ../../Zotlabs/Module/Oep.php:83 msgid "Malformed message id." msgstr "" @@ -9239,32 +9283,32 @@ msgstr "" msgid "Access" msgstr "" -#: ../../Zotlabs/Module/Item.php:748 +#: ../../Zotlabs/Module/Item.php:749 msgid "Empty post discarded." msgstr "" -#: ../../Zotlabs/Module/Item.php:1188 +#: ../../Zotlabs/Module/Item.php:1189 msgid "Duplicate post suppressed." msgstr "" -#: ../../Zotlabs/Module/Item.php:1331 +#: ../../Zotlabs/Module/Item.php:1332 msgid "System error. Post not saved." msgstr "" -#: ../../Zotlabs/Module/Item.php:1365 +#: ../../Zotlabs/Module/Item.php:1366 msgid "Your comment is awaiting approval." msgstr "" -#: ../../Zotlabs/Module/Item.php:1498 +#: ../../Zotlabs/Module/Item.php:1499 msgid "Unable to obtain post information from database." msgstr "" -#: ../../Zotlabs/Module/Item.php:1505 +#: ../../Zotlabs/Module/Item.php:1506 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "" -#: ../../Zotlabs/Module/Item.php:1512 +#: ../../Zotlabs/Module/Item.php:1513 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "" @@ -9655,31 +9699,35 @@ msgstr "" msgid "Deny" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:35 +#: ../../Zotlabs/Module/Admin/Queue.php:46 msgid "Queue Statistics" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:36 +#: ../../Zotlabs/Module/Admin/Queue.php:47 msgid "Total Entries" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:37 +#: ../../Zotlabs/Module/Admin/Queue.php:48 msgid "Priority" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:38 +#: ../../Zotlabs/Module/Admin/Queue.php:49 msgid "Destination URL" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:39 +#: ../../Zotlabs/Module/Admin/Queue.php:50 msgid "Mark hub permanently offline" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:40 +#: ../../Zotlabs/Module/Admin/Queue.php:51 +msgid "Retry delivery to this hub" +msgstr "" + +#: ../../Zotlabs/Module/Admin/Queue.php:52 msgid "Empty queue for this hub" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:41 +#: ../../Zotlabs/Module/Admin/Queue.php:53 msgid "Last known contact" msgstr "" @@ -9709,7 +9757,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Themes.php:156 #: ../../Zotlabs/Module/Admin/Security.php:98 #: ../../Zotlabs/Module/Admin/Accounts.php:307 -#: ../../Zotlabs/Module/Admin/Site.php:408 +#: ../../Zotlabs/Module/Admin/Site.php:411 #: ../../Zotlabs/Module/Admin/Logs.php:82 #: ../../Zotlabs/Module/Admin/Channels.php:145 #: ../../Zotlabs/Module/Admin/Addons.php:342 @@ -10068,322 +10116,322 @@ msgstr "" msgid "My site offers free accounts with optional paid upgrades" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:349 msgid "Default permission role for new accounts" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:349 msgid "" "This role will be used for the first channel created after registration." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:353 ../../Zotlabs/Module/Invite.php:397 +#: ../../Zotlabs/Module/Admin/Site.php:356 ../../Zotlabs/Module/Invite.php:397 msgid "Minute(s)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:354 ../../Zotlabs/Module/Invite.php:398 +#: ../../Zotlabs/Module/Admin/Site.php:357 ../../Zotlabs/Module/Invite.php:398 msgid "Hour(s)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:355 ../../Zotlabs/Module/Invite.php:399 +#: ../../Zotlabs/Module/Admin/Site.php:358 ../../Zotlabs/Module/Invite.php:399 msgid "Day(s)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:356 +#: ../../Zotlabs/Module/Admin/Site.php:359 msgid "Week(s)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:357 +#: ../../Zotlabs/Module/Admin/Site.php:360 msgid "Month(s)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:358 +#: ../../Zotlabs/Module/Admin/Site.php:361 msgid "Year(s)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:366 +#: ../../Zotlabs/Module/Admin/Site.php:369 msgid "Register verification delay" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:369 +#: ../../Zotlabs/Module/Admin/Site.php:372 msgid "Time to wait before a registration can be verified" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:372 -#: ../../Zotlabs/Module/Admin/Site.php:394 ../../Zotlabs/Module/Invite.php:408 +#: ../../Zotlabs/Module/Admin/Site.php:375 +#: ../../Zotlabs/Module/Admin/Site.php:397 ../../Zotlabs/Module/Invite.php:408 msgid "duration up from now" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:388 +#: ../../Zotlabs/Module/Admin/Site.php:391 msgid "Register verification expiration time" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:391 +#: ../../Zotlabs/Module/Admin/Site.php:394 msgid "Time before an unverified registration will expire" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:414 +#: ../../Zotlabs/Module/Admin/Site.php:417 msgid "File upload" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:415 +#: ../../Zotlabs/Module/Admin/Site.php:418 msgid "Policies" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:422 +#: ../../Zotlabs/Module/Admin/Site.php:425 msgid "Banner/Logo" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:422 +#: ../../Zotlabs/Module/Admin/Site.php:425 msgid "Unfiltered HTML/CSS/JS is allowed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:423 +#: ../../Zotlabs/Module/Admin/Site.php:426 msgid "Administrator Information" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:423 +#: ../../Zotlabs/Module/Admin/Site.php:426 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:424 ../../Zotlabs/Module/Siteinfo.php:24 +#: ../../Zotlabs/Module/Admin/Site.php:427 ../../Zotlabs/Module/Siteinfo.php:24 msgid "Site Information" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:424 +#: ../../Zotlabs/Module/Admin/Site.php:427 msgid "" "Publicly visible description of this site. Displayed on siteinfo page. " "BBCode can be used here" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:425 +#: ../../Zotlabs/Module/Admin/Site.php:428 msgid "System language" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:426 +#: ../../Zotlabs/Module/Admin/Site.php:429 msgid "System theme" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:426 +#: ../../Zotlabs/Module/Admin/Site.php:429 msgid "" "Default system theme - may be over-ridden by user profiles - <a href='#' " "id='cnftheme'>change theme settings</a>" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:429 +#: ../../Zotlabs/Module/Admin/Site.php:432 msgid "Allow Feeds as Connections" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:429 +#: ../../Zotlabs/Module/Admin/Site.php:432 msgid "(Heavy system resource usage)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:430 +#: ../../Zotlabs/Module/Admin/Site.php:433 msgid "Maximum image size" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:430 +#: ../../Zotlabs/Module/Admin/Site.php:433 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:431 +#: ../../Zotlabs/Module/Admin/Site.php:434 msgid "Minimum age" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:431 +#: ../../Zotlabs/Module/Admin/Site.php:434 msgid "Minimum age (in years) for who may register on this site." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:432 +#: ../../Zotlabs/Module/Admin/Site.php:435 msgid "Which best describes the types of account offered by this hub?" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:432 +#: ../../Zotlabs/Module/Admin/Site.php:435 msgid "This is displayed on the public server site list." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:438 +#: ../../Zotlabs/Module/Admin/Site.php:441 msgid "Register text" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:440 +#: ../../Zotlabs/Module/Admin/Site.php:443 msgid "This text will be displayed prominently at the registration page" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:444 +#: ../../Zotlabs/Module/Admin/Site.php:447 msgid "Does this site allow new member registration?" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:451 +#: ../../Zotlabs/Module/Admin/Site.php:454 msgid "Configure the registration open days/hours" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:453 +#: ../../Zotlabs/Module/Admin/Site.php:456 msgid "Empty or '-:-' value will keep registration open 24/7 (default)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:454 +#: ../../Zotlabs/Module/Admin/Site.php:457 msgid "" "Weekdays and hours must be separated by colon ':', From-To ranges with a " "dash `-` example: 1:800-1200" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:455 +#: ../../Zotlabs/Module/Admin/Site.php:458 msgid "" "Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 " "2:900-1700" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:456 +#: ../../Zotlabs/Module/Admin/Site.php:459 msgid "" "From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 " "or 1-2,4-5:900-1700" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:457 +#: ../../Zotlabs/Module/Admin/Site.php:460 msgid "Advanced examples:" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:457 -#: ../../Zotlabs/Module/Settings/Channel.php:178 +#: ../../Zotlabs/Module/Admin/Site.php:460 +#: ../../Zotlabs/Module/Settings/Channel.php:182 msgid "or" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:458 +#: ../../Zotlabs/Module/Admin/Site.php:461 msgid "Check your configuration" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:462 +#: ../../Zotlabs/Module/Admin/Site.php:465 msgid "Max account registrations per day" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:464 +#: ../../Zotlabs/Module/Admin/Site.php:467 msgid "Unlimited if zero or no value - default 50" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:468 +#: ../../Zotlabs/Module/Admin/Site.php:471 msgid "Max account registrations from same IP" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:470 +#: ../../Zotlabs/Module/Admin/Site.php:473 msgid "Unlimited if zero or no value - default 3" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:476 +#: ../../Zotlabs/Module/Admin/Site.php:479 msgid "Auto channel create" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:478 +#: ../../Zotlabs/Module/Admin/Site.php:481 msgid "" "If disabled the channel will be created in a separate step during the " "registration process" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:482 +#: ../../Zotlabs/Module/Admin/Site.php:485 msgid "Require invite code" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:487 +#: ../../Zotlabs/Module/Admin/Site.php:490 msgid "Allow invite code" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:492 +#: ../../Zotlabs/Module/Admin/Site.php:495 msgid "Require email address" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:494 +#: ../../Zotlabs/Module/Admin/Site.php:497 msgid "The provided email address will be verified (recommended)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:498 +#: ../../Zotlabs/Module/Admin/Site.php:501 msgid "Abandon account after x days" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:500 +#: ../../Zotlabs/Module/Admin/Site.php:503 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:505 +#: ../../Zotlabs/Module/Admin/Site.php:508 msgid "Site homepage to show visitors (default: login box)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:505 +#: ../../Zotlabs/Module/Admin/Site.php:508 msgid "" "example: 'pubstream' to show public stream, 'page/sys/home' to show a system " "webpage called 'home' or 'include:home.html' to include a file." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:506 +#: ../../Zotlabs/Module/Admin/Site.php:509 msgid "Preserve site homepage URL" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:506 +#: ../../Zotlabs/Module/Admin/Site.php:509 msgid "" "Present the site homepage in a frame at the original location instead of " "redirecting" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:507 +#: ../../Zotlabs/Module/Admin/Site.php:510 msgid "Allowed friend domains" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:507 +#: ../../Zotlabs/Module/Admin/Site.php:510 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:508 +#: ../../Zotlabs/Module/Admin/Site.php:511 msgid "Force publish" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:508 +#: ../../Zotlabs/Module/Admin/Site.php:511 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:509 +#: ../../Zotlabs/Module/Admin/Site.php:512 msgid "Import Public Streams" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:509 +#: ../../Zotlabs/Module/Admin/Site.php:512 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:510 +#: ../../Zotlabs/Module/Admin/Site.php:513 msgid "Site only Public Streams" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:510 +#: ../../Zotlabs/Module/Admin/Site.php:513 msgid "" "Allow access to public content originating only from this site if Imported " "Public Streams are disabled." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:511 +#: ../../Zotlabs/Module/Admin/Site.php:514 msgid "Allow anybody on the internet to access the Public streams" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:511 +#: ../../Zotlabs/Module/Admin/Site.php:514 msgid "" "Disable to require authentication before viewing. Warning: this content is " "unmoderated." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:512 +#: ../../Zotlabs/Module/Admin/Site.php:515 msgid "Only import Public stream posts with this text" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:512 -#: ../../Zotlabs/Module/Admin/Site.php:513 +#: ../../Zotlabs/Module/Admin/Site.php:515 +#: ../../Zotlabs/Module/Admin/Site.php:516 #: ../../Zotlabs/Module/Contactedit.php:423 #: ../../Zotlabs/Module/Contactedit.php:424 #: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707 @@ -10392,178 +10440,178 @@ msgid "" "all posts" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:513 +#: ../../Zotlabs/Module/Admin/Site.php:516 msgid "Do not import Public stream posts with this text" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:516 +#: ../../Zotlabs/Module/Admin/Site.php:519 msgid "Login on Homepage" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:516 +#: ../../Zotlabs/Module/Admin/Site.php:519 msgid "" "Present a login box to visitors on the home page if no other content has " "been configured." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:517 +#: ../../Zotlabs/Module/Admin/Site.php:520 msgid "Enable context help" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:517 +#: ../../Zotlabs/Module/Admin/Site.php:520 msgid "" "Display contextual help for the current page when the help button is pressed." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:519 +#: ../../Zotlabs/Module/Admin/Site.php:522 msgid "Reply-to email address for system generated email." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:520 +#: ../../Zotlabs/Module/Admin/Site.php:523 msgid "Sender (From) email address for system generated email." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:521 +#: ../../Zotlabs/Module/Admin/Site.php:524 msgid "Name of email sender for system generated email." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:523 +#: ../../Zotlabs/Module/Admin/Site.php:526 msgid "Directory Server URL" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:523 +#: ../../Zotlabs/Module/Admin/Site.php:526 msgid "Default directory server" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:525 +#: ../../Zotlabs/Module/Admin/Site.php:528 msgid "Enable SSE Notifications" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:525 +#: ../../Zotlabs/Module/Admin/Site.php:528 msgid "" "If disabled, traditional polling will be used. Warning: this setting might " "not be suited for shared hosting" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:527 +#: ../../Zotlabs/Module/Admin/Site.php:530 msgid "Proxy user" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:528 +#: ../../Zotlabs/Module/Admin/Site.php:531 msgid "Proxy URL" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:529 +#: ../../Zotlabs/Module/Admin/Site.php:532 msgid "Network timeout" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:529 +#: ../../Zotlabs/Module/Admin/Site.php:532 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:530 +#: ../../Zotlabs/Module/Admin/Site.php:533 msgid "Delivery interval" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:530 +#: ../../Zotlabs/Module/Admin/Site.php:533 msgid "" "Delay background delivery processes by this many seconds to reduce system " "load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " "for large dedicated servers." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:531 +#: ../../Zotlabs/Module/Admin/Site.php:534 msgid "Deliveries per process" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:531 +#: ../../Zotlabs/Module/Admin/Site.php:534 msgid "" "Number of deliveries to attempt in a single operating system process. Adjust " "if necessary to tune system performance. Recommend: 1-5." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:532 +#: ../../Zotlabs/Module/Admin/Site.php:535 msgid "Queue Threshold" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:532 +#: ../../Zotlabs/Module/Admin/Site.php:535 msgid "" "Always defer immediate delivery if queue contains more than this number of " "entries." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:533 +#: ../../Zotlabs/Module/Admin/Site.php:536 msgid "Poll interval" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:533 +#: ../../Zotlabs/Module/Admin/Site.php:536 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:534 +#: ../../Zotlabs/Module/Admin/Site.php:537 msgid "Path to ImageMagick convert program" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:534 +#: ../../Zotlabs/Module/Admin/Site.php:537 msgid "" "If set, use this program to generate photo thumbnails for huge images ( > " "4000 pixels in either dimension), otherwise memory exhaustion may occur. " "Example: /usr/bin/convert" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:535 +#: ../../Zotlabs/Module/Admin/Site.php:538 msgid "Maximum Load Average" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:535 +#: ../../Zotlabs/Module/Admin/Site.php:538 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:536 +#: ../../Zotlabs/Module/Admin/Site.php:539 msgid "Expiration period in days for imported (grid/network) content" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:536 +#: ../../Zotlabs/Module/Admin/Site.php:539 msgid "0 for no expiration of imported content" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:537 +#: ../../Zotlabs/Module/Admin/Site.php:540 msgid "" "Do not expire any posts which have comments less than this many days ago" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:538 +#: ../../Zotlabs/Module/Admin/Site.php:541 msgid "" "Public servers: Optional landing (marketing) webpage for new registrants" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:538 +#: ../../Zotlabs/Module/Admin/Site.php:541 #, php-format msgid "Create this page first. Default is %s/register" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:539 +#: ../../Zotlabs/Module/Admin/Site.php:542 msgid "Page to display after creating a new channel" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:539 +#: ../../Zotlabs/Module/Admin/Site.php:542 msgid "Default: profiles" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:540 +#: ../../Zotlabs/Module/Admin/Site.php:543 msgid "Optional: site location" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:540 +#: ../../Zotlabs/Module/Admin/Site.php:543 msgid "Region or country" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:625 -#: ../../Zotlabs/Module/Admin/Site.php:626 +#: ../../Zotlabs/Module/Admin/Site.php:628 +#: ../../Zotlabs/Module/Admin/Site.php:629 msgid "Invalid 24h time value (hhmm/hmm)" msgstr "" @@ -10947,7 +10995,7 @@ msgid "" msgstr "" #: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64 -#: ../../Zotlabs/Module/Settings/Channel.php:277 +#: ../../Zotlabs/Module/Settings/Channel.php:281 msgid "Remove Channel" msgstr "" @@ -11137,6 +11185,22 @@ msgstr "" msgid "Delegated Channel" msgstr "" +#: ../../Zotlabs/Module/Pdledit_gui.php:118 +msgid "Layout not found" +msgstr "" + +#: ../../Zotlabs/Module/Pdledit_gui.php:126 +msgid "This template does not support pdledi_gui (no content regions defined)" +msgstr "" + +#: ../../Zotlabs/Module/Pdledit_gui.php:361 +msgid "Main page content" +msgstr "" + +#: ../../Zotlabs/Module/Pdledit_gui.php:362 +msgid "The main page content can not be edited!" +msgstr "" + #: ../../Zotlabs/Module/Chanview.php:132 msgid "toggle full screen mode" msgstr "" @@ -11149,64 +11213,64 @@ msgstr "" msgid "Online" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:56 +#: ../../Zotlabs/Module/Permcats.php:59 msgid "Contact role deleted." msgstr "" -#: ../../Zotlabs/Module/Permcats.php:82 +#: ../../Zotlabs/Module/Permcats.php:86 msgid "Permission category name is required." msgstr "" -#: ../../Zotlabs/Module/Permcats.php:98 ../../Zotlabs/Module/Permcats.php:123 +#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154 msgid "Contact role saved." msgstr "" -#: ../../Zotlabs/Module/Permcats.php:174 +#: ../../Zotlabs/Module/Permcats.php:204 msgid "Role to assign affected contacts and default role to" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:174 +#: ../../Zotlabs/Module/Permcats.php:204 msgid "Role to assign affected contacts to" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:205 +#: ../../Zotlabs/Module/Permcats.php:234 msgid "Assign this role to" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:207 +#: ../../Zotlabs/Module/Permcats.php:236 msgid "All my contacts" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:218 +#: ../../Zotlabs/Module/Permcats.php:247 msgid "Automatically assign this role to new contacts" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:219 ../../Zotlabs/Lib/Apps.php:378 +#: ../../Zotlabs/Module/Permcats.php:248 ../../Zotlabs/Lib/Apps.php:378 msgid "Contact Roles" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:220 +#: ../../Zotlabs/Module/Permcats.php:249 msgid "Role name" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:220 +#: ../../Zotlabs/Module/Permcats.php:249 msgid "System role - not editable" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:221 +#: ../../Zotlabs/Module/Permcats.php:250 msgid "Deleting" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:224 ../../Zotlabs/Module/Defperms.php:262 +#: ../../Zotlabs/Module/Permcats.php:253 ../../Zotlabs/Module/Defperms.php:262 #: ../../Zotlabs/Module/Connedit.php:713 msgid "inherited" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:226 +#: ../../Zotlabs/Module/Permcats.php:255 msgid "Role Permissions" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:227 +#: ../../Zotlabs/Module/Permcats.php:256 msgid "" "Some permissions may be inherited from your <a href=\"settings\">channel " "role</a>, which have higher priority than contact role settings." @@ -11419,7 +11483,7 @@ msgid "Channel name" msgstr "" #: ../../Zotlabs/Module/New_channel.php:178 -#: ../../Zotlabs/Module/Settings/Channel.php:228 +#: ../../Zotlabs/Module/Settings/Channel.php:232 msgid "Channel role" msgstr "" @@ -11688,11 +11752,13 @@ msgid "Custom Filter" msgstr "" #: ../../Zotlabs/Module/Contactedit.php:423 +#: ../../Zotlabs/Module/Settings/Channel.php:285 #: ../../Zotlabs/Module/Connedit.php:706 msgid "Only import posts with this text" msgstr "" #: ../../Zotlabs/Module/Contactedit.php:424 +#: ../../Zotlabs/Module/Settings/Channel.php:284 #: ../../Zotlabs/Module/Connedit.php:707 msgid "Do not import posts with this text" msgstr "" @@ -12512,7 +12578,7 @@ msgid "" "Password reset failed." msgstr "" -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1747 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1761 msgid "Password Reset" msgstr "" @@ -13072,274 +13138,281 @@ msgstr "" msgid "Additional Features" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:103 -#: ../../Zotlabs/Module/Settings/Channel.php:212 +#: ../../Zotlabs/Module/Settings/Channel.php:105 +#: ../../Zotlabs/Module/Settings/Channel.php:216 msgid "Please select a channel role" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:189 +#: ../../Zotlabs/Module/Settings/Channel.php:193 msgid "Your channel address is" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:192 +#: ../../Zotlabs/Module/Settings/Channel.php:196 msgid "Your files/photos are accessible via WebDAV at" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:223 +#: ../../Zotlabs/Module/Settings/Channel.php:227 msgid "Channel Settings" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:230 +#: ../../Zotlabs/Module/Settings/Channel.php:234 msgid "Basic Settings" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:231 +#: ../../Zotlabs/Module/Settings/Channel.php:235 msgid "Channel timezone:" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:232 +#: ../../Zotlabs/Module/Settings/Channel.php:236 msgid "Default post location:" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:232 +#: ../../Zotlabs/Module/Settings/Channel.php:236 msgid "Geographical location to display on your posts" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:233 +#: ../../Zotlabs/Module/Settings/Channel.php:237 msgid "Use browser location" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:234 +#: ../../Zotlabs/Module/Settings/Channel.php:238 msgid "Adult content" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:234 +#: ../../Zotlabs/Module/Settings/Channel.php:238 msgid "This channel frequently or regularly publishes adult content" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:235 +#: ../../Zotlabs/Module/Settings/Channel.php:239 msgid "Maximum Friend Requests/Day:" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:235 +#: ../../Zotlabs/Module/Settings/Channel.php:239 msgid "May reduce spam activity" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:236 +#: ../../Zotlabs/Module/Settings/Channel.php:240 #: ../../Zotlabs/Lib/Enotify.php:68 msgid "Notification Settings" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:237 +#: ../../Zotlabs/Module/Settings/Channel.php:241 msgid "By default post a status message when:" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:238 +#: ../../Zotlabs/Module/Settings/Channel.php:242 msgid "accepting a friend request" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:239 +#: ../../Zotlabs/Module/Settings/Channel.php:243 msgid "joining a forum/community" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:240 +#: ../../Zotlabs/Module/Settings/Channel.php:244 msgid "making an <em>interesting</em> profile change" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:241 +#: ../../Zotlabs/Module/Settings/Channel.php:245 msgid "Send a notification email when:" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:242 +#: ../../Zotlabs/Module/Settings/Channel.php:246 msgid "You receive a connection request" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:243 +#: ../../Zotlabs/Module/Settings/Channel.php:247 msgid "Your connections are confirmed" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:244 +#: ../../Zotlabs/Module/Settings/Channel.php:248 msgid "Someone writes on your profile wall" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:245 +#: ../../Zotlabs/Module/Settings/Channel.php:249 msgid "Someone writes a followup comment" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:246 +#: ../../Zotlabs/Module/Settings/Channel.php:250 msgid "You receive a private message" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:247 +#: ../../Zotlabs/Module/Settings/Channel.php:251 msgid "You receive a friend suggestion" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:248 +#: ../../Zotlabs/Module/Settings/Channel.php:252 msgid "You are tagged in a post" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:249 +#: ../../Zotlabs/Module/Settings/Channel.php:253 msgid "You are poked/prodded/etc. in a post" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:250 +#: ../../Zotlabs/Module/Settings/Channel.php:254 msgid "Someone likes your post/comment" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:251 +#: ../../Zotlabs/Module/Settings/Channel.php:255 msgid "Show visual notifications including:" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:252 +#: ../../Zotlabs/Module/Settings/Channel.php:256 msgid "Unseen stream activity" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:253 +#: ../../Zotlabs/Module/Settings/Channel.php:257 msgid "Unseen channel activity" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:254 +#: ../../Zotlabs/Module/Settings/Channel.php:258 msgid "Unseen private messages" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:254 -#: ../../Zotlabs/Module/Settings/Channel.php:259 -#: ../../Zotlabs/Module/Settings/Channel.php:260 -#: ../../Zotlabs/Module/Settings/Channel.php:261 +#: ../../Zotlabs/Module/Settings/Channel.php:258 +#: ../../Zotlabs/Module/Settings/Channel.php:263 +#: ../../Zotlabs/Module/Settings/Channel.php:264 +#: ../../Zotlabs/Module/Settings/Channel.php:265 msgid "Recommended" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:255 +#: ../../Zotlabs/Module/Settings/Channel.php:259 msgid "Upcoming events" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:256 +#: ../../Zotlabs/Module/Settings/Channel.php:260 msgid "Events today" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:257 +#: ../../Zotlabs/Module/Settings/Channel.php:261 msgid "Upcoming birthdays" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:257 +#: ../../Zotlabs/Module/Settings/Channel.php:261 msgid "Not available in all themes" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:258 +#: ../../Zotlabs/Module/Settings/Channel.php:262 msgid "System (personal) notifications" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:259 +#: ../../Zotlabs/Module/Settings/Channel.php:263 msgid "System info messages" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:260 +#: ../../Zotlabs/Module/Settings/Channel.php:264 msgid "System critical alerts" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:261 +#: ../../Zotlabs/Module/Settings/Channel.php:265 msgid "New connections" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:262 +#: ../../Zotlabs/Module/Settings/Channel.php:266 msgid "System Registrations" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:263 +#: ../../Zotlabs/Module/Settings/Channel.php:267 msgid "Unseen shared files" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:264 +#: ../../Zotlabs/Module/Settings/Channel.php:268 msgid "Unseen public stream activity" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:265 +#: ../../Zotlabs/Module/Settings/Channel.php:269 msgid "Unseen likes and dislikes" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:266 +#: ../../Zotlabs/Module/Settings/Channel.php:270 msgid "Unseen forum posts" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:267 +#: ../../Zotlabs/Module/Settings/Channel.php:271 msgid "Email notification hub (hostname)" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:267 +#: ../../Zotlabs/Module/Settings/Channel.php:271 #, 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 "" -#: ../../Zotlabs/Module/Settings/Channel.php:268 +#: ../../Zotlabs/Module/Settings/Channel.php:272 msgid "Show new wall posts, private messages and connections under Notices" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:269 +#: ../../Zotlabs/Module/Settings/Channel.php:273 msgid "Mark all notices of the thread read if a notice is clicked" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:269 +#: ../../Zotlabs/Module/Settings/Channel.php:273 msgid "If no, only the clicked notice will be marked read" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:270 +#: ../../Zotlabs/Module/Settings/Channel.php:274 msgid "" "Desktop notifications are unavailable because the required browser " "permission has not been granted" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:271 +#: ../../Zotlabs/Module/Settings/Channel.php:275 msgid "Grant permission" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:272 +#: ../../Zotlabs/Module/Settings/Channel.php:276 msgid "Notify me of events this many days in advance" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:272 +#: ../../Zotlabs/Module/Settings/Channel.php:276 msgid "Must be greater than 0" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:275 +#: ../../Zotlabs/Module/Settings/Channel.php:279 msgid "Default photo upload folder" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:275 -#: ../../Zotlabs/Module/Settings/Channel.php:276 +#: ../../Zotlabs/Module/Settings/Channel.php:279 +#: ../../Zotlabs/Module/Settings/Channel.php:280 msgid "%Y - current year, %m - current month" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:276 +#: ../../Zotlabs/Module/Settings/Channel.php:280 msgid "Default file upload folder" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:278 +#: ../../Zotlabs/Module/Settings/Channel.php:282 msgid "Remove this channel." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:279 +#: ../../Zotlabs/Module/Settings/Channel.php:283 msgid "Expire other channel content after this many days" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:279 +#: ../../Zotlabs/Module/Settings/Channel.php:283 msgid "0 or blank to use the website limit." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:279 +#: ../../Zotlabs/Module/Settings/Channel.php:283 #, php-format msgid "This website expires after %d days." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:279 +#: ../../Zotlabs/Module/Settings/Channel.php:283 msgid "This website does not expire imported content." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:279 +#: ../../Zotlabs/Module/Settings/Channel.php:283 msgid "The website limit takes precedence if lower than your limit." msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:284 +#: ../../Zotlabs/Module/Settings/Channel.php:285 +msgid "" +"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - " +"leave blank to import all posts" +msgstr "" + #: ../../Zotlabs/Module/Settings/Account.php:21 msgid "Not valid email." msgstr "" @@ -13799,48 +13872,48 @@ msgstr "" msgid "Invalid message" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:65 +#: ../../Zotlabs/Module/Dreport.php:66 msgid "no results" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:79 +#: ../../Zotlabs/Module/Dreport.php:80 msgid "channel sync processed" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:83 +#: ../../Zotlabs/Module/Dreport.php:84 msgid "queued" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:87 +#: ../../Zotlabs/Module/Dreport.php:88 msgid "posted" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:91 +#: ../../Zotlabs/Module/Dreport.php:92 msgid "accepted for delivery" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:95 +#: ../../Zotlabs/Module/Dreport.php:96 msgid "updated" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:98 +#: ../../Zotlabs/Module/Dreport.php:99 msgid "update ignored" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:101 +#: ../../Zotlabs/Module/Dreport.php:102 msgid "permission denied" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:105 +#: ../../Zotlabs/Module/Dreport.php:106 msgid "recipient not found" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:125 +#: ../../Zotlabs/Module/Dreport.php:126 #, php-format msgid "Delivery report for %1$s" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:130 +#: ../../Zotlabs/Module/Dreport.php:131 msgid "Redeliver" msgstr "" @@ -14413,41 +14486,41 @@ msgid "" "group with a different name." msgstr "" -#: ../../Zotlabs/Lib/AccessList.php:265 +#: ../../Zotlabs/Lib/AccessList.php:268 msgid "Select a privacy group" msgstr "" -#: ../../Zotlabs/Lib/Permcat.php:84 +#: ../../Zotlabs/Lib/Permcat.php:83 msgctxt "permcat" msgid "Default" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2287 +#: ../../Zotlabs/Lib/Activity.php:2354 #, php-format msgid "Likes %1$s's %2$s" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2290 +#: ../../Zotlabs/Lib/Activity.php:2357 #, php-format msgid "Doesn't like %1$s's %2$s" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2296 +#: ../../Zotlabs/Lib/Activity.php:2363 #, php-format msgid "Will attend %s's event" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2299 +#: ../../Zotlabs/Lib/Activity.php:2366 #, php-format msgid "Will not attend %s's event" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2302 +#: ../../Zotlabs/Lib/Activity.php:2369 #, php-format msgid "May attend %s's event" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2305 +#: ../../Zotlabs/Lib/Activity.php:2372 #, php-format msgid "May not attend %s's event" msgstr "" @@ -14717,7 +14790,7 @@ msgstr "" msgid "repeated %s's post" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:828 ../../Zotlabs/Lib/Enotify.php:927 +#: ../../Zotlabs/Lib/Enotify.php:828 ../../Zotlabs/Lib/Enotify.php:931 msgid "shared a file with you" msgstr "" @@ -14731,27 +14804,27 @@ msgstr "" msgid "edited a comment dated %s" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:912 +#: ../../Zotlabs/Lib/Enotify.php:916 msgid "added your channel" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:942 +#: ../../Zotlabs/Lib/Enotify.php:946 msgid "sent you a direct message" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:949 +#: ../../Zotlabs/Lib/Enotify.php:953 msgid "g A l F d" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:952 +#: ../../Zotlabs/Lib/Enotify.php:956 msgid "[today]" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:962 +#: ../../Zotlabs/Lib/Enotify.php:966 msgid "created an event" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:977 +#: ../../Zotlabs/Lib/Enotify.php:981 msgid "status verified" msgstr "" @@ -15445,40 +15518,40 @@ msgid "" "an existing folder." msgstr "" -#: ../../boot.php:1714 +#: ../../boot.php:1728 msgid "Create an account to access services and applications" msgstr "" -#: ../../boot.php:1732 +#: ../../boot.php:1746 msgid "Email or nickname" msgstr "" -#: ../../boot.php:1742 +#: ../../boot.php:1756 msgid "Password" msgstr "" -#: ../../boot.php:1743 +#: ../../boot.php:1757 msgid "Remember me" msgstr "" -#: ../../boot.php:1746 +#: ../../boot.php:1760 msgid "Forgot your password?" msgstr "" -#: ../../boot.php:2624 +#: ../../boot.php:2641 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "" -#: ../../boot.php:2629 +#: ../../boot.php:2646 msgid "Website SSL certificate is not valid. Please correct." msgstr "" -#: ../../boot.php:2745 +#: ../../boot.php:2762 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "" -#: ../../boot.php:2750 +#: ../../boot.php:2767 msgid "Cron/Scheduled tasks not running." msgstr "" diff --git a/vendor/bin/generate_vcards b/vendor/bin/generate_vcards index cb76da13a..a6bdfa274 120000..100755 --- a/vendor/bin/generate_vcards +++ b/vendor/bin/generate_vcards @@ -1 +1,117 @@ -../sabre/vobject/bin/generate_vcards
\ No newline at end of file +#!/usr/bin/env php +<?php + +/** + * Proxy PHP file generated by Composer + * + * This file includes the referenced bin path (../sabre/vobject/bin/generate_vcards) + * using a stream wrapper to prevent the shebang from being output on PHP<8 + * + * @generated + */ + +namespace Composer; + +$GLOBALS['_composer_bin_dir'] = __DIR__; +$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php'; + +if (PHP_VERSION_ID < 80000) { + if (!class_exists('Composer\BinProxyWrapper')) { + /** + * @internal + */ + final class BinProxyWrapper + { + private $handle; + private $position; + private $realpath; + + public function stream_open($path, $mode, $options, &$opened_path) + { + // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution + $opened_path = substr($path, 17); + $this->realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/sabre/vobject/bin/generate_vcards'); + exit(0); + } +} + +include __DIR__ . '/..'.'/sabre/vobject/bin/generate_vcards'; diff --git a/vendor/bin/html-to-markdown b/vendor/bin/html-to-markdown index 6f8d9d2b1..51fec89d8 120000..100755 --- a/vendor/bin/html-to-markdown +++ b/vendor/bin/html-to-markdown @@ -1 +1,117 @@ -../league/html-to-markdown/bin/html-to-markdown
\ No newline at end of file +#!/usr/bin/env php +<?php + +/** + * Proxy PHP file generated by Composer + * + * This file includes the referenced bin path (../league/html-to-markdown/bin/html-to-markdown) + * using a stream wrapper to prevent the shebang from being output on PHP<8 + * + * @generated + */ + +namespace Composer; + +$GLOBALS['_composer_bin_dir'] = __DIR__; +$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php'; + +if (PHP_VERSION_ID < 80000) { + if (!class_exists('Composer\BinProxyWrapper')) { + /** + * @internal + */ + final class BinProxyWrapper + { + private $handle; + private $position; + private $realpath; + + public function stream_open($path, $mode, $options, &$opened_path) + { + // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution + $opened_path = substr($path, 17); + $this->realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/league/html-to-markdown/bin/html-to-markdown'); + exit(0); + } +} + +include __DIR__ . '/..'.'/league/html-to-markdown/bin/html-to-markdown'; diff --git a/vendor/bin/naturalselection b/vendor/bin/naturalselection index e6f1b3a2a..586050de8 120000..100755 --- a/vendor/bin/naturalselection +++ b/vendor/bin/naturalselection @@ -1 +1,37 @@ -../sabre/dav/bin/naturalselection
\ No newline at end of file +#!/usr/bin/env sh + +# Support bash to support `source` with fallback on $0 if this does not run with bash +# https://stackoverflow.com/a/35006505/6512 +selfArg="$BASH_SOURCE" +if [ -z "$selfArg" ]; then + selfArg="$0" +fi + +self=$(realpath $selfArg 2> /dev/null) +if [ -z "$self" ]; then + self="$selfArg" +fi + +dir=$(cd "${self%[/\\]*}" > /dev/null; cd '../sabre/dav/bin' && pwd) + +if [ -d /proc/cygdrive ]; then + case $(which php) in + $(readlink -n /proc/cygdrive)/*) + # We are in Cygwin using Windows php, so the path must be translated + dir=$(cygpath -m "$dir"); + ;; + esac +fi + +export COMPOSER_BIN_DIR=$(cd "${self%[/\\]*}" > /dev/null; pwd) + +# If bash is sourcing this file, we have to source the target as well +bashSource="$BASH_SOURCE" +if [ -n "$bashSource" ]; then + if [ "$bashSource" != "$0" ]; then + source "${dir}/naturalselection" "$@" + return + fi +fi + +"${dir}/naturalselection" "$@" diff --git a/vendor/bin/sabredav b/vendor/bin/sabredav index 3b5e4511d..73bfa6039 120000..100755 --- a/vendor/bin/sabredav +++ b/vendor/bin/sabredav @@ -1 +1,37 @@ -../sabre/dav/bin/sabredav
\ No newline at end of file +#!/usr/bin/env sh + +# Support bash to support `source` with fallback on $0 if this does not run with bash +# https://stackoverflow.com/a/35006505/6512 +selfArg="$BASH_SOURCE" +if [ -z "$selfArg" ]; then + selfArg="$0" +fi + +self=$(realpath $selfArg 2> /dev/null) +if [ -z "$self" ]; then + self="$selfArg" +fi + +dir=$(cd "${self%[/\\]*}" > /dev/null; cd '../sabre/dav/bin' && pwd) + +if [ -d /proc/cygdrive ]; then + case $(which php) in + $(readlink -n /proc/cygdrive)/*) + # We are in Cygwin using Windows php, so the path must be translated + dir=$(cygpath -m "$dir"); + ;; + esac +fi + +export COMPOSER_BIN_DIR=$(cd "${self%[/\\]*}" > /dev/null; pwd) + +# If bash is sourcing this file, we have to source the target as well +bashSource="$BASH_SOURCE" +if [ -n "$bashSource" ]; then + if [ "$bashSource" != "$0" ]; then + source "${dir}/sabredav" "$@" + return + fi +fi + +"${dir}/sabredav" "$@" diff --git a/vendor/bin/vobject b/vendor/bin/vobject index f5b111eac..0097f5a5c 120000..100755 --- a/vendor/bin/vobject +++ b/vendor/bin/vobject @@ -1 +1,117 @@ -../sabre/vobject/bin/vobject
\ No newline at end of file +#!/usr/bin/env php +<?php + +/** + * Proxy PHP file generated by Composer + * + * This file includes the referenced bin path (../sabre/vobject/bin/vobject) + * using a stream wrapper to prevent the shebang from being output on PHP<8 + * + * @generated + */ + +namespace Composer; + +$GLOBALS['_composer_bin_dir'] = __DIR__; +$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php'; + +if (PHP_VERSION_ID < 80000) { + if (!class_exists('Composer\BinProxyWrapper')) { + /** + * @internal + */ + final class BinProxyWrapper + { + private $handle; + private $position; + private $realpath; + + public function stream_open($path, $mode, $options, &$opened_path) + { + // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution + $opened_path = substr($path, 17); + $this->realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/sabre/vobject/bin/vobject'); + exit(0); + } +} + +include __DIR__ . '/..'.'/sabre/vobject/bin/vobject'; diff --git a/vendor/commerceguys/intl/resources/currency/af.json b/vendor/commerceguys/intl/resources/currency/af.json index 02ad48858..d3f53a11e 100644 --- a/vendor/commerceguys/intl/resources/currency/af.json +++ b/vendor/commerceguys/intl/resources/currency/af.json @@ -119,7 +119,7 @@ "name": "Etiopiese birr" }, "EUR": { - "name": "euro", + "name": "Euro", "symbol": "€" }, "FKP": { diff --git a/vendor/commerceguys/intl/resources/currency/as.json b/vendor/commerceguys/intl/resources/currency/as.json index e7820e162..24274a0d3 100644 --- a/vendor/commerceguys/intl/resources/currency/as.json +++ b/vendor/commerceguys/intl/resources/currency/as.json @@ -452,6 +452,9 @@ "LYD": { "name": "লিবিয়ান ডিনাৰ" }, + "LSL": { + "name": "লেচোথো লোটি" + }, "LBP": { "name": "লেবানীজ পাউণà§à¦¡" }, @@ -481,9 +484,6 @@ "name": "CFP ফà§à§°à§‡à¦‚ক", "symbol": "CFPF" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/be.json b/vendor/commerceguys/intl/resources/currency/be.json index 6670849af..f42ecce9e 100644 --- a/vendor/commerceguys/intl/resources/currency/be.json +++ b/vendor/commerceguys/intl/resources/currency/be.json @@ -237,6 +237,9 @@ "LAK": { "name": "лаоÑкі кіп" }, + "LSL": { + "name": "леÑоцкі лоці" + }, "LRD": { "name": "ліберыйÑкі долар" }, @@ -480,9 +483,6 @@ "name": "ÑпонÑÐºÐ°Ñ Ñ–ÐµÐ½Ð°", "symbol": "Â¥" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/ca.json b/vendor/commerceguys/intl/resources/currency/ca.json index 8a3ced75e..5f0be862d 100644 --- a/vendor/commerceguys/intl/resources/currency/ca.json +++ b/vendor/commerceguys/intl/resources/currency/ca.json @@ -6,11 +6,11 @@ "name": "ariary malgaix" }, "THB": { - "name": "baht tailandès", + "name": "baht", "symbol": "฿" }, "PAB": { - "name": "balboa panameny" + "name": "balboa" }, "ETB": { "name": "birr etÃop" @@ -51,9 +51,6 @@ "GMD": { "name": "dalasi gambià " }, - "MKD": { - "name": "denar macedoni" - }, "DZD": { "name": "dinar algerià " }, @@ -72,6 +69,9 @@ "LYD": { "name": "dinar libi" }, + "MKD": { + "name": "dinar macedoni" + }, "RSD": { "name": "dinar serbi" }, @@ -79,7 +79,7 @@ "name": "dinar tunisià " }, "AED": { - "name": "dÃrham de la UEA" + "name": "dÃrham dels Emirats Àrabs Units" }, "MAD": { "name": "dÃrham marroquÃ" @@ -161,7 +161,7 @@ "symbol": "â‚«" }, "AMD": { - "name": "dram armeni" + "name": "dram" }, "CVE": { "name": "escut de Cap Verd" @@ -177,7 +177,7 @@ "name": "florà de les Antilles Neerlandeses" }, "HUF": { - "name": "fòrint hongarès" + "name": "fòrint" }, "XOF": { "name": "franc CFA BCEAO", @@ -213,29 +213,29 @@ "name": "franc suÃs" }, "HTG": { - "name": "gourde haitià " + "name": "gourde" }, "PYG": { - "name": "guaranà paraguaià " + "name": "guaranÃ" }, "UAH": { - "name": "hrÃvnia ucraïnesa" + "name": "hrÃvnia" }, "JPY": { - "name": "ien japonès", + "name": "ien", "symbol": "Â¥" }, "CNY": { - "name": "iuan xinès" + "name": "iuan" }, "PGK": { - "name": "kina de Papua Nova Guinea" + "name": "kina" }, "LAK": { "name": "kip laosià " }, "HRK": { - "name": "kuna croata" + "name": "kuna" }, "MWK": { "name": "kwacha malawià " @@ -250,13 +250,13 @@ "name": "kyat de Myanmar" }, "GEL": { - "name": "lari georgià " + "name": "lari" }, "ALL": { - "name": "lek albanès" + "name": "lek" }, "HNL": { - "name": "lempira hondurenya" + "name": "lempira" }, "SLL": { "name": "leone de Sierra Leone" @@ -268,7 +268,7 @@ "name": "leu romanès" }, "BGN": { - "name": "lev búlgar" + "name": "lev" }, "SZL": { "name": "lilangeni swazi" @@ -292,7 +292,7 @@ "name": "lliura egÃpcia" }, "GBP": { - "name": "lliura esterlina brità nica", + "name": "lliura esterlina", "symbol": "£" }, "LBP": { @@ -305,7 +305,7 @@ "name": "lliura sudanesa" }, "LSL": { - "name": "loti de Lesotho" + "name": "loti" }, "AZN": { "name": "manat azerbaidjanès" @@ -376,7 +376,7 @@ "name": "pula de Botswana" }, "GTQ": { - "name": "quetzal guatemalenc" + "name": "quetzal" }, "ZAR": { "name": "rand sud-africà " @@ -403,14 +403,14 @@ "name": "riel cambodjà " }, "MYR": { - "name": "ringgit de Malà isia" + "name": "ringgit" + }, + "RUB": { + "name": "ruble" }, "BYN": { "name": "ruble bielorús" }, - "RUB": { - "name": "ruble rus" - }, "MVR": { "name": "rupia de les Maldives" }, @@ -437,7 +437,7 @@ "name": "rupia pakistanesa" }, "PEN": { - "name": "sol peruà " + "name": "sol" }, "KGS": { "name": "som kirguÃs" @@ -449,13 +449,13 @@ "name": "somoni tadjik" }, "BDT": { - "name": "taka de Bangla Desh" + "name": "taka" }, "WST": { "name": "tala samoà " }, "KZT": { - "name": "tenge kazakh" + "name": "tenge" }, "MNT": { "name": "tögrög mongol" @@ -486,6 +486,6 @@ "name": "xÃling ugandès" }, "PLN": { - "name": "zloty polonès" + "name": "zloty" } }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/currency/da.json b/vendor/commerceguys/intl/resources/currency/da.json index 061701f9f..c1519a4c1 100644 --- a/vendor/commerceguys/intl/resources/currency/da.json +++ b/vendor/commerceguys/intl/resources/currency/da.json @@ -242,7 +242,7 @@ "name": "laotisk kip" }, "LSL": { - "name": "Lesothisk loti" + "name": "lesothisk loti" }, "LBP": { "name": "libanesisk pund" diff --git a/vendor/commerceguys/intl/resources/currency/en-CA.json b/vendor/commerceguys/intl/resources/currency/en-CA.json new file mode 100644 index 000000000..2a4df8ddd --- /dev/null +++ b/vendor/commerceguys/intl/resources/currency/en-CA.json @@ -0,0 +1,497 @@ +{ + "AFN": { + "name": "Afghan Afghani" + }, + "ALL": { + "name": "Albanian Lek" + }, + "DZD": { + "name": "Algerian Dinar" + }, + "AOA": { + "name": "Angolan Kwanza" + }, + "ARS": { + "name": "Argentine Peso" + }, + "AMD": { + "name": "Armenian Dram" + }, + "AWG": { + "name": "Aruban Florin" + }, + "AUD": { + "name": "Australian Dollar", + "symbol": "A$" + }, + "AZN": { + "name": "Azerbaijani Manat" + }, + "BSD": { + "name": "Bahamian Dollar" + }, + "BHD": { + "name": "Bahraini Dinar" + }, + "BDT": { + "name": "Bangladeshi Taka" + }, + "BBD": { + "name": "Barbadian Dollar" + }, + "BYN": { + "name": "Belarusian Rouble" + }, + "BZD": { + "name": "Belize Dollar" + }, + "BMD": { + "name": "Bermudian Dollar" + }, + "BTN": { + "name": "Bhutanese Ngultrum" + }, + "BOB": { + "name": "Bolivian Boliviano" + }, + "BAM": { + "name": "Bosnia-Herzegovina Convertible Mark" + }, + "BWP": { + "name": "Botswanan Pula" + }, + "BRL": { + "name": "Brazilian Real", + "symbol": "R$" + }, + "GBP": { + "name": "British Pound", + "symbol": "£" + }, + "BND": { + "name": "Brunei Dollar" + }, + "BGN": { + "name": "Bulgarian Lev" + }, + "BIF": { + "name": "Burundian Franc" + }, + "KHR": { + "name": "Cambodian Riel" + }, + "CAD": { + "name": "Canadian Dollar", + "symbol": "$" + }, + "CVE": { + "name": "Cape Verdean Escudo" + }, + "KYD": { + "name": "Cayman Islands Dollar" + }, + "XAF": { + "name": "Central African CFA Franc", + "symbol": "FCFA" + }, + "XPF": { + "name": "CFP Franc", + "symbol": "CFPF" + }, + "CLP": { + "name": "Chilean Peso" + }, + "CNY": { + "name": "Chinese Yuan", + "symbol": "CNÂ¥" + }, + "COP": { + "name": "Colombian Peso" + }, + "KMF": { + "name": "Comorian Franc" + }, + "CDF": { + "name": "Congolese Franc" + }, + "CRC": { + "name": "Costa Rican Colón" + }, + "HRK": { + "name": "Croatian Kuna" + }, + "CUC": { + "name": "Cuban Convertible Peso" + }, + "CUP": { + "name": "Cuban Peso" + }, + "CZK": { + "name": "Czech Koruna" + }, + "DKK": { + "name": "Danish Krone" + }, + "DJF": { + "name": "Djiboutian Franc" + }, + "DOP": { + "name": "Dominican Peso" + }, + "XCD": { + "name": "East Caribbean Dollar", + "symbol": "EC$" + }, + "EGP": { + "name": "Egyptian Pound" + }, + "ERN": { + "name": "Eritrean Nakfa" + }, + "ETB": { + "name": "Ethiopian Birr" + }, + "EUR": { + "name": "Euro", + "symbol": "€" + }, + "FKP": { + "name": "Falkland Islands Pound" + }, + "FJD": { + "name": "Fijian Dollar" + }, + "GMD": { + "name": "Gambian Dalasi" + }, + "GEL": { + "name": "Georgian Lari" + }, + "GHS": { + "name": "Ghanaian Cedi" + }, + "GIP": { + "name": "Gibraltar Pound" + }, + "GTQ": { + "name": "Guatemalan Quetzal" + }, + "GNF": { + "name": "Guinean Franc" + }, + "GYD": { + "name": "Guyanaese Dollar" + }, + "HTG": { + "name": "Haitian Gourde" + }, + "HNL": { + "name": "Honduran Lempira" + }, + "HKD": { + "name": "Hong Kong Dollar", + "symbol": "HK$" + }, + "HUF": { + "name": "Hungarian Forint" + }, + "ISK": { + "name": "Icelandic Króna" + }, + "INR": { + "name": "Indian Rupee", + "symbol": "₹" + }, + "IDR": { + "name": "Indonesian Rupiah" + }, + "IRR": { + "name": "Iranian Rial" + }, + "IQD": { + "name": "Iraqi Dinar" + }, + "ILS": { + "name": "Israeli New Shekel", + "symbol": "₪" + }, + "JMD": { + "name": "Jamaican Dollar" + }, + "JPY": { + "name": "Japanese Yen", + "symbol": "JPÂ¥" + }, + "JOD": { + "name": "Jordanian Dinar" + }, + "KZT": { + "name": "Kazakhstani Tenge" + }, + "KES": { + "name": "Kenyan Shilling" + }, + "KWD": { + "name": "Kuwaiti Dinar" + }, + "KGS": { + "name": "Kyrgystani Som" + }, + "LAK": { + "name": "Laotian Kip" + }, + "LBP": { + "name": "Lebanese Pound" + }, + "LSL": { + "name": "Lesotho Loti" + }, + "LRD": { + "name": "Liberian Dollar" + }, + "LYD": { + "name": "Libyan Dinar" + }, + "MOP": { + "name": "Macanese Pataca" + }, + "MKD": { + "name": "Macedonian Denar" + }, + "MGA": { + "name": "Malagasy Ariary" + }, + "MWK": { + "name": "Malawian Kwacha" + }, + "MYR": { + "name": "Malaysian Ringgit" + }, + "MVR": { + "name": "Maldivian Rufiyaa" + }, + "MRU": { + "name": "Mauritanian Ouguiya" + }, + "MUR": { + "name": "Mauritian Rupee" + }, + "MXN": { + "name": "Mexican Peso", + "symbol": "MX$" + }, + "MDL": { + "name": "Moldovan Leu" + }, + "MNT": { + "name": "Mongolian Tugrik" + }, + "MAD": { + "name": "Moroccan Dirham" + }, + "MZN": { + "name": "Mozambican Metical" + }, + "MMK": { + "name": "Myanmar Kyat" + }, + "NAD": { + "name": "Namibian Dollar" + }, + "NPR": { + "name": "Nepalese Rupee" + }, + "ANG": { + "name": "Netherlands Antillean Guilder" + }, + "TWD": { + "name": "New Taiwan Dollar", + "symbol": "NT$" + }, + "NZD": { + "name": "New Zealand Dollar", + "symbol": "NZ$" + }, + "NIO": { + "name": "Nicaraguan Córdoba" + }, + "NGN": { + "name": "Nigerian Naira" + }, + "KPW": { + "name": "North Korean Won" + }, + "NOK": { + "name": "Norwegian Krone" + }, + "OMR": { + "name": "Omani Rial" + }, + "PKR": { + "name": "Pakistani Rupee" + }, + "PAB": { + "name": "Panamanian Balboa" + }, + "PGK": { + "name": "Papua New Guinean Kina" + }, + "PYG": { + "name": "Paraguayan Guarani" + }, + "PEN": { + "name": "Peruvian Sol" + }, + "PHP": { + "name": "Philippine Peso", + "symbol": "₱" + }, + "PLN": { + "name": "Polish Zloty" + }, + "QAR": { + "name": "Qatari Rial" + }, + "RON": { + "name": "Romanian Leu" + }, + "RUB": { + "name": "Russian Rouble" + }, + "RWF": { + "name": "Rwandan Franc" + }, + "SVC": { + "name": "Salvadoran Colón" + }, + "WST": { + "name": "Samoan Tala" + }, + "STN": { + "name": "São Tomé and PrÃncipe Dobra" + }, + "SAR": { + "name": "Saudi Riyal" + }, + "RSD": { + "name": "Serbian Dinar" + }, + "SCR": { + "name": "Seychellois Rupee" + }, + "SLL": { + "name": "Sierra Leonean Leone" + }, + "SGD": { + "name": "Singapore Dollar" + }, + "SBD": { + "name": "Solomon Islands Dollar" + }, + "SOS": { + "name": "Somali Shilling" + }, + "ZAR": { + "name": "South African Rand" + }, + "KRW": { + "name": "South Korean Won", + "symbol": "â‚©" + }, + "SSP": { + "name": "South Sudanese Pound" + }, + "LKR": { + "name": "Sri Lankan Rupee" + }, + "SHP": { + "name": "St Helena Pound" + }, + "SDG": { + "name": "Sudanese Pound" + }, + "SRD": { + "name": "Surinamese Dollar" + }, + "SZL": { + "name": "Swazi Lilangeni" + }, + "SEK": { + "name": "Swedish Krona" + }, + "CHF": { + "name": "Swiss Franc" + }, + "SYP": { + "name": "Syrian Pound" + }, + "TJS": { + "name": "Tajikistani Somoni" + }, + "TZS": { + "name": "Tanzanian Shilling" + }, + "THB": { + "name": "Thai Baht" + }, + "TOP": { + "name": "Tongan PaÊ»anga" + }, + "TTD": { + "name": "Trinidad and Tobago Dollar" + }, + "TND": { + "name": "Tunisian Dinar" + }, + "TRY": { + "name": "Turkish Lira" + }, + "TMT": { + "name": "Turkmenistani Manat" + }, + "USD": { + "name": "U.S. Dollar", + "symbol": "US$" + }, + "UGX": { + "name": "Ugandan Shilling" + }, + "UAH": { + "name": "Ukrainian Hryvnia" + }, + "AED": { + "name": "United Arab Emirates Dirham" + }, + "UYW": { + "name": "Uruguayan Nominal Wage Index Unit" + }, + "UYU": { + "name": "Uruguayan Peso" + }, + "UZS": { + "name": "Uzbekistani Som" + }, + "VUV": { + "name": "Vanuatu Vatu" + }, + "VES": { + "name": "Venezuelan BolÃvar" + }, + "VND": { + "name": "Vietnamese Dong", + "symbol": "â‚«" + }, + "XOF": { + "name": "West African CFA Franc", + "symbol": "F CFA" + }, + "YER": { + "name": "Yemeni Rial" + }, + "ZMW": { + "name": "Zambian Kwacha" + }, + "ZWL": { + "name": "Zimbabwean Dollar (2009)" + } +}
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/currency/en-PH.json b/vendor/commerceguys/intl/resources/currency/en-PH.json new file mode 100644 index 000000000..c4921b070 --- /dev/null +++ b/vendor/commerceguys/intl/resources/currency/en-PH.json @@ -0,0 +1,497 @@ +{ + "AFN": { + "name": "Afghan Afghani" + }, + "ALL": { + "name": "Albanian Lek" + }, + "DZD": { + "name": "Algerian Dinar" + }, + "AOA": { + "name": "Angolan Kwanza" + }, + "ARS": { + "name": "Argentine Peso" + }, + "AMD": { + "name": "Armenian Dram" + }, + "AWG": { + "name": "Aruban Florin" + }, + "AUD": { + "name": "Australian Dollar", + "symbol": "A$" + }, + "AZN": { + "name": "Azerbaijani Manat" + }, + "BSD": { + "name": "Bahamian Dollar" + }, + "BHD": { + "name": "Bahraini Dinar" + }, + "BDT": { + "name": "Bangladeshi Taka" + }, + "BBD": { + "name": "Barbadian Dollar" + }, + "BYN": { + "name": "Belarusian Ruble" + }, + "BZD": { + "name": "Belize Dollar" + }, + "BMD": { + "name": "Bermudan Dollar" + }, + "BTN": { + "name": "Bhutanese Ngultrum" + }, + "BOB": { + "name": "Bolivian Boliviano" + }, + "BAM": { + "name": "Bosnia-Herzegovina Convertible Mark" + }, + "BWP": { + "name": "Botswanan Pula" + }, + "BRL": { + "name": "Brazilian Real", + "symbol": "R$" + }, + "GBP": { + "name": "British Pound", + "symbol": "£" + }, + "BND": { + "name": "Brunei Dollar" + }, + "BGN": { + "name": "Bulgarian Lev" + }, + "BIF": { + "name": "Burundian Franc" + }, + "KHR": { + "name": "Cambodian Riel" + }, + "CAD": { + "name": "Canadian Dollar", + "symbol": "CA$" + }, + "CVE": { + "name": "Cape Verdean Escudo" + }, + "KYD": { + "name": "Cayman Islands Dollar" + }, + "XAF": { + "name": "Central African CFA Franc", + "symbol": "FCFA" + }, + "XPF": { + "name": "CFP Franc", + "symbol": "CFPF" + }, + "CLP": { + "name": "Chilean Peso" + }, + "CNY": { + "name": "Chinese Yuan", + "symbol": "CNÂ¥" + }, + "COP": { + "name": "Colombian Peso" + }, + "KMF": { + "name": "Comorian Franc" + }, + "CDF": { + "name": "Congolese Franc" + }, + "CRC": { + "name": "Costa Rican Colón" + }, + "HRK": { + "name": "Croatian Kuna" + }, + "CUC": { + "name": "Cuban Convertible Peso" + }, + "CUP": { + "name": "Cuban Peso" + }, + "CZK": { + "name": "Czech Koruna" + }, + "DKK": { + "name": "Danish Krone" + }, + "DJF": { + "name": "Djiboutian Franc" + }, + "DOP": { + "name": "Dominican Peso" + }, + "XCD": { + "name": "East Caribbean Dollar", + "symbol": "EC$" + }, + "EGP": { + "name": "Egyptian Pound" + }, + "ERN": { + "name": "Eritrean Nakfa" + }, + "ETB": { + "name": "Ethiopian Birr" + }, + "EUR": { + "name": "Euro", + "symbol": "€" + }, + "FKP": { + "name": "Falkland Islands Pound" + }, + "FJD": { + "name": "Fijian Dollar" + }, + "GMD": { + "name": "Gambian Dalasi" + }, + "GEL": { + "name": "Georgian Lari" + }, + "GHS": { + "name": "Ghanaian Cedi" + }, + "GIP": { + "name": "Gibraltar Pound" + }, + "GTQ": { + "name": "Guatemalan Quetzal" + }, + "GNF": { + "name": "Guinean Franc" + }, + "GYD": { + "name": "Guyanaese Dollar" + }, + "HTG": { + "name": "Haitian Gourde" + }, + "HNL": { + "name": "Honduran Lempira" + }, + "HKD": { + "name": "Hong Kong Dollar", + "symbol": "HK$" + }, + "HUF": { + "name": "Hungarian Forint" + }, + "ISK": { + "name": "Icelandic Króna" + }, + "INR": { + "name": "Indian Rupee", + "symbol": "₹" + }, + "IDR": { + "name": "Indonesian Rupiah" + }, + "IRR": { + "name": "Iranian Rial" + }, + "IQD": { + "name": "Iraqi Dinar" + }, + "ILS": { + "name": "Israeli New Shekel", + "symbol": "₪" + }, + "JMD": { + "name": "Jamaican Dollar" + }, + "JPY": { + "name": "Japanese Yen", + "symbol": "Â¥" + }, + "JOD": { + "name": "Jordanian Dinar" + }, + "KZT": { + "name": "Kazakhstani Tenge" + }, + "KES": { + "name": "Kenyan Shilling" + }, + "KWD": { + "name": "Kuwaiti Dinar" + }, + "KGS": { + "name": "Kyrgystani Som" + }, + "LAK": { + "name": "Laotian Kip" + }, + "LBP": { + "name": "Lebanese Pound" + }, + "LSL": { + "name": "Lesotho Loti" + }, + "LRD": { + "name": "Liberian Dollar" + }, + "LYD": { + "name": "Libyan Dinar" + }, + "MOP": { + "name": "Macanese Pataca" + }, + "MKD": { + "name": "Macedonian Denar" + }, + "MGA": { + "name": "Malagasy Ariary" + }, + "MWK": { + "name": "Malawian Kwacha" + }, + "MYR": { + "name": "Malaysian Ringgit" + }, + "MVR": { + "name": "Maldivian Rufiyaa" + }, + "MRU": { + "name": "Mauritanian Ouguiya" + }, + "MUR": { + "name": "Mauritian Rupee" + }, + "MXN": { + "name": "Mexican Peso", + "symbol": "MX$" + }, + "MDL": { + "name": "Moldovan Leu" + }, + "MNT": { + "name": "Mongolian Tugrik" + }, + "MAD": { + "name": "Moroccan Dirham" + }, + "MZN": { + "name": "Mozambican Metical" + }, + "MMK": { + "name": "Myanmar Kyat" + }, + "NAD": { + "name": "Namibian Dollar" + }, + "NPR": { + "name": "Nepalese Rupee" + }, + "ANG": { + "name": "Netherlands Antillean Guilder" + }, + "TWD": { + "name": "New Taiwan Dollar", + "symbol": "NT$" + }, + "NZD": { + "name": "New Zealand Dollar", + "symbol": "NZ$" + }, + "NIO": { + "name": "Nicaraguan Córdoba" + }, + "NGN": { + "name": "Nigerian Naira" + }, + "KPW": { + "name": "North Korean Won" + }, + "NOK": { + "name": "Norwegian Krone" + }, + "OMR": { + "name": "Omani Rial" + }, + "PKR": { + "name": "Pakistani Rupee" + }, + "PAB": { + "name": "Panamanian Balboa" + }, + "PGK": { + "name": "Papua New Guinean Kina" + }, + "PYG": { + "name": "Paraguayan Guarani" + }, + "PEN": { + "name": "Peruvian Sol" + }, + "PHP": { + "name": "Philippine Piso", + "symbol": "₱" + }, + "PLN": { + "name": "Polish Zloty" + }, + "QAR": { + "name": "Qatari Rial" + }, + "RON": { + "name": "Romanian Leu" + }, + "RUB": { + "name": "Russian Ruble" + }, + "RWF": { + "name": "Rwandan Franc" + }, + "SVC": { + "name": "Salvadoran Colón" + }, + "WST": { + "name": "Samoan Tala" + }, + "STN": { + "name": "São Tomé & PrÃncipe Dobra" + }, + "SAR": { + "name": "Saudi Riyal" + }, + "RSD": { + "name": "Serbian Dinar" + }, + "SCR": { + "name": "Seychellois Rupee" + }, + "SLL": { + "name": "Sierra Leonean Leone" + }, + "SGD": { + "name": "Singapore Dollar" + }, + "SBD": { + "name": "Solomon Islands Dollar" + }, + "SOS": { + "name": "Somali Shilling" + }, + "ZAR": { + "name": "South African Rand" + }, + "KRW": { + "name": "South Korean Won", + "symbol": "â‚©" + }, + "SSP": { + "name": "South Sudanese Pound" + }, + "LKR": { + "name": "Sri Lankan Rupee" + }, + "SHP": { + "name": "St. Helena Pound" + }, + "SDG": { + "name": "Sudanese Pound" + }, + "SRD": { + "name": "Surinamese Dollar" + }, + "SZL": { + "name": "Swazi Lilangeni" + }, + "SEK": { + "name": "Swedish Krona" + }, + "CHF": { + "name": "Swiss Franc" + }, + "SYP": { + "name": "Syrian Pound" + }, + "TJS": { + "name": "Tajikistani Somoni" + }, + "TZS": { + "name": "Tanzanian Shilling" + }, + "THB": { + "name": "Thai Baht" + }, + "TOP": { + "name": "Tongan PaÊ»anga" + }, + "TTD": { + "name": "Trinidad & Tobago Dollar" + }, + "TND": { + "name": "Tunisian Dinar" + }, + "TRY": { + "name": "Turkish Lira" + }, + "TMT": { + "name": "Turkmenistani Manat" + }, + "UGX": { + "name": "Ugandan Shilling" + }, + "UAH": { + "name": "Ukrainian Hryvnia" + }, + "AED": { + "name": "United Arab Emirates Dirham" + }, + "UYW": { + "name": "Uruguayan Nominal Wage Index Unit" + }, + "UYU": { + "name": "Uruguayan Peso" + }, + "USD": { + "name": "US Dollar", + "symbol": "$" + }, + "UZS": { + "name": "Uzbekistani Som" + }, + "VUV": { + "name": "Vanuatu Vatu" + }, + "VES": { + "name": "Venezuelan BolÃvar" + }, + "VND": { + "name": "Vietnamese Dong", + "symbol": "â‚«" + }, + "XOF": { + "name": "West African CFA Franc", + "symbol": "F CFA" + }, + "YER": { + "name": "Yemeni Rial" + }, + "ZMW": { + "name": "Zambian Kwacha" + }, + "ZWL": { + "name": "Zimbabwean Dollar (2009)" + } +}
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/currency/es-419.json b/vendor/commerceguys/intl/resources/currency/es-419.json index 6f99e309a..30cdae3b8 100644 --- a/vendor/commerceguys/intl/resources/currency/es-419.json +++ b/vendor/commerceguys/intl/resources/currency/es-419.json @@ -66,7 +66,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -271,7 +271,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -307,7 +307,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -448,7 +448,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tenge kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/es-CL.json b/vendor/commerceguys/intl/resources/currency/es-CL.json index 492f198e0..905667d1f 100644 --- a/vendor/commerceguys/intl/resources/currency/es-CL.json +++ b/vendor/commerceguys/intl/resources/currency/es-CL.json @@ -66,7 +66,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -272,7 +272,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -308,7 +308,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -450,7 +450,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tenge kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/es-GT.json b/vendor/commerceguys/intl/resources/currency/es-GT.json index bef414490..ca4599454 100644 --- a/vendor/commerceguys/intl/resources/currency/es-GT.json +++ b/vendor/commerceguys/intl/resources/currency/es-GT.json @@ -66,7 +66,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -271,7 +271,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -307,7 +307,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -449,7 +449,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tenge kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/es-MX.json b/vendor/commerceguys/intl/resources/currency/es-MX.json index 4bda1e1b8..4d2e5234f 100644 --- a/vendor/commerceguys/intl/resources/currency/es-MX.json +++ b/vendor/commerceguys/intl/resources/currency/es-MX.json @@ -66,7 +66,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -268,7 +268,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -304,7 +304,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -449,7 +449,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tenge kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/es-US.json b/vendor/commerceguys/intl/resources/currency/es-US.json index 57623ac3d..cb4afad29 100644 --- a/vendor/commerceguys/intl/resources/currency/es-US.json +++ b/vendor/commerceguys/intl/resources/currency/es-US.json @@ -66,7 +66,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -269,7 +269,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -305,7 +305,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -449,7 +449,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tenge kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/es-VE.json b/vendor/commerceguys/intl/resources/currency/es-VE.json index 12e3d616f..8efe675f4 100644 --- a/vendor/commerceguys/intl/resources/currency/es-VE.json +++ b/vendor/commerceguys/intl/resources/currency/es-VE.json @@ -67,7 +67,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -272,7 +272,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -308,7 +308,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -449,7 +449,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tenge kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/es.json b/vendor/commerceguys/intl/resources/currency/es.json index 09b1b640c..0c5db9802 100644 --- a/vendor/commerceguys/intl/resources/currency/es.json +++ b/vendor/commerceguys/intl/resources/currency/es.json @@ -67,7 +67,7 @@ "name": "dinar argelino" }, "BHD": { - "name": "dinar bahreinÃ" + "name": "dinar bareinÃ" }, "IQD": { "name": "dinar iraquÃ" @@ -223,9 +223,6 @@ "DJF": { "name": "franco yibutiano" }, - "HTG": { - "name": "gourde haitiano" - }, "UAH": { "name": "grivna" }, @@ -235,6 +232,9 @@ "BTN": { "name": "gultrum" }, + "HTG": { + "name": "gurde haitiano" + }, "MMK": { "name": "kiat" }, @@ -275,7 +275,7 @@ "name": "leu rumano" }, "BGN": { - "name": "lev búlgaro" + "name": "leva búlgara" }, "SHP": { "name": "libra de Santa Elena" @@ -311,7 +311,7 @@ "name": "lira turca" }, "LSL": { - "name": "loti lesothense" + "name": "loti lesotense" }, "AZN": { "name": "manat azerbaiyano" @@ -452,7 +452,7 @@ "name": "tala" }, "KZT": { - "name": "tenge kazako" + "name": "tengue kazajo" }, "MNT": { "name": "tugrik" diff --git a/vendor/commerceguys/intl/resources/currency/eu.json b/vendor/commerceguys/intl/resources/currency/eu.json index 88ce30f63..820ad3694 100644 --- a/vendor/commerceguys/intl/resources/currency/eu.json +++ b/vendor/commerceguys/intl/resources/currency/eu.json @@ -39,14 +39,14 @@ "name": "CFP frankoa", "symbol": "CFPF" }, + "CRC": { + "name": "colon costarricarra" + }, "NIO": { "name": "cordoba nikaraguarra" }, - "CRC": { - "name": "Costa Ricako colona" - }, "GMD": { - "name": "dalasi ganbiarra" + "name": "dalasi gambiarra" }, "DZD": { "name": "dinar aljeriarra" @@ -100,6 +100,10 @@ "BND": { "name": "dolar bruneitarra" }, + "XCD": { + "name": "dolar ekikaribearra", + "symbol": "EC$" + }, "USD": { "name": "dolar estatubatuarra", "symbol": "US$" @@ -143,10 +147,16 @@ "name": "dolar taiwandar berria", "symbol": "NT$" }, + "TTD": { + "name": "dolar trinitatearra" + }, "NZD": { "name": "dolar zeelandaberritarra", "symbol": "NZ$" }, + "ZWL": { + "name": "dolar zimbabwetarra (2009)" + }, "VND": { "name": "dong vietnamdarra", "symbol": "â‚«" @@ -193,11 +203,14 @@ "CVE": { "name": "ezkutu caboverdetarra" }, + "ANG": { + "name": "florin antillarra" + }, "AWG": { "name": "florin arubarra" }, "HUF": { - "name": "florin hungariarra" + "name": "forint hungariarra" }, "BIF": { "name": "franko burundiarra" @@ -226,16 +239,9 @@ "PYG": { "name": "guarani paraguaitarra" }, - "ANG": { - "name": "Holandarren Antilletako florina" - }, "UAH": { "name": "hryvnia ukrainarra" }, - "XCD": { - "name": "Karibe ekialdeko dolarra", - "symbol": "EC$" - }, "GTQ": { "name": "ketzal guatemalarra" }, @@ -245,6 +251,9 @@ "LAK": { "name": "kip laostarra" }, + "SVC": { + "name": "kolon salvadortarra" + }, "DKK": { "name": "koroa danimarkarra" }, @@ -287,9 +296,6 @@ "SLL": { "name": "leone sierraleonarra" }, - "LSL": { - "name": "Lesothoko lotia" - }, "RON": { "name": "leu errumaniarra" }, @@ -330,6 +336,9 @@ "TRY": { "name": "lira turkiarra" }, + "LSL": { + "name": "loti lesothoarra" + }, "AZN": { "name": "manat azerbaijandarra" }, @@ -415,9 +424,6 @@ "MVR": { "name": "rufiyaa maldivarra" }, - "SVC": { - "name": "Salvadoran Colón" - }, "SHP": { "name": "Santa Helenako libera" }, @@ -428,6 +434,9 @@ "PEN": { "name": "sol perutarra" }, + "UYW": { + "name": "soldata nominalaren indize-unitate uruguaitarra" + }, "KGS": { "name": "som kirgizistandarra" }, @@ -446,9 +455,6 @@ "KZT": { "name": "tenge kazakhstandarra" }, - "TTD": { - "name": "Trinidad eta Tobagoko dolarra" - }, "MNT": { "name": "tugrik mongoliarra" }, @@ -467,9 +473,6 @@ "MRU": { "name": "uguiya mauritaniarra" }, - "UYW": { - "name": "Uruguayan Nominal Wage Index Unit" - }, "VUV": { "name": "vatu vanuatuarra" }, @@ -488,9 +491,6 @@ "name": "yuan txinatarra", "symbol": "CNÂ¥" }, - "ZWL": { - "name": "Zimbabwean Dollar (2009)" - }, "PLN": { "name": "zloty poloniarra" } diff --git a/vendor/commerceguys/intl/resources/currency/fa-AF.json b/vendor/commerceguys/intl/resources/currency/fa-AF.json index 276cb4211..79ec4ce1a 100644 --- a/vendor/commerceguys/intl/resources/currency/fa-AF.json +++ b/vendor/commerceguys/intl/resources/currency/fa-AF.json @@ -345,7 +345,7 @@ }, "XOF": { "name": "Ùرانک CFA غرب اÙریقا", - "symbol": "F CFA" + "symbol": "Ùرانک CFA" }, "XAF": { "name": "Ùرانک CFA مرکز اÙریقا", diff --git a/vendor/commerceguys/intl/resources/currency/fa.json b/vendor/commerceguys/intl/resources/currency/fa.json index d8f5535b4..b354da891 100644 --- a/vendor/commerceguys/intl/resources/currency/fa.json +++ b/vendor/commerceguys/intl/resources/currency/fa.json @@ -118,14 +118,14 @@ "MAD": { "name": "درهم مراکش" }, + "USD": { + "name": "دلار آمریکا", + "symbol": "$" + }, "AUD": { "name": "دلار استرالیا", "symbol": "A$" }, - "USD": { - "name": "دلار امریکا", - "symbol": "$" - }, "BBD": { "name": "دلار باربادوس" }, @@ -232,7 +232,7 @@ "symbol": "R$" }, "BYN": { - "name": "روبل بلاروسی" + "name": "روبل بلاروس" }, "RUB": { "name": "روبل روسیه" @@ -345,7 +345,7 @@ }, "XOF": { "name": "Ùرانک CFA غرب اÙریقا", - "symbol": "F CFA" + "symbol": "Ùرانک CFA" }, "XAF": { "name": "Ùرانک CFA مرکز اÙریقا", diff --git a/vendor/commerceguys/intl/resources/currency/fr-CA.json b/vendor/commerceguys/intl/resources/currency/fr-CA.json index 74340acbf..ca73ddf73 100644 --- a/vendor/commerceguys/intl/resources/currency/fr-CA.json +++ b/vendor/commerceguys/intl/resources/currency/fr-CA.json @@ -107,7 +107,7 @@ }, "CAD": { "name": "dollar canadien", - "symbol": "$ CA" + "symbol": "$" }, "HKD": { "name": "dollar de Hong Kong", diff --git a/vendor/commerceguys/intl/resources/currency/gl.json b/vendor/commerceguys/intl/resources/currency/gl.json index 38bb5763e..27ca98b38 100644 --- a/vendor/commerceguys/intl/resources/currency/gl.json +++ b/vendor/commerceguys/intl/resources/currency/gl.json @@ -305,7 +305,7 @@ "name": "lira turca" }, "LSL": { - "name": "Loti de Lesoto" + "name": "loti de Lesoto" }, "AZN": { "name": "manat acerbaixano" diff --git a/vendor/commerceguys/intl/resources/currency/he.json b/vendor/commerceguys/intl/resources/currency/he.json index b659e20e8..42508e0fa 100644 --- a/vendor/commerceguys/intl/resources/currency/he.json +++ b/vendor/commerceguys/intl/resources/currency/he.json @@ -310,22 +310,9 @@ "HUF": { "name": "×¤×•×¨×™× ×˜ ×”×•× ×’×¨×™" }, - "DOP": { - "name": "פזו ×“×•×ž×™× ×™×§× ×™" - }, - "MXN": { - "name": "פזו ×ž×§×¡×™×§× ×™", - "symbol": "MX$" - }, "PHP": { "name": "פזו ×¤×™×œ×™×¤×™× ×™" }, - "CUP": { - "name": "פזו ×§×•×‘× ×™" - }, - "CUC": { - "name": "פזו ×§×•×‘× ×™ להמרה" - }, "MOP": { "name": "פטקה של מק×ו" }, @@ -338,9 +325,22 @@ "ARS": { "name": "פסו ××¨×’× ×˜×™× ××™" }, + "DOP": { + "name": "פסו ×“×•×ž×™× ×™×§× ×™" + }, + "MXN": { + "name": "פסו ×ž×§×¡×™×§× ×™", + "symbol": "MX$" + }, "CLP": { "name": "פסו צ׳יל×× ×™" }, + "CUP": { + "name": "פסו ×§×•×‘× ×™" + }, + "CUC": { + "name": "פסו ×§×•×‘× ×™ להמרה" + }, "COP": { "name": "פסו קולומבי×× ×™" }, diff --git a/vendor/commerceguys/intl/resources/currency/hr.json b/vendor/commerceguys/intl/resources/currency/hr.json index 7ff996417..4ca33edd1 100644 --- a/vendor/commerceguys/intl/resources/currency/hr.json +++ b/vendor/commerceguys/intl/resources/currency/hr.json @@ -155,7 +155,8 @@ "name": "hongkonÅ¡ki dolar" }, "HRK": { - "name": "hrvatska kuna" + "name": "hrvatska kuna", + "symbol": "kn" }, "INR": { "name": "indijska rupija" @@ -251,7 +252,7 @@ "name": "laoski kip" }, "LSL": { - "name": "lesoto loti" + "name": "lesotski loti" }, "LBP": { "name": "libanonska funta" diff --git a/vendor/commerceguys/intl/resources/currency/hu.json b/vendor/commerceguys/intl/resources/currency/hu.json index 7aed06a73..1f2ea9d08 100644 --- a/vendor/commerceguys/intl/resources/currency/hu.json +++ b/vendor/commerceguys/intl/resources/currency/hu.json @@ -256,7 +256,7 @@ "name": "lengyel zloty" }, "LSL": { - "name": "Lesothoi loti" + "name": "lesothoi loti" }, "LBP": { "name": "libanoni font" diff --git a/vendor/commerceguys/intl/resources/currency/hy.json b/vendor/commerceguys/intl/resources/currency/hy.json index 7eee595d2..ea9b6f849 100644 --- a/vendor/commerceguys/intl/resources/currency/hy.json +++ b/vendor/commerceguys/intl/resources/currency/hy.json @@ -168,6 +168,9 @@ "PLN": { "name": "Õ¬Õ¥Õ°Õ¡Õ¯Õ¡Õ¶ Õ¦Õ¬Õ¸Õ¿Õ«" }, + "LSL": { + "name": "Õ¬Õ¥Õ½Õ¸Õ©Õ¸ÕµÕ¡Õ¯Õ¡Õ¶ Õ¬Õ¸Õ¿Õ«" + }, "LBP": { "name": "Õ¬Õ«Õ¢Õ¡Õ¶Õ¡Õ¶ÕµÕ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿" }, @@ -483,9 +486,6 @@ "FKP": { "name": "Õ–Õ¸Õ¬Ö„Õ¬Õ¥Õ¶Õ¤ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€Õ« Ö†Õ¸Ö‚Õ¶Õ¿" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/is.json b/vendor/commerceguys/intl/resources/currency/is.json index a6117f1ca..2b79b4df9 100644 --- a/vendor/commerceguys/intl/resources/currency/is.json +++ b/vendor/commerceguys/intl/resources/currency/is.json @@ -235,7 +235,7 @@ "name": "laoskt kip" }, "LSL": { - "name": "Lesotho Loti" + "name": "lesótóskur lóti" }, "LBP": { "name": "lÃbanskt pund" diff --git a/vendor/commerceguys/intl/resources/currency/ka.json b/vendor/commerceguys/intl/resources/currency/ka.json index 635a4c852..74606f348 100644 --- a/vendor/commerceguys/intl/resources/currency/ka.json +++ b/vendor/commerceguys/intl/resources/currency/ka.json @@ -216,6 +216,9 @@ "LAK": { "name": "ლáƒáƒáƒ¡áƒ£áƒ ი კიპი" }, + "LSL": { + "name": "ლესáƒáƒ—áƒáƒ¡ ლáƒáƒ¢áƒ˜" + }, "LBP": { "name": "ლიბáƒáƒœáƒ£áƒ ი ფუნტი" }, @@ -473,9 +476,6 @@ "name": "CFP ფრáƒáƒœáƒ™áƒ˜", "symbol": "CFPF" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/kk.json b/vendor/commerceguys/intl/resources/currency/kk.json index 61076f187..ee93c0cff 100644 --- a/vendor/commerceguys/intl/resources/currency/kk.json +++ b/vendor/commerceguys/intl/resources/currency/kk.json @@ -247,6 +247,10 @@ "LAK": { "name": "Ð›Ð°Ð¾Ñ ÐºÐ¸Ð¿Ñ–" }, + "LSL": { + "name": "ЛеÑото лотиі", + "symbol": "ЛСЛ" + }, "LRD": { "name": "Ð›Ð¸Ð±ÐµÑ€Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹" }, @@ -484,9 +488,6 @@ "JMD": { "name": "Ямайка доллары" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/km.json b/vendor/commerceguys/intl/resources/currency/km.json index ac93071c2..508582beb 100644 --- a/vendor/commerceguys/intl/resources/currency/km.json +++ b/vendor/commerceguys/intl/resources/currency/km.json @@ -467,6 +467,10 @@ "GEL": { "name": "ឡារី​​ហ្សកហ្ស៊ី" }, + "LSL": { + "name": "ឡូទីឡáŸážŸáž¼ážáž¼", + "symbol": "ឡូទី" + }, "MGA": { "name": "អារៀរី​ម៉ាឡាហ្គាស៊ី" }, @@ -483,9 +487,6 @@ "MRU": { "name": "អ៊ូហ្គីយ៉ា​ម៉ូរីážáž¶áž“ី" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/kok.json b/vendor/commerceguys/intl/resources/currency/kok.json index e43f429fb..ed2b9859c 100644 --- a/vendor/commerceguys/intl/resources/currency/kok.json +++ b/vendor/commerceguys/intl/resources/currency/kok.json @@ -401,6 +401,9 @@ "LBP": { "name": "लिबानेस पावंड" }, + "LSL": { + "name": "लिसोथो लोटि" + }, "LYD": { "name": "लीबियान डिनार" }, @@ -482,9 +485,6 @@ "HNL": { "name": "होंडà¥à¤°à¤¾à¤¨ लेमà¥à¤ªà¤¿à¤°à¤¾" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/ky.json b/vendor/commerceguys/intl/resources/currency/ky.json index f78b00403..18b9dcf8e 100644 --- a/vendor/commerceguys/intl/resources/currency/ky.json +++ b/vendor/commerceguys/intl/resources/currency/ky.json @@ -238,6 +238,9 @@ "LAK": { "name": "Ð›Ð°Ð¾Ñ ÐºÐ¸Ð±Ð¸" }, + "LSL": { + "name": "ЛеÑото лотиÑи" + }, "LRD": { "name": "Ð›Ð¸Ð±ÐµÑ€Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹" }, @@ -470,9 +473,6 @@ "JMD": { "name": "Ñмайка доллары" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/mn.json b/vendor/commerceguys/intl/resources/currency/mn.json index c46ccc87a..d3d673c1c 100644 --- a/vendor/commerceguys/intl/resources/currency/mn.json +++ b/vendor/commerceguys/intl/resources/currency/mn.json @@ -222,6 +222,9 @@ "LAK": { "name": "ЛаоÑын кип" }, + "LSL": { + "name": "ЛеÑото лоти" + }, "LRD": { "name": "Либерийн доллар" }, @@ -483,9 +486,6 @@ "name": "Японы иен", "symbol": "JPÂ¥" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/my.json b/vendor/commerceguys/intl/resources/currency/my.json index 5d6cf2e24..c73702909 100644 --- a/vendor/commerceguys/intl/resources/currency/my.json +++ b/vendor/commerceguys/intl/resources/currency/my.json @@ -1,4 +1,8 @@ { + "XPF": { + "name": "[CFP] ဖရန့်", + "symbol": "CFPF" + }, "CAD": { "name": "ကနေဒါ ဒေါ်လာ", "symbol": "CA$" @@ -376,6 +380,9 @@ "LAK": { "name": "လာအá€á€¯ ကစ်" }, + "LSL": { + "name": "လီဆá€á€¯á€žá€á€¯ လá€á€¯á€á€®" + }, "LBP": { "name": "လက်ဘနွန် ပေါင်" }, @@ -406,7 +413,7 @@ "name": "အဇာဘá€á€¯á€„်ဂျန် မာနá€á€º" }, "XOF": { - "name": "အနောက် အာဖရá€á€€ CFA ဖရန့်", + "name": "အနောက် အာဖရá€á€€ [CFA ]ဖရန့်", "symbol": "F CFA" }, "USD": { @@ -484,13 +491,6 @@ "DZD": { "name": "အယ်လ်ဂျီးရီးယား ဒီနာ" }, - "XPF": { - "name": "CFP ဖရန့်", - "symbol": "CFPF" - }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/nb.json b/vendor/commerceguys/intl/resources/currency/nb.json deleted file mode 100644 index bf461de2c..000000000 --- a/vendor/commerceguys/intl/resources/currency/nb.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "AFN": { - "name": "afghanske afghani" - }, - "ALL": { - "name": "albanske lek" - }, - "DZD": { - "name": "algeriske dinarer" - }, - "USD": { - "name": "amerikanske dollar" - }, - "AOA": { - "name": "angolanske kwanza" - }, - "ARS": { - "name": "argentinske pesos" - }, - "AMD": { - "name": "armenske dram" - }, - "AWG": { - "name": "arubiske floriner" - }, - "AZN": { - "name": "aserbajdsjanske manat" - }, - "AUD": { - "name": "australske dollar" - }, - "BSD": { - "name": "bahamanske dollar" - }, - "BHD": { - "name": "bahrainske dinarer" - }, - "BDT": { - "name": "bangladeshiske taka" - }, - "BBD": { - "name": "barbadiske dollar" - }, - "BZD": { - "name": "beliziske dollar" - }, - "BMD": { - "name": "bermudiske dollar" - }, - "BTN": { - "name": "bhutanske ngultrum" - }, - "BOB": { - "name": "bolivianske boliviano" - }, - "BAM": { - "name": "bosnisk-hercegovinske konvertible mark" - }, - "BWP": { - "name": "botswanske pula" - }, - "BRL": { - "name": "brasilianske real" - }, - "GBP": { - "name": "britiske pund", - "symbol": "£" - }, - "BND": { - "name": "bruneiske dollar" - }, - "BGN": { - "name": "bulgarske lev" - }, - "BIF": { - "name": "burundiske franc" - }, - "KYD": { - "name": "caymanske dollar" - }, - "XPF": { - "name": "CFP-franc" - }, - "CLP": { - "name": "chilenske pesos" - }, - "COP": { - "name": "colombianske pesos" - }, - "CRC": { - "name": "costaricanske colón" - }, - "DKK": { - "name": "danske kroner" - }, - "DJF": { - "name": "djiboutiske franc" - }, - "DOP": { - "name": "dominikanske pesos" - }, - "EGP": { - "name": "egyptiske pund" - }, - "AED": { - "name": "emiratarabiske dirham" - }, - "ERN": { - "name": "eritreiske nakfa" - }, - "ETB": { - "name": "etiopiske birr" - }, - "EUR": { - "name": "euro", - "symbol": "€" - }, - "FKP": { - "name": "falklandspund" - }, - "FJD": { - "name": "fijianske dollar" - }, - "PHP": { - "name": "filippinske pesos" - }, - "GMD": { - "name": "gambiske dalasi" - }, - "GEL": { - "name": "georgiske lari" - }, - "GHS": { - "name": "ghanesiske cedi" - }, - "GIP": { - "name": "gibraltarske pund" - }, - "GTQ": { - "name": "guatemalanske quetzal" - }, - "GNF": { - "name": "guineanske franc" - }, - "GYD": { - "name": "guyanske dollar" - }, - "HTG": { - "name": "haitiske gourde" - }, - "HNL": { - "name": "honduranske lempira" - }, - "HKD": { - "name": "Hongkong-dollar" - }, - "INR": { - "name": "indiske rupier" - }, - "IDR": { - "name": "indonesiske rupier" - }, - "IQD": { - "name": "irakske dinarer" - }, - "IRR": { - "name": "iranske rialer" - }, - "ISK": { - "name": "islandske kroner" - }, - "JMD": { - "name": "jamaikanske dollar" - }, - "JPY": { - "name": "japanske yen" - }, - "YER": { - "name": "jemenittiske rialer" - }, - "JOD": { - "name": "jordanske dinarer" - }, - "KHR": { - "name": "kambodsjanske riel" - }, - "CAD": { - "name": "kanadiske dollar" - }, - "CVE": { - "name": "kappverdiske escudos" - }, - "KZT": { - "name": "kasakhstanske tenge" - }, - "KES": { - "name": "kenyanske shilling" - }, - "CNY": { - "name": "kinesiske yuan" - }, - "KGS": { - "name": "kirgisiske som" - }, - "KMF": { - "name": "komoriske franc" - }, - "CDF": { - "name": "kongolesiske franc" - }, - "HRK": { - "name": "kroatiske kuna" - }, - "CUC": { - "name": "kubanske konvertible pesos" - }, - "CUP": { - "name": "kubanske pesos" - }, - "KWD": { - "name": "kuwaitiske dinarer" - }, - "LAK": { - "name": "laotiske kip" - }, - "LSL": { - "name": "lesothiske loti" - }, - "LBP": { - "name": "libanesiske pund" - }, - "LRD": { - "name": "liberiske dollar" - }, - "LYD": { - "name": "libyske dinarer" - }, - "MGA": { - "name": "madagassiske ariary" - }, - "MOP": { - "name": "makaoiske pataca" - }, - "MKD": { - "name": "makedonske denarer" - }, - "MWK": { - "name": "malawiske kwacha" - }, - "MYR": { - "name": "malaysiske ringgit" - }, - "MVR": { - "name": "maldiviske rufiyaa" - }, - "MAD": { - "name": "marokkanske dirham" - }, - "MRU": { - "name": "mauritanske ouguiya" - }, - "MUR": { - "name": "mauritiske rupier" - }, - "MXN": { - "name": "meksikanske pesos" - }, - "MDL": { - "name": "moldovske leu" - }, - "MNT": { - "name": "mongolske tugrik" - }, - "MZN": { - "name": "mosambikiske metical" - }, - "MMK": { - "name": "myanmarske kyat" - }, - "NAD": { - "name": "namibiske dollar" - }, - "ANG": { - "name": "nederlandske antillegylden" - }, - "NPR": { - "name": "nepalske rupier" - }, - "NZD": { - "name": "newzealandske dollar" - }, - "NIO": { - "name": "nicaraguanske córdoba" - }, - "NGN": { - "name": "nigerianske naira" - }, - "KPW": { - "name": "nordkoreanske won" - }, - "NOK": { - "name": "norske kroner", - "symbol": "kr" - }, - "BYN": { - "name": "nye hviterussiske rubler" - }, - "ILS": { - "name": "nye israelske shekler" - }, - "TWD": { - "name": "nye taiwanske dollar" - }, - "OMR": { - "name": "omanske rialer" - }, - "PKR": { - "name": "pakistanske rupier" - }, - "PAB": { - "name": "panamanske balboa" - }, - "PGK": { - "name": "papuanske kina" - }, - "PYG": { - "name": "paraguayanske guarani" - }, - "PEN": { - "name": "peruanske sol" - }, - "PLN": { - "name": "polske zloty" - }, - "QAR": { - "name": "qatarske rialer" - }, - "RON": { - "name": "rumenske leu" - }, - "RUB": { - "name": "russiske rubler" - }, - "RWF": { - "name": "rwandiske franc" - }, - "SBD": { - "name": "salomonske dollar" - }, - "SVC": { - "name": "salvadoranske colon" - }, - "WST": { - "name": "samoanske tala" - }, - "SHP": { - "name": "sankthelenske pund" - }, - "STN": { - "name": "saotomesiske dobra" - }, - "SAR": { - "name": "saudiarabiske riyaler" - }, - "XAF": { - "name": "sentralafrikanske CFA-franc" - }, - "RSD": { - "name": "serbiske dinarer" - }, - "SCR": { - "name": "seychelliske rupier" - }, - "SLL": { - "name": "sierraleonske leone" - }, - "SGD": { - "name": "singaporske dollar" - }, - "SOS": { - "name": "somaliske shilling" - }, - "LKR": { - "name": "srilankiske rupier" - }, - "SDG": { - "name": "sudanske pund" - }, - "SRD": { - "name": "surinamske dollar" - }, - "CHF": { - "name": "sveitsiske franc" - }, - "SEK": { - "name": "svenske kroner" - }, - "SZL": { - "name": "swazilandske lilangeni" - }, - "SYP": { - "name": "syriske pund" - }, - "ZAR": { - "name": "sørafrikanske rand" - }, - "KRW": { - "name": "sørkoreanske won" - }, - "SSP": { - "name": "sørsudanske pund" - }, - "TJS": { - "name": "tadsjikiske somoni" - }, - "TZS": { - "name": "tanzanianske shilling" - }, - "THB": { - "name": "thailandske baht" - }, - "TOP": { - "name": "tonganske paÊ»anga" - }, - "TTD": { - "name": "trinidadiske dollar" - }, - "CZK": { - "name": "tsjekkiske koruna" - }, - "TND": { - "name": "tunisiske dinarer" - }, - "TMT": { - "name": "turkmenske manat" - }, - "TRY": { - "name": "tyrkiske lire" - }, - "UGX": { - "name": "ugandiske shilling" - }, - "UAH": { - "name": "ukrainske hryvnia" - }, - "HUF": { - "name": "ungarske forinter" - }, - "UYW": { - "name": "Uruguayan Nominal Wage Index Unit" - }, - "UYU": { - "name": "uruguayanske pesos" - }, - "UZS": { - "name": "usbekiske som" - }, - "VUV": { - "name": "vanuatiske vatu" - }, - "VES": { - "name": "venezuelanske bolivar" - }, - "XOF": { - "name": "vestafrikanske CFA-franc", - "symbol": "F CFA" - }, - "VND": { - "name": "vietnamesiske dong" - }, - "ZMW": { - "name": "zambiske kwacha" - }, - "ZWL": { - "name": "zimbabwisk dollar (2009)" - }, - "XCD": { - "name": "østkaribiske dollar" - } -}
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/currency/ne.json b/vendor/commerceguys/intl/resources/currency/ne.json index 4bda1ea35..c6db8a573 100644 --- a/vendor/commerceguys/intl/resources/currency/ne.json +++ b/vendor/commerceguys/intl/resources/currency/ne.json @@ -401,6 +401,9 @@ "LBP": { "name": "लेबनाली पाउनà¥à¤¡" }, + "LSL": { + "name": "लेसोथो लोटी" + }, "BZD": { "name": "वेलिज डलर" }, @@ -483,9 +486,6 @@ "HNL": { "name": "होनà¥à¤¡à¥à¤°à¤¾à¤¨ लेमà¥à¤ªà¤¿à¤°à¤¾" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/pa.json b/vendor/commerceguys/intl/resources/currency/pa.json index dd1219c44..56fc6ef32 100644 --- a/vendor/commerceguys/intl/resources/currency/pa.json +++ b/vendor/commerceguys/intl/resources/currency/pa.json @@ -469,6 +469,9 @@ "LYD": { "name": "ਲੀਬੀਆਈ ਦਿਨਾਰ" }, + "LSL": { + "name": "ਲੇਸੋਥੋ ਲੋਟੀ" + }, "LBP": { "name": "ਲੈਬਨਾਨੀ ਪੌਂਡ" }, @@ -482,9 +485,6 @@ "VES": { "name": "ਵੇਨੇਜ਼ੂà¨à¨²à¨¨ ਬੋਲੀਵਰ" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/pl.json b/vendor/commerceguys/intl/resources/currency/pl.json index 82cf3282d..0c5327889 100644 --- a/vendor/commerceguys/intl/resources/currency/pl.json +++ b/vendor/commerceguys/intl/resources/currency/pl.json @@ -299,7 +299,7 @@ "name": "lira turecka" }, "LSL": { - "name": "loti Lesoto" + "name": "loti lesotyjskie" }, "AZN": { "name": "manat azerski" diff --git a/vendor/commerceguys/intl/resources/currency/pt-PT.json b/vendor/commerceguys/intl/resources/currency/pt-PT.json index 2653c035b..8845cc372 100644 --- a/vendor/commerceguys/intl/resources/currency/pt-PT.json +++ b/vendor/commerceguys/intl/resources/currency/pt-PT.json @@ -305,7 +305,7 @@ "name": "lira turca" }, "LSL": { - "name": "Loti do Lesoto" + "name": "loti lesotiano" }, "AZN": { "name": "manat azeri" diff --git a/vendor/commerceguys/intl/resources/currency/pt.json b/vendor/commerceguys/intl/resources/currency/pt.json index 5c90a205d..7299e4f0b 100644 --- a/vendor/commerceguys/intl/resources/currency/pt.json +++ b/vendor/commerceguys/intl/resources/currency/pt.json @@ -302,7 +302,7 @@ "name": "Lira turca" }, "LSL": { - "name": "Loti do Lesoto" + "name": "Loti lesotiano" }, "AZN": { "name": "Manat azeri" diff --git a/vendor/commerceguys/intl/resources/currency/ru.json b/vendor/commerceguys/intl/resources/currency/ru.json index 10f4caac7..cce555f33 100644 --- a/vendor/commerceguys/intl/resources/currency/ru.json +++ b/vendor/commerceguys/intl/resources/currency/ru.json @@ -254,7 +254,7 @@ "name": "ливийÑкий динар" }, "LSL": { - "name": "Лоти" + "name": "лоти" }, "MUR": { "name": "маврикийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" diff --git a/vendor/commerceguys/intl/resources/currency/si.json b/vendor/commerceguys/intl/resources/currency/si.json index 6bc92367b..0bb2b40a7 100644 --- a/vendor/commerceguys/intl/resources/currency/si.json +++ b/vendor/commerceguys/intl/resources/currency/si.json @@ -391,6 +391,9 @@ "LBP": { "name": "ලෙබනන පවුම්" }, + "LSL": { + "name": "ලෙසà·à¶à· ලොටි" + }, "VUV": { "name": "වනුවà·à¶§à·” à·€à·à¶§à·”" }, @@ -483,9 +486,6 @@ "FKP": { "name": "à·†à·à¶šà·Šà¶½à¶±à·Šà¶©à·Š දූපà¶à·Š පවුම්" }, - "LSL": { - "name": "Lesotho Loti" - }, "SVC": { "name": "Salvadoran Colón" }, diff --git a/vendor/commerceguys/intl/resources/currency/sl.json b/vendor/commerceguys/intl/resources/currency/sl.json index 3dda208d9..0dea1cb29 100644 --- a/vendor/commerceguys/intl/resources/currency/sl.json +++ b/vendor/commerceguys/intl/resources/currency/sl.json @@ -262,7 +262,7 @@ "name": "laoÅ¡ki kip" }, "LSL": { - "name": "lesoÅ¡ki loti" + "name": "lesotski loti" }, "LBP": { "name": "libanonski funt" diff --git a/vendor/commerceguys/intl/resources/currency/sq.json b/vendor/commerceguys/intl/resources/currency/sq.json index 78375fb54..24715fa45 100644 --- a/vendor/commerceguys/intl/resources/currency/sq.json +++ b/vendor/commerceguys/intl/resources/currency/sq.json @@ -261,9 +261,6 @@ "SLL": { "name": "Leoni i Sierra-Leones" }, - "LSL": { - "name": "Lesotho Loti" - }, "MDL": { "name": "Leuja moldave" }, @@ -279,6 +276,9 @@ "TRY": { "name": "Lira turke" }, + "LSL": { + "name": "Lota lesotiane" + }, "AZN": { "name": "Manata azerbajxhanase" }, diff --git a/vendor/commerceguys/intl/resources/currency/sr-Cyrl-BA.json b/vendor/commerceguys/intl/resources/currency/sr-Cyrl-BA.json index 2ce408333..6b9278894 100644 --- a/vendor/commerceguys/intl/resources/currency/sr-Cyrl-BA.json +++ b/vendor/commerceguys/intl/resources/currency/sr-Cyrl-BA.json @@ -1,492 +1,492 @@ { "AFN": { - "name": "ÐвганиÑтанÑки авгани" + "name": "авганиÑтанÑки авгани" }, "AZN": { - "name": "ÐзербејџанÑки манат" + "name": "азербејџанÑки манат" }, "ALL": { - "name": "ÐлбанÑки лек" + "name": "албанÑки лек" }, "DZD": { - "name": "ÐлжирÑки динар" + "name": "алжирÑки динар" }, "USD": { - "name": "Ðмерички долар", + "name": "амерички долар", "symbol": "US$" }, "AOA": { - "name": "ÐнголÑка кванза" + "name": "анголÑка кванза" }, "ARS": { - "name": "ÐргентинÑки пезоÑ" + "name": "аргентинÑки пезоÑ" }, "AWG": { - "name": "ÐрубанÑки флорин" + "name": "арубанÑки флорин" }, "AUD": { - "name": "ÐуÑтралијÑки долар" + "name": "ауÑтралијÑки долар" }, "BDT": { - "name": "Бангладешка така" + "name": "бангладешка така" }, "BBD": { - "name": "Барбадошки долар" + "name": "барбадошки долар" }, "BSD": { - "name": "БахамÑки долар" + "name": "бахамÑки долар" }, "BHD": { - "name": "БахреинÑки динар" + "name": "бахреинÑки динар" }, "BZD": { - "name": "БелиÑки долар" + "name": "белиÑки долар" }, "BMD": { - "name": "БермудÑки долар" + "name": "бермудÑки долар" }, "BYN": { "name": "БјелоруÑка рубља" }, "BOB": { - "name": "БоливијÑки боливијано" + "name": "боливијÑки боливијано" }, "BAM": { "name": "БоÑанÑкохерцеговачка конвертибилна марка", "symbol": "КМ" }, "BWP": { - "name": "БоцванÑка пула" + "name": "боцванÑка пула" }, "BRL": { - "name": "БразилÑки реал", + "name": "бразилÑки реал", "symbol": "R$" }, "GBP": { - "name": "БританÑка фунта", + "name": "британÑка фунта", "symbol": "£" }, "BND": { - "name": "БрунејÑки долар" + "name": "брунејÑки долар" }, "BGN": { - "name": "БугарÑки лев" + "name": "бугарÑки лев" }, "BIF": { - "name": "БурундÑки франак" + "name": "бурундÑки франак" }, "BTN": { - "name": "БутанÑки нгултрум" + "name": "бутанÑки нгултрум" }, "VUV": { - "name": "ВануатÑки вату" + "name": "вануатÑки вату" }, "VES": { - "name": "ВенецуеланÑки боливар" + "name": "венецуеланÑки боливар" }, "VND": { - "name": "ВијетнамÑки донг" + "name": "вијетнамÑки донг" }, "GMD": { - "name": "ГамбијÑки далаÑи" + "name": "гамбијÑки далаÑи" }, "GHS": { - "name": "ГанÑки Ñеди" + "name": "ганÑки Ñеди" }, "GYD": { - "name": "ГвајанÑки долар" + "name": "гвајанÑки долар" }, "GTQ": { - "name": "ГватемалÑки кецал" + "name": "гватемалÑки кецал" }, "GNF": { - "name": "ГвинејÑки франак" + "name": "гвинејÑки франак" }, "GIP": { - "name": "ГибралтарÑка фунта" + "name": "гибралтарÑка фунта" }, "GEL": { - "name": "ГрузијÑки лари" + "name": "грузијÑки лари" }, "DKK": { - "name": "ДанÑка круна" + "name": "данÑка круна" + }, + "AED": { + "name": "дирхам УÐЕ" }, "DOP": { - "name": "ДоминиканÑки пезоÑ" + "name": "доминиканÑки пезоÑ" }, "EUR": { "name": "Евро", "symbol": "€" }, "EGP": { - "name": "ЕгипатÑка фунта" + "name": "египатÑка фунта" + }, + "ERN": { + "name": "еритрејÑка накфа" }, "ETB": { - "name": "ЕтиопÑки бир" + "name": "етиопијÑки бир" }, "ZMW": { - "name": "ЗамбијÑка квача" + "name": "замбијÑка квача" + }, + "XOF": { + "name": "западноафрички франак", + "symbol": "F CFA" }, "CVE": { - "name": "ЗеленортÑки еÑкудо" + "name": "зеленортÑки еÑкудо" }, "ZWL": { "name": "ЗимбабвеанÑки долар (2009)" }, "ILS": { - "name": "ИзраелÑки нови шекел", + "name": "израелÑки нови шекел", "symbol": "₪" }, "INR": { - "name": "ИндијÑка рупија", + "name": "индијÑка рупија", "symbol": "₹" }, "IDR": { - "name": "ИндонежанÑка рупија" + "name": "индонежанÑка рупија" }, "IRR": { - "name": "ИранÑки риjал" + "name": "иранÑки ријал" }, "IQD": { - "name": "Ирачки динар" + "name": "ирачки динар" }, "ISK": { - "name": "ИÑландÑка круна" + "name": "иÑландÑка круна" }, "XCD": { - "name": "ИÑточнокарипÑки долар", + "name": "иÑточнокарипÑки долар", "symbol": "EC$" }, "JMD": { - "name": "ЈамајчанÑки долар" + "name": "јамајчанÑки долар" }, "JPY": { - "name": "ЈапанÑки јен", + "name": "јапанÑки јен", "symbol": "Â¥" }, "YER": { - "name": "ЈеменÑки риjал" + "name": "јеменÑки ријал" }, "AMD": { - "name": "ЈерменÑки драм" + "name": "јерменÑки драм" }, "JOD": { - "name": "ЈорданÑки динар" + "name": "јорданÑки динар" }, "ZAR": { - "name": "Јужноафрички ранд" + "name": "јужноафрички ранд" }, "KRW": { - "name": "ЈужнокорејÑки вон" + "name": "јужнокорејÑки вон" }, "SSP": { - "name": "ЈужноÑуданÑка фунта" + "name": "јужноÑуданÑка фунта" }, "KZT": { - "name": "КазахÑтанÑки тенге" + "name": "казахÑтанÑки тенге" }, "KYD": { - "name": "КајманÑки долар" + "name": "кајманÑки долар" + }, + "KHR": { + "name": "камбоџанÑки ријел" }, "CAD": { - "name": "КанадÑки долар", + "name": "канадÑки долар", "symbol": "CA$" }, "QAR": { - "name": "КатарÑки ријал" + "name": "катарÑки ријал" }, "KES": { - "name": "КенијÑки шилинг" + "name": "кенијÑки шилинг" }, "CNY": { - "name": "КинеÑки јуан", + "name": "кинеÑки јуан", "symbol": "CNÂ¥" }, "KGS": { - "name": "КиргиÑтанÑки Ñом" + "name": "киргиÑтанÑки Ñом" }, "COP": { - "name": "КолумбијÑки пезоÑ" + "name": "колумбијÑки пезоÑ" }, "KMF": { - "name": "КоморÑки франак" + "name": "коморÑки франак" }, "CDF": { - "name": "КонгоанÑки франак" + "name": "конгоанÑки франак" }, "CRC": { - "name": "КоÑтариканÑки колон" + "name": "коÑтариканÑки колон" }, "CUC": { - "name": "КубанÑки конвертибилни пезоÑ" + "name": "кубанÑки конвертибилни пезоÑ" }, "CUP": { - "name": "КубанÑки пезоÑ" + "name": "кубанÑки пезоÑ" }, "KWD": { - "name": "КувајтÑки динар" + "name": "кувајтÑки динар" }, "LAK": { - "name": "Лаошки кип" + "name": "лаоÑки кип" }, "LSL": { - "name": "ЛеÑото лоти" + "name": "леÑотÑки лоти" }, "LBP": { - "name": "ЛибанÑка фунта" + "name": "либанÑка фунта" }, "LRD": { - "name": "ЛиберијÑки долар" + "name": "либеријÑки долар" }, "LYD": { - "name": "ЛибијÑки динар" - }, - "MGA": { - "name": "МадагаÑкарÑки ариари" + "name": "либијÑки динар" }, "HUF": { - "name": "МађарÑка форинта" + "name": "мађарÑка форинта" }, "MOP": { - "name": "МакаоÑка патака" + "name": "макаоÑка патака" }, "MKD": { - "name": "МакедонÑки денар" + "name": "македонÑки денар" }, "MWK": { - "name": "МалавијÑка квача" + "name": "малавијÑка квача" + }, + "MGA": { + "name": "малгашки аријари" }, "MVR": { - "name": "МалдивÑка руфија" + "name": "малдивÑка руфија" }, "MYR": { - "name": "МалезијÑки рингит" + "name": "малезијÑки рингит" }, "MAD": { - "name": "МароканÑки дирхам" + "name": "мароканÑки дирхам" }, "MRU": { - "name": "МауританÑка огија" + "name": "мауританÑка огија" }, "MUR": { - "name": "МаурицијÑка рупија" + "name": "маурицијÑка рупија" }, "MXN": { - "name": "МекÑички пезоÑ", + "name": "мекÑички пезоÑ", "symbol": "MX$" }, "MMK": { - "name": "МјанмарÑки кјат" + "name": "мјанмарÑки кјат" }, "MZN": { - "name": "Мозамбички метикал" + "name": "мозамбички метикал" }, "MDL": { - "name": "МолдавÑки леј" + "name": "молдавÑки леј" }, "MNT": { - "name": "МонголÑки тугрик" + "name": "монголÑки тугрик" }, "NAD": { - "name": "ÐамибијÑки долар" + "name": "намибијÑки долар" }, "NPR": { - "name": "ÐепалÑкa рупиja" + "name": "непалÑка рупија" }, "NGN": { - "name": "ÐигеријÑка наира" + "name": "нигеријÑка наира" }, "NIO": { "name": "ÐикарагванÑка златна кордоба" }, "TWD": { - "name": "Ðови тајванÑки долар", + "name": "нови тајванÑки долар", "symbol": "NT$" }, "NZD": { - "name": "ÐовозеландÑки долар" + "name": "новозеландÑки долар" }, "NOK": { - "name": "Ðорвешка круна" + "name": "норвешка круна" }, "OMR": { - "name": "ОманÑки ријал" + "name": "оманÑки ријал" }, "PKR": { - "name": "ПакиÑтанÑкa рупиja" + "name": "пакиÑтанÑка рупија" }, "PAB": { - "name": "ПанамÑка балбоа" + "name": "панамÑка балбоа" }, "PGK": { - "name": "ПапуанÑка кина" + "name": "папуанÑка кина" }, "PYG": { - "name": "ПарагвајÑки гварани" + "name": "парагвајÑки гварани" }, "PEN": { - "name": "ПеруанÑки Ñол" + "name": "перуанÑки Ñол" }, "PLN": { - "name": "ПољÑки злот" + "name": "пољÑки злот" }, "RWF": { - "name": "РуандÑки франак" + "name": "руандÑки франак" }, "RON": { - "name": "РумунÑки леј" + "name": "румунÑки леј" }, "RUB": { - "name": "РуÑка рубља" + "name": "руÑка рубља" }, "SVC": { "name": "СалвадорÑки колон" }, "WST": { - "name": "СамоанÑка тала" + "name": "ÑамоанÑка тала" }, "STN": { - "name": "СаотомÑка добра" + "name": "ÑаотомÑка добра" }, "SAR": { - "name": "СаудијÑки ријал" + "name": "ÑаудијÑки ријал" }, "SZL": { - "name": "СвазилендÑки лилангени" - }, - "SHP": { - "name": "Свете Јелене фунта" + "name": "ÑвазилендÑки лилангени" }, "SCR": { - "name": "СејшелÑка рупија" + "name": "ÑејшелÑка рупија" }, "SLL": { - "name": "СијералеонÑки леоне" + "name": "ÑијералеонÑки леоне" }, "SGD": { - "name": "СингапурÑки долар" + "name": "ÑингапурÑки долар" }, "SYP": { - "name": "СиријÑка фунта" + "name": "ÑиријÑка фунта" }, "KPW": { "name": "СјевернокорејÑки вон" }, "SBD": { - "name": "СоломонÑки долар" + "name": "ÑоломонÑки долар" }, "SOS": { - "name": "СомалијÑки шилинг" + "name": "ÑомалијÑки шилинг" }, "RSD": { - "name": "СрпÑки динар" + "name": "ÑрпÑки динар" }, "SDG": { - "name": "СуданÑка фунта" + "name": "ÑуданÑка фунта" }, "SRD": { - "name": "СуринамÑки долар" + "name": "ÑуринамÑки долар" }, "THB": { - "name": "ТајландÑки бат" + "name": "тајландÑки бат" }, "TZS": { - "name": "ТанзанијÑки шилинг" + "name": "танзанијÑки шилинг" }, "TJS": { - "name": "ТаџикиÑтанÑки Ñомон" + "name": "таџикиÑтанÑки Ñомон" }, "TOP": { - "name": "ТонганÑка панга" + "name": "тонганÑка панга" }, "TTD": { "name": "Тринидад-тобагошки долар" }, "TND": { - "name": "ТуниÑки динар" + "name": "туниÑки динар" }, "TMT": { - "name": "ТуркмениÑтанÑки манат" + "name": "туркмениÑтанÑки манат" }, "TRY": { - "name": "ТурÑка лира" - }, - "AED": { - "name": "УÐЕ дирхам" + "name": "турÑка лира" }, "UGX": { - "name": "УгандÑки шилинг" + "name": "угандÑки шилинг" }, "UZS": { - "name": "УзбекиÑтанÑки Ñом" + "name": "узбекиÑтанÑки Ñом" }, "UAH": { - "name": "УкрајинÑка хривња" + "name": "украјинÑка гривна" }, "UYU": { - "name": "УругвајÑки пезоÑ" + "name": "уругвајÑки пезоÑ" }, "PHP": { - "name": "ФилипинÑки пезоÑ" + "name": "филипинÑки пезоÑ" }, "FJD": { - "name": "ФиџијÑки долар" + "name": "фиџијÑки долар" }, "FKP": { - "name": "ФокландÑка фунта" + "name": "фолкландÑка фунта" + }, + "SHP": { + "name": "фунта Свете Јелене" }, "HTG": { - "name": "ХаићанÑки гурд" + "name": "хаићанÑки гурд" }, "ANG": { - "name": "ХоландÑкоантилÑки гулден" + "name": "холандÑкоантилÑки гулден" }, "HKD": { - "name": "Хонгконшки долар", + "name": "хонгконшки долар", "symbol": "HK$" }, "HNL": { - "name": "Хондурашка лемпира" + "name": "хондурашка лемпира" }, "HRK": { - "name": "ХрватÑка куна" + "name": "хрватÑка куна" }, - "XOF": { - "name": "ЦФРфранак БЦЕÐО", - "symbol": "F CFA" + "XAF": { + "name": "централноафрички франак", + "symbol": "FCFA" }, "CZK": { - "name": "Чешка круна" + "name": "чешка круна" }, "CLP": { - "name": "ЧилеанÑки пезоÑ" + "name": "чилеанÑки пезоÑ" }, "DJF": { - "name": "ÐибутÑки франак" + "name": "џибутÑки франак" }, "CHF": { - "name": "ШвајцарÑки франак" + "name": "швајцарÑки франак" }, "SEK": { - "name": "ШведÑка круна" + "name": "шведÑка круна" }, "LKR": { - "name": "ШриланканÑкa рупиja" - }, - "XAF": { - "name": "CFA франак BEAC", - "symbol": "FCFA" + "name": "шриланчанÑка рупија" }, "XPF": { "name": "CFP франак", "symbol": "CFPF" }, - "ERN": { - "name": "EритрејÑка накфa" - }, - "KHR": { - "name": "KамбоџанÑки ријел" - }, "UYW": { "name": "Uruguayan Nominal Wage Index Unit" } diff --git a/vendor/commerceguys/intl/resources/currency/sr-Latn-BA.json b/vendor/commerceguys/intl/resources/currency/sr-Latn-BA.json index ba9360d9e..2afdfd343 100644 --- a/vendor/commerceguys/intl/resources/currency/sr-Latn-BA.json +++ b/vendor/commerceguys/intl/resources/currency/sr-Latn-BA.json @@ -1,89 +1,85 @@ { "ALL": { - "name": "Albanski lek" + "name": "albanski lek" }, "DZD": { - "name": "Alžirski dinar" + "name": "alžirski dinar" }, "USD": { - "name": "AmeriÄki dolar", + "name": "ameriÄki dolar", "symbol": "US$" }, "AOA": { - "name": "Angolska kvanza" + "name": "angolska kvanza" }, "ARS": { - "name": "Argentinski pezos" + "name": "argentinski pezos" }, "AWG": { - "name": "Arubanski florin" + "name": "arubanski florin" }, "AUD": { - "name": "Australijski dolar" + "name": "australijski dolar" }, "AFN": { - "name": "Avganistanski avgani" + "name": "avganistanski avgani" }, "AZN": { - "name": "Azerbejdžanski manat" + "name": "azerbejdžanski manat" }, "BSD": { - "name": "Bahamski dolar" + "name": "bahamski dolar" }, "BHD": { - "name": "Bahreinski dinar" + "name": "bahreinski dinar" }, "BDT": { - "name": "BangladeÅ¡ka taka" + "name": "bangladeÅ¡ka taka" }, "BBD": { - "name": "BarbadoÅ¡ki dolar" + "name": "barbadoÅ¡ki dolar" }, "BZD": { - "name": "Beliski dolar" + "name": "beliski dolar" }, "BMD": { - "name": "Bermudski dolar" + "name": "bermudski dolar" }, "BYN": { "name": "Bjeloruska rublja" }, "BWP": { - "name": "Bocvanska pula" + "name": "bocvanska pula" }, "BOB": { - "name": "Bolivijski bolivijano" + "name": "bolivijski bolivijano" }, "BAM": { "name": "BosanskohercegovaÄka konvertibilna marka", "symbol": "KM" }, "BRL": { - "name": "Brazilski real", + "name": "brazilski real", "symbol": "R$" }, "GBP": { - "name": "Britanska funta", + "name": "britanska funta", "symbol": "£" }, "BND": { - "name": "Brunejski dolar" + "name": "brunejski dolar" }, "BGN": { - "name": "Bugarski lev" + "name": "bugarski lev" }, "BIF": { - "name": "Burundski franak" + "name": "burundski franak" }, "BTN": { - "name": "Butanski ngultrum" - }, - "XOF": { - "name": "CFA franak BCEAO", - "symbol": "F CFA" + "name": "butanski ngultrum" }, "XAF": { - "name": "CFA franak BEAC", + "name": "centralnoafriÄki franak", "symbol": "FCFA" }, "XPF": { @@ -91,401 +87,405 @@ "symbol": "CFPF" }, "CZK": { - "name": "ÄŒeÅ¡ka kruna" + "name": "ÄeÅ¡ka kruna" }, "CLP": { - "name": "ÄŒileanski pezos" + "name": "Äileanski pezos" }, "DKK": { - "name": "Danska kruna" + "name": "danska kruna" + }, + "AED": { + "name": "dirham UAE" }, "DOP": { - "name": "Dominikanski pezos" + "name": "dominikanski pezos" }, "DJF": { - "name": "Džibutski franak" + "name": "džibutski franak" }, "EGP": { - "name": "Egipatska funta" + "name": "egipatska funta" }, "ERN": { - "name": "Eritrejska nakfa" + "name": "eritrejska nakfa" }, "ETB": { - "name": "Etiopski bir" + "name": "etiopijski bir" }, "EUR": { "name": "Evro", "symbol": "€" }, "FJD": { - "name": "Fidžijski dolar" + "name": "fidžijski dolar" }, "PHP": { - "name": "Filipinski pezos" + "name": "filipinski pezos" }, "FKP": { - "name": "Foklandska funta" + "name": "folklandska funta" + }, + "SHP": { + "name": "funta Svete Jelene" }, "GMD": { - "name": "Gambijski dalasi" + "name": "gambijski dalasi" }, "GHS": { - "name": "Ganski sedi" + "name": "ganski sedi" }, "GIP": { - "name": "Gibraltarska funta" + "name": "gibraltarska funta" }, "GEL": { - "name": "Gruzijski lari" + "name": "gruzijski lari" }, "GYD": { - "name": "Gvajanski dolar" + "name": "gvajanski dolar" }, "GTQ": { - "name": "Gvatemalski kecal" + "name": "gvatemalski kecal" }, "GNF": { - "name": "Gvinejski franak" + "name": "gvinejski franak" }, "HTG": { - "name": "Haićanski gurd" + "name": "haićanski gurd" }, "ANG": { - "name": "Holandskoantilski gulden" + "name": "holandskoantilski gulden" }, "HNL": { - "name": "HonduraÅ¡ka lempira" + "name": "honduraÅ¡ka lempira" }, "HKD": { - "name": "HongkonÅ¡ki dolar", + "name": "hongkonÅ¡ki dolar", "symbol": "HK$" }, "HRK": { - "name": "Hrvatska kuna" + "name": "hrvatska kuna" }, "INR": { - "name": "Indijska rupija", + "name": "indijska rupija", "symbol": "₹" }, "IDR": { - "name": "Indonežanska rupija" + "name": "indonežanska rupija" }, "IQD": { - "name": "IraÄki dinar" + "name": "iraÄki dinar" }, "IRR": { - "name": "Iranski rijal" + "name": "iranski rijal" }, "ISK": { - "name": "Islandska kruna" + "name": "islandska kruna" }, "XCD": { - "name": "IstoÄnokaripski dolar", + "name": "istoÄnokaripski dolar", "symbol": "EC$" }, "ILS": { - "name": "Izraelski novi Å¡ekel", + "name": "izraelski novi Å¡ekel", "symbol": "₪" }, "JMD": { - "name": "JamajÄanski dolar" + "name": "jamajÄanski dolar" }, "JPY": { - "name": "Japanski jen", + "name": "japanski jen", "symbol": "Â¥" }, "YER": { - "name": "Jemenski rijal" + "name": "jemenski rijal" }, "AMD": { - "name": "Jermenski dram" + "name": "jermenski dram" }, "JOD": { - "name": "Jordanski dinar" + "name": "jordanski dinar" }, "ZAR": { - "name": "JužnoafriÄki rand" + "name": "južnoafriÄki rand" }, "KRW": { - "name": "Južnokorejski von" + "name": "južnokorejski von" }, "SSP": { - "name": "Južnosudanska funta" + "name": "južnosudanska funta" }, "KYD": { - "name": "Kajmanski dolar" + "name": "kajmanski dolar" }, "KHR": { - "name": "Kambodžanski rijel" + "name": "kambodžanski rijel" }, "CAD": { - "name": "Kanadski dolar", + "name": "kanadski dolar", "symbol": "CA$" }, "QAR": { - "name": "Katarski rijal" + "name": "katarski rijal" }, "KZT": { - "name": "Kazahstanski tenge" + "name": "kazahstanski tenge" }, "KES": { - "name": "Kenijski Å¡iling" + "name": "kenijski Å¡iling" }, "CNY": { - "name": "Kineski juan", + "name": "kineski juan", "symbol": "CNÂ¥" }, "KGS": { - "name": "Kirgistanski som" + "name": "kirgistanski som" }, "COP": { - "name": "Kolumbijski pezos" + "name": "kolumbijski pezos" }, "KMF": { - "name": "Komorski franak" + "name": "komorski franak" }, "CDF": { - "name": "Kongoanski franak" + "name": "kongoanski franak" }, "CRC": { - "name": "Kostarikanski kolon" + "name": "kostarikanski kolon" }, "CUC": { - "name": "Kubanski konvertibilni pezos" + "name": "kubanski konvertibilni pezos" }, "CUP": { - "name": "Kubanski pezos" + "name": "kubanski pezos" }, "KWD": { - "name": "Kuvajtski dinar" + "name": "kuvajtski dinar" }, "LAK": { - "name": "LaoÅ¡ki kip" + "name": "laoski kip" }, "LSL": { - "name": "Lesoto loti" + "name": "lesotski loti" }, "LBP": { - "name": "Libanska funta" + "name": "libanska funta" }, "LRD": { - "name": "Liberijski dolar" + "name": "liberijski dolar" }, "LYD": { - "name": "Libijski dinar" - }, - "MGA": { - "name": "Madagaskarski ariari" + "name": "libijski dinar" }, "HUF": { - "name": "MaÄ‘arska forinta" + "name": "maÄ‘arska forinta" }, "MOP": { - "name": "Makaoska pataka" + "name": "makaoska pataka" }, "MKD": { - "name": "Makedonski denar" + "name": "makedonski denar" }, "MWK": { - "name": "Malavijska kvaÄa" + "name": "malavijska kvaÄa" }, "MVR": { - "name": "Maldivska rufija" + "name": "maldivska rufija" }, "MYR": { - "name": "Malezijski ringit" + "name": "malezijski ringit" + }, + "MGA": { + "name": "malgaÅ¡ki arijari" }, "MAD": { - "name": "Marokanski dirham" + "name": "marokanski dirham" }, "MUR": { - "name": "Mauricijska rupija" + "name": "mauricijska rupija" }, "MRU": { - "name": "Mauritanska ogija" + "name": "mauritanska ogija" }, "MXN": { - "name": "MeksiÄki pezos", + "name": "meksiÄki pezos", "symbol": "MX$" }, "MMK": { - "name": "Mjanmarski kjat" + "name": "mjanmarski kjat" }, "MDL": { - "name": "Moldavski lej" + "name": "moldavski lej" }, "MNT": { - "name": "Mongolski tugrik" + "name": "mongolski tugrik" }, "MZN": { - "name": "MozambiÄki metikal" + "name": "mozambiÄki metikal" }, "NAD": { - "name": "Namibijski dolar" + "name": "namibijski dolar" }, "NPR": { - "name": "Nepalska rupija" + "name": "nepalska rupija" }, "NGN": { - "name": "Nigerijska naira" + "name": "nigerijska naira" }, "NIO": { "name": "Nikaragvanska zlatna kordoba" }, "NOK": { - "name": "NorveÅ¡ka kruna" + "name": "norveÅ¡ka kruna" }, "TWD": { - "name": "Novi tajvanski dolar", + "name": "novi tajvanski dolar", "symbol": "NT$" }, "NZD": { - "name": "Novozelandski dolar" + "name": "novozelandski dolar" }, "OMR": { - "name": "Omanski rijal" + "name": "omanski rijal" }, "PKR": { - "name": "Pakistanska rupija" + "name": "pakistanska rupija" }, "PAB": { - "name": "Panamska balboa" + "name": "panamska balboa" }, "PGK": { - "name": "Papuanska kina" + "name": "papuanska kina" }, "PYG": { - "name": "Paragvajski gvarani" + "name": "paragvajski gvarani" }, "PEN": { - "name": "Peruanski sol" + "name": "peruanski sol" }, "PLN": { - "name": "Poljski zlot" + "name": "poljski zlot" }, "RWF": { - "name": "Ruandski franak" + "name": "ruandski franak" }, "RON": { - "name": "Rumunski lej" + "name": "rumunski lej" }, "RUB": { - "name": "Ruska rublja" + "name": "ruska rublja" }, "SVC": { "name": "Salvadorski kolon" }, "WST": { - "name": "Samoanska tala" + "name": "samoanska tala" }, "STN": { - "name": "Saotomska dobra" + "name": "saotomska dobra" }, "SAR": { - "name": "Saudijski rijal" + "name": "saudijski rijal" }, "SCR": { - "name": "SejÅ¡elska rupija" + "name": "sejÅ¡elska rupija" }, "SLL": { - "name": "Sijeraleonski leone" + "name": "sijeraleonski leone" }, "SGD": { - "name": "Singapurski dolar" + "name": "singapurski dolar" }, "SYP": { - "name": "Sirijska funta" + "name": "sirijska funta" }, "KPW": { "name": "Sjevernokorejski von" }, "SBD": { - "name": "Solomonski dolar" + "name": "solomonski dolar" }, "SOS": { - "name": "Somalijski Å¡iling" + "name": "somalijski Å¡iling" }, "RSD": { - "name": "Srpski dinar" + "name": "srpski dinar" }, "SDG": { - "name": "Sudanska funta" + "name": "sudanska funta" }, "SRD": { - "name": "Surinamski dolar" + "name": "surinamski dolar" }, "SZL": { - "name": "Svazilendski lilangeni" - }, - "SHP": { - "name": "Svete Jelene funta" + "name": "svazilendski lilangeni" }, "LKR": { - "name": "Å rilankanska rupija" + "name": "Å¡rilanÄanska rupija" }, "CHF": { - "name": "Å vajcarski franak" + "name": "Å¡vajcarski franak" }, "SEK": { - "name": "Å vedska kruna" + "name": "Å¡vedska kruna" }, "TJS": { - "name": "Tadžikistanski somon" + "name": "tadžikistanski somon" }, "THB": { - "name": "Tajlandski bat" + "name": "tajlandski bat" }, "TZS": { - "name": "Tanzanijski Å¡iling" + "name": "tanzanijski Å¡iling" }, "TOP": { - "name": "Tonganska panga" + "name": "tonganska panga" }, "TTD": { "name": "Trinidad-tobagoÅ¡ki dolar" }, "TND": { - "name": "Tuniski dinar" + "name": "tuniski dinar" }, "TMT": { - "name": "Turkmenistanski manat" + "name": "turkmenistanski manat" }, "TRY": { - "name": "Turska lira" - }, - "AED": { - "name": "UAE dirham" + "name": "turska lira" }, "UGX": { - "name": "Ugandski Å¡iling" + "name": "ugandski Å¡iling" }, "UAH": { - "name": "Ukrajinska hrivnja" + "name": "ukrajinska grivna" }, "UYW": { "name": "Uruguayan Nominal Wage Index Unit" }, "UYU": { - "name": "Urugvajski pezos" + "name": "urugvajski pezos" }, "UZS": { - "name": "Uzbekistanski som" + "name": "uzbekistanski som" }, "VUV": { - "name": "Vanuatski vatu" + "name": "vanuatski vatu" }, "VES": { - "name": "Venecuelanski bolivar" + "name": "venecuelanski bolivar" }, "VND": { - "name": "Vijetnamski dong" + "name": "vijetnamski dong" }, "ZMW": { - "name": "Zambijska kvaÄa" + "name": "zambijska kvaÄa" + }, + "XOF": { + "name": "zapadnoafriÄki franak", + "symbol": "F CFA" }, "CVE": { - "name": "Zelenortski eskudo" + "name": "zelenortski eskudo" }, "ZWL": { "name": "Zimbabveanski dolar (2009)" diff --git a/vendor/commerceguys/intl/resources/currency/sr-Latn.json b/vendor/commerceguys/intl/resources/currency/sr-Latn.json index 9aad3027c..bced730c8 100644 --- a/vendor/commerceguys/intl/resources/currency/sr-Latn.json +++ b/vendor/commerceguys/intl/resources/currency/sr-Latn.json @@ -1,89 +1,85 @@ { "ALL": { - "name": "Albanski lek" + "name": "albanski lek" }, "DZD": { - "name": "Alžirski dinar" + "name": "alžirski dinar" }, "USD": { - "name": "AmeriÄki dolar", + "name": "ameriÄki dolar", "symbol": "US$" }, "AOA": { - "name": "Angolska kvanza" + "name": "angolska kvanza" }, "ARS": { - "name": "Argentinski pezos" + "name": "argentinski pezos" }, "AWG": { - "name": "Arubanski florin" + "name": "arubanski florin" }, "AUD": { - "name": "Australijski dolar" + "name": "australijski dolar" }, "AFN": { - "name": "Avganistanski avgani" + "name": "avganistanski avgani" }, "AZN": { - "name": "Azerbejdžanski manat" + "name": "azerbejdžanski manat" }, "BSD": { - "name": "Bahamski dolar" + "name": "bahamski dolar" }, "BHD": { - "name": "Bahreinski dinar" + "name": "bahreinski dinar" }, "BDT": { - "name": "BangladeÅ¡ka taka" + "name": "bangladeÅ¡ka taka" }, "BBD": { - "name": "BarbadoÅ¡ki dolar" + "name": "barbadoÅ¡ki dolar" }, "BZD": { - "name": "Beliski dolar" + "name": "beliski dolar" }, "BYN": { - "name": "Beloruska rublja" + "name": "beloruska rublja" }, "BMD": { - "name": "Bermudski dolar" + "name": "bermudski dolar" }, "BWP": { - "name": "Bocvanska pula" + "name": "bocvanska pula" }, "BOB": { - "name": "Bolivijski bolivijano" + "name": "bolivijski bolivijano" }, "BAM": { - "name": "Bosansko-hercegovaÄka konvertibilna marka", + "name": "bosansko-hercegovaÄka konvertibilna marka", "symbol": "KM" }, "BRL": { - "name": "Brazilski real", + "name": "brazilski real", "symbol": "R$" }, "GBP": { - "name": "Britanska funta", + "name": "britanska funta", "symbol": "£" }, "BND": { - "name": "Brunejski dolar" + "name": "brunejski dolar" }, "BGN": { - "name": "Bugarski lev" + "name": "bugarski lev" }, "BIF": { - "name": "Burundski franak" + "name": "burundski franak" }, "BTN": { - "name": "Butanski ngultrum" - }, - "XOF": { - "name": "CFA franak BCEAO", - "symbol": "F CFA" + "name": "butanski ngultrum" }, "XAF": { - "name": "CFA franak BEAC", + "name": "centralnoafriÄki franak", "symbol": "FCFA" }, "XPF": { @@ -91,401 +87,405 @@ "symbol": "CFPF" }, "CZK": { - "name": "ÄŒeÅ¡ka kruna" + "name": "ÄeÅ¡ka kruna" }, "CLP": { - "name": "ÄŒileanski pezos" + "name": "Äileanski pezos" }, "DKK": { - "name": "Danska kruna" + "name": "danska kruna" + }, + "AED": { + "name": "dirham UAE" }, "DOP": { - "name": "Dominikanski pezos" + "name": "dominikanski pezos" }, "DJF": { - "name": "Džibutski franak" + "name": "džibutski franak" }, "EGP": { - "name": "Egipatska funta" + "name": "egipatska funta" }, "ERN": { - "name": "Eritrejska nakfa" + "name": "eritrejska nakfa" }, "ETB": { - "name": "Etiopski bir" + "name": "etiopijski bir" }, "EUR": { "name": "Evro", "symbol": "€" }, "FJD": { - "name": "Fidžijski dolar" + "name": "fidžijski dolar" }, "PHP": { - "name": "Filipinski pezos" + "name": "filipinski pezos" }, "FKP": { - "name": "Foklandska funta" + "name": "folklandska funta" + }, + "SHP": { + "name": "funta Svete Jelene" }, "GMD": { - "name": "Gambijski dalasi" + "name": "gambijski dalasi" }, "GHS": { - "name": "Ganski sedi" + "name": "ganski sedi" }, "GIP": { - "name": "Gibraltarska funta" + "name": "gibraltarska funta" }, "GEL": { - "name": "Gruzijski lari" + "name": "gruzijski lari" }, "GYD": { - "name": "Gvajanski dolar" + "name": "gvajanski dolar" }, "GTQ": { - "name": "Gvatemalski kecal" + "name": "gvatemalski kecal" }, "GNF": { - "name": "Gvinejski franak" + "name": "gvinejski franak" }, "HTG": { - "name": "Haićanski gurd" + "name": "haićanski gurd" }, "ANG": { - "name": "Holandskoantilski gulden" + "name": "holandskoantilski gulden" }, "HNL": { - "name": "HonduraÅ¡ka lempira" + "name": "honduraÅ¡ka lempira" }, "HKD": { - "name": "HongkonÅ¡ki dolar", + "name": "hongkonÅ¡ki dolar", "symbol": "HK$" }, "HRK": { - "name": "Hrvatska kuna" + "name": "hrvatska kuna" }, "INR": { - "name": "Indijska rupija", + "name": "indijska rupija", "symbol": "₹" }, "IDR": { - "name": "Indonežanska rupija" + "name": "indonežanska rupija" }, "IQD": { - "name": "IraÄki dinar" + "name": "iraÄki dinar" }, "IRR": { - "name": "Iranski rijal" + "name": "iranski rijal" }, "ISK": { - "name": "Islandska kruna" + "name": "islandska kruna" }, "XCD": { - "name": "IstoÄnokaripski dolar", + "name": "istoÄnokaripski dolar", "symbol": "EC$" }, "ILS": { - "name": "Izraelski novi Å¡ekel", + "name": "izraelski novi Å¡ekel", "symbol": "₪" }, "JMD": { - "name": "JamajÄanski dolar" + "name": "jamajÄanski dolar" }, "JPY": { - "name": "Japanski jen", + "name": "japanski jen", "symbol": "Â¥" }, "YER": { - "name": "Jemenski rijal" + "name": "jemenski rijal" }, "AMD": { - "name": "Jermenski dram" + "name": "jermenski dram" }, "JOD": { - "name": "Jordanski dinar" + "name": "jordanski dinar" }, "ZAR": { - "name": "JužnoafriÄki rand" + "name": "južnoafriÄki rand" }, "KRW": { - "name": "Južnokorejski von" + "name": "južnokorejski von" }, "SSP": { - "name": "Južnosudanska funta" + "name": "južnosudanska funta" }, "KYD": { - "name": "Kajmanski dolar" + "name": "kajmanski dolar" }, "KHR": { - "name": "Kambodžanski rijel" + "name": "kambodžanski rijel" }, "CAD": { - "name": "Kanadski dolar", + "name": "kanadski dolar", "symbol": "CA$" }, "QAR": { - "name": "Katarski rijal" + "name": "katarski rijal" }, "KZT": { - "name": "Kazahstanski tenge" + "name": "kazahstanski tenge" }, "KES": { - "name": "Kenijski Å¡iling" + "name": "kenijski Å¡iling" }, "CNY": { - "name": "Kineski juan", + "name": "kineski juan", "symbol": "CNÂ¥" }, "KGS": { - "name": "Kirgistanski som" + "name": "kirgistanski som" }, "COP": { - "name": "Kolumbijski pezos" + "name": "kolumbijski pezos" }, "KMF": { - "name": "Komorski franak" + "name": "komorski franak" }, "CDF": { - "name": "Kongoanski franak" + "name": "kongoanski franak" }, "CRC": { - "name": "Kostarikanski kolon" + "name": "kostarikanski kolon" }, "CUC": { - "name": "Kubanski konvertibilni pezos" + "name": "kubanski konvertibilni pezos" }, "CUP": { - "name": "Kubanski pezos" + "name": "kubanski pezos" }, "KWD": { - "name": "Kuvajtski dinar" + "name": "kuvajtski dinar" }, "LAK": { - "name": "LaoÅ¡ki kip" + "name": "laoski kip" }, "LSL": { - "name": "Lesoto loti" + "name": "lesotski loti" }, "LBP": { - "name": "Libanska funta" + "name": "libanska funta" }, "LRD": { - "name": "Liberijski dolar" + "name": "liberijski dolar" }, "LYD": { - "name": "Libijski dinar" - }, - "MGA": { - "name": "Madagaskarski ariari" + "name": "libijski dinar" }, "HUF": { - "name": "MaÄ‘arska forinta" + "name": "maÄ‘arska forinta" }, "MOP": { - "name": "Makaoska pataka" + "name": "makaoska pataka" }, "MKD": { - "name": "Makedonski denar" + "name": "makedonski denar" }, "MWK": { - "name": "Malavijska kvaÄa" + "name": "malavijska kvaÄa" }, "MVR": { - "name": "Maldivska rufija" + "name": "maldivska rufija" }, "MYR": { - "name": "Malezijski ringit" + "name": "malezijski ringit" + }, + "MGA": { + "name": "malgaÅ¡ki arijari" }, "MAD": { - "name": "Marokanski dirham" + "name": "marokanski dirham" }, "MUR": { - "name": "Mauricijska rupija" + "name": "mauricijska rupija" }, "MRU": { - "name": "Mauritanska ogija" + "name": "mauritanska ogija" }, "MXN": { - "name": "MeksiÄki pezos", + "name": "meksiÄki pezos", "symbol": "MX$" }, "MMK": { - "name": "Mjanmarski kjat" + "name": "mjanmarski kjat" }, "MDL": { - "name": "Moldavski lej" + "name": "moldavski lej" }, "MNT": { - "name": "Mongolski tugrik" + "name": "mongolski tugrik" }, "MZN": { - "name": "MozambiÄki metikal" + "name": "mozambiÄki metikal" }, "NAD": { - "name": "Namibijski dolar" + "name": "namibijski dolar" }, "NPR": { - "name": "Nepalska rupija" + "name": "nepalska rupija" }, "NGN": { - "name": "Nigerijska naira" + "name": "nigerijska naira" }, "NIO": { - "name": "Nikaragvanska zlatna kordoba" + "name": "nikaragvanska kordoba" }, "NOK": { - "name": "NorveÅ¡ka kruna" + "name": "norveÅ¡ka kruna" }, "TWD": { - "name": "Novi tajvanski dolar", + "name": "novi tajvanski dolar", "symbol": "NT$" }, "NZD": { - "name": "Novozelandski dolar" + "name": "novozelandski dolar" }, "OMR": { - "name": "Omanski rijal" + "name": "omanski rijal" }, "PKR": { - "name": "Pakistanska rupija" + "name": "pakistanska rupija" }, "PAB": { - "name": "Panamska balboa" + "name": "panamska balboa" }, "PGK": { - "name": "Papuanska kina" + "name": "papuanska kina" }, "PYG": { - "name": "Paragvajski gvarani" + "name": "paragvajski gvarani" }, "PEN": { - "name": "Peruanski sol" + "name": "peruanski sol" }, "PLN": { - "name": "Poljski zlot" + "name": "poljski zlot" }, "RWF": { - "name": "Ruandski franak" + "name": "ruandski franak" }, "RON": { - "name": "Rumunski lej" + "name": "rumunski lej" }, "RUB": { - "name": "Ruska rublja" + "name": "ruska rublja" }, "SVC": { "name": "Salvadorski kolon" }, "WST": { - "name": "Samoanska tala" + "name": "samoanska tala" }, "STN": { - "name": "Saotomska dobra" + "name": "saotomska dobra" }, "SAR": { - "name": "Saudijski rijal" + "name": "saudijski rijal" }, "SCR": { - "name": "SejÅ¡elska rupija" + "name": "sejÅ¡elska rupija" }, "KPW": { - "name": "Severnokorejski von" + "name": "severnokorejski von" }, "SLL": { - "name": "Sijeraleonski leone" + "name": "sijeraleonski leone" }, "SGD": { - "name": "Singapurski dolar" + "name": "singapurski dolar" }, "SYP": { - "name": "Sirijska funta" + "name": "sirijska funta" }, "SBD": { - "name": "Solomonski dolar" + "name": "solomonski dolar" }, "SOS": { - "name": "Somalijski Å¡iling" + "name": "somalijski Å¡iling" }, "RSD": { - "name": "Srpski dinar" + "name": "srpski dinar" }, "SDG": { - "name": "Sudanska funta" + "name": "sudanska funta" }, "SRD": { - "name": "Surinamski dolar" + "name": "surinamski dolar" }, "SZL": { - "name": "Svazilendski lilangeni" - }, - "SHP": { - "name": "Svete Jelene funta" + "name": "svazilendski lilangeni" }, "LKR": { - "name": "Å rilankanska rupija" + "name": "Å¡rilanÄanska rupija" }, "CHF": { - "name": "Å vajcarski franak" + "name": "Å¡vajcarski franak" }, "SEK": { - "name": "Å vedska kruna" + "name": "Å¡vedska kruna" }, "TJS": { - "name": "Tadžikistanski somon" + "name": "tadžikistanski somon" }, "THB": { - "name": "Tajlandski bat" + "name": "tajlandski bat" }, "TZS": { - "name": "Tanzanijski Å¡iling" + "name": "tanzanijski Å¡iling" }, "TOP": { - "name": "Tonganska panga" + "name": "tonganska panga" }, "TTD": { "name": "Trinidad-tobagoÅ¡ki dolar" }, "TND": { - "name": "Tuniski dinar" + "name": "tuniski dinar" }, "TMT": { - "name": "Turkmenistanski manat" + "name": "turkmenistanski manat" }, "TRY": { - "name": "Turska lira" - }, - "AED": { - "name": "UAE dirham" + "name": "turska lira" }, "UGX": { - "name": "Ugandski Å¡iling" + "name": "ugandski Å¡iling" }, "UAH": { - "name": "Ukrajinska hrivnja" + "name": "ukrajinska grivna" }, "UYW": { "name": "Uruguayan Nominal Wage Index Unit" }, "UYU": { - "name": "Urugvajski pezos" + "name": "urugvajski pezos" }, "UZS": { - "name": "Uzbekistanski som" + "name": "uzbekistanski som" }, "VUV": { - "name": "Vanuatski vatu" + "name": "vanuatski vatu" }, "VES": { - "name": "Venecuelanski bolivar" + "name": "venecuelanski bolivar" }, "VND": { - "name": "Vijetnamski dong" + "name": "vijetnamski dong" }, "ZMW": { - "name": "Zambijska kvaÄa" + "name": "zambijska kvaÄa" + }, + "XOF": { + "name": "zapadnoafriÄki franak", + "symbol": "F CFA" }, "CVE": { - "name": "Zelenortski eskudo" + "name": "zelenortski eskudo" }, "ZWL": { "name": "Zimbabveanski dolar (2009)" diff --git a/vendor/commerceguys/intl/resources/currency/sr.json b/vendor/commerceguys/intl/resources/currency/sr.json index 0acb81b88..8733a5bbb 100644 --- a/vendor/commerceguys/intl/resources/currency/sr.json +++ b/vendor/commerceguys/intl/resources/currency/sr.json @@ -1,492 +1,492 @@ { "AFN": { - "name": "ÐвганиÑтанÑки авгани" + "name": "авганиÑтанÑки авгани" }, "AZN": { - "name": "ÐзербејџанÑки манат" + "name": "азербејџанÑки манат" }, "ALL": { - "name": "ÐлбанÑки лек" + "name": "албанÑки лек" }, "DZD": { - "name": "ÐлжирÑки динар" + "name": "алжирÑки динар" }, "USD": { - "name": "Ðмерички долар", + "name": "амерички долар", "symbol": "US$" }, "AOA": { - "name": "ÐнголÑка кванза" + "name": "анголÑка кванза" }, "ARS": { - "name": "ÐргентинÑки пезоÑ" + "name": "аргентинÑки пезоÑ" }, "AWG": { - "name": "ÐрубанÑки флорин" + "name": "арубанÑки флорин" }, "AUD": { - "name": "ÐуÑтралијÑки долар" + "name": "ауÑтралијÑки долар" }, "BDT": { - "name": "Бангладешка така" + "name": "бангладешка така" }, "BBD": { - "name": "Барбадошки долар" + "name": "барбадошки долар" }, "BSD": { - "name": "БахамÑки долар" + "name": "бахамÑки долар" }, "BHD": { - "name": "БахреинÑки динар" + "name": "бахреинÑки динар" }, "BZD": { - "name": "БелиÑки долар" + "name": "белиÑки долар" }, "BYN": { - "name": "БелоруÑка рубља" + "name": "белоруÑка рубља" }, "BMD": { - "name": "БермудÑки долар" + "name": "бермудÑки долар" }, "BOB": { - "name": "БоливијÑки боливијано" + "name": "боливијÑки боливијано" }, "BAM": { - "name": "БоÑанÑко-херцеговачка конвертибилна марка", + "name": "боÑанÑко-херцеговачка конвертибилна марка", "symbol": "КМ" }, "BWP": { - "name": "БоцванÑка пула" + "name": "боцванÑка пула" }, "BRL": { - "name": "БразилÑки реал", + "name": "бразилÑки реал", "symbol": "R$" }, "GBP": { - "name": "БританÑка фунта", + "name": "британÑка фунта", "symbol": "£" }, "BND": { - "name": "БрунејÑки долар" + "name": "брунејÑки долар" }, "BGN": { - "name": "БугарÑки лев" + "name": "бугарÑки лев" }, "BIF": { - "name": "БурундÑки франак" + "name": "бурундÑки франак" }, "BTN": { - "name": "БутанÑки нгултрум" + "name": "бутанÑки нгултрум" }, "VUV": { - "name": "ВануатÑки вату" + "name": "вануатÑки вату" }, "VES": { - "name": "ВенецуеланÑки боливар" + "name": "венецуеланÑки боливар" }, "VND": { - "name": "ВијетнамÑки донг" + "name": "вијетнамÑки донг" }, "GMD": { - "name": "ГамбијÑки далаÑи" + "name": "гамбијÑки далаÑи" }, "GHS": { - "name": "ГанÑки Ñеди" + "name": "ганÑки Ñеди" }, "GYD": { - "name": "ГвајанÑки долар" + "name": "гвајанÑки долар" }, "GTQ": { - "name": "ГватемалÑки кецал" + "name": "гватемалÑки кецал" }, "GNF": { - "name": "ГвинејÑки франак" + "name": "гвинејÑки франак" }, "GIP": { - "name": "ГибралтарÑка фунта" + "name": "гибралтарÑка фунта" }, "GEL": { - "name": "ГрузијÑки лари" + "name": "грузијÑки лари" }, "DKK": { - "name": "ДанÑка круна" + "name": "данÑка круна" + }, + "AED": { + "name": "дирхам УÐЕ" }, "DOP": { - "name": "ДоминиканÑки пезоÑ" + "name": "доминиканÑки пезоÑ" }, "EUR": { "name": "Евро", "symbol": "€" }, "EGP": { - "name": "ЕгипатÑка фунта" + "name": "египатÑка фунта" + }, + "ERN": { + "name": "еритрејÑка накфа" }, "ETB": { - "name": "ЕтиопÑки бир" + "name": "етиопијÑки бир" }, "ZMW": { - "name": "ЗамбијÑка квача" + "name": "замбијÑка квача" + }, + "XOF": { + "name": "западноафрички франак", + "symbol": "F CFA" }, "CVE": { - "name": "ЗеленортÑки еÑкудо" + "name": "зеленортÑки еÑкудо" }, "ZWL": { "name": "ЗимбабвеанÑки долар (2009)" }, "ILS": { - "name": "ИзраелÑки нови шекел", + "name": "израелÑки нови шекел", "symbol": "₪" }, "INR": { - "name": "ИндијÑка рупија", + "name": "индијÑка рупија", "symbol": "₹" }, "IDR": { - "name": "ИндонежанÑка рупија" + "name": "индонежанÑка рупија" }, "IRR": { - "name": "ИранÑки риjал" + "name": "иранÑки ријал" }, "IQD": { - "name": "Ирачки динар" + "name": "ирачки динар" }, "ISK": { - "name": "ИÑландÑка круна" + "name": "иÑландÑка круна" }, "XCD": { - "name": "ИÑточнокарипÑки долар", + "name": "иÑточнокарипÑки долар", "symbol": "EC$" }, "JMD": { - "name": "ЈамајчанÑки долар" + "name": "јамајчанÑки долар" }, "JPY": { - "name": "ЈапанÑки јен", + "name": "јапанÑки јен", "symbol": "Â¥" }, "YER": { - "name": "ЈеменÑки риjал" + "name": "јеменÑки ријал" }, "AMD": { - "name": "ЈерменÑки драм" + "name": "јерменÑки драм" }, "JOD": { - "name": "ЈорданÑки динар" + "name": "јорданÑки динар" }, "ZAR": { - "name": "Јужноафрички ранд" + "name": "јужноафрички ранд" }, "KRW": { - "name": "ЈужнокорејÑки вон" + "name": "јужнокорејÑки вон" }, "SSP": { - "name": "ЈужноÑуданÑка фунта" + "name": "јужноÑуданÑка фунта" }, "KZT": { - "name": "КазахÑтанÑки тенге" + "name": "казахÑтанÑки тенге" }, "KYD": { - "name": "КајманÑки долар" + "name": "кајманÑки долар" + }, + "KHR": { + "name": "камбоџанÑки ријел" }, "CAD": { - "name": "КанадÑки долар", + "name": "канадÑки долар", "symbol": "CA$" }, "QAR": { - "name": "КатарÑки ријал" + "name": "катарÑки ријал" }, "KES": { - "name": "КенијÑки шилинг" + "name": "кенијÑки шилинг" }, "CNY": { - "name": "КинеÑки јуан", + "name": "кинеÑки јуан", "symbol": "CNÂ¥" }, "KGS": { - "name": "КиргиÑтанÑки Ñом" + "name": "киргиÑтанÑки Ñом" }, "COP": { - "name": "КолумбијÑки пезоÑ" + "name": "колумбијÑки пезоÑ" }, "KMF": { - "name": "КоморÑки франак" + "name": "коморÑки франак" }, "CDF": { - "name": "КонгоанÑки франак" + "name": "конгоанÑки франак" }, "CRC": { - "name": "КоÑтариканÑки колон" + "name": "коÑтариканÑки колон" }, "CUC": { - "name": "КубанÑки конвертибилни пезоÑ" + "name": "кубанÑки конвертибилни пезоÑ" }, "CUP": { - "name": "КубанÑки пезоÑ" + "name": "кубанÑки пезоÑ" }, "KWD": { - "name": "КувајтÑки динар" + "name": "кувајтÑки динар" }, "LAK": { - "name": "Лаошки кип" + "name": "лаоÑки кип" }, "LSL": { - "name": "ЛеÑото лоти" + "name": "леÑотÑки лоти" }, "LBP": { - "name": "ЛибанÑка фунта" + "name": "либанÑка фунта" }, "LRD": { - "name": "ЛиберијÑки долар" + "name": "либеријÑки долар" }, "LYD": { - "name": "ЛибијÑки динар" - }, - "MGA": { - "name": "МадагаÑкарÑки ариари" + "name": "либијÑки динар" }, "HUF": { - "name": "МађарÑка форинта" + "name": "мађарÑка форинта" }, "MOP": { - "name": "МакаоÑка патака" + "name": "макаоÑка патака" }, "MKD": { - "name": "МакедонÑки денар" + "name": "македонÑки денар" }, "MWK": { - "name": "МалавијÑка квача" + "name": "малавијÑка квача" + }, + "MGA": { + "name": "малгашки аријари" }, "MVR": { - "name": "МалдивÑка руфија" + "name": "малдивÑка руфија" }, "MYR": { - "name": "МалезијÑки рингит" + "name": "малезијÑки рингит" }, "MAD": { - "name": "МароканÑки дирхам" + "name": "мароканÑки дирхам" }, "MRU": { - "name": "МауританÑка огија" + "name": "мауританÑка огија" }, "MUR": { - "name": "МаурицијÑка рупија" + "name": "маурицијÑка рупија" }, "MXN": { - "name": "МекÑички пезоÑ", + "name": "мекÑички пезоÑ", "symbol": "MX$" }, "MMK": { - "name": "МјанмарÑки кјат" + "name": "мјанмарÑки кјат" }, "MZN": { - "name": "Мозамбички метикал" + "name": "мозамбички метикал" }, "MDL": { - "name": "МолдавÑки леј" + "name": "молдавÑки леј" }, "MNT": { - "name": "МонголÑки тугрик" + "name": "монголÑки тугрик" }, "NAD": { - "name": "ÐамибијÑки долар" + "name": "намибијÑки долар" }, "NPR": { - "name": "ÐепалÑкa рупиja" + "name": "непалÑка рупија" }, "NGN": { - "name": "ÐигеријÑка наира" + "name": "нигеријÑка наира" }, "NIO": { - "name": "ÐикарагванÑка златна кордоба" + "name": "никарагванÑка кордоба" }, "TWD": { - "name": "Ðови тајванÑки долар", + "name": "нови тајванÑки долар", "symbol": "NT$" }, "NZD": { - "name": "ÐовозеландÑки долар" + "name": "новозеландÑки долар" }, "NOK": { - "name": "Ðорвешка круна" + "name": "норвешка круна" }, "OMR": { - "name": "ОманÑки ријал" + "name": "оманÑки ријал" }, "PKR": { - "name": "ПакиÑтанÑкa рупиja" + "name": "пакиÑтанÑка рупија" }, "PAB": { - "name": "ПанамÑка балбоа" + "name": "панамÑка балбоа" }, "PGK": { - "name": "ПапуанÑка кина" + "name": "папуанÑка кина" }, "PYG": { - "name": "ПарагвајÑки гварани" + "name": "парагвајÑки гварани" }, "PEN": { - "name": "ПеруанÑки Ñол" + "name": "перуанÑки Ñол" }, "PLN": { - "name": "ПољÑки злот" + "name": "пољÑки злот" }, "RWF": { - "name": "РуандÑки франак" + "name": "руандÑки франак" }, "RON": { - "name": "РумунÑки леј" + "name": "румунÑки леј" }, "RUB": { - "name": "РуÑка рубља" + "name": "руÑка рубља" }, "SVC": { "name": "СалвадорÑки колон" }, "WST": { - "name": "СамоанÑка тала" + "name": "ÑамоанÑка тала" }, "STN": { - "name": "СаотомÑка добра" + "name": "ÑаотомÑка добра" }, "SAR": { - "name": "СаудијÑки ријал" + "name": "ÑаудијÑки ријал" }, "SZL": { - "name": "СвазилендÑки лилангени" - }, - "SHP": { - "name": "Свете Јелене фунта" + "name": "ÑвазилендÑки лилангени" }, "KPW": { - "name": "СевернокорејÑки вон" + "name": "ÑевернокорејÑки вон" }, "SCR": { - "name": "СејшелÑка рупија" + "name": "ÑејшелÑка рупија" }, "SLL": { - "name": "СијералеонÑки леоне" + "name": "ÑијералеонÑки леоне" }, "SGD": { - "name": "СингапурÑки долар" + "name": "ÑингапурÑки долар" }, "SYP": { - "name": "СиријÑка фунта" + "name": "ÑиријÑка фунта" }, "SBD": { - "name": "СоломонÑки долар" + "name": "ÑоломонÑки долар" }, "SOS": { - "name": "СомалијÑки шилинг" + "name": "ÑомалијÑки шилинг" }, "RSD": { - "name": "СрпÑки динар" + "name": "ÑрпÑки динар" }, "SDG": { - "name": "СуданÑка фунта" + "name": "ÑуданÑка фунта" }, "SRD": { - "name": "СуринамÑки долар" + "name": "ÑуринамÑки долар" }, "THB": { - "name": "ТајландÑки бат" + "name": "тајландÑки бат" }, "TZS": { - "name": "ТанзанијÑки шилинг" + "name": "танзанијÑки шилинг" }, "TJS": { - "name": "ТаџикиÑтанÑки Ñомон" + "name": "таџикиÑтанÑки Ñомон" }, "TOP": { - "name": "ТонганÑка панга" + "name": "тонганÑка панга" }, "TTD": { "name": "Тринидад-тобагошки долар" }, "TND": { - "name": "ТуниÑки динар" + "name": "туниÑки динар" }, "TMT": { - "name": "ТуркмениÑтанÑки манат" + "name": "туркмениÑтанÑки манат" }, "TRY": { - "name": "ТурÑка лира" - }, - "AED": { - "name": "УÐЕ дирхам" + "name": "турÑка лира" }, "UGX": { - "name": "УгандÑки шилинг" + "name": "угандÑки шилинг" }, "UZS": { - "name": "УзбекиÑтанÑки Ñом" + "name": "узбекиÑтанÑки Ñом" }, "UAH": { - "name": "УкрајинÑка хривња" + "name": "украјинÑка гривна" }, "UYU": { - "name": "УругвајÑки пезоÑ" + "name": "уругвајÑки пезоÑ" }, "PHP": { - "name": "ФилипинÑки пезоÑ" + "name": "филипинÑки пезоÑ" }, "FJD": { - "name": "ФиџијÑки долар" + "name": "фиџијÑки долар" }, "FKP": { - "name": "ФокландÑка фунта" + "name": "фолкландÑка фунта" + }, + "SHP": { + "name": "фунта Свете Јелене" }, "HTG": { - "name": "ХаићанÑки гурд" + "name": "хаићанÑки гурд" }, "ANG": { - "name": "ХоландÑкоантилÑки гулден" + "name": "холандÑкоантилÑки гулден" }, "HKD": { - "name": "Хонгконшки долар", + "name": "хонгконшки долар", "symbol": "HK$" }, "HNL": { - "name": "Хондурашка лемпира" + "name": "хондурашка лемпира" }, "HRK": { - "name": "ХрватÑка куна" + "name": "хрватÑка куна" }, - "XOF": { - "name": "ЦФРфранак БЦЕÐО", - "symbol": "F CFA" + "XAF": { + "name": "централноафрички франак", + "symbol": "FCFA" }, "CZK": { - "name": "Чешка круна" + "name": "чешка круна" }, "CLP": { - "name": "ЧилеанÑки пезоÑ" + "name": "чилеанÑки пезоÑ" }, "DJF": { - "name": "ÐибутÑки франак" + "name": "џибутÑки франак" }, "CHF": { - "name": "ШвајцарÑки франак" + "name": "швајцарÑки франак" }, "SEK": { - "name": "ШведÑка круна" + "name": "шведÑка круна" }, "LKR": { - "name": "ШриланканÑкa рупиja" - }, - "XAF": { - "name": "CFA франак BEAC", - "symbol": "FCFA" + "name": "шриланчанÑка рупија" }, "XPF": { "name": "CFP франак", "symbol": "CFPF" }, - "ERN": { - "name": "EритрејÑка накфa" - }, - "KHR": { - "name": "KамбоџанÑки ријел" - }, "UYW": { "name": "Uruguayan Nominal Wage Index Unit" } diff --git a/vendor/commerceguys/intl/resources/currency/sv.json b/vendor/commerceguys/intl/resources/currency/sv.json index aed2411e3..297671a68 100644 --- a/vendor/commerceguys/intl/resources/currency/sv.json +++ b/vendor/commerceguys/intl/resources/currency/sv.json @@ -16,7 +16,7 @@ "name": "angolansk kwanza" }, "ANG": { - "name": "Antillergulden" + "name": "antillergulden" }, "ARS": { "name": "argentinsk peso" diff --git a/vendor/commerceguys/intl/resources/currency/te.json b/vendor/commerceguys/intl/resources/currency/te.json index bc70df4c9..473abc2f9 100644 --- a/vendor/commerceguys/intl/resources/currency/te.json +++ b/vendor/commerceguys/intl/resources/currency/te.json @@ -322,6 +322,10 @@ "name": "à°¬à±à°°à±†à°œà°¿à°²à°¿à°¯à°¨à± రియలà±", "symbol": "R$" }, + "INR": { + "name": "à°à°¾à°°à°¤à°¦à±‡à°¶ రూపాయి", + "symbol": "₹" + }, "BTN": { "name": "à°à±‚టానీయà±à°² à°—à±à°²à±â€Œà°Ÿà±à°°à±à°®à±" }, @@ -360,7 +364,7 @@ "name": "మొజాంబికనౠమెటికలà±" }, "MAD": { - "name": "మోరోకనౠదిరà±à°¹à±à°®à±" + "name": "మోరోకనౠదిరà±à°¹à°¾à°®à±" }, "MDL": { "name": "మోలà±â€Œà°¡à±‹à°µà°¨à± à°²à±à°¯à±‚" @@ -378,10 +382,6 @@ "RUB": { "name": "à°°à°·à±à°¯à°¨à± రూబలà±" }, - "INR": { - "name": "రూపాయి", - "symbol": "₹" - }, "RON": { "name": "రోమానియానౠలెయà±" }, diff --git a/vendor/commerceguys/intl/resources/currency/tk.json b/vendor/commerceguys/intl/resources/currency/tk.json index c9027d230..e134a71c4 100644 --- a/vendor/commerceguys/intl/resources/currency/tk.json +++ b/vendor/commerceguys/intl/resources/currency/tk.json @@ -246,7 +246,7 @@ "name": "Laos kipi" }, "LSL": { - "name": "Lesotho Loti" + "name": "Lesoto lotisi" }, "LRD": { "name": "Liberiýa dollary" diff --git a/vendor/commerceguys/intl/resources/currency/ur-IN.json b/vendor/commerceguys/intl/resources/currency/ur-IN.json index 0d4c1e51f..bbfe902e9 100644 --- a/vendor/commerceguys/intl/resources/currency/ur-IN.json +++ b/vendor/commerceguys/intl/resources/currency/ur-IN.json @@ -353,7 +353,7 @@ "name": "لیبیائی دینار" }, "LSL": { - "name": "لیسوتھو لوٹی" + "name": "لیسوتھو لوتی" }, "MUR": { "name": "ماریشس کا روپیÛ" diff --git a/vendor/commerceguys/intl/resources/currency/ur.json b/vendor/commerceguys/intl/resources/currency/ur.json index dab9464c3..27ac47bfd 100644 --- a/vendor/commerceguys/intl/resources/currency/ur.json +++ b/vendor/commerceguys/intl/resources/currency/ur.json @@ -354,7 +354,7 @@ "name": "لیبیائی دینار" }, "LSL": { - "name": "لیسوتھو لوٹی" + "name": "لیسوتھو لوتی" }, "MUR": { "name": "ماریشس کا روپیÛ" diff --git a/vendor/commerceguys/intl/resources/currency/uz.json b/vendor/commerceguys/intl/resources/currency/uz.json index d20643d6a..e35f86eef 100644 --- a/vendor/commerceguys/intl/resources/currency/uz.json +++ b/vendor/commerceguys/intl/resources/currency/uz.json @@ -214,7 +214,7 @@ "name": "Laos kipi" }, "LSL": { - "name": "Lesotho Loti" + "name": "Lesoto lotisi" }, "LRD": { "name": "Liberiya dollari" diff --git a/vendor/commerceguys/intl/resources/language/af.json b/vendor/commerceguys/intl/resources/language/af.json index e2daba336..2f4dce67e 100644 --- a/vendor/commerceguys/intl/resources/language/af.json +++ b/vendor/commerceguys/intl/resources/language/af.json @@ -69,6 +69,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesies", + "iu": "Inoektitoet", "it": "Italiaans", "ja": "Japannees", "jv": "Javaans", @@ -76,6 +77,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -134,6 +136,7 @@ "ne": "Nepalees", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigeriese Pidgin", "lrc": "Noord-Luri", "nd": "Noord-Ndebele", @@ -170,6 +173,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santalies", + "sc": "Sardinies", "seh": "Sena", "tzm": "Sentraal-Atlas-Tamazight", "sr": "Serwies", diff --git a/vendor/commerceguys/intl/resources/language/ar-EG.json b/vendor/commerceguys/intl/resources/language/ar-EG.json index 768358325..b67d46e2a 100644 --- a/vendor/commerceguys/intl/resources/language/ar-EG.json +++ b/vendor/commerceguys/intl/resources/language/ar-EG.json @@ -36,6 +36,7 @@ "is": "الأيسلندية", "it": "الإيطالية", "smn": "الإيناري سامي", + "iu": "الإينكتيتت", "ewo": "الإيوندو", "ee": "الإيوي", "bas": "الباسا", @@ -86,6 +87,7 @@ "sah": "الساخيّة", "sat": "السانتالية", "sg": "السانجو", + "sc": "السردينية", "nds-NL": "السكسونية السÙلى", "sk": "السلوÙاكية", "sl": "السلوÙانية", @@ -223,5 +225,7 @@ "mua": "مندنج", "mgo": "ميتا", "jgo": "نغومبا", - "yav": "يانجبن" + "yav": "يانجبن", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ar-LY.json b/vendor/commerceguys/intl/resources/language/ar-LY.json index a66fd3d56..07745325d 100644 --- a/vendor/commerceguys/intl/resources/language/ar-LY.json +++ b/vendor/commerceguys/intl/resources/language/ar-LY.json @@ -36,6 +36,7 @@ "is": "الأيسلندية", "it": "الإيطالية", "smn": "الإيناري سامي", + "iu": "الإينكتيتت", "ewo": "الإيوندو", "ee": "الإيوي", "bas": "الباسا", @@ -86,6 +87,7 @@ "sah": "الساخيّة", "sat": "السانتالية", "sg": "السانجو", + "sc": "السردينية", "nds-NL": "السكسونية السÙلى", "sk": "السلوÙاكية", "sl": "السلوÙانية", @@ -223,5 +225,7 @@ "mua": "مندنج", "mgo": "ميتا", "jgo": "نغومبا", - "yav": "يانجبن" + "yav": "يانجبن", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ar-SA.json b/vendor/commerceguys/intl/resources/language/ar-SA.json index cef1ccf1b..fa1aa1cdb 100644 --- a/vendor/commerceguys/intl/resources/language/ar-SA.json +++ b/vendor/commerceguys/intl/resources/language/ar-SA.json @@ -36,6 +36,7 @@ "is": "الأيسلندية", "it": "الإيطالية", "smn": "الإيناري سامي", + "iu": "الإينكتيتت", "ewo": "الإيوندو", "ee": "الإيوي", "bas": "الباسا", @@ -86,6 +87,7 @@ "sah": "الساخيّة", "sat": "السانتالية", "sg": "السانجو", + "sc": "السردينية", "nds-NL": "السكسونية السÙلى", "sk": "السلوÙاكية", "sl": "السلوÙانية", @@ -223,5 +225,7 @@ "mua": "مندنج", "mgo": "ميتا", "jgo": "نغومبا", - "yav": "يانجبن" + "yav": "يانجبن", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ar.json b/vendor/commerceguys/intl/resources/language/ar.json index a775401ae..bdd2de373 100644 --- a/vendor/commerceguys/intl/resources/language/ar.json +++ b/vendor/commerceguys/intl/resources/language/ar.json @@ -36,6 +36,7 @@ "is": "الأيسلندية", "it": "الإيطالية", "smn": "الإيناري سامي", + "iu": "الإينكتيتت", "ewo": "الإيوندو", "ee": "الإيوي", "bas": "الباسا", @@ -86,6 +87,7 @@ "sah": "الساخيّة", "sat": "السانتالية", "sg": "السانجو", + "sc": "السردينية", "nds-NL": "السكسونية السÙلى", "sk": "السلوÙاكية", "sl": "السلوÙانية", @@ -223,5 +225,7 @@ "mua": "مندنج", "mgo": "ميتا", "jgo": "نغومبا", - "yav": "يانجبن" + "yav": "يانجبن", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/as.json b/vendor/commerceguys/intl/resources/language/as.json index 63da73d1b..b5c2f8abc 100644 --- a/vendor/commerceguys/intl/resources/language/as.json +++ b/vendor/commerceguys/intl/resources/language/as.json @@ -24,6 +24,7 @@ "id": "ইণà§à¦¡à§‹à¦¨à§‡à¦šà¦¿à¦¯à¦¼", "yi": "ইদà§à¦¦à¦¿à¦›", "smn": "ইনাৰি ছামি", + "iu": "ইনà§à¦•à§à¦Ÿà¦¿à¦Ÿà§à¦Ÿ", "ee": "ইৱে", "ug": "উইঘà§à§°", "uz": "উজবেক", @@ -85,6 +86,7 @@ "sbp": "ছাঙà§à¦—à§", "sg": "ছাঙà§à¦—ো", "saq": "ছামà§à¦¬à§à§°à§", + "sc": "ছাৰà§à¦¡à¦¿à¦¨à¦¿à¦¯à¦¼à¦¾à¦¨", "sr": "ছাৰà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨", "ii": "ছিচà§à§±à¦¾à¦¨ ই", "gsw": "ছà§à¦‡à¦š জাৰà§à¦®à¦¾à¦¨", @@ -109,6 +111,7 @@ "nl": "ডাচ", "dua": "ডà§à§±à¦¾à¦²à¦¾", "da": "ডেনিচ", + "doi": "ডোগà§à§°à§€", "shi": "তাচেলহিট", "tg": "তাজিক", "tt": "তাতাৰ", @@ -121,6 +124,7 @@ "te": "তেলà§à¦—à§", "th": "থাই", "jgo": "নগোমà§à¦¬à¦¾", + "no": "নৰৱেজিয়ান", "nn": "নৰৱেজিয়ান নায়নোৰà§à¦¸à§à¦•", "nb": "নৰৱেজিয়ান বোকমাল", "pcm": "নাইজেৰিয়ান পিজিন", @@ -222,6 +226,6 @@ "hi": "হিনà§à¦¦à§€", "he": "হিবà§à§°à§", "xh": "হোছা", - "doi": "Dogri", - "no": "Norwegian" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ast.json b/vendor/commerceguys/intl/resources/language/ast.json index 338441c13..19ee94b20 100644 --- a/vendor/commerceguys/intl/resources/language/ast.json +++ b/vendor/commerceguys/intl/resources/language/ast.json @@ -92,11 +92,13 @@ "en-AU": "inglés d’Australia", "en-CA": "inglés de Canadá", "en-GB": "inglés de Gran Bretaña", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italianu", "dyo": "jola-fonyi", "kab": "kabileñu", + "kgp": "kaingang", "kkj": "kako", "kl": "kalaallisut", "kln": "kalenjin", @@ -147,6 +149,7 @@ "ne": "nepalés", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "nheengatu", "pcm": "nixerianu simplificáu", "no": "noruegu", "nb": "noruegu BokmÃ¥l", @@ -176,6 +179,7 @@ "sbp": "sangu", "sa": "sánscritu", "sat": "santali", + "sc": "sardu", "seh": "sena", "sr": "serbiu", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/az-Cyrl.json b/vendor/commerceguys/intl/resources/language/az-Cyrl.json index 3efc85473..2445858ee 100644 --- a/vendor/commerceguys/intl/resources/language/az-Cyrl.json +++ b/vendor/commerceguys/intl/resources/language/az-Cyrl.json @@ -1,6 +1,8 @@ { "doi": "Dogri", + "kgp": "Kaingang", "nds": "Low German", + "yrl": "Nheengatu", "no": "Norwegian", "ii": "Sichuan Yi", "en-AU": "ÐвÑтралија инÒилиÑÒ¹Ó™Ñи", @@ -64,6 +66,7 @@ "smn": "инари Ñами", "id": "индонезија", "en": "инÒилиÑ", + "iu": "инуктитут", "ga": "ирланд", "sv": "иÑвеч", "gsw": "ИÑвечрә алманҹаÑÑ‹", @@ -167,6 +170,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантал", + "sc": "Ñардин", "sah": "Ñаха", "ceb": "Ñебуан", "seh": "Ñена", diff --git a/vendor/commerceguys/intl/resources/language/az.json b/vendor/commerceguys/intl/resources/language/az.json index 829c0e74b..d0016f8f0 100644 --- a/vendor/commerceguys/intl/resources/language/az.json +++ b/vendor/commerceguys/intl/resources/language/az.json @@ -66,6 +66,7 @@ "smn": "inari sami", "id": "indoneziya", "en": "ingilis", + "iu": "inuktitut", "ga": "irland", "is": "island", "es": "ispan", @@ -77,6 +78,7 @@ "he": "ivrit", "kab": "kabile", "kea": "kabuverdian", + "kgp": "Kaingang", "kkj": "kako", "kl": "kalaallisut", "kln": "kalencin", @@ -129,7 +131,7 @@ "ml": "malayalam", "mt": "malta", "mni": "manipüri", - "mi": "maori", + "mi": "mÄori", "mr": "marathi", "mas": "masay", "mzn": "mazandaran", @@ -145,6 +147,7 @@ "naq": "nama", "ne": "nepal", "nnh": "ngiemboon", + "yrl": "Nheengatu", "pcm": "niger kreol", "jgo": "nqomba", "no": "norveç", @@ -173,6 +176,7 @@ "sbp": "sanqu", "sa": "sanskrit", "sat": "santal", + "sc": "sardin", "ceb": "sebuan", "seh": "sena", "sr": "serb", diff --git a/vendor/commerceguys/intl/resources/language/be.json b/vendor/commerceguys/intl/resources/language/be.json index 8d5698b5a..ccd01f9c5 100644 --- a/vendor/commerceguys/intl/resources/language/be.json +++ b/vendor/commerceguys/intl/resources/language/be.json @@ -49,6 +49,7 @@ "da": "дацкаÑ", "dyo": "джола-фоньі", "dz": "дзонг-кÑ", + "doi": "догры", "dua": "дуала", "pt-PT": "еўрапейÑÐºÐ°Ñ Ð¿Ð°Ñ€Ñ‚ÑƒÐ³Ð°Ð»ÑŒÑкаÑ", "yo": "ёруба", @@ -59,6 +60,7 @@ "yi": "ідыш", "smn": "інары-ÑаамÑкаÑ", "id": "інданезійÑкаÑ", + "iu": "інуктытут", "ga": "ірландÑкаÑ", "is": "Ñ–ÑландÑкаÑ", "es": "Ñ–ÑпанÑкаÑ", @@ -161,6 +163,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрыт", "sat": "Ñанталі", + "sc": "ÑардзінÑкаÑ", "ceb": "Ñебуана", "seh": "Ñена", "sr": "ÑербÑкаÑ", @@ -223,5 +226,6 @@ "sah": "ÑкуцкаÑ", "yav": "ÑнгбÑн", "ja": "ÑпонÑкаÑ", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/bg.json b/vendor/commerceguys/intl/resources/language/bg.json index 6cc5e62ce..b4bcdabdc 100644 --- a/vendor/commerceguys/intl/resources/language/bg.json +++ b/vendor/commerceguys/intl/resources/language/bg.json @@ -60,6 +60,7 @@ "yi": "идиш", "smn": "инари-ÑаамÑки", "id": "индонезийÑки", + "iu": "инуктитут", "ga": "ирландÑки", "is": "иÑландÑки", "es": "иÑпанÑки", @@ -161,6 +162,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑки", "sah": "Ñаха", "ceb": "ÑебуанÑки", "lrc": "Ñеверен лури", @@ -223,5 +225,7 @@ "gd": "шотландÑки келтÑки", "jv": "ÑванÑки", "yav": "Ñнгбен", - "ja": "ÑпонÑки" + "ja": "ÑпонÑки", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/bn-IN.json b/vendor/commerceguys/intl/resources/language/bn-IN.json index 849d5a8d4..f5341b78c 100644 --- a/vendor/commerceguys/intl/resources/language/bn-IN.json +++ b/vendor/commerceguys/intl/resources/language/bn-IN.json @@ -24,6 +24,7 @@ "ig": "ইগà§â€Œà¦¬à§‹", "it": "ইতালিয়", "smn": "ইনারি সামি", + "iu": "ইনà§à¦•à§à¦Ÿà¦¿à¦Ÿà§à¦Ÿ", "id": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à§€à¦¯à¦¼", "yav": "ইয়াঙà§à¦—বেন", "yi": "ইয়েদà§à¦¦à¦¿à¦¶", @@ -201,6 +202,7 @@ "sbp": "সাঙà§à¦—à§", "sg": "সাঙà§à¦—ো", "saq": "সামবà§à¦°à§", + "sc": "সারà§à¦¡à¦¿à¦¨à¦¿à¦¯à¦¼à¦¾à¦¨", "sr": "সারà§à¦¬à§€à¦¯à¦¼", "si": "সিংহলী", "ii": "সিচà§à¦¯à¦¼à¦¾à¦¨ য়ি", @@ -223,5 +225,7 @@ "haw": "হাওয়াইয়ান", "hu": "হাঙà§à¦—েরীয়", "hi": "হিনà§à¦¦à¦¿", - "he": "হিবà§à¦°à§" + "he": "হিবà§à¦°à§", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/bn.json b/vendor/commerceguys/intl/resources/language/bn.json index 1243433c3..0b03c6d5e 100644 --- a/vendor/commerceguys/intl/resources/language/bn.json +++ b/vendor/commerceguys/intl/resources/language/bn.json @@ -24,6 +24,7 @@ "ig": "ইগà§â€Œà¦¬à§‹", "it": "ইতালিয়", "smn": "ইনারি সামি", + "iu": "ইনà§à¦•à§à¦Ÿà¦¿à¦Ÿà§à¦Ÿ", "id": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à§€à¦¯à¦¼", "yav": "ইয়াঙà§à¦—বেন", "yi": "ইয়েদà§à¦¦à¦¿à¦¶", @@ -201,6 +202,7 @@ "sbp": "সাঙà§à¦—à§", "sg": "সাঙà§à¦—ো", "saq": "সামবà§à¦°à§", + "sc": "সারà§à¦¡à¦¿à¦¨à¦¿à¦¯à¦¼à¦¾à¦¨", "sr": "সারà§à¦¬à§€à¦¯à¦¼", "si": "সিংহলী", "ii": "সিচà§à¦¯à¦¼à¦¾à¦¨ য়ি", @@ -223,5 +225,7 @@ "haw": "হাওয়াইয়ান", "hu": "হাঙà§à¦—েরীয়", "hi": "হিনà§à¦¦à¦¿", - "he": "হিবà§à¦°à§" + "he": "হিবà§à¦°à§", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/brx.json b/vendor/commerceguys/intl/resources/language/brx.json index 3d011acc4..bd1894af9 100644 --- a/vendor/commerceguys/intl/resources/language/brx.json +++ b/vendor/commerceguys/intl/resources/language/brx.json @@ -13,6 +13,7 @@ "guz": "Gusii", "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "khq": "Koyra Chiini", @@ -32,6 +33,7 @@ "naq": "Nama", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "lrc": "Northern Luri", "nus": "Nuer", @@ -65,6 +67,7 @@ "ga": "आईरिश", "is": "आईसà¥à¤²à¥ˆà¤‚डिकà¥", "sq": "आलà¥à¤¬à¥‡à¤¨à¤¿à¤¯à¤¨à¥", + "iu": "इनूकà¥à¤Ÿà¥€à¤Ÿà¥‚तà¥", "id": "इनà¥à¤¡à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¨à¥", "ig": "ईगà¥à¤¬à¥‹", "it": "ईटालियनà¥", @@ -204,6 +207,7 @@ "sr": "सरà¥à¤¬à¤¿à¤¯à¤¨à¥", "sa": "संसà¥à¤•à¥ƒà¤¤à¥", "sg": "सांगà¥à¤°à¥‹", + "sc": "सारà¥à¤¦à¥€à¤¨à¥€", "sd": "सिंधी", "ii": "सीचà¥à¤†à¤¨à¥ यी", "si": "सींहाला", diff --git a/vendor/commerceguys/intl/resources/language/bs-Cyrl.json b/vendor/commerceguys/intl/resources/language/bs-Cyrl.json index 47b2cf618..2a6ed8ee9 100644 --- a/vendor/commerceguys/intl/resources/language/bs-Cyrl.json +++ b/vendor/commerceguys/intl/resources/language/bs-Cyrl.json @@ -55,6 +55,7 @@ "ig": "игбо", "smn": "инари Ñами", "id": "индонежанÑки", + "iu": "инуктитут", "ga": "ирÑки", "is": "иÑландÑки", "it": "италијанÑки", @@ -159,6 +160,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардињаÑки", "sw": "Ñвахили", "sw-CD": "Ñвахили (ДемократÑка Република Конго)", "seh": "Ñена", @@ -223,5 +225,7 @@ "es": "шпанÑки", "es-419": "шпанÑки (ЛатинÑка Ðмерика)", "es-MX": "шпанÑки (МекÑико)", + "kgp": "Kaingang", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/bs.json b/vendor/commerceguys/intl/resources/language/bs.json index fdff16da9..433832d98 100644 --- a/vendor/commerceguys/intl/resources/language/bs.json +++ b/vendor/commerceguys/intl/resources/language/bs.json @@ -71,6 +71,7 @@ "ig": "igbo", "smn": "inari sami", "id": "indonezijski", + "iu": "inuktitut", "ga": "irski", "is": "islandski", "it": "italijanski", @@ -82,6 +83,7 @@ "dyo": "jola-foni", "yo": "jorubanski", "kab": "kabile", + "kgp": "kaingang", "kkj": "kako", "kl": "kalalisutski", "kln": "kalenjin", @@ -142,6 +144,7 @@ "ne": "nepalski", "nnh": "ngiembon", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "no": "norveÅ¡ki", "nb": "norveÅ¡ki (Bokmal)", @@ -171,6 +174,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinijski", "seh": "sena", "ii": "siÄuan ji", "sd": "sindi", diff --git a/vendor/commerceguys/intl/resources/language/ca.json b/vendor/commerceguys/intl/resources/language/ca.json index be4fc4fa9..249be833c 100644 --- a/vendor/commerceguys/intl/resources/language/ca.json +++ b/vendor/commerceguys/intl/resources/language/ca.json @@ -91,12 +91,14 @@ "yi": "Ãdix", "ig": "igbo", "id": "indonesi", + "iu": "inuktitut", "yo": "ioruba", "ga": "irlandès", "is": "islandès", "it": "italià ", "ja": "japonès", "jv": "javanès", + "kgp": "kaingà ", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -146,6 +148,7 @@ "ne": "nepalès", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruec", "nb": "noruec bokmÃ¥l", "nn": "noruec nynorsk", @@ -177,6 +180,7 @@ "sbp": "sangu", "sa": "sà nscrit", "sat": "santali", + "sc": "sard", "seh": "sena", "sr": "serbi", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/ce.json b/vendor/commerceguys/intl/resources/language/ce.json index 7b4cf3c3b..38752a8ea 100644 --- a/vendor/commerceguys/intl/resources/language/ce.json +++ b/vendor/commerceguys/intl/resources/language/ce.json @@ -1,5 +1,7 @@ { "doi": "Dogri", + "kgp": "Kaingang", + "yrl": "Nheengatu", "no": "Norwegian", "en-AU": "ÐвÑтралин ингалÑан", "de-AT": "авÑтрин немцойн", @@ -61,6 +63,7 @@ "smn": "инари-Ñаамийн", "en": "ингалÑан", "id": "индонезихойн", + "iu": "инуктитут", "ga": "ирландхойн", "is": "иÑландхойн", "es": "иÑпанхойн", @@ -160,6 +163,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "Ñардинийн", "ceb": "Ñебуано", "seh": "Ñена", "sr": "Ñербийн", diff --git a/vendor/commerceguys/intl/resources/language/cs.json b/vendor/commerceguys/intl/resources/language/cs.json index a26a0ed0f..5877eff76 100644 --- a/vendor/commerceguys/intl/resources/language/cs.json +++ b/vendor/commerceguys/intl/resources/language/cs.json @@ -68,6 +68,7 @@ "hr": "chorvatÅ¡tina", "ig": "igboÅ¡tina", "id": "indonéština", + "iu": "inuktitutÅ¡tina", "ga": "irÅ¡tina", "is": "islandÅ¡tina", "ii": "iÅ¡tina (seÄuánská)", @@ -80,6 +81,7 @@ "dyo": "jola-fonyi", "yo": "jorubÅ¡tina", "kab": "kabylÅ¡tina", + "kgp": "kaingang", "kkj": "kako", "kln": "kalendžin", "kam": "kambÅ¡tina", @@ -148,6 +150,7 @@ "ne": "nepálÅ¡tina", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "nheengatu", "pcm": "nigerijský pidžin", "nl": "nizozemÅ¡tina", "no": "norÅ¡tina", @@ -175,6 +178,7 @@ "sg": "sangÅ¡tina", "sa": "sanskrt", "sat": "santálÅ¡tina", + "sc": "sardÅ¡tina", "seh": "sena", "sd": "sindhÅ¡tina", "si": "sinhálÅ¡tina", diff --git a/vendor/commerceguys/intl/resources/language/cy.json b/vendor/commerceguys/intl/resources/language/cy.json index 8d858c8d0..22320192a 100644 --- a/vendor/commerceguys/intl/resources/language/cy.json +++ b/vendor/commerceguys/intl/resources/language/cy.json @@ -88,12 +88,14 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indoneseg", + "iu": "Inwctitwt", "yo": "Iorwba", "nl": "Iseldireg", "is": "Islandeg", "jv": "Jafanaeg", "ja": "Japaneeg", "dyo": "Jola-Fonyi", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -123,7 +125,7 @@ "ms": "Maleieg", "mt": "Malteg", "mni": "Manipwri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Masanderani", @@ -137,6 +139,7 @@ "naq": "Nama", "nd": "Ndebele Gogleddol", "ne": "Nepaleg", + "yrl": "Nheengatu", "nyn": "Niancole", "no": "Norwyeg", "nb": "Norwyeg BokmÃ¥l", @@ -172,6 +175,7 @@ "se": "Sami Gogleddol", "sa": "Sansgrit", "sat": "Santali", + "sc": "Sardeg", "dje": "Sarmaeg", "es": "Sbaeneg", "es-419": "Sbaeneg America Ladin", diff --git a/vendor/commerceguys/intl/resources/language/da.json b/vendor/commerceguys/intl/resources/language/da.json index f5c971f59..29f2e59e3 100644 --- a/vendor/commerceguys/intl/resources/language/da.json +++ b/vendor/commerceguys/intl/resources/language/da.json @@ -67,6 +67,7 @@ "be": "hviderussisk", "ig": "igbo", "id": "indonesisk", + "iu": "inuktitut", "ga": "irsk", "is": "islandsk", "it": "italiensk", @@ -76,6 +77,7 @@ "yi": "jiddisch", "dyo": "jola-fonyi", "kab": "kabylisk", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -137,6 +139,7 @@ "ne": "nepalesisk", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigeriansk pidgin", "lrc": "nordluri", "nd": "nordndebele", @@ -165,6 +168,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinsk", "de-CH": "schweizerhøjtysk", "gsw": "schweizertysk", "fr-CH": "schweizisk fransk", diff --git a/vendor/commerceguys/intl/resources/language/de-AT.json b/vendor/commerceguys/intl/resources/language/de-AT.json index f6088abd9..3deac72a9 100644 --- a/vendor/commerceguys/intl/resources/language/de-AT.json +++ b/vendor/commerceguys/intl/resources/language/de-AT.json @@ -66,6 +66,7 @@ "ig": "Igbo", "smn": "Inari-Samisch", "id": "Indonesisch", + "iu": "Inuktitut", "ga": "Irisch", "is": "Isländisch", "it": "Italienisch", @@ -75,6 +76,7 @@ "yi": "Jiddisch", "kea": "Kabuverdianu", "kab": "Kabylisch", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -115,7 +117,7 @@ "ms": "Malaiisch", "ml": "Malayalam", "mt": "Maltesisch", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mzn": "Masanderanisch", "mas": "Massai", @@ -131,6 +133,7 @@ "ne": "Nepalesisch", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nds": "Niederdeutsch", "nl": "Niederländisch", "nds-NL": "Niedersächsisch", @@ -168,6 +171,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardisch", "sv": "Schwedisch", "de-CH": "Schweizer Hochdeutsch", "gsw": "Schweizerdeutsch", diff --git a/vendor/commerceguys/intl/resources/language/de-CH.json b/vendor/commerceguys/intl/resources/language/de-CH.json index fa26088ac..337143d35 100644 --- a/vendor/commerceguys/intl/resources/language/de-CH.json +++ b/vendor/commerceguys/intl/resources/language/de-CH.json @@ -66,6 +66,7 @@ "ig": "Igbo", "smn": "Inari-Samisch", "id": "Indonesisch", + "iu": "Inuktitut", "ga": "Irisch", "is": "Isländisch", "it": "Italienisch", @@ -75,6 +76,7 @@ "yi": "Jiddisch", "kea": "Kabuverdianu", "kab": "Kabylisch", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -115,7 +117,7 @@ "ms": "Malaiisch", "ml": "Malayalam", "mt": "Maltesisch", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mzn": "Masanderanisch", "mas": "Massai", @@ -131,6 +133,7 @@ "ne": "Nepalesisch", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nds": "Niederdeutsch", "nl": "Niederländisch", "nds-NL": "Niedersächsisch", @@ -168,6 +171,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardisch", "sv": "Schwedisch", "de-CH": "Schweizer Hochdeutsch", "gsw": "Schweizerdeutsch", diff --git a/vendor/commerceguys/intl/resources/language/de.json b/vendor/commerceguys/intl/resources/language/de.json index 6d2d5a57c..2a5870df3 100644 --- a/vendor/commerceguys/intl/resources/language/de.json +++ b/vendor/commerceguys/intl/resources/language/de.json @@ -66,6 +66,7 @@ "ig": "Igbo", "smn": "Inari-Samisch", "id": "Indonesisch", + "iu": "Inuktitut", "ga": "Irisch", "is": "Isländisch", "it": "Italienisch", @@ -75,6 +76,7 @@ "yi": "Jiddisch", "kea": "Kabuverdianu", "kab": "Kabylisch", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -115,7 +117,7 @@ "ms": "Malaiisch", "ml": "Malayalam", "mt": "Maltesisch", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mzn": "Masanderanisch", "mas": "Massai", @@ -131,6 +133,7 @@ "ne": "Nepalesisch", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nds": "Niederdeutsch", "nl": "Niederländisch", "nds-NL": "Niedersächsisch", @@ -168,6 +171,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardisch", "sv": "Schwedisch", "de-CH": "Schweizer Hochdeutsch", "gsw": "Schweizerdeutsch", diff --git a/vendor/commerceguys/intl/resources/language/dz.json b/vendor/commerceguys/intl/resources/language/dz.json index 95d7a3233..b0e5ca7c0 100644 --- a/vendor/commerceguys/intl/resources/language/dz.json +++ b/vendor/commerceguys/intl/resources/language/dz.json @@ -29,9 +29,11 @@ "lg": "Ganda", "guz": "Gusii", "smn": "Inari Sami", + "iu": "Inuktitut", "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -66,6 +68,7 @@ "nds-NL": "nds༠(ནེ་དར་ལནཌས྄à¼)", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -82,6 +85,7 @@ "sg": "Sango", "sbp": "Sangu", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "ksb": "Shambala", diff --git a/vendor/commerceguys/intl/resources/language/el.json b/vendor/commerceguys/intl/resources/language/el.json index 5bee2cb38..3a69fc9c6 100644 --- a/vendor/commerceguys/intl/resources/language/el.json +++ b/vendor/commerceguys/intl/resources/language/el.json @@ -42,8 +42,8 @@ "yi": "Γίντις", "yo": "ΓιοÏοÏμπα", "lg": "Γκάντα", - "gu": "ΓκουγιαÏάτι", "guz": "ΓκοÏσι", + "gu": "ΓκουτζαÏατικά", "kea": "Γλώσσα του Î Ïάσινου ΑκÏωτηÏίου", "wo": "Γουόλοφ", "da": "Δανικά", @@ -62,6 +62,7 @@ "ig": "Ίγκμπο", "smn": "ΙνάÏι Σάμι", "id": "Ινδονησιακά", + "iu": "ΙνοÏκτιτουτ", "ga": "ΙÏλανδικά", "is": "Ισλανδικά", "es": "Ισπανικά", @@ -82,6 +83,7 @@ "nds-NL": "Κάτω ΓεÏμανικά Ολλανδίας", "dsb": "Κάτω ΣοÏβικά", "nmg": "Κβάσιο", + "ckb": "ΚεντÏικά ΚουÏδικά", "qu": "ΚÎτσουα", "ki": "ΚικοÏγιου", "zh": "Κινεζικά", @@ -96,7 +98,6 @@ "kw": "ΚοÏνουαλικά", "xh": "Κόσα", "ku": "ΚουÏδικά", - "ckb": "ΚουÏδικά ΣοÏάνι", "hr": "ΚÏοατικά", "lkt": "Λακότα", "lag": "Λάνγκι", @@ -155,7 +156,7 @@ "uz": "Ουζμπεκικά", "ug": "ΟυιγουÏικά", "uk": "ΟυκÏανικά", - "ur": "ΟυÏντοÏ", + "ur": "ΟÏÏντου", "pa": "Παντζαπικά", "zh-Hant": "ΠαÏαδοσιακά Κινεζικά", "ps": "Πάστο", @@ -176,6 +177,7 @@ "sbp": "Σάνγκου", "sa": "ΣανσκÏιτικά", "sat": "Σαντάλι", + "sc": "ΣαÏδηνιακά", "sah": "Σαχά", "ceb": "Σεμπουάνο", "seh": "ΣÎνα", @@ -223,5 +225,7 @@ "haw": "Χαβαϊκά", "ha": "Χάουσα", "hi": "Χίντι", - "km": "ΧμεÏ" + "km": "ΧμεÏ", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/en-001.json b/vendor/commerceguys/intl/resources/language/en-001.json index e4b4cb314..49576b7f3 100644 --- a/vendor/commerceguys/intl/resources/language/en-001.json +++ b/vendor/commerceguys/intl/resources/language/en-001.json @@ -76,6 +76,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesian", + "iu": "Inuktitut", "ga": "Irish", "it": "Italian", "ja": "Japanese", @@ -83,6 +84,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -123,7 +125,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -138,6 +140,7 @@ "ne": "Nepali", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -167,6 +170,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/en-AU.json b/vendor/commerceguys/intl/resources/language/en-AU.json index a7ef07c43..5c63aa1fe 100644 --- a/vendor/commerceguys/intl/resources/language/en-AU.json +++ b/vendor/commerceguys/intl/resources/language/en-AU.json @@ -76,6 +76,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesian", + "iu": "Inuktitut", "ga": "Irish", "it": "Italian", "ja": "Japanese", @@ -83,6 +84,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -123,7 +125,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -138,6 +140,7 @@ "ne": "Nepali", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -167,6 +170,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/en-CA.json b/vendor/commerceguys/intl/resources/language/en-CA.json index bd04bad74..1c39141a6 100644 --- a/vendor/commerceguys/intl/resources/language/en-CA.json +++ b/vendor/commerceguys/intl/resources/language/en-CA.json @@ -76,6 +76,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesian", + "iu": "Inuktitut", "ga": "Irish", "it": "Italian", "ja": "Japanese", @@ -83,6 +84,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -123,7 +125,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mfe": "Mauritian", @@ -138,6 +140,7 @@ "ne": "Nepali", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -167,6 +170,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/en-IN.json b/vendor/commerceguys/intl/resources/language/en-IN.json index e9c87982a..1cfd00f74 100644 --- a/vendor/commerceguys/intl/resources/language/en-IN.json +++ b/vendor/commerceguys/intl/resources/language/en-IN.json @@ -76,6 +76,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesian", + "iu": "Inuktitut", "ga": "Irish", "it": "Italian", "ja": "Japanese", @@ -83,6 +84,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -123,7 +125,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -138,6 +140,7 @@ "ne": "Nepali", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -167,6 +170,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/en-NZ.json b/vendor/commerceguys/intl/resources/language/en-NZ.json deleted file mode 100644 index 114fe6e02..000000000 --- a/vendor/commerceguys/intl/resources/language/en-NZ.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "af": "Afrikaans", - "agq": "Aghem", - "ak": "Akan", - "sq": "Albanian", - "am": "Amharic", - "ar": "Arabic", - "hy": "Armenian", - "as": "Assamese", - "ast": "Asturian", - "asa": "Asu", - "en-AU": "Australian English", - "de-AT": "Austrian German", - "az": "Azerbaijani", - "ksf": "Bafia", - "bm": "Bambara", - "bn": "Bangla", - "bas": "Basaa", - "eu": "Basque", - "be": "Belarusian", - "bem": "Bemba", - "bez": "Bena", - "brx": "Bodo", - "bs": "Bosnian", - "br": "Breton", - "en-GB": "British English", - "bg": "Bulgarian", - "my": "Burmese", - "en-CA": "Canadian English", - "fr-CA": "Canadian French", - "yue": "Cantonese", - "ca": "Catalan", - "ceb": "Cebuano", - "tzm": "Central Atlas Tamazight", - "ckb": "Central Kurdish", - "ce": "Chechen", - "chr": "Cherokee", - "cgg": "Chiga", - "zh": "Chinese", - "ksh": "Colognian", - "sw-CD": "Congo Swahili", - "kw": "Cornish", - "hr": "Croatian", - "cs": "Czech", - "da": "Danish", - "doi": "Dogri", - "dua": "Duala", - "nl": "Dutch", - "dz": "Dzongkha", - "ebu": "Embu", - "en": "English", - "et": "Estonian", - "pt-PT": "European Portuguese", - "ee": "Ewe", - "ewo": "Ewondo", - "fo": "Faroese", - "fil": "Filipino", - "fi": "Finnish", - "nl-BE": "Flemish", - "fr": "French", - "fur": "Friulian", - "ff": "Fulah", - "gl": "Galician", - "lg": "Ganda", - "ka": "Georgian", - "de": "German", - "el": "Greek", - "gu": "Gujarati", - "guz": "Gusii", - "ha": "Hausa", - "haw": "Hawaiian", - "he": "Hebrew", - "hi": "Hindi", - "hu": "Hungarian", - "is": "Icelandic", - "ig": "Igbo", - "smn": "Inari Sami", - "id": "Indonesian", - "ga": "Irish", - "it": "Italian", - "ja": "Japanese", - "jv": "Javanese", - "dyo": "Jola-Fonyi", - "kea": "Kabuverdianu", - "kab": "Kabyle", - "kkj": "Kako", - "kl": "Kalaallisut", - "kln": "Kalenjin", - "kam": "Kamba", - "kn": "Kannada", - "ks": "Kashmiri", - "kk": "Kazakh", - "km": "Khmer", - "ki": "Kikuyu", - "rw": "Kinyarwanda", - "kok": "Konkani", - "ko": "Korean", - "khq": "Koyra Chiini", - "ses": "Koyraboro Senni", - "ku": "Kurdish", - "nmg": "Kwasio", - "ky": "Kyrgyz", - "lkt": "Lakota", - "lag": "Langi", - "lo": "Lao", - "es-419": "Latin American Spanish", - "lv": "Latvian", - "ln": "Lingala", - "lt": "Lithuanian", - "nds": "Low German", - "dsb": "Lower Sorbian", - "lu": "Luba-Katanga", - "luo": "Luo", - "lb": "Luxembourgish", - "luy": "Luyia", - "mk": "Macedonian", - "jmc": "Machame", - "mai": "Maithili", - "mgh": "Makhuwa-Meetto", - "kde": "Makonde", - "mg": "Malagasy", - "ms": "Malay", - "ml": "Malayalam", - "mt": "Maltese", - "mni": "Manipuri", - "mi": "MÄori", - "mr": "Marathi", - "mas": "Masai", - "mzn": "Mazanderani", - "mer": "Meru", - "mgo": "Metaʼ", - "es-MX": "Mexican Spanish", - "ro-MD": "Moldavian", - "mn": "Mongolian", - "mfe": "Morisyen", - "mua": "Mundang", - "naq": "Nama", - "ne": "Nepali", - "nnh": "Ngiemboon", - "jgo": "Ngomba", - "pcm": "Nigerian Pidgin", - "nd": "North Ndebele", - "lrc": "Northern Luri", - "se": "Northern Sami", - "no": "Norwegian", - "nb": "Norwegian BokmÃ¥l", - "nn": "Norwegian Nynorsk", - "nus": "Nuer", - "nyn": "Nyankole", - "or": "Odia", - "om": "Oromo", - "os": "Ossetic", - "ps": "Pashto", - "fa": "Persian", - "pl": "Polish", - "pt": "Portuguese", - "pa": "Punjabi", - "qu": "Quechua", - "ro": "Romanian", - "rm": "Romansh", - "rof": "Rombo", - "rn": "Rundi", - "ru": "Russian", - "rwk": "Rwa", - "saq": "Samburu", - "sg": "Sango", - "sbp": "Sangu", - "sa": "Sanskrit", - "sat": "Santali", - "gd": "Scottish Gaelic", - "seh": "Sena", - "sr": "Serbian", - "ksb": "Shambala", - "sn": "Shona", - "ii": "Sichuan Yi", - "zh-Hans": "Simplified Chinese", - "sd": "Sindhi", - "si": "Sinhala", - "sk": "Slovak", - "sl": "Slovenian", - "xog": "Soga", - "so": "Somali", - "es": "Spanish", - "zgh": "Standard Moroccan Tamazight", - "su": "Sundanese", - "sw": "Swahili", - "sv": "Swedish", - "fr-CH": "Swiss French", - "gsw": "Swiss German", - "de-CH": "Swiss High German", - "shi": "Tachelhit", - "dav": "Taita", - "tg": "Tajik", - "ta": "Tamil", - "twq": "Tasawaq", - "tt": "Tatar", - "te": "Telugu", - "teo": "Teso", - "th": "Thai", - "bo": "Tibetan", - "ti": "Tigrinya", - "to": "Tongan", - "zh-Hant": "Traditional Chinese", - "tr": "Turkish", - "tk": "Turkmen", - "uk": "Ukrainian", - "hsb": "Upper Sorbian", - "ur": "Urdu", - "ug": "Uyghur", - "uz": "Uzbek", - "vai": "Vai", - "vi": "Vietnamese", - "vun": "Vunjo", - "wa": "Walloon", - "wae": "Walser", - "cy": "Welsh", - "nds-NL": "West Low German", - "fy": "Western Frisian", - "wo": "Wolof", - "xh": "Xhosa", - "sah": "Yakut", - "yav": "Yangben", - "yi": "Yiddish", - "yo": "Yoruba", - "dje": "Zarma", - "zu": "Zulu" -}
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/en.json b/vendor/commerceguys/intl/resources/language/en.json index 46da5d206..bd9fad408 100644 --- a/vendor/commerceguys/intl/resources/language/en.json +++ b/vendor/commerceguys/intl/resources/language/en.json @@ -76,6 +76,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesian", + "iu": "Inuktitut", "ga": "Irish", "it": "Italian", "ja": "Japanese", @@ -83,6 +84,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -124,7 +126,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -139,6 +141,7 @@ "ne": "Nepali", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -169,6 +172,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/es-419.json b/vendor/commerceguys/intl/resources/language/es-419.json index 029b3d65a..937759e9d 100644 --- a/vendor/commerceguys/intl/resources/language/es-419.json +++ b/vendor/commerceguys/intl/resources/language/es-419.json @@ -92,6 +92,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -99,6 +100,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -130,7 +132,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -150,6 +152,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -179,6 +182,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-AR.json b/vendor/commerceguys/intl/resources/language/es-AR.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-AR.json +++ b/vendor/commerceguys/intl/resources/language/es-AR.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-BO.json b/vendor/commerceguys/intl/resources/language/es-BO.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-BO.json +++ b/vendor/commerceguys/intl/resources/language/es-BO.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-CL.json b/vendor/commerceguys/intl/resources/language/es-CL.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-CL.json +++ b/vendor/commerceguys/intl/resources/language/es-CL.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-CO.json b/vendor/commerceguys/intl/resources/language/es-CO.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-CO.json +++ b/vendor/commerceguys/intl/resources/language/es-CO.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-CR.json b/vendor/commerceguys/intl/resources/language/es-CR.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-CR.json +++ b/vendor/commerceguys/intl/resources/language/es-CR.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-DO.json b/vendor/commerceguys/intl/resources/language/es-DO.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-DO.json +++ b/vendor/commerceguys/intl/resources/language/es-DO.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-EC.json b/vendor/commerceguys/intl/resources/language/es-EC.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-EC.json +++ b/vendor/commerceguys/intl/resources/language/es-EC.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-GT.json b/vendor/commerceguys/intl/resources/language/es-GT.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-GT.json +++ b/vendor/commerceguys/intl/resources/language/es-GT.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-HN.json b/vendor/commerceguys/intl/resources/language/es-HN.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-HN.json +++ b/vendor/commerceguys/intl/resources/language/es-HN.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-MX.json b/vendor/commerceguys/intl/resources/language/es-MX.json index 476a91017..8fad74b24 100644 --- a/vendor/commerceguys/intl/resources/language/es-MX.json +++ b/vendor/commerceguys/intl/resources/language/es-MX.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-NI.json b/vendor/commerceguys/intl/resources/language/es-NI.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-NI.json +++ b/vendor/commerceguys/intl/resources/language/es-NI.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-PA.json b/vendor/commerceguys/intl/resources/language/es-PA.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-PA.json +++ b/vendor/commerceguys/intl/resources/language/es-PA.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-PE.json b/vendor/commerceguys/intl/resources/language/es-PE.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-PE.json +++ b/vendor/commerceguys/intl/resources/language/es-PE.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-PR.json b/vendor/commerceguys/intl/resources/language/es-PR.json index 0c4023387..7dd194728 100644 --- a/vendor/commerceguys/intl/resources/language/es-PR.json +++ b/vendor/commerceguys/intl/resources/language/es-PR.json @@ -92,6 +92,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -99,6 +100,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -130,7 +132,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -150,6 +152,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -179,6 +182,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-PY.json b/vendor/commerceguys/intl/resources/language/es-PY.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-PY.json +++ b/vendor/commerceguys/intl/resources/language/es-PY.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-SV.json b/vendor/commerceguys/intl/resources/language/es-SV.json index 0c4023387..7dd194728 100644 --- a/vendor/commerceguys/intl/resources/language/es-SV.json +++ b/vendor/commerceguys/intl/resources/language/es-SV.json @@ -92,6 +92,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -99,6 +100,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -130,7 +132,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -150,6 +152,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -179,6 +182,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es-US.json b/vendor/commerceguys/intl/resources/language/es-US.json index 853bb9ceb..e269f3083 100644 --- a/vendor/commerceguys/intl/resources/language/es-US.json +++ b/vendor/commerceguys/intl/resources/language/es-US.json @@ -30,7 +30,7 @@ "bs": "bosnio", "br": "bretón", "bg": "búlgaro", - "kab": "cabila", + "kab": "cabilio", "ks": "cachemiro", "kn": "canarés", "yue": "cantonés", @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -121,7 +123,7 @@ "lv": "letón", "ln": "lingala", "lt": "lituano", - "lrc": "lorà septentrional", + "lrc": "lorà del norte", "lu": "luba-katanga", "luo": "Luo", "lb": "luxemburgués", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -146,11 +148,12 @@ "mn": "mongol", "mua": "mundang", "naq": "nama", - "nd": "ndebele septentrional", + "nd": "ndebele del norte", "nl": "neerlandés", "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -174,12 +177,13 @@ "rwk": "rwa", "sah": "sakha", "saq": "samburu", - "smn": "sami inari", - "se": "sami septentrional", + "smn": "sami de Inari", + "se": "sami del norte", "sg": "sango", "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", @@ -193,7 +197,7 @@ "sw-CD": "swahili del Congo", "th": "tailandés", "dav": "taita", - "tzm": "tamazight del Atlas Central", + "tzm": "tamazight del Marruecos Central", "zgh": "tamazight estándar marroquÃ", "ta": "tamil", "tt": "tártaro", diff --git a/vendor/commerceguys/intl/resources/language/es-VE.json b/vendor/commerceguys/intl/resources/language/es-VE.json index ffcd98e5c..d3b295e6c 100644 --- a/vendor/commerceguys/intl/resources/language/es-VE.json +++ b/vendor/commerceguys/intl/resources/language/es-VE.json @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malabar", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/es.json b/vendor/commerceguys/intl/resources/language/es.json index 5e06f3ae2..34841c1b6 100644 --- a/vendor/commerceguys/intl/resources/language/es.json +++ b/vendor/commerceguys/intl/resources/language/es.json @@ -31,7 +31,7 @@ "br": "bretón", "bg": "búlgaro", "kab": "cabila", - "ks": "cachemiro", + "ks": "cachemir", "kn": "canarés", "yue": "cantonés", "ca": "catalán", @@ -93,6 +93,7 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadiense", + "iu": "inuktitut", "ga": "irlandés", "is": "islandés", "it": "italiano", @@ -100,6 +101,7 @@ "jv": "javanés", "km": "jemer", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -131,7 +133,7 @@ "mai": "maithili", "mgh": "makhuwa-meetto", "kde": "makonde", - "ml": "malayalam", + "ml": "malayálam", "ms": "malayo", "mg": "malgache", "mt": "maltés", @@ -151,6 +153,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruego", "nb": "noruego bokmal", "nn": "noruego nynorsk", @@ -180,6 +183,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/et.json b/vendor/commerceguys/intl/resources/language/et.json index ae8ff3a44..6f66f2041 100644 --- a/vendor/commerceguys/intl/resources/language/et.json +++ b/vendor/commerceguys/intl/resources/language/et.json @@ -63,6 +63,7 @@ "smn": "Inari saami", "id": "indoneesia", "en": "inglise", + "iu": "inuktituti", "is": "islandi", "it": "itaalia", "ja": "jaapani", @@ -72,6 +73,7 @@ "yo": "joruba", "kab": "kabiili", "kea": "kabuverdianu", + "kgp": "kaingangi", "kkj": "kako", "kln": "kalendžini", "kam": "kamba", @@ -138,6 +140,7 @@ "jgo": "ngomba", "pcm": "Nigeeria pidžinkeel", "nyn": "njankole", + "yrl": "njengatu", "no": "norra", "nb": "norra bokmÃ¥l", "nus": "nueri", @@ -167,6 +170,7 @@ "sbp": "sangu", "sa": "sanskriti", "sat": "santali", + "sc": "sardi", "ceb": "sebu", "seh": "sena", "sr": "serbia", diff --git a/vendor/commerceguys/intl/resources/language/eu.json b/vendor/commerceguys/intl/resources/language/eu.json index 4278a76bb..ff4c449fd 100644 --- a/vendor/commerceguys/intl/resources/language/eu.json +++ b/vendor/commerceguys/intl/resources/language/eu.json @@ -33,13 +33,13 @@ "en-GB": "Britania Handiko ingeles", "bg": "bulgariera", "kea": "Cabo Verdeko kreolera", - "ceb": "cebuera", - "cgg": "chigera", + "ceb": "cebuanoera", + "cgg": "chiga", "da": "daniera", - "doi": "Dogri", + "doi": "dogria", "dua": "dualera", "dz": "dzongkha", - "ebu": "embua", + "ebu": "embuera", "tzm": "Erdialdeko Atlaseko amazigera", "ckb": "erdialdeko kurduera", "rm": "erretorromaniera", @@ -61,11 +61,10 @@ "dyo": "fonyi jolera", "fr": "frantses", "fy": "frisiera", - "fur": "friuliera", + "fur": "fruilera", "ff": "fula", "cy": "gales", "gl": "galiziera", - "lg": "gandera", "ka": "georgiera", "hsb": "goi-sorabiera", "el": "greziera", @@ -81,6 +80,7 @@ "smn": "Inariko samiera", "id": "indonesiera", "en": "ingeles", + "iu": "inuktitut", "lrc": "iparraldeko lurera", "nd": "iparraldeko ndebeleera", "se": "iparraldeko samiera", @@ -91,6 +91,7 @@ "jv": "javera", "yo": "jorubera", "kab": "kabilera", + "kgp": "kaingang", "kkj": "kako", "kln": "kalenjinera", "kam": "kambera", @@ -124,6 +125,7 @@ "lv": "letoniera", "ln": "lingala", "lt": "lituaniera", + "lg": "luganda", "luy": "luhyera", "luo": "luoera", "lb": "luxenburgera", @@ -153,6 +155,7 @@ "ne": "nepalera", "nnh": "ngiemboonera", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "Nigeriako pidgina", "no": "norvegiera", "nus": "nuerera", @@ -174,6 +177,7 @@ "sbp": "sanguera", "sa": "sanskrito", "sat": "santalera", + "sc": "sardiniera", "seh": "senera", "sr": "serbiera", "ksb": "shambalera", diff --git a/vendor/commerceguys/intl/resources/language/fa-AF.json b/vendor/commerceguys/intl/resources/language/fa-AF.json index 5dfec0c17..70d54d12a 100644 --- a/vendor/commerceguys/intl/resources/language/fa-AF.json +++ b/vendor/commerceguys/intl/resources/language/fa-AF.json @@ -42,6 +42,7 @@ "it": "ایتالوی", "ig": "ایگبویی", "smn": "ایناری سامی", + "iu": "اینوکتیتوت", "bas": "باسایی", "eu": "باسکی", "ksf": "باÙیایی", @@ -98,6 +99,7 @@ "rn": "روندیایی", "dje": "زرما", "zu": "زولویی", + "sc": "ساردینیایی", "nds-NL": "ساکسونی سÙÙ„ÛŒ", "saq": "سامبورو", "se": "سامی شمالی", @@ -223,5 +225,7 @@ "yi": "یدی", "yo": "یوروبایی", "el": "یونانی", - "ii": "یی سیچوان" + "ii": "یی سیچوان", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/fa.json b/vendor/commerceguys/intl/resources/language/fa.json index ba1dd753c..b224e47a4 100644 --- a/vendor/commerceguys/intl/resources/language/fa.json +++ b/vendor/commerceguys/intl/resources/language/fa.json @@ -42,6 +42,7 @@ "is": "ایسلندی", "ig": "ایگبویی", "smn": "ایناری سامی", + "iu": "اینوکتیتوت", "bas": "باسایی", "eu": "باسکی", "ksf": "باÙیایی", @@ -98,6 +99,7 @@ "dje": "زرما", "zu": "زولویی", "ja": "ژاپنی", + "sc": "ساردینیایی", "nds-NL": "ساکسونی سÙÙ„ÛŒ", "saq": "سامبورو", "se": "سامی شمالی", @@ -223,5 +225,7 @@ "yi": "یدی", "yo": "یوروبایی", "el": "یونانی", - "ii": "یی سیچوان" + "ii": "یی سیچوان", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/fi.json b/vendor/commerceguys/intl/resources/language/fi.json index 069acd906..325151cec 100644 --- a/vendor/commerceguys/intl/resources/language/fi.json +++ b/vendor/commerceguys/intl/resources/language/fi.json @@ -60,6 +60,7 @@ "ga": "iiri", "smn": "inarinsaame", "id": "indonesia", + "iu": "inuktitut", "is": "islanti", "it": "italia", "de-AT": "itävallansaksa", @@ -70,6 +71,7 @@ "dyo": "jola-fonyi", "yo": "joruba", "kab": "kabyyli", + "kgp": "kaingang", "kkj": "kako", "kl": "kalaallisut", "kln": "kalenjin", @@ -136,6 +138,7 @@ "mfe": "morisyen", "mua": "mundang", "naq": "nama", + "yrl": "ñeengatú", "ne": "nepali", "nnh": "ngiemboon", "jgo": "ngomba", @@ -170,6 +173,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardi", "seh": "sena", "sr": "serbia", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/fil.json b/vendor/commerceguys/intl/resources/language/fil.json index 1604445ef..08f31dcf6 100644 --- a/vendor/commerceguys/intl/resources/language/fil.json +++ b/vendor/commerceguys/intl/resources/language/fil.json @@ -75,6 +75,7 @@ "ig": "Igbo", "smn": "Inari Sami", "id": "Indonesian", + "iu": "Inuktitut", "en": "Ingles", "en-GB": "Ingles na British", "en-AU": "Ingles ng Australia", @@ -86,6 +87,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -128,7 +130,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -141,6 +143,7 @@ "mua": "Mundang", "naq": "Nama", "ne": "Nepali", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "no": "Norwegian", "nb": "Norwegian BokmÃ¥l", @@ -171,6 +174,7 @@ "sat": "Santali", "sg": "Sango", "sbp": "Sangu", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/fr-BE.json b/vendor/commerceguys/intl/resources/language/fr-BE.json index 86f47c255..3b8e1fb47 100644 --- a/vendor/commerceguys/intl/resources/language/fr-BE.json +++ b/vendor/commerceguys/intl/resources/language/fr-BE.json @@ -36,6 +36,7 @@ "br": "breton", "bg": "bulgare", "ks": "cachemiri", + "kgp": "caingangue", "yue": "cantonais", "kea": "capverdien", "ca": "catalan", @@ -90,6 +91,7 @@ "sah": "iakoute", "ig": "igbo", "id": "indonésien", + "iu": "inuktitut", "ga": "irlandais", "sbp": "isangu", "is": "islandais", @@ -149,6 +151,7 @@ "nnh": "ngiemboon", "jgo": "ngomba", "nmg": "ngoumba", + "yrl": "nheengatou", "no": "norvégien", "nb": "norvégien bokmÃ¥l", "nn": "norvégien nynorsk", @@ -181,6 +184,7 @@ "sg": "sango", "sa": "sanskrit", "sat": "santali", + "sc": "sarde", "sr": "serbe", "ksb": "shambala", "sn": "shona", diff --git a/vendor/commerceguys/intl/resources/language/fr-CA.json b/vendor/commerceguys/intl/resources/language/fr-CA.json index a19553bed..12503d16f 100644 --- a/vendor/commerceguys/intl/resources/language/fr-CA.json +++ b/vendor/commerceguys/intl/resources/language/fr-CA.json @@ -34,6 +34,7 @@ "bs": "bosniaque", "br": "breton", "bg": "bulgare", + "kgp": "caingangue", "yue": "cantonais", "kea": "capverdien", "ca": "catalan", @@ -88,6 +89,7 @@ "sah": "iakoute", "ig": "igbo", "id": "indonésien", + "iu": "inuktitut", "ga": "irlandais", "is": "islandais", "it": "italien", @@ -149,6 +151,7 @@ "ne": "népalais", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "nheengatou", "nyn": "nkole", "no": "norvégien", "nb": "norvégien bokmÃ¥l", @@ -182,6 +185,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sarde", "sr": "serbe", "sn": "shona", "sd": "sindhi", diff --git a/vendor/commerceguys/intl/resources/language/fr-CH.json b/vendor/commerceguys/intl/resources/language/fr-CH.json index 294885318..e4ac7a52c 100644 --- a/vendor/commerceguys/intl/resources/language/fr-CH.json +++ b/vendor/commerceguys/intl/resources/language/fr-CH.json @@ -36,6 +36,7 @@ "br": "breton", "bg": "bulgare", "ks": "cachemiri", + "kgp": "caingangue", "yue": "cantonais", "kea": "capverdien", "ca": "catalan", @@ -90,6 +91,7 @@ "sah": "iakoute", "ig": "igbo", "id": "indonésien", + "iu": "inuktitut", "ga": "irlandais", "sbp": "isangu", "is": "islandais", @@ -149,6 +151,7 @@ "nnh": "ngiemboon", "jgo": "ngomba", "nmg": "ngoumba", + "yrl": "nheengatou", "no": "norvégien", "nb": "norvégien bokmÃ¥l", "nn": "norvégien nynorsk", @@ -181,6 +184,7 @@ "sg": "sango", "sa": "sanskrit", "sat": "santali", + "sc": "sarde", "sr": "serbe", "ksb": "shambala", "sn": "shona", diff --git a/vendor/commerceguys/intl/resources/language/fr.json b/vendor/commerceguys/intl/resources/language/fr.json index c305f03dd..06dea39ce 100644 --- a/vendor/commerceguys/intl/resources/language/fr.json +++ b/vendor/commerceguys/intl/resources/language/fr.json @@ -36,6 +36,7 @@ "br": "breton", "bg": "bulgare", "ks": "cachemiri", + "kgp": "caingangue", "yue": "cantonais", "kea": "capverdien", "ca": "catalan", @@ -90,6 +91,7 @@ "sah": "iakoute", "ig": "igbo", "id": "indonésien", + "iu": "inuktitut", "ga": "irlandais", "sbp": "isangu", "is": "islandais", @@ -149,6 +151,7 @@ "nnh": "ngiemboon", "jgo": "ngomba", "nmg": "ngoumba", + "yrl": "nheengatou", "no": "norvégien", "nb": "norvégien bokmÃ¥l", "nn": "norvégien nynorsk", @@ -181,6 +184,7 @@ "sg": "sango", "sa": "sanskrit", "sat": "santali", + "sc": "sarde", "sr": "serbe", "ksb": "shambala", "sn": "shona", diff --git a/vendor/commerceguys/intl/resources/language/ga.json b/vendor/commerceguys/intl/resources/language/ga.json index 9c6c0a3f5..3fa665834 100644 --- a/vendor/commerceguys/intl/resources/language/ga.json +++ b/vendor/commerceguys/intl/resources/language/ga.json @@ -1,7 +1,7 @@ { "ak": "Acáinis", "af": "Afracáinis", - "agq": "Aghem", + "agq": "Aigeimis", "hy": "Airméinis", "sq": "Albáinis", "am": "Amáiris", @@ -10,7 +10,7 @@ "as": "Asaimis", "az": "Asarbaiseáinis", "ast": "Astúiris", - "asa": "Asu", + "asa": "Asúis", "ksf": "Baifiais", "bm": "Bambairis", "bas": "Basáis", @@ -22,7 +22,8 @@ "en-GB": "Béarla Briotanach", "en-CA": "Béarla Ceanadach", "bem": "Beimbis", - "bez": "Béinis", + "bez": "Beinis", + "nb": "Bocmál", "brx": "Bódóis", "bs": "Boisnis", "cy": "Breatnais", @@ -38,10 +39,12 @@ "kk": "Casaicis", "ca": "Catalóinis", "qu": "Ceatsuais", - "cgg": "CÃgis", + "cgg": "Chiga", + "ebu": "Ciambúis", "km": "Ciméiris", "rw": "Ciniaruaindis", "ki": "Ciocúis", + "lag": "Ciolaingis", "ky": "Cirgisis", "ksh": "Coilsis", "ku": "Coirdis", @@ -54,12 +57,11 @@ "hr": "Cróitis", "nmg": "Cuaiseois", "da": "Danmhairgis", - "doi": "Dogri", + "doi": "Dóigris", "dua": "Duailis", "ee": "Éabhais", "ewo": "Éabhandóis", "he": "Eabhrais", - "ebu": "Eambúis", "et": "Eastóinis", "fo": "Faróis", "fil": "FilipÃnis", @@ -80,7 +82,7 @@ "yi": "Giúdais", "el": "Gréigis", "gu": "Gúisearáitis", - "guz": "Gúisis", + "guz": "GúsaÃs", "ha": "Hásais", "haw": "Haváis", "hi": "Hiondúis", @@ -89,15 +91,15 @@ "id": "Indinéisis", "it": "Iodáilis", "ig": "Ãogbóis", - "dyo": "Ióla-FainÃs", + "iu": "Ionúitis", "no": "Ioruais", - "nb": "Ioruais BokmÃ¥l", "is": "Ãoslainnis", "ii": "Ãs Shichuan", + "dyo": "Jóla-Fainis", + "kgp": "Kaingang", "kl": "Kalaallisut", "kln": "Kalenjin", "lkt": "Lacótais", - "lag": "Láingis", "lv": "Laitvis", "lo": "Laoisis", "ln": "Liongáilis", @@ -105,14 +107,13 @@ "lu": "Lúba-Cataingis", "lb": "Lucsambuirgis", "lg": "Lugandais", + "lrc": "Lúiris an Tuaiscirt", "luo": "Lúóis", - "lrc": "Luri Thuaidh", "luy": "Luyia", "mk": "Macadóinis", "jmc": "Machame", "ml": "Mailéalaimis", "mai": "Maitilis", - "mgh": "Makhuwa-Meetto", "kde": "Makonde", "ms": "Malaeis", "mg": "Malagáisis", @@ -122,21 +123,23 @@ "mr": "Maraitis", "mas": "Másais", "mzn": "Mázandaráinis", + "mgh": "Meiteo-Macuais", "mer": "Meru", "mgo": "Metaʼ", "ro-MD": "Moldáivis", "mn": "Mongóilis", "mfe": "Morisyen", "mua": "Mundang", + "nd": "N-deibéilis an Tuaiscirt", "naq": "Nama", - "nd": "Ndeibéilis an Tuaiscirt", "ne": "Neipeailis", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nyn": "Niancóilis", "nn": "Nua-Ioruais", "nus": "Nuairis", - "or": "OirÃsis", + "or": "Odia", "os": "Oiséitis", "nl": "Ollainnis", "om": "Oraimis", @@ -156,8 +159,9 @@ "rwk": "Rwa", "sah": "Sachais", "nds-NL": "Sacsainis Ãochtarach", + "se": "Sáimis an Tuaiscirt", "smn": "Sáimis Inari", - "se": "Sáimis Thuaidh", + "sc": "SairdÃnis", "saq": "Samburu", "sg": "Sangóis", "sbp": "Sangu", @@ -196,11 +200,11 @@ "sw": "SvahaÃlis", "sw-CD": "SvahaÃlis an Chongó", "shi": "Tachelhit", - "tg": "TáidsÃcis", + "tg": "TaidsÃcis", "dav": "Taita", "ta": "Tamailis", + "tzm": "Tamaisis Atlais Láir", "zgh": "Tamaisis Chaighdeánach Mharacó", - "tzm": "Tamazight Atlais Láir", "twq": "Tasawaq", "tt": "Tatairis", "th": "Téalainnis", @@ -216,7 +220,7 @@ "uz": "Úisbéiceastáinis", "hu": "Ungáiris", "ur": "Urdúis", - "vai": "Vai", + "vai": "Vadhais", "wa": "Vallúnais", "vi": "VÃtneaimis", "wo": "Volaifis", diff --git a/vendor/commerceguys/intl/resources/language/gd.json b/vendor/commerceguys/intl/resources/language/gd.json index 311c76875..dbbf624d9 100644 --- a/vendor/commerceguys/intl/resources/language/gd.json +++ b/vendor/commerceguys/intl/resources/language/gd.json @@ -91,10 +91,12 @@ "ig": "Igbo", "id": "Innd-Innsis", "is": "Innis Tìlis", + "iu": "Inuktitut", "yi": "Iùdhais", "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -145,6 +147,7 @@ "ne": "Neapà lais", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "no": "Nirribhis", "nus": "Nuer", "nyn": "Nyankole", @@ -173,6 +176,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sà rdais", "ja": "Seapanais", "cs": "Seicis", "sr": "Sèirbis", diff --git a/vendor/commerceguys/intl/resources/language/gl.json b/vendor/commerceguys/intl/resources/language/gl.json index da381af78..31d7cad58 100644 --- a/vendor/commerceguys/intl/resources/language/gl.json +++ b/vendor/commerceguys/intl/resources/language/gl.json @@ -48,7 +48,7 @@ "mfe": "crioulo mauriciano", "hr": "croata", "da": "dinamarqués", - "doi": "Dogri", + "doi": "dogri", "dua": "duala", "dz": "dzongkha", "ebu": "embu", @@ -91,11 +91,13 @@ "en-AU": "inglés australiano", "en-GB": "inglés británico", "en-CA": "inglés canadense", + "iu": "inuktitut", "yo": "ioruba", "ga": "irlandés", "is": "islandés", "it": "italiano", "dyo": "jola-fonyi", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -149,6 +151,7 @@ "ne": "nepalÃ", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "noruegués", "nb": "noruegués bokmÃ¥l", "nn": "noruegués nynorsk", @@ -178,6 +181,7 @@ "sbp": "sangu", "sa": "sánscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/gsw.json b/vendor/commerceguys/intl/resources/language/gsw.json index 825347bb6..99d5faf1b 100644 --- a/vendor/commerceguys/intl/resources/language/gsw.json +++ b/vendor/commerceguys/intl/resources/language/gsw.json @@ -63,6 +63,7 @@ "is": "Iisländisch", "smn": "Inari-Samisch", "id": "Indonesisch", + "iu": "Inukitut", "it": "Italiänisch", "sah": "Jakutisch", "ja": "Japanisch", @@ -71,6 +72,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabylisch", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -126,6 +128,7 @@ "ne": "Nepalesisch", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nl": "Niderländisch", "dsb": "Nidersorbisch", "nds": "Nidertüütsch", @@ -162,6 +165,7 @@ "sbp": "Sangu", "sa": "Sanschkrit", "sat": "Santali", + "sc": "Sardisch", "sn": "Schhona", "gd": "Schottisch-Gäälisch", "es": "Schpanisch", diff --git a/vendor/commerceguys/intl/resources/language/gu.json b/vendor/commerceguys/intl/resources/language/gu.json index bc8b47422..a768ba54c 100644 --- a/vendor/commerceguys/intl/resources/language/gu.json +++ b/vendor/commerceguys/intl/resources/language/gu.json @@ -16,6 +16,7 @@ "ig": "ઇગà«àª¬à«‹", "it": "ઇટાલિયન", "smn": "ઇનારી સામી", + "iu": "ઇનà«àª•àª¿àªŸà«‚ટ", "id": "ઇનà«àª¡à«‹àª¨à«‡àª¶àª¿àª¯àª¨", "ewo": "ઇવોનà«àª¡à«‹", "ee": "ઈવ", @@ -201,6 +202,7 @@ "sr": "સરà«àª¬àª¿àª¯àª¨", "sbp": "સાંગà«", "sg": "સાંગો", + "sc": "સારà«àª¦àª¿àª¨àª¿àª¯àª¨", "sd": "સિંધી", "si": "સિંહાલી", "ii": "સિચà«àª†àª¨ યી", @@ -223,5 +225,7 @@ "haw": "હવાઇયન", "hi": "હિનà«àª¦à«€", "he": "હીબà«àª°à«", - "ha": "હૌસા" + "ha": "હૌસા", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/he.json b/vendor/commerceguys/intl/resources/language/he.json index 05ab7514c..135e7b7a8 100644 --- a/vendor/commerceguys/intl/resources/language/he.json +++ b/vendor/commerceguys/intl/resources/language/he.json @@ -2,7 +2,7 @@ "ee": "×ווה", "ewo": "××•×•× ×“×•", "uz": "×וזבקית", - "ug": "×ויגור", + "ug": "×ויגורית", "os": "×וסטית", "uk": "×וקר××™× ×™×ª", "ur": "×ורדו", @@ -13,6 +13,7 @@ "it": "×יטלקית", "smn": "××™× ×רי ס×מי", "id": "××™× ×“×•× ×–×™×ª", + "iu": "××™× ×•×§×˜×™×˜×•×˜", "is": "××™×¡×œ× ×“×™×ª", "ga": "×ירית", "sq": "××œ×‘× ×™×ª", @@ -164,6 +165,7 @@ "ii": "סצ׳ו×ן ×™×™", "nds-NL": "×¡×§×¡×•× ×™×ª תחתית", "sr": "סרבית", + "sc": "×¡×¨×“×™× ×™×ª", "he": "עברית", "ar": "ערבית", "fo": "פ×רו×זית", @@ -199,6 +201,7 @@ "kw": "×§×•×¨× ×™×ª", "kk": "קזחית", "ca": "קטל×× ×™×ª", + "kgp": "×§×™×™× ×’×× ×’", "ki": "קיקויו", "ky": "קירגיזית", "rn": "×§×™×¨×•× ×“×™", @@ -223,5 +226,6 @@ "th": "ת×ית", "ti": "×ª×™×’×¨×™× ×™×ª", "tzm": "תמ×זיגת של מרכז מרוקו", - "zgh": "תמזיע׳ת מרוק×ית ×ª×§× ×™×ª" + "zgh": "תמזיע׳ת מרוק×ית ×ª×§× ×™×ª", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/hi.json b/vendor/commerceguys/intl/resources/language/hi.json index 3e5c234bc..96bc4941e 100644 --- a/vendor/commerceguys/intl/resources/language/hi.json +++ b/vendor/commerceguys/intl/resources/language/hi.json @@ -16,6 +16,7 @@ "id": "इंडोनेशियाई", "it": "इतालवी", "smn": "इनारी सामी", + "iu": "इनूकीटूतà¥", "ewo": "इवोनà¥à¤¡à¥‹", "ig": "ईगà¥à¤¬à¥‹", "ee": "ईवे", @@ -83,7 +84,7 @@ "to": "टोंगन", "nl": "डच", "da": "डेनिश", - "doi": "डोगà¥à¤°à¥€", + "doi": "डोगरी", "ta": "तमिल", "tg": "ताजिक", "tt": "तातार", @@ -199,6 +200,7 @@ "zh-Hans": "सरलीकृत चीनी", "sr": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤ˆ", "sg": "सांगो", + "sc": "सारà¥à¤¦à¤¿à¤¨à¤¿à¤¯à¤¨", "sd": "सिंधी", "si": "सिंहली", "ii": "सिचà¥à¤†à¤¨ यी", @@ -223,5 +225,7 @@ "haw": "हवाई", "hi": "हिनà¥à¤¦à¥€", "he": "हिबà¥à¤°à¥‚", - "ha": "हौसा" + "ha": "हौसा", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/hr.json b/vendor/commerceguys/intl/resources/language/hr.json index dd3d930cc..f73223316 100644 --- a/vendor/commerceguys/intl/resources/language/hr.json +++ b/vendor/commerceguys/intl/resources/language/hr.json @@ -67,6 +67,7 @@ "ig": "igbo", "smn": "inari sami", "id": "indonezijski", + "iu": "inuktitut", "ga": "irski", "is": "islandski", "sah": "jakutski", @@ -76,6 +77,7 @@ "dyo": "jola-fonyi", "yo": "jorupski", "kab": "kabilski", + "kgp": "Kaingang", "kkj": "kako", "kl": "kalaallisut", "kln": "kalenjin", @@ -141,6 +143,7 @@ "ne": "nepalski", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "nl": "nizozemski", "no": "norveÅ¡ki", @@ -168,6 +171,7 @@ "sbp": "sangu", "sa": "sanskrtski", "sat": "santalski", + "sc": "sardski", "seh": "sena", "ksb": "shambala", "sn": "shona", diff --git a/vendor/commerceguys/intl/resources/language/hu.json b/vendor/commerceguys/intl/resources/language/hu.json index 794e8b873..b0b5ce66e 100644 --- a/vendor/commerceguys/intl/resources/language/hu.json +++ b/vendor/commerceguys/intl/resources/language/hu.json @@ -69,6 +69,7 @@ "ig": "igbó", "smn": "inari számi", "id": "indonéz", + "iu": "inuktitut", "ga": "Ãr", "is": "izlandi", "yav": "jangben", @@ -79,6 +80,7 @@ "yo": "joruba", "kab": "kabije", "kea": "kabuverdianu", + "kgp": "Kaingang", "kkj": "kakó", "kln": "kalendzsin", "kam": "kamba", @@ -147,6 +149,7 @@ "nnh": "ngiemboon", "jgo": "ngomba", "nmg": "ngumba", + "yrl": "Nheengatu", "pcm": "nigériai pidgin", "no": "norvég", "nb": "norvég (bokmÃ¥l)", @@ -184,6 +187,7 @@ "sbp": "szangu", "sa": "szanszkrit", "sat": "szantáli", + "sc": "szardÃniai", "twq": "szavák", "ceb": "szebuano", "ii": "szecsuán ji", diff --git a/vendor/commerceguys/intl/resources/language/hy.json b/vendor/commerceguys/intl/resources/language/hy.json index 08b9f9c87..76c322c17 100644 --- a/vendor/commerceguys/intl/resources/language/hy.json +++ b/vendor/commerceguys/intl/resources/language/hy.json @@ -34,6 +34,7 @@ "guz": "Õ£Õ¸Ö‚Õ½Õ«", "nb": "Õ£Ö€Ö„Õ¡ÕµÕ«Õ¶ Õ¶Õ¸Ö€Õ¾Õ¥Õ£Õ¥Ö€Õ¥Õ¶", "da": "Õ¤Õ¡Õ¶Õ«Õ¥Ö€Õ¥Õ¶", + "doi": "Õ¤Õ¸Õ£Ö€Õ«", "dua": "Õ¤Õ¸Ö‚Õ¡Õ¬Õ¡", "he": "Õ¥Õ¢Ö€Õ¡ÕµÕ¥Ö€Õ¥Õ¶", "pt-PT": "Õ¥Õ¾Ö€Õ¸ÕºÕ¡Õ¯Õ¡Õ¶ ÕºÕ¸Ö€Õ¿Õ¸Ö‚Õ£Õ¡Õ¬Õ¥Ö€Õ¥Õ¶", @@ -55,6 +56,7 @@ "yi": "Õ«Õ¤Õ«Õ·", "smn": "Õ«Õ¶Õ¡Ö€Õ« Õ½Õ¡Õ¡Õ´Õ«", "id": "Õ«Õ¶Õ¤Õ¸Õ¶Õ¥Õ¦Õ¥Ö€Õ¥Õ¶", + "iu": "Õ«Õ¶Õ¸Ö‚Õ¯Õ¿Õ«Õ¿Õ¸Ö‚Õ¿", "ga": "Õ«Õ¼Õ¬Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶", "is": "Õ«Õ½Õ¬Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶", "es": "Õ«Õ½ÕºÕ¡Õ¶Õ¥Ö€Õ¥Õ¶", @@ -175,6 +177,7 @@ "sbp": "Õ½Õ¡Õ¶Õ£Õ¸Ö‚", "sa": "Õ½Õ¡Õ¶Õ½Õ¯Ö€Õ«Õ¿", "sat": "Õ½Õ¡Õ¶Õ¿Õ¡Õ¬Õ«", + "sc": "Õ½Õ¡Ö€Õ¤Õ«Õ¶Õ¥Ö€Õ¥Õ¶", "ceb": "Õ½Õ¥Õ¢Õ¸Ö‚Õ¥Ö€Õ¥Õ¶", "seh": "Õ½Õ¥Õ¶Õ¡", "sr": "Õ½Õ¥Ö€Õ¢Õ¥Ö€Õ¥Õ¶", @@ -223,5 +226,6 @@ "ff": "Ö†Õ¸Ö‚Õ¬Õ¡Õ°", "fr": "Ö†Ö€Õ¡Õ¶Õ½Õ¥Ö€Õ¥Õ¶", "fur": "Ö†Ö€Õ«Õ¸Ö‚Õ¬Õ«Õ¥Ö€Õ¥Õ¶", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/id.json b/vendor/commerceguys/intl/resources/language/id.json index a69c3117d..1e67d132b 100644 --- a/vendor/commerceguys/intl/resources/language/id.json +++ b/vendor/commerceguys/intl/resources/language/id.json @@ -62,6 +62,7 @@ "en-AU": "Inggris (Australia)", "en-GB": "Inggris (Inggris)", "en-CA": "Inggris (Kanada)", + "iu": "Inuktitut", "ga": "Irlandia", "is": "Islandia", "it": "Italia", @@ -76,6 +77,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -135,6 +137,7 @@ "ne": "Nepali", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "no": "Norwegia", "nus": "Nuer", "nyn": "Nyankole", @@ -166,6 +169,7 @@ "sbp": "Sangu", "sa": "Sanskerta", "sat": "Santali", + "sc": "Sardinia", "seh": "Sena", "sr": "Serbia", "ksb": "Shambala", diff --git a/vendor/commerceguys/intl/resources/language/is.json b/vendor/commerceguys/intl/resources/language/is.json index d4889902b..1e149d42a 100644 --- a/vendor/commerceguys/intl/resources/language/is.json +++ b/vendor/commerceguys/intl/resources/language/is.json @@ -60,6 +60,7 @@ "nl": "hollenska", "be": "hvÃtrússneska", "id": "indónesÃska", + "iu": "inúktitút", "ig": "Ãgbó", "ga": "Ãrska", "is": "Ãslenska", @@ -71,6 +72,7 @@ "dyo": "jola-fonyi", "yo": "jórúba", "kab": "kabÃle", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -132,6 +134,7 @@ "mer": "merú", "mgo": "meta’", "es-MX": "mexÃkósk spænska", + "ckb": "miðkúrdÃska", "ro-MD": "moldóvska", "mn": "mongólska", "mua": "mundang", @@ -139,6 +142,7 @@ "ne": "nepalska", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nÃgerÃskt pidgin", "nd": "norður-ndebele", "lrc": "norðurlúrÃ", @@ -168,6 +172,7 @@ "sbp": "sangú", "sa": "sanskrÃt", "sat": "santalÃ", + "sc": "sardÃnska", "seh": "sena", "sr": "serbneska", "sn": "shona", @@ -178,7 +183,6 @@ "gd": "skosk gelÃska", "sk": "slóvakÃska", "sl": "slóvenska", - "ckb": "sorani-kúrdÃska", "xog": "sóga", "so": "sómalska", "xh": "sósa", diff --git a/vendor/commerceguys/intl/resources/language/it.json b/vendor/commerceguys/intl/resources/language/it.json index 215e042ad..489a904cd 100644 --- a/vendor/commerceguys/intl/resources/language/it.json +++ b/vendor/commerceguys/intl/resources/language/it.json @@ -85,10 +85,12 @@ "en-AU": "inglese australiano", "en-GB": "inglese britannico", "en-CA": "inglese canadese", + "iu": "inuktitut", "ga": "irlandese", "is": "islandese", "it": "italiano", "dyo": "jola-fony", + "kgp": "kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -138,6 +140,7 @@ "ne": "nepalese", "jgo": "ngamambo", "nnh": "ngiemboon", + "yrl": "nheengatu", "no": "norvegese", "nb": "norvegese bokmÃ¥l", "nn": "norvegese nynorsk", @@ -169,6 +172,7 @@ "sbp": "sangu", "sa": "sanscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "serbo", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/ja.json b/vendor/commerceguys/intl/resources/language/ja.json index b627eaf09..9d03c991c 100644 --- a/vendor/commerceguys/intl/resources/language/ja.json +++ b/vendor/commerceguys/intl/resources/language/ja.json @@ -16,6 +16,7 @@ "it": "イタリア語", "yi": "イディッシュ語", "smn": "イナリ・サーミ語", + "iu": "イヌクティトット語", "ig": "イボ語", "id": "インドãƒã‚·ã‚¢èªž", "vai": "ヴァイ語", @@ -37,6 +38,7 @@ "nl": "オランダ語", "om": "オãƒãƒ¢èªž", "kea": "カーボベルデ・クレオール語", + "kgp": "カインガング語", "kkj": "カコ語", "kk": "カザフ語", "ks": "カシミール語", @@ -68,6 +70,7 @@ "kok": "コンカニ語", "sw-CD": "コンゴ・スワヒリ語", "sah": "サãƒèªž", + "sc": "サルデーニャ語", "dje": "ザルマ語", "sbp": "サング語", "sg": "サンゴ語", @@ -123,6 +126,7 @@ "to": "トンガ語", "pcm": "ナイジェリア・ピジン語", "naq": "ナマ語", + "yrl": "ニェエンガトゥ語", "nyn": "ニャンコレ語", "nus": "ヌエル語", "ne": "ãƒãƒ‘ール語", diff --git a/vendor/commerceguys/intl/resources/language/ka.json b/vendor/commerceguys/intl/resources/language/ka.json index 1380a98f3..be385762f 100644 --- a/vendor/commerceguys/intl/resources/language/ka.json +++ b/vendor/commerceguys/intl/resources/language/ka.json @@ -66,6 +66,7 @@ "smn": "ინáƒáƒ ი-სáƒáƒáƒ›áƒ£áƒ ი", "en": "ინგლისური", "id": "ინდáƒáƒœáƒ”ზიური", + "iu": "ინუკტიტუტი", "yo": "იáƒáƒ უბáƒ", "ga": "ირლáƒáƒœáƒ“იური", "is": "ისლáƒáƒœáƒ“იური", @@ -152,6 +153,7 @@ "sbp": "სáƒáƒœáƒ’უ", "sa": "სáƒáƒœáƒ¡áƒ™áƒ იტი", "sat": "სáƒáƒœáƒ¢áƒáƒšáƒ˜", + "sc": "სáƒáƒ დინიული", "ceb": "სებუáƒáƒœáƒ", "seh": "სენáƒ", "sr": "სერბული", @@ -223,5 +225,7 @@ "hr": "ხáƒáƒ ვáƒáƒ¢áƒ£áƒšáƒ˜", "haw": "ჰáƒáƒ•áƒáƒ˜áƒ£áƒ ი", "ha": "ჰáƒáƒ£áƒ¡áƒ", - "hi": "ჰინდი" + "hi": "ჰინდი", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/kk.json b/vendor/commerceguys/intl/resources/language/kk.json index fbb78db24..31684ee28 100644 --- a/vendor/commerceguys/intl/resources/language/kk.json +++ b/vendor/commerceguys/intl/resources/language/kk.json @@ -1,7 +1,7 @@ { "en-AU": "авÑтралиÑлық ағылшын тілі", "de-AT": "авÑтриÑлық Ð½ÐµÐ¼Ñ–Ñ Ñ‚Ñ–Ð»Ñ–", - "agq": "агхем тілі", + "agq": "агем тілі", "en": "ағылшын тілі", "ak": "акан тілі", "sq": "албан тілі", @@ -47,6 +47,7 @@ "zh-Hant": "дәÑтүрлі қытай тілі", "dz": "дзонг-ÐºÑ Ñ‚Ñ–Ð»Ñ–", "dyo": "диола тілі", + "doi": "Догри", "dua": "дуала тілі", "pt-PT": "еуропалық португал тілі", "ja": "жапон тілі", @@ -59,6 +60,7 @@ "yi": "идиш тілі", "smn": "инари Ñаам тілі", "id": "Ð¸Ð½Ð´Ð¾Ð½ÐµÐ·Ð¸Ñ Ñ‚Ñ–Ð»Ñ–", + "iu": "инуктитут тілі", "ga": "ирланд тілі", "is": "иÑланд тілі", "es": "иÑпан тілі", @@ -160,6 +162,7 @@ "sbp": "Ñангу тілі", "sa": "ÑанÑкрит тілі", "sat": "Ñантали тілі", + "sc": "Ñардин тілі", "sah": "Ñаха тілі", "ceb": "Ñебуано тілі", "seh": "Ñена тілі", @@ -223,5 +226,6 @@ "et": "ÑÑтон тілі", "jv": "Ñва тілі", "yav": "Ñнгбен тілі", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/km.json b/vendor/commerceguys/intl/resources/language/km.json index ba684b51f..de2bb2908 100644 --- a/vendor/commerceguys/intl/resources/language/km.json +++ b/vendor/commerceguys/intl/resources/language/km.json @@ -41,6 +41,7 @@ "cgg": "ឈីហ្កា", "da": "ដាណឺម៉ាក", "dz": "ដុងážáž¶", + "doi": "ដូហ្គ្រី", "dua": "ឌួលឡា", "nyn": "ណានកូលáŸ", "naq": "ណាម៉ា", @@ -134,6 +135,7 @@ "wae": "ážœáŸáž›ážŸážº", "vai": "វៃ", "sah": "សាážáž¶", + "sc": "សាឌីនា", "sat": "សាន់ážáž¶áž›áž¸", "sbp": "សានហ្គូ", "sg": "សានហ្គោ", @@ -206,6 +208,7 @@ "ig": "អ៊ីកបូ", "smn": "អ៊ីណារីសាមី", "it": "អ៊ីážáž¶áž›áž¸", + "iu": "អ៊ីនុកទីទុáž", "ee": "អ៊ីវ", "ewo": "អ៊ីវ៉ុនដូ", "is": "អ៊ីស្លង់", @@ -223,5 +226,6 @@ "es-MX": "អáŸážŸáŸ’ប៉ាញ (ម៉ិកស៊ិក)", "es-419": "អáŸážŸáŸ’ប៉ាញ (អាមáŸážšáž·áž€â€‹áž¡áž¶áž‘ីន)", "am": "អាំហារិក", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ko.json b/vendor/commerceguys/intl/resources/language/ko.json index ee49779c5..79ac1385b 100644 --- a/vendor/commerceguys/intl/resources/language/ko.json +++ b/vendor/commerceguys/intl/resources/language/ko.json @@ -80,6 +80,7 @@ "vun": "분조어", "bg": "불가리아어", "br": "브르타뉴어", + "sc": "사르디니아어", "sg": "ì‚°ê³ ì–´", "sa": "산스í¬ë¦¬íŠ¸ì–´", "sat": "산탈리어", @@ -143,6 +144,7 @@ "jgo": "ì‘곰바어", "ig": "ì´ê·¸ë³´ì–´", "smn": "ì´ë‚˜ë¦¬ 사미어", + "iu": "ì´ëˆ…티투트어", "yi": "ì´ë””시어", "ewo": "ì´ì›ë„ì–´", "it": "ì´íƒˆë¦¬ì•„ì–´", @@ -223,5 +225,7 @@ "ko": "í•œêµì–´", "hu": "í—가리어", "he": "히브리어", - "hi": "힌디어" + "hi": "힌디어", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/kok.json b/vendor/commerceguys/intl/resources/language/kok.json index 7a64b4d06..bc25a27ec 100644 --- a/vendor/commerceguys/intl/resources/language/kok.json +++ b/vendor/commerceguys/intl/resources/language/kok.json @@ -17,6 +17,7 @@ "ig": "इगà¥à¤¬à¥‹", "it": "इटालियन", "yi": "इदà¥à¤¦à¤¿à¤·à¥", + "iu": "इनà¥à¤¯à¥à¤•à¤Ÿà¥à¤Ÿ", "et": "इसà¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¨à¥", "smn": "ईनारी सामी", "uz": "उà¤à¤¬à¥‡à¤•", @@ -85,6 +86,7 @@ "xh": "à¤à¤¼à¥Œà¤¸à¤¾", "nl": "डचà¥", "da": "डॅनिश", + "doi": "डोगà¥à¤°à¥€", "dua": "डौल", "tt": "तटार", "ta": "तमिळ", @@ -200,6 +202,7 @@ "sbp": "सांगू", "sg": "सांगो", "saq": "सामà¥à¤¬à¤°à¥‚", + "sc": "सारà¥à¤¡à¤¿à¤¨à¤¿à¤¯à¤¾à¤¨", "sd": "सिंधी", "ii": "सिचà¥à¤¯à¥à¤†à¤¨ यी", "si": "सिनहालीस", @@ -223,5 +226,6 @@ "hi": "हिनà¥à¤¦à¥€", "he": "हिबà¥à¤°à¥‚", "ha": "हौसा", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ks.json b/vendor/commerceguys/intl/resources/language/ks.json index ec514965f..4c691c7a2 100644 --- a/vendor/commerceguys/intl/resources/language/ks.json +++ b/vendor/commerceguys/intl/resources/language/ks.json @@ -13,6 +13,7 @@ "guz": "Gusii", "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "khq": "Koyra Chiini", @@ -32,6 +33,7 @@ "naq": "Nama", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "lrc": "Northern Luri", "nus": "Nuer", @@ -68,6 +70,7 @@ "am": "اَمÛاری", "smn": "اÙناری سَمی", "id": "اÙنڈونیشیا", + "iu": "اÙÙ†ÙکتÙتوٗ", "en": "اَنگیٖزÛ", "om": "اۆرومو", "or": "اۆرÙیا", @@ -128,6 +131,7 @@ "es": "سپینÙØ´", "es-MX": "سپینÙØ´ (Ù…Ø Ú©Ø³ÙÚ©Ùˆ)", "ii": "سÙچوان یٖی", + "sc": "سراڈیٖنی", "sr": "سٔربÙیَن", "gd": "سکوٹÙØ´ گیےلÙÚ©", "sk": "سلووَک", diff --git a/vendor/commerceguys/intl/resources/language/ku.json b/vendor/commerceguys/intl/resources/language/ku.json index bfc42f910..6aff2b035 100644 --- a/vendor/commerceguys/intl/resources/language/ku.json +++ b/vendor/commerceguys/intl/resources/language/ku.json @@ -67,6 +67,7 @@ "en-AU": "îngilîzî (Awistralya)", "en-CA": "îngilîzî (Kanada)", "en-GB": "îngilîzî (Keyaniya Yekbûyî)", + "iu": "înuîtî", "ga": "îrî", "it": "îtalî", "is": "îzlendî", @@ -74,6 +75,7 @@ "jv": "javayî", "dyo": "Jola-Fonyi", "kab": "kabîlî", + "kgp": "Kaingang", "kkj": "Kako", "kl": "kalalîsûtî", "kln": "Kalenjin", @@ -133,6 +135,7 @@ "ne": "nepalî", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "nb": "norwecî (bokmÃ¥l)", @@ -167,6 +170,7 @@ "sbp": "Sangu", "sa": "sanskrîtî", "sat": "Santali", + "sc": "sardînî", "ceb": "sebwanoyî", "seh": "Sena", "ksb": "Shambala", diff --git a/vendor/commerceguys/intl/resources/language/ky.json b/vendor/commerceguys/intl/resources/language/ky.json index 13fdee8b9..6dbbf317f 100644 --- a/vendor/commerceguys/intl/resources/language/ky.json +++ b/vendor/commerceguys/intl/resources/language/ky.json @@ -47,6 +47,7 @@ "gu": "гужаратча", "guz": "гуÑиче", "da": "датча", + "doi": "догриче", "dua": "дуалача", "jv": "жаванизче", "ja": "жапончо", @@ -60,6 +61,7 @@ "yi": "идишче", "smn": "инари Ñаамиче", "id": "индонезиÑча", + "iu": "инуктитутча", "ga": "ирландча", "is": "иÑландча", "es": "иÑпанча", @@ -159,6 +161,7 @@ "sbp": "Ñангуча", "sa": "ÑанÑкритче", "sat": "Ñанталиче", + "sc": "Ñардинче", "sah": "Ñахача", "ceb": "Ñебуанча", "seh": "Ñенача", @@ -223,5 +226,6 @@ "ebu": "Ñмбуча", "et": "ÑÑтончо", "yav": "Ñнгбенче", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/lb.json b/vendor/commerceguys/intl/resources/language/lb.json index a5df8488f..1b8393427 100644 --- a/vendor/commerceguys/intl/resources/language/lb.json +++ b/vendor/commerceguys/intl/resources/language/lb.json @@ -62,6 +62,7 @@ "ig": "Igbo-Sprooch", "smn": "Inari-Lappesch", "id": "Indonesesch", + "iu": "Inukitut", "ga": "Iresch", "is": "Islännesch", "it": "Italienesch", @@ -72,6 +73,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabylesch", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -134,6 +136,7 @@ "ne": "Nepalesesch", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nds": "Nidderdäitsch", "nds-NL": "Nidderdäitsch (Holland)", "dsb": "Niddersorbesch", @@ -168,6 +171,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardesch", "gd": "Schottescht Gällesch", "fr-CH": "Schwäizer Franséisch", "de-CH": "Schwäizer Héichdäitsch", diff --git a/vendor/commerceguys/intl/resources/language/lo.json b/vendor/commerceguys/intl/resources/language/lo.json index 1d8478cbf..37bd04b70 100644 --- a/vendor/commerceguys/intl/resources/language/lo.json +++ b/vendor/commerceguys/intl/resources/language/lo.json @@ -46,6 +46,7 @@ "de-CH": "ສະວິສ ໄຮ ເຈີà»àº¡àº™", "sv": "ສະວີດິຊ", "sa": "ສັນສະàºàº£àº´àº”", + "sc": "ສາດີນຽນ", "sd": "ສິນທິ", "si": "ສິນຫາລາ", "ii": "ເສສວນ àºàºµ", @@ -205,6 +206,7 @@ "ig": "àºàº´àºà»‚ບ", "it": "àºàº´àº•àº²àº¥àº½àº™", "id": "àºàº´àº™à»‚ດເນຊຽນ", + "iu": "àºàº´àº™àº™àº¸àºàº•àº´àº•àº±àº”", "ee": "àºàº´àº§àº²", "smn": "àºàºµàº™àº²àº£àº´àºŠàº²àº¡àº´", "ewo": "àºàºµàº§àºàº™àº”ູ", @@ -223,5 +225,7 @@ "hi": "ຮິນດິ", "he": "ຮີບຣິວ", "ha": "ເຮົາຊາ", - "xh": "ໂຮຊາ" + "xh": "ໂຮຊາ", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/lt.json b/vendor/commerceguys/intl/resources/language/lt.json index a144d9a45..f600addaf 100644 --- a/vendor/commerceguys/intl/resources/language/lt.json +++ b/vendor/commerceguys/intl/resources/language/lt.json @@ -62,6 +62,7 @@ "ig": "igbų", "smn": "Inario samių", "id": "indonezieÄių", + "iu": "inukitut", "is": "islandų", "es": "ispanų", "it": "italų", @@ -71,6 +72,7 @@ "jv": "javieÄių", "yi": "jidiÅ¡", "yo": "jorubų", + "kgp": "kaingang", "kkj": "kako", "kl": "kalalisut", "kln": "kalenjinų", @@ -140,6 +142,7 @@ "jgo": "ngombų", "nyn": "niankolų", "pcm": "Nigerijos pidžinų", + "yrl": "njengatu", "no": "norvegų", "nb": "norvegų bukmolas", "nus": "nuerų", @@ -163,6 +166,7 @@ "sbp": "sangų", "sa": "sanskritas", "sat": "santalių", + "sc": "sardinieÄių", "ceb": "sebuanų", "seh": "senų", "sr": "serbų", diff --git a/vendor/commerceguys/intl/resources/language/lv.json b/vendor/commerceguys/intl/resources/language/lv.json index dfb449e3a..1ad3f7fa0 100644 --- a/vendor/commerceguys/intl/resources/language/lv.json +++ b/vendor/commerceguys/intl/resources/language/lv.json @@ -65,6 +65,7 @@ "ig": "igbo", "smn": "Inari sÄmu", "id": "indonÄ“zieÅ¡u", + "iu": "inuÄ«tu", "ga": "Ä«ru", "is": "islandieÅ¡u", "it": "itÄļu", @@ -78,6 +79,7 @@ "yo": "jorubu", "kab": "kabilu", "kea": "kaboverdieÅ¡u", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalendžīnu", "kam": "kambu", @@ -143,6 +145,7 @@ "ne": "nepÄlieÅ¡u", "nnh": "ngjembÅ«nu", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "NigÄ“rijas pidžinvaloda", "no": "norvÄ“Ä£u", "nb": "norvÄ“Ä£u bukmols", @@ -168,6 +171,7 @@ "sbp": "sangu", "sa": "sanskrits", "sat": "santalu", + "sc": "sardÄ«nieÅ¡u", "ceb": "sebuÄņu", "seh": "senu", "sr": "serbu", diff --git a/vendor/commerceguys/intl/resources/language/mg.json b/vendor/commerceguys/intl/resources/language/mg.json index 6962989b6..1c2d9b283 100644 --- a/vendor/commerceguys/intl/resources/language/mg.json +++ b/vendor/commerceguys/intl/resources/language/mg.json @@ -77,6 +77,7 @@ "ig": "igbo", "smn": "Inari Sami", "id": "Indonezianina", + "iu": "Inuktitut", "ga": "Irish", "it": "Italianina", "ja": "Japoney", @@ -84,6 +85,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -122,7 +124,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -136,6 +138,7 @@ "ne": "Nepale", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -171,6 +174,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/mk.json b/vendor/commerceguys/intl/resources/language/mk.json index 2a6b17588..fd276b519 100644 --- a/vendor/commerceguys/intl/resources/language/mk.json +++ b/vendor/commerceguys/intl/resources/language/mk.json @@ -59,6 +59,7 @@ "ig": "игбо", "smn": "инариÑки Ñами", "id": "индонезиÑки", + "iu": "инуктитут", "ga": "ирÑки", "is": "иÑландÑки", "it": "италијанÑки", @@ -72,6 +73,7 @@ "kab": "кабилÑки", "kea": "кабувердиану", "kk": "казашки", + "kgp": "каинганшки", "kkj": "како", "kl": "калалиÑут", "kln": "каленџин", @@ -113,7 +115,7 @@ "mk": "македонÑки", "kde": "маконде", "mgh": "макува-мито", - "ml": "малајамÑки", + "ml": "малајалÑки", "ms": "малајÑки", "mg": "малгашки", "mt": "малтешки", @@ -139,6 +141,7 @@ "nn": "норвешки нинорÑк", "nus": "нуер", "nyn": "њанколе", + "yrl": "њенгату", "or": "одија", "om": "оромо", "os": "оÑетÑки", @@ -161,6 +164,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑки", "sw": "Ñвахили", "ceb": "ÑебуанÑки", "nd": "Ñеверен ндебеле", diff --git a/vendor/commerceguys/intl/resources/language/ml.json b/vendor/commerceguys/intl/resources/language/ml.json index 2cf36c090..05ee9d0b3 100644 --- a/vendor/commerceguys/intl/resources/language/ml.json +++ b/vendor/commerceguys/intl/resources/language/ml.json @@ -12,6 +12,7 @@ "as": "ആസàµà´¸à´¾à´®àµ€à´¸àµ", "ig": "ഇഗàµà´¬àµ‹", "smn": "ഇനാരി സമി", + "iu": "ഇനàµà´•àµà´±àµà´±à´¿à´±àµà´±à´Ÿàµà´Ÿàµ", "id": "ഇനàµà´¤àµ‹à´¨àµ‡à´·àµà´¯àµ»", "en": "ഇംഗàµà´²àµ€à´·àµ", "it": "ഇറàµà´±à´¾à´²à´¿à´¯àµ»", @@ -116,7 +117,7 @@ "fr": "à´«àµà´°à´žàµà´šàµ", "fur": "à´«àµà´°à´¿à´¯àµà´²à´¿à´¯à´¾àµ»", "nl-BE": "à´«àµà´²à´®à´¿à´·àµ", - "bn": "ബംഗാളി", + "bn": "ബംഗàµà´²à´¾", "bm": "ബംബാറ", "my": "ബർമീസàµ", "bas": "ബസ", @@ -190,6 +191,7 @@ "sbp": "സംഗàµ", "saq": "സംബàµà´°àµ", "sa": "സംസàµâ€Œà´•àµƒà´¤à´‚", + "sc": "സർഡിനിയാൻ", "sah": "സാഖ", "sg": "സാംഗോ", "dje": "സാർമàµà´®", @@ -223,5 +225,7 @@ "rwk": "à´±àµà´µà´¾", "rm": "റൊമാഞàµà´šàµ", "ro": "റൊമാനിയൻ", - "rof": "റോംബോ" + "rof": "റോംബോ", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/mn.json b/vendor/commerceguys/intl/resources/language/mn.json index 137bfc64e..14c87aadb 100644 --- a/vendor/commerceguys/intl/resources/language/mn.json +++ b/vendor/commerceguys/intl/resources/language/mn.json @@ -42,6 +42,7 @@ "guz": "гузы", "ka": "гүрж", "da": "дани", + "doi": "догри", "nds": "доод герман", "dsb": "доод Ñорби", "dua": "дуала", @@ -56,6 +57,7 @@ "yi": "иддиш", "smn": "инари Ñами", "id": "индонези", + "iu": "инуктитут", "ga": "ирланд", "is": "иÑланд", "es": "иÑпани", @@ -124,7 +126,7 @@ "jgo": "нгомба", "pcm": "нигерийн пиджин", "nl": "нидерланд", - "no": "норвеги", + "no": "норвег", "nb": "норвегийн букмол", "nn": "норвегийн нинорÑк", "nus": "нуер", @@ -149,6 +151,7 @@ "sbp": "Ñангү", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "Ñардин", "sah": "Ñаха", "sw": "Ñвахили", "ceb": "Ñебуано", @@ -223,5 +226,6 @@ "jv": "Ñва", "yav": "Ñнгбен", "ja": "Ñпон", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/mr.json b/vendor/commerceguys/intl/resources/language/mr.json index 85e0da13b..f7bd59beb 100644 --- a/vendor/commerceguys/intl/resources/language/mr.json +++ b/vendor/commerceguys/intl/resources/language/mr.json @@ -17,6 +17,7 @@ "id": "इंडोनेशियन", "it": "इटालियन", "smn": "इनारी सामी", + "iu": "इनà¥à¤•à¥à¤¤à¥€à¤Ÿà¥à¤Ÿ", "ewo": "इवोनà¥à¤¡à¥‹", "et": "इसà¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¨", "ig": "ईगà¥à¤¬à¥‹", @@ -197,6 +198,7 @@ "sat": "संताली", "sa": "संसà¥à¤•à¥ƒà¤¤", "zh-Hans": "सरलीकृत चीनी", + "sc": "सरà¥à¤¦à¤¿à¤¨à¤¿à¤¯à¤¨", "sr": "सरà¥à¤¬à¤¿à¤¯à¤¨", "sbp": "सांगà¥", "sg": "सांगो", @@ -223,5 +225,7 @@ "haw": "हवाईयन", "hi": "हिंदी", "he": "हिबà¥à¤°à¥‚", - "ha": "हौसा" + "ha": "हौसा", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ms.json b/vendor/commerceguys/intl/resources/language/ms.json index 56c9d1643..b6111ec6c 100644 --- a/vendor/commerceguys/intl/resources/language/ms.json +++ b/vendor/commerceguys/intl/resources/language/ms.json @@ -72,6 +72,7 @@ "en-AU": "Inggeris Australia", "en-GB": "Inggeris British", "en-CA": "Inggeris Kanada", + "iu": "Inuktitut", "ga": "Ireland", "it": "Itali", "jv": "Jawa", @@ -84,6 +85,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -100,7 +102,7 @@ "ko": "Korea", "khq": "Koyra Chiini", "ses": "Koyraboro Senni", - "ckb": "Kurdi Sorani", + "ckb": "Kurdi Tengah", "ku": "Kurdish", "nmg": "Kwasio", "lkt": "Lakota", @@ -139,6 +141,7 @@ "ne": "Nepal", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "no": "Norway", "nus": "Nuer", @@ -170,6 +173,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinia", "nds-NL": "Saxon Rendah", "gd": "Scots Gaelic", "seh": "Sena", diff --git a/vendor/commerceguys/intl/resources/language/mt.json b/vendor/commerceguys/intl/resources/language/mt.json index 56543a56d..47fdea99c 100644 --- a/vendor/commerceguys/intl/resources/language/mt.json +++ b/vendor/commerceguys/intl/resources/language/mt.json @@ -76,10 +76,12 @@ "en-AU": "Ingliż Awstraljan", "en-GB": "Ingliż Brittaniku", "en-CA": "Ingliż Kanadiż", + "iu": "Inuktitut", "ga": "Irlandiż", "is": "Iżlandiż", "dyo": "Jola-Fonyi", "kab": "Kabuljan", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalallisut", "kln": "Kalenjin", @@ -139,6 +141,7 @@ "ne": "Nepaliż", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "nn": "Ninorsk NorveÄ¡iż", "no": "NorveÄ¡iż", "nus": "Nuer", @@ -168,6 +171,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinjan", "nds-NL": "Sassonu Komuni", "seh": "Sena", "sr": "Serb", @@ -189,8 +193,8 @@ "sw": "Swahili", "sw-CD": "Swahili tar-Repubblika Demokratika tal-Kongo", "shi": "Tachelhit", + "tg": "TaÄ¡ik", "dav": "Taita", - "tg": "Tajik", "th": "Tajlandiż", "it": "Taljan", "zgh": "Tamazight Standard tal-Marokk", diff --git a/vendor/commerceguys/intl/resources/language/my.json b/vendor/commerceguys/intl/resources/language/my.json index 9ca59eab0..97768fd2a 100644 --- a/vendor/commerceguys/intl/resources/language/my.json +++ b/vendor/commerceguys/intl/resources/language/my.json @@ -56,11 +56,11 @@ "sah": "ဆá€á€«", "sl": "ဆလá€á€¯á€—ေးနီးယား", "sk": "ဆလá€á€¯á€—က်", + "sc": "ဆာဒီနီးယား", "sr": "ဆားဘီးယား", "su": "ဆူဒန်", "xog": "ဆá€á€¯á€‚ါ", "so": "ဆá€á€¯á€™á€¬á€œá€®", - "ckb": "ဆá€á€¯á€›á€¬á€”ီ", "hsb": "ဆက္ကဆá€á€¯á€”ီ", "sbp": "ဆန်ဂု", "sg": "ဆန်ဂá€á€¯", @@ -93,6 +93,7 @@ "th": "ထá€á€¯á€„်း", "dz": "ဒဇွန်ကာ", "dua": "ဒူအလာ", + "doi": "ဒá€á€¯á€‚ရီ", "nl": "ဒá€á€ºá€á€ºá€»", "da": "ဒá€á€”်းမá€á€º", "nyn": "နရန်ကá€á€¯á€œá€®", @@ -115,6 +116,7 @@ "fil": "ဖá€á€œá€…်ပá€á€¯á€„်", "ff": "ဖူလာ", "fi": "ဖင်လန်", + "ckb": "ဗဟá€á€¯á€’ေသသုံး ကဒ်ဘာသာ", "vi": "ဗီယက်နမ်", "brx": "ဗá€á€¯á€’á€á€¯", "vai": "ဗá€á€¯á€„်", @@ -201,6 +203,7 @@ "as": "အာသံ", "it": "အီá€á€œá€®", "smn": "အီနာရီ ဆာမá€", + "iu": "အီနုá€á€ºá€á€®á€á€¯", "ee": "အီá€á€®", "ewo": "အီá€á€”်ဒá€á€¯", "uz": "ဥဇဘá€á€º", @@ -223,5 +226,6 @@ "am": "အမ်ဟာရစ်á€á€º", "sq": "အယ်လ်ဘေးနီးယား", "nnh": "အွန်ရဲဘွန်း", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/nb.json b/vendor/commerceguys/intl/resources/language/nb.json deleted file mode 100644 index bf64b513e..000000000 --- a/vendor/commerceguys/intl/resources/language/nb.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "af": "afrikaans", - "agq": "aghem", - "ak": "akan", - "sq": "albansk", - "am": "amharisk", - "ar": "arabisk", - "hy": "armensk", - "az": "aserbajdsjansk", - "as": "assamesisk", - "ast": "asturisk", - "asa": "asu", - "ksf": "bafia", - "bm": "bambara", - "eu": "baskisk", - "bas": "basaa", - "bem": "bemba", - "bez": "bena", - "bn": "bengali", - "brx": "bodo", - "bs": "bosnisk", - "br": "bretonsk", - "bg": "bulgarsk", - "my": "burmesisk", - "ceb": "cebuansk", - "chr": "cherokesisk", - "da": "dansk", - "doi": "dogri", - "dua": "duala", - "dz": "dzongkha", - "smn": "enaresamisk", - "en": "engelsk", - "en-AU": "engelsk (Australia)", - "en-CA": "engelsk (Canada)", - "en-GB": "engelsk (Storbritannia)", - "et": "estisk", - "ee": "ewe", - "ewo": "ewondo", - "fil": "filipino", - "fi": "finsk", - "nl-BE": "flamsk", - "zh-Hans": "forenklet kinesisk", - "fr": "fransk", - "fr-CA": "fransk (Canada)", - "fr-CH": "fransk (Sveits)", - "fur": "friuliansk", - "ff": "fulfulde", - "fo": "færøysk", - "gl": "galisisk", - "lg": "ganda", - "mg": "gassisk", - "ka": "georgisk", - "el": "gresk", - "kl": "grønlandsk", - "gu": "gujarati", - "guz": "gusii", - "ha": "hausa", - "haw": "hawaiisk", - "he": "hebraisk", - "hi": "hindi", - "be": "hviterussisk", - "hsb": "høysorbisk", - "ig": "ibo", - "id": "indonesisk", - "ga": "irsk", - "is": "islandsk", - "it": "italiensk", - "ja": "japansk", - "jv": "javanesisk", - "yi": "jiddisk", - "dyo": "jola-fonyi", - "yo": "joruba", - "kab": "kabylsk", - "kkj": "kako", - "kln": "kalenjin", - "kam": "kamba", - "kn": "kannada", - "yue": "kantonesisk", - "kea": "kappverdisk", - "kk": "kasakhisk", - "ks": "kasjmiri", - "ca": "katalansk", - "km": "khmer", - "ebu": "kiembu", - "cgg": "kiga", - "ki": "kikuyu", - "zh": "kinesisk", - "rw": "kinyarwanda", - "ky": "kirgisisk", - "sw-CD": "kongolesisk swahili", - "kok": "konkani", - "ko": "koreansk", - "kw": "kornisk", - "khq": "koyra chiini", - "ses": "koyraboro senni", - "hr": "kroatisk", - "ku": "kurdisk", - "ckb": "kurdisk (sorani)", - "nmg": "kwasio", - "ksh": "kølnsk", - "lkt": "lakota", - "lag": "langi", - "lo": "laotisk", - "lv": "latvisk", - "dsb": "lavsorbisk", - "ln": "lingala", - "lt": "litauisk", - "lu": "luba-katanga", - "luy": "luhya", - "luo": "Luo", - "lb": "luxemburgsk", - "jmc": "machame", - "mai": "maithili", - "mk": "makedonsk", - "mgh": "makhuwa-meetto", - "kde": "makonde", - "ml": "malayalam", - "ms": "malayisk", - "mt": "maltesisk", - "mni": "manipuri", - "mi": "maori", - "mr": "marathi", - "mas": "masai", - "mfe": "mauritisk-kreolsk", - "mzn": "mazandarani", - "mer": "meru", - "mgo": "meta’", - "ro-MD": "moldovsk", - "mn": "mongolsk", - "mua": "mundang", - "naq": "nama", - "nl": "nederlandsk", - "nds-NL": "nedersaksisk", - "nds": "nedertysk", - "ne": "nepali", - "nnh": "ngiemboon", - "jgo": "ngomba", - "pcm": "nigeriansk pidginspråk", - "lrc": "nord-luri", - "nd": "nord-ndebele", - "se": "nordsamisk", - "no": "norsk", - "nb": "norsk bokmål", - "nn": "norsk nynorsk", - "nus": "nuer", - "nyn": "nyankole", - "or": "odia", - "om": "oromo", - "os": "ossetisk", - "pa": "panjabi", - "ps": "pashto", - "fa": "persisk", - "pl": "polsk", - "pt": "portugisisk", - "pt-PT": "portugisisk (Portugal)", - "qu": "quechua", - "rm": "retoromansk", - "rof": "rombo", - "ro": "rumensk", - "rn": "rundi", - "ru": "russisk", - "rwk": "rwa", - "sah": "sakha", - "saq": "samburu", - "sg": "sango", - "sbp": "sangu", - "sa": "sanskrit", - "sat": "santali", - "seh": "sena", - "tzm": "sentralmarokkansk tamazight", - "sr": "serbisk", - "ksb": "shambala", - "sn": "shona", - "ii": "sichuan-yi", - "sd": "sindhi", - "si": "singalesisk", - "gd": "skotsk-gælisk", - "sk": "slovakisk", - "sl": "slovensk", - "xog": "soga", - "so": "somali", - "es": "spansk", - "es-419": "spansk (Latin-Amerika)", - "es-MX": "spansk (Mexico)", - "zgh": "standard marrokansk tamazight", - "su": "sundanesisk", - "gsw": "sveitsertysk", - "sv": "svensk", - "sw": "swahili", - "shi": "tachelhit", - "tg": "tadsjikisk", - "dav": "taita", - "ta": "tamil", - "twq": "tasawaq", - "tt": "tatarisk", - "te": "telugu", - "teo": "teso", - "th": "thai", - "bo": "tibetansk", - "ti": "tigrinja", - "to": "tongansk", - "zh-Hant": "tradisjonell kinesisk", - "cs": "tsjekkisk", - "ce": "tsjetsjensk", - "tk": "turkmensk", - "tr": "tyrkisk", - "de": "tysk", - "de-CH": "tysk (Sveits)", - "de-AT": "tysk (Østerrike)", - "ug": "uigurisk", - "uk": "ukrainsk", - "hu": "ungarsk", - "ur": "urdu", - "uz": "usbekisk", - "vai": "Vai", - "wa": "vallonsk", - "fy": "vestfrisisk", - "vi": "vietnamesisk", - "vun": "vunjo", - "cy": "walisisk", - "wae": "walsertysk", - "wo": "wolof", - "xh": "xhosa", - "yav": "yangben", - "dje": "zarma", - "zu": "zulu" -}
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ne.json b/vendor/commerceguys/intl/resources/language/ne.json index faae314d0..12a2bd909 100644 --- a/vendor/commerceguys/intl/resources/language/ne.json +++ b/vendor/commerceguys/intl/resources/language/ne.json @@ -18,6 +18,7 @@ "ig": "इगà¥à¤¬à¥‹", "it": "इटालेली", "smn": "इनारी सामी", + "iu": "इनà¥à¤•à¥à¤Ÿà¤¿à¤Ÿà¥à¤Ÿ", "id": "इनà¥à¤¡à¥‹à¤¨à¥‡à¤¸à¤¿à¤¯à¤¾à¤²à¥€", "ee": "इवी", "ewo": "इवोनà¥à¤¡à¥‹", @@ -34,6 +35,7 @@ "os": "ओसà¥à¤¸à¥‡à¤Ÿà¤¿à¤•", "sw-CD": "कङà¥à¤—ो सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€", "kn": "कनà¥à¤¨à¤¾à¤¡à¤¾", + "kgp": "काइनगाङ", "kkj": "काको", "kk": "काजाख", "kab": "काबिल", @@ -111,6 +113,7 @@ "nnh": "नà¥à¤—िà¤à¤®à¥à¤¬à¥à¤¨", "jgo": "नà¥à¤—ोमà¥à¤¬à¤¾", "nyn": "नà¥à¤¯à¤¾à¤¨à¥à¤•à¥‹à¤²", + "yrl": "नà¥à¤¹à¤¿à¤¨à¤—ातà¥", "pa": "पंजाबी", "zh-Hant": "परमà¥à¤ªà¤°à¤¾à¤—त चिनियाà¤", "fy": "पशà¥à¤šà¤¿à¤®à¥€ फà¥à¤°à¤¿à¤¸à¤¿à¤¯à¤¨", @@ -202,6 +205,7 @@ "sg": "साङà¥à¤—ो", "sat": "सानà¥à¤¤à¤¾à¤²à¥€", "saq": "सामà¥à¤¬à¥à¤°à¥‚", + "sc": "सारà¥à¤¡à¤¿à¤¨à¤¿à¤¯à¤¾à¤²à¥€", "ii": "सिचà¥à¤†à¤¨ यि", "sd": "सिनà¥à¤§à¥€", "si": "सिनà¥à¤¹à¤¾à¤²à¥€", diff --git a/vendor/commerceguys/intl/resources/language/nl.json b/vendor/commerceguys/intl/resources/language/nl.json index ee1b22710..2c626e1eb 100644 --- a/vendor/commerceguys/intl/resources/language/nl.json +++ b/vendor/commerceguys/intl/resources/language/nl.json @@ -73,6 +73,7 @@ "is": "IJslands", "smn": "Inari-Samisch", "id": "Indonesisch", + "iu": "Inuktitut", "it": "Italiaans", "sah": "Jakoets", "ja": "Japans", @@ -81,6 +82,7 @@ "dyo": "Jola-Fonyi", "kea": "Kaapverdisch Creools", "kab": "Kabylisch", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -132,13 +134,13 @@ "naq": "Nama", "nds-NL": "Nederduits", "nl": "Nederlands", - "nl-BE": "Nederlands (België)", "nds": "Nedersaksisch", "dsb": "Nedersorbisch", "ne": "Nepalees", "nnh": "Ngiemboon", "jgo": "Ngomba", "nmg": "Ngumba", + "yrl": "Nheengatu", "pcm": "Nigeriaans Pidgin", "nd": "Noord-Ndebele", "se": "Noord-Samisch", @@ -172,6 +174,7 @@ "sbp": "Sangu", "sa": "Sanskriet", "sat": "Santali", + "sc": "Sardijns", "gd": "Schots-Gaelisch", "seh": "Sena", "sr": "Servisch", @@ -211,6 +214,7 @@ "ur": "Urdu", "vai": "Vai", "vi": "Vietnamees", + "nl-BE": "Vlaams", "vun": "Vunjo", "wa": "Waals", "wae": "Walser", diff --git a/vendor/commerceguys/intl/resources/language/nn.json b/vendor/commerceguys/intl/resources/language/nn.json index 8dd7d1b92..af52998b4 100644 --- a/vendor/commerceguys/intl/resources/language/nn.json +++ b/vendor/commerceguys/intl/resources/language/nn.json @@ -61,6 +61,7 @@ "hsb": "høgsorbisk", "ig": "ibo", "id": "indonesisk", + "iu": "inuktitut", "ga": "irsk", "is": "islandsk", "it": "italiensk", @@ -69,13 +70,14 @@ "yi": "jiddisk", "dyo": "jola-fonyi", "yo": "joruba", - "kea": "kabuverdianu", - "kab": "kabyle", + "kab": "kabylsk", + "kgp": "kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", "kn": "kannada", "yue": "kantonesisk", + "kea": "kappverdisk", "kk": "kasakhisk", "ks": "kasjmiri", "ca": "katalansk", @@ -133,6 +135,7 @@ "ne": "nepalsk", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "nheengatu", "pcm": "nigeriansk pidgin", "lrc": "nord-lurisk", "nd": "nord-ndebele", @@ -165,6 +168,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinsk", "seh": "sena", "tzm": "sentral-tamazight", "sr": "serbisk", diff --git a/vendor/commerceguys/intl/resources/language/no.json b/vendor/commerceguys/intl/resources/language/no.json index bf64b513e..477989a28 100644 --- a/vendor/commerceguys/intl/resources/language/no.json +++ b/vendor/commerceguys/intl/resources/language/no.json @@ -62,6 +62,7 @@ "hsb": "høysorbisk", "ig": "ibo", "id": "indonesisk", + "iu": "inuktitut", "ga": "irsk", "is": "islandsk", "it": "italiensk", @@ -71,6 +72,7 @@ "dyo": "jola-fonyi", "yo": "joruba", "kab": "kabylsk", + "kgp": "kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -135,6 +137,7 @@ "ne": "nepali", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "nheengatu", "pcm": "nigeriansk pidginsprÃ¥k", "lrc": "nord-luri", "nd": "nord-ndebele", @@ -166,6 +169,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardisk", "seh": "sena", "tzm": "sentralmarokkansk tamazight", "sr": "serbisk", diff --git a/vendor/commerceguys/intl/resources/language/pa.json b/vendor/commerceguys/intl/resources/language/pa.json index 5b937d36d..de8ee0e95 100644 --- a/vendor/commerceguys/intl/resources/language/pa.json +++ b/vendor/commerceguys/intl/resources/language/pa.json @@ -27,6 +27,7 @@ "ga": "ਆਇਰਸ਼", "is": "ਆਈਸਲੈਂਡਿਕ", "et": "ਇਸਟੋਨੀਆਈ", + "iu": "ਇੰਕਟੀਟੂਤ", "ig": "ਇਗਬੋ", "id": "ਇੰਡੋਨੇਸ਼ੀਆਈ", "it": "ਇਤਾਲਵੀ", @@ -49,6 +50,7 @@ "sv": "ਸਵੀਡਿਸ਼", "sah": "ਸਾਖਾ", "sg": "ਸਾਂਗੋ", + "sc": "ਸਾਰਡੀਨੀਆਈ", "si": "ਸਿੰਹਾਲਾ", "ii": "ਸਿਚà©à¨†à¨¨ ਯੀ", "sd": "ਸਿੰਧੀ", @@ -121,6 +123,7 @@ "nl": "ਡੱਚ", "dua": "ਡੂਆਲਾ", "da": "ਡੈਨਿਸ਼", + "doi": "ਡੋਗਰੀ", "tt": "ਤਤਾਰ", "ta": "ਤਮਿਲ", "twq": "ਤਾਸਾਵਿਕ", @@ -223,5 +226,6 @@ "vun": "ਵੂੰਜੋ", "cy": "ਵੈਲਸ਼", "wo": "ਵੋਲੋਫ", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/pl.json b/vendor/commerceguys/intl/resources/language/pl.json index 42e9f557f..88b850372 100644 --- a/vendor/commerceguys/intl/resources/language/pl.json +++ b/vendor/commerceguys/intl/resources/language/pl.json @@ -77,6 +77,7 @@ "ig": "igbo", "smn": "inari", "id": "indonezyjski", + "iu": "inuktitut", "ga": "irlandzki", "is": "islandzki", "sah": "jakucki", @@ -85,6 +86,7 @@ "yi": "jidysz", "yo": "joruba", "kab": "kabylski", + "kgp": "kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -145,6 +147,7 @@ "nnh": "ngiemboon", "jgo": "ngombe", "nmg": "ngumba", + "yrl": "nheengatu", "nl": "niderlandzki", "de": "niemiecki", "de-AT": "niemiecki austriacki", @@ -176,6 +179,7 @@ "sbp": "sangu", "sa": "sanskryt", "sat": "santali", + "sc": "sardyÅ„ski", "seh": "sena", "sr": "serbski", "sn": "shona", diff --git a/vendor/commerceguys/intl/resources/language/ps-PK.json b/vendor/commerceguys/intl/resources/language/ps-PK.json index f2cfbe225..adcbedf68 100644 --- a/vendor/commerceguys/intl/resources/language/ps-PK.json +++ b/vendor/commerceguys/intl/resources/language/ps-PK.json @@ -18,6 +18,7 @@ "smn": "اناري سميع", "id": "انډونÛزي", "en": "انګليسي", + "iu": "انوکتیتوت", "or": "اوڊيا", "om": "اورومو", "uz": "اوزبکي", @@ -78,6 +79,7 @@ "dua": "دوالا", "zh-Hant": "دوديزه چيني", "da": "ډنمارکي", + "doi": "ډوګري", "rwk": "روا", "ru": "روسي", "ro": "رومانیایی", @@ -88,6 +90,7 @@ "zu": "زولو", "dz": "ژونگکه", "zh-Hans": "ساده چيني", + "sc": "سارڊيني", "sg": "سانګو", "sbp": "سانګوو", "sah": "سخا", @@ -223,5 +226,6 @@ "yav": "ینګبین", "yo": "یوروبا", "el": "یوناني", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ps.json b/vendor/commerceguys/intl/resources/language/ps.json index 1490bfd9e..d78421c9c 100644 --- a/vendor/commerceguys/intl/resources/language/ps.json +++ b/vendor/commerceguys/intl/resources/language/ps.json @@ -18,6 +18,7 @@ "smn": "اناري سميع", "id": "انډونÛزي", "en": "انګليسي", + "iu": "انوکتیتوت", "or": "اوڊيا", "om": "اورومو", "uz": "اوزبکي", @@ -78,6 +79,7 @@ "dua": "دوالا", "zh-Hant": "دوديزه چيني", "da": "ډنمارکي", + "doi": "ډوګري", "rwk": "روا", "ru": "روسي", "ro": "رومانیایی", @@ -88,6 +90,7 @@ "zu": "زولو", "dz": "ژونگکه", "zh-Hans": "ساده چيني", + "sc": "سارڊيني", "sg": "سانګو", "sbp": "سانګوو", "sah": "سخا", @@ -223,5 +226,6 @@ "yav": "ینګبین", "yo": "یوروبا", "el": "یوناني", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/pt-PT.json b/vendor/commerceguys/intl/resources/language/pt-PT.json index 175e397a1..15c37cf67 100644 --- a/vendor/commerceguys/intl/resources/language/pt-PT.json +++ b/vendor/commerceguys/intl/resources/language/pt-PT.json @@ -98,6 +98,7 @@ "en-AU": "inglês australiano", "en-GB": "inglês britânico", "en-CA": "inglês canadiano", + "iu": "inuktitut", "yo": "ioruba", "ga": "irlandês", "is": "islandês", @@ -106,6 +107,7 @@ "jv": "javanês", "dyo": "jola-fonyi", "kab": "kabyle", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -150,6 +152,7 @@ "ne": "nepalês", "nnh": "ngiemboon", "jgo": "nguemba", + "yrl": "Nheengatu", "no": "norueguês", "nb": "norueguês bokmÃ¥l", "nn": "norueguês nynorsk", @@ -182,6 +185,7 @@ "sbp": "sangu", "sa": "sânscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "sérvio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/pt.json b/vendor/commerceguys/intl/resources/language/pt.json index 1bfa5f841..4cedd5a48 100644 --- a/vendor/commerceguys/intl/resources/language/pt.json +++ b/vendor/commerceguys/intl/resources/language/pt.json @@ -96,6 +96,7 @@ "en-AU": "inglês (Austrália)", "en-CA": "inglês (Canadá)", "en-GB": "inglês (Reino Unido)", + "iu": "inuktitut", "yo": "iorubá", "ga": "irlandês", "is": "islandês", @@ -104,6 +105,7 @@ "jv": "javanês", "dyo": "jola-fonyi", "kab": "kabyle", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -151,6 +153,7 @@ "ne": "nepalês", "nnh": "ngiemboon", "jgo": "nguemba", + "yrl": "Nheengatu", "no": "norueguês", "nus": "nuer", "nyn": "nyankole", @@ -182,6 +185,7 @@ "sbp": "sangu", "sa": "sânscrito", "sat": "santali", + "sc": "sardo", "seh": "sena", "sr": "sérvio", "ksb": "shambala", diff --git a/vendor/commerceguys/intl/resources/language/rn.json b/vendor/commerceguys/intl/resources/language/rn.json index 91ab6f8e0..59f4c1988 100644 --- a/vendor/commerceguys/intl/resources/language/rn.json +++ b/vendor/commerceguys/intl/resources/language/rn.json @@ -107,11 +107,13 @@ "yo": "Ikiyoruba", "zu": "Ikizulu", "smn": "Inari Sami", + "iu": "Inuktitut", "ur": "Inyeyurudu", "ga": "Irish", "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -147,7 +149,7 @@ "ml": "Malayalam", "mt": "Maltese", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mr": "Marathi", "mas": "Masai", "mzn": "Mazanderani", @@ -160,6 +162,7 @@ "nds-NL": "nds (Ubuholandi)", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -183,6 +186,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "gd": "Scottish Gaelic", "seh": "Sena", "sr": "Serbian", diff --git a/vendor/commerceguys/intl/resources/language/ro-MD.json b/vendor/commerceguys/intl/resources/language/ro-MD.json index 94addd86a..71b9479e6 100644 --- a/vendor/commerceguys/intl/resources/language/ro-MD.json +++ b/vendor/commerceguys/intl/resources/language/ro-MD.json @@ -79,6 +79,7 @@ "yi": "idiÈ™", "ig": "igbo", "id": "indoneziană", + "iu": "inuktitut", "ga": "irlandeză", "is": "islandeză", "it": "italiană", @@ -87,6 +88,7 @@ "dyo": "jola-fonyi", "kea": "kabuverdianu", "kab": "kabyle", + "kgp": "kaingang", "kkj": "kako", "kl": "kalaallisut", "kln": "kalenjin", @@ -142,6 +144,7 @@ "ne": "nepaleză", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "norvegiană", "nb": "norvegiană bokmÃ¥l", "nn": "norvegiană nynorsk", @@ -172,6 +175,7 @@ "sbp": "sangu", "sa": "sanscrită", "sat": "santali", + "sc": "sardiniană", "nds-NL": "saxona de jos", "sr": "sârbă", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/ro.json b/vendor/commerceguys/intl/resources/language/ro.json index 383fddc43..525f71acd 100644 --- a/vendor/commerceguys/intl/resources/language/ro.json +++ b/vendor/commerceguys/intl/resources/language/ro.json @@ -79,6 +79,7 @@ "yi": "idiÈ™", "ig": "igbo", "id": "indoneziană", + "iu": "inuktitut", "ga": "irlandeză", "is": "islandeză", "it": "italiană", @@ -87,6 +88,7 @@ "dyo": "jola-fonyi", "kea": "kabuverdianu", "kab": "kabyle", + "kgp": "kaingang", "kkj": "kako", "kl": "kalaallisut", "kln": "kalenjin", @@ -142,6 +144,7 @@ "ne": "nepaleză", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "no": "norvegiană", "nb": "norvegiană bokmÃ¥l", "nn": "norvegiană nynorsk", @@ -172,6 +175,7 @@ "sbp": "sangu", "sa": "sanscrită", "sat": "santali", + "sc": "sardiniană", "nds-NL": "saxona de jos", "sr": "sârbă", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/ru.json b/vendor/commerceguys/intl/resources/language/ru.json index 9f023dd79..39649bf67 100644 --- a/vendor/commerceguys/intl/resources/language/ru.json +++ b/vendor/commerceguys/intl/resources/language/ru.json @@ -59,6 +59,7 @@ "yi": "идиш", "smn": "инари-ÑаамÑкий", "id": "индонезийÑкий", + "iu": "инуктитут", "ga": "ирландÑкий", "is": "иÑландÑкий", "es": "иÑпанÑкий", @@ -163,6 +164,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑкий", "sah": "Ñаха", "ceb": "Ñебуано", "lrc": "ÑевернолурÑкий", @@ -176,7 +178,6 @@ "sl": "ÑловенÑкий", "xog": "Ñога", "so": "Ñомали", - "ckb": "Ñорани", "tzm": "ÑреднеатлаÑÑкий тамазигхтÑкий", "sw": "Ñуахили", "su": "ÑунданÑкий", @@ -209,6 +210,7 @@ "ha": "хауÑа", "hi": "хинди", "hr": "хорватÑкий", + "ckb": "центральнокурдÑкий", "chr": "чероки", "ce": "чеченÑкий", "cs": "чешÑкий", @@ -223,5 +225,7 @@ "et": "ÑÑтонÑкий", "jv": "ÑванÑкий", "yav": "Ñнгбен", - "ja": "ÑпонÑкий" + "ja": "ÑпонÑкий", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/rw.json b/vendor/commerceguys/intl/resources/language/rw.json index c2c432572..04b65a934 100644 --- a/vendor/commerceguys/intl/resources/language/rw.json +++ b/vendor/commerceguys/intl/resources/language/rw.json @@ -116,6 +116,7 @@ "ps": "Impashito", "smn": "Inari Sami", "ky": "Inkerigizi", + "iu": "Inuktitut", "am": "Inyamuhariki", "ti": "Inyatigirinya", "az": "Inyazeribayijani", @@ -141,6 +142,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -167,7 +169,7 @@ "kde": "Makonde", "mg": "Malagasy", "mni": "Manipuri", - "mi": "Maori", + "mi": "MÄori", "mas": "Masai", "mzn": "Mazanderani", "mer": "Meru", @@ -178,6 +180,7 @@ "nds-NL": "nds (NL)", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -197,6 +200,7 @@ "sg": "Sango", "sbp": "Sangu", "sat": "Santali", + "sc": "Sardinian", "seh": "Sena", "ksb": "Shambala", "sn": "Shona", diff --git a/vendor/commerceguys/intl/resources/language/sd.json b/vendor/commerceguys/intl/resources/language/sd.json index e555eff52..7bb1cf442 100644 --- a/vendor/commerceguys/intl/resources/language/sd.json +++ b/vendor/commerceguys/intl/resources/language/sd.json @@ -1,11 +1,12 @@ { "doi": "Dogri", + "kgp": "Kaingang", + "yrl": "Nheengatu", "no": "Norwegian", "ga": "آئرش", "is": "آئيس لينڊڪ", "az": "آزربائيجاني", "as": "آسامي", - "zh-Hans": "آسان چینی", "de-AT": "آسٽريائي جرمن", "en-AU": "آسٽريليائي انگريزي", "af": "Ø¢Ùريڪي", @@ -29,6 +30,7 @@ "smn": "اناري سامي", "id": "انڊونيشي", "en": "انگريزي", + "iu": "انو ڪتوت", "ewo": "اوانڊو", "or": "اوڊيا", "om": "اورومو", @@ -77,6 +79,7 @@ "cgg": "چگا", "cs": "Ú†ÙŠÚª", "zh": "چيني", + "zh-Hans": "چيني (سادي)", "ce": "چیچن", "km": "خمر", "nl": "ÚŠÚ†", @@ -94,6 +97,7 @@ "zu": "زولو", "dz": "زونخا", "sah": "ساخا", + "sc": "سارڊيني", "sg": "سانگو", "sbp": "سانگوو", "ceb": "سبوانو", @@ -124,7 +128,7 @@ "fr": "Ùرانسيسي", "ff": "Ùلاهه", "fil": "Ùلپائني", - "nl-BE": "Ùلیمش", + "nl-BE": "Ùليمش", "fi": "Ùنش", "fo": "Ùيروايس", "kk": "قازق", diff --git a/vendor/commerceguys/intl/resources/language/si.json b/vendor/commerceguys/intl/resources/language/si.json index 3b0ec5426..3b69d1880 100644 --- a/vendor/commerceguys/intl/resources/language/si.json +++ b/vendor/commerceguys/intl/resources/language/si.json @@ -16,6 +16,7 @@ "ig": "ඉග්බà·", "it": "ඉà¶à·à¶½à·’", "smn": "ඉනà·à¶»à·’ à·ƒà·à¶¸à·’", + "iu": "ඉනුක්ටිටුට්", "id": "ඉන්දුනීසියà·à¶±à·”", "ee": "ඉව්", "hsb": "ඉහළ à·ƒà·à¶¶à·’යà·à¶±à·”", @@ -89,6 +90,7 @@ "da": "ඩà·à¶±à·’à·à·Š", "dz": "ඩිසොන්කà·", "dua": "ඩුආලà·", + "doi": "ඩොග්රි", "th": "à¶à·à¶ºà·’", "tr": "à¶à·”ර්කි", "te": "à¶à·™à·…ිඟු", @@ -99,6 +101,7 @@ "pcm": "නෛජීරියන් පෙන්ගින්", "jgo": "නොම්බà·", "nus": "නොයර්", + "no": "නà·à¶»à·Šà·€à·“ජියà·à¶±à·”", "nn": "නà·à¶»à·Šà·€à·“ජියà·à¶±à·” නයිනà·à¶»à·Šà·ƒà·Šà¶šà·Š", "nb": "නà·à¶»à·Šà·€à·“ජියà·à¶±à·” බොක්මල්", "nnh": "න්ගියà·à¶¸à·Šà¶¶à·–න්", @@ -193,6 +196,7 @@ "sr": "සර්බියà·à¶±à·”", "dje": "සර්මà·", "zh-Hant": "à·ƒà·à¶¸à·Šà¶´à·Šâ€à¶»à¶¯à·à¶ºà·’ක චීන", + "sc": "à·ƒà·à¶»à·Šà¶©à·’නිඅන්", "sat": "සෑන්ටලි", "si": "සිංහල", "ii": "සිචුආන් යී", @@ -222,6 +226,6 @@ "ff": "ෆුලà·à·„à·Š", "fur": "ෆ්â€à¶»à·’යුලියන්", "nl-BE": "ෆ්ලෙමිà·à·Š", - "doi": "Dogri", - "no": "Norwegian" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sk.json b/vendor/commerceguys/intl/resources/language/sk.json index e454fb8ff..9f7f1bf83 100644 --- a/vendor/commerceguys/intl/resources/language/sk.json +++ b/vendor/commerceguys/intl/resources/language/sk.json @@ -70,6 +70,7 @@ "hr": "chorvátÄina", "ig": "igboÅ¡tina", "id": "indonézÅ¡tina", + "iu": "inuktitut", "ga": "ÃrÄina", "is": "islandÄina", "sah": "jakutÄina", @@ -80,6 +81,7 @@ "dyo": "jola-fonyi", "yo": "jorubÄina", "kab": "kabylÄina", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalendžin", "kam": "kamba", @@ -143,6 +145,7 @@ "ne": "nepálÄina", "nnh": "ngiemboon", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijský pidžin", "no": "nórÄina", "nb": "nórÄina (bokmal)", @@ -171,6 +174,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santalÄina", + "sc": "sardÃnÄina", "seh": "sena", "lrc": "severné luri", "sd": "sindhÄina", diff --git a/vendor/commerceguys/intl/resources/language/sl.json b/vendor/commerceguys/intl/resources/language/sl.json index d67afee4d..7ef3e1280 100644 --- a/vendor/commerceguys/intl/resources/language/sl.json +++ b/vendor/commerceguys/intl/resources/language/sl.json @@ -64,6 +64,7 @@ "ig": "igboÅ¡Äina", "smn": "inarska samijÅ¡Äina", "id": "indonezijÅ¡Äina", + "iu": "inuktitutÅ¡Äina", "ga": "irÅ¡Äina", "is": "islandÅ¡Äina", "it": "italijanÅ¡Äina", @@ -75,6 +76,7 @@ "dyo": "jola-fonjiÅ¡Äina", "yo": "jorubÅ¡Äina", "kab": "kabilÅ¡Äina", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjinÅ¡Äina", "kam": "kambaÅ¡Äina", @@ -140,6 +142,7 @@ "ne": "nepalÅ¡Äina", "nnh": "ngiemboonÅ¡Äina", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "nds": "nizka nemÅ¡Äina", "nds-NL": "nizka saÅ¡Äina", @@ -169,6 +172,7 @@ "sbp": "sangujÅ¡Äina", "sa": "sanskrt", "sat": "santalÅ¡Äina", + "sc": "sardinÅ¡Äina", "ceb": "sebuanÅ¡Äina", "ii": "seÄuanska jiÅ¡Äina", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/so.json b/vendor/commerceguys/intl/resources/language/so.json index 469ce3ad9..5777c20bc 100644 --- a/vendor/commerceguys/intl/resources/language/so.json +++ b/vendor/commerceguys/intl/resources/language/so.json @@ -43,7 +43,7 @@ "dua": "Duaala", "ee": "Eewe", "ewo": "Eewondho", - "ebu": "Embuu", + "ebu": "Embu", "fa": "Faarisi", "vai": "Faayi", "fr": "Faransiis", @@ -70,7 +70,7 @@ "xh": "Hoosta", "ig": "Igbo", "smn": "Inaari Saami", - "nd": "Indhebeele", + "nd": "Indhebeele Waqooyi", "id": "Indunusiyaan", "en-AU": "Ingiriis Austaraaliyaan", "en-GB": "Ingiriis Biritish", @@ -78,19 +78,21 @@ "en": "Ingiriisi", "nnh": "Ingiyembuun", "jgo": "Ingoomba", + "iu": "Inuktitut", "nyn": "Inyankoole", "es": "Isbaanish", - "es-MX": "Isbaanish (Meksiko)", "es-419": "Isbaanishka Laatiin Ameerika", + "es-MX": "Isbaanishka Mexico", "gd": "Iskot Giilik", "sl": "Islofeeniyaan", "sk": "Isloofaak", "et": "Istooniyaan", + "sv": "Iswiidhish", + "de-CH": "Iswiiska Sare ee Jarmal", "ja": "Jabaaniis", "jv": "Jafaaniis", "de": "Jarmal", - "de-AT": "Jarmal (Awsteriya)", - "de-CH": "Jarmal (Iswiiserlaand)", + "de-AT": "Jarmal Awsteeriya", "nds": "Jarmal Hooseeya", "nds-NL": "Jarmal Hooseeya (Nederlaands)", "gsw": "Jarmal Iswiis", @@ -105,6 +107,7 @@ "ks": "Kaashmiir", "kab": "Kabayle", "kea": "Kabuferdiyanu", + "kgp": "Kaingang", "kl": "Kalaallisuut", "kln": "Kalenjiin", "km": "Kamboodhian", @@ -117,8 +120,6 @@ "ky": "Kirgiis", "ksh": "Kologniyaan", "kok": "Konkani", - "lrc": "Koonfurta Luuri", - "se": "Koonfurta Saami", "kw": "Kornish", "hr": "Koro’eeshiyaan", "khq": "Koyra Jiini", @@ -132,10 +133,11 @@ "lo": "Lao", "ln": "Lingala", "lt": "Lituwaanays", - "luy": "Luhya", "lb": "Luksaamboorgish", + "lrc": "Luri Waqooyi", "lu": "Luuba-kataanga", "luo": "Luwada", + "luy": "Luyia", "mi": "Maaoori", "mr": "Maarati", "mgh": "Makhuwa", @@ -154,10 +156,11 @@ "mfe": "Moorisayn", "zgh": "Morokaanka Tamasayt Rasmiga", "naq": "Nama", + "no": "Nawriiji", + "nn": "Nawriijiga Nynorsk", + "nb": "Nawrijii BokmÃ¥l", "ne": "Nebaali", - "nb": "Noorwijiyaan Bokma", - "no": "Norwegian", - "nn": "Nowrwejiyan (naynoroski)", + "yrl": "Nheengatu", "nus": "Nuweer", "or": "Oodhiya", "om": "Oromo", @@ -173,10 +176,12 @@ "rw": "Ruwaandha", "sah": "Saaqa", "saq": "Sambuuru", + "se": "Sami Waqooyi", "sg": "Sango", "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardinian", "dje": "Sarma", "sw": "Sawaaxili", "sw-CD": "Sawaaxili (Jamhuuriyadda Dimuquraadiga Kongo)", @@ -197,7 +202,6 @@ "dsb": "Soorbiyaanka Hoose", "hsb": "Sorobiyaanka Sare", "su": "Suudaaniis", - "sv": "Swiidhis", "tg": "Taajik", "tt": "Taatar", "th": "Taaylandays", diff --git a/vendor/commerceguys/intl/resources/language/sq.json b/vendor/commerceguys/intl/resources/language/sq.json index 98690526e..f630b5e3a 100644 --- a/vendor/commerceguys/intl/resources/language/sq.json +++ b/vendor/commerceguys/intl/resources/language/sq.json @@ -31,7 +31,7 @@ "chr": "çerokisht", "cgg": "çigisht", "da": "danisht", - "doi": "Dogri", + "doi": "dogrisht", "dua": "dualaisht", "ebu": "embuisht", "et": "estonisht", @@ -68,6 +68,7 @@ "ig": "igboisht", "hi": "indisht", "id": "indonezisht", + "iu": "inuktitutisht", "ga": "irlandisht", "is": "islandisht", "it": "italisht", @@ -77,6 +78,7 @@ "yi": "jidisht", "yo": "jorubaisht", "kab": "kabilisht", + "kgp": "kaingangisht", "kkj": "kakoisht", "kl": "kalalisutisht", "kln": "kalenxhinisht", @@ -140,6 +142,7 @@ "ne": "nepalisht", "nnh": "ngiembunisht", "jgo": "ngombisht", + "yrl": "Nheengatu", "nyn": "niankolisht", "no": "norvegjisht", "nb": "norvegjishte letrare", @@ -169,6 +172,7 @@ "sbp": "sanguisht", "sa": "sanskritisht", "sat": "santalisht", + "sc": "sardenjisht", "ceb": "sebuanisht", "seh": "senaisht", "ses": "senishte kojrabore", diff --git a/vendor/commerceguys/intl/resources/language/sr-Cyrl-BA.json b/vendor/commerceguys/intl/resources/language/sr-Cyrl-BA.json index 0448510d2..5f801e44a 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Cyrl-BA.json +++ b/vendor/commerceguys/intl/resources/language/sr-Cyrl-BA.json @@ -56,6 +56,7 @@ "ig": "игбо", "smn": "инари Ñами", "id": "индонежанÑки", + "iu": "инуктитутÑки", "ga": "ирÑки", "zu": "иÑизулу", "xh": "иÑикоÑа", @@ -158,6 +159,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑки", "sah": "Ñаха", "sw": "Ñвахили", "ceb": "ÑебуанÑки", @@ -217,11 +219,13 @@ "dyo": "џола фоњи", "dz": "џонга", "ksb": "шамбала", - "de-CH": "швајцарÑки виÑоки немачки", + "de-CH": "швајцарÑки виÑоки њемачки", "sv": "шведÑки", "gd": "шкотÑки гелÑки", "sn": "шона", "es": "шпанÑки", "es-419": "шпанÑки (ЛатинÑка Ðмерика)", - "es-MX": "шпанÑки (МекÑико)" + "es-MX": "шпанÑки (МекÑико)", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sr-Cyrl-ME.json b/vendor/commerceguys/intl/resources/language/sr-Cyrl-ME.json index 4d9451457..d25f2de13 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Cyrl-ME.json +++ b/vendor/commerceguys/intl/resources/language/sr-Cyrl-ME.json @@ -56,6 +56,7 @@ "ig": "игбо", "smn": "инари Ñами", "id": "индонежанÑки", + "iu": "инуктитутÑки", "ga": "ирÑки", "zu": "иÑизулу", "xh": "иÑикоÑа", @@ -158,6 +159,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑки", "sah": "Ñаха", "sw": "Ñвахили", "ceb": "ÑебуанÑки", @@ -223,5 +225,7 @@ "sn": "шона", "es": "шпанÑки", "es-419": "шпанÑки (ЛатинÑка Ðмерика)", - "es-MX": "шпанÑки (МекÑико)" + "es-MX": "шпанÑки (МекÑико)", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sr-Cyrl-XK.json b/vendor/commerceguys/intl/resources/language/sr-Cyrl-XK.json index 4383b6a7e..084a65c5f 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Cyrl-XK.json +++ b/vendor/commerceguys/intl/resources/language/sr-Cyrl-XK.json @@ -56,6 +56,7 @@ "ig": "игбо", "smn": "инари Ñами", "id": "индонежанÑки", + "iu": "инуктитутÑки", "ga": "ирÑки", "zu": "иÑизулу", "xh": "иÑикоÑа", @@ -157,6 +158,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑки", "sah": "Ñаха", "sw": "Ñвахили", "ceb": "ÑебуанÑки", @@ -223,5 +225,7 @@ "sn": "шона", "es": "шпанÑки", "es-419": "шпанÑки (ЛатинÑка Ðмерика)", - "es-MX": "шпанÑки (МекÑико)" + "es-MX": "шпанÑки (МекÑико)", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sr-Latn-BA.json b/vendor/commerceguys/intl/resources/language/sr-Latn-BA.json index 0fe4e7dd2..73c918e7a 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Latn-BA.json +++ b/vendor/commerceguys/intl/resources/language/sr-Latn-BA.json @@ -69,6 +69,7 @@ "ig": "igbo", "smn": "inari sami", "id": "indonežanski", + "iu": "inuktitutski", "ga": "irski", "xh": "isikosa", "zu": "isizulu", @@ -82,6 +83,7 @@ "yo": "joruba", "shi": "južni Å¡ilha", "kab": "kabile", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalendžinski", "kam": "kamba", @@ -141,6 +143,7 @@ "ne": "nepalski", "nnh": "ngiembun", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "nds": "niskonjemaÄki", "nds-NL": "niskosaksonski", @@ -172,6 +175,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinski", "ceb": "sebuanski", "ii": "seÄuanski ji", "seh": "sena", @@ -194,7 +198,7 @@ "es": "Å¡panski", "es-419": "Å¡panski (Latinska Amerika)", "es-MX": "Å¡panski (Meksiko)", - "de-CH": "Å¡vajcarski visoki nemaÄki", + "de-CH": "Å¡vajcarski visoki njemaÄki", "sv": "Å¡vedski", "tg": "tadžiÄki", "dav": "taita", diff --git a/vendor/commerceguys/intl/resources/language/sr-Latn-ME.json b/vendor/commerceguys/intl/resources/language/sr-Latn-ME.json index b9758e1c7..383d4d88a 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Latn-ME.json +++ b/vendor/commerceguys/intl/resources/language/sr-Latn-ME.json @@ -69,6 +69,7 @@ "ig": "igbo", "smn": "inari sami", "id": "indonežanski", + "iu": "inuktitutski", "ga": "irski", "xh": "isikosa", "zu": "isizulu", @@ -82,6 +83,7 @@ "yo": "joruba", "shi": "južni Å¡ilha", "kab": "kabile", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalendžinski", "kam": "kamba", @@ -143,6 +145,7 @@ "ne": "nepalski", "nnh": "ngiembun", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "nds": "niskonemaÄki", "nds-NL": "niskosaksonski", @@ -172,6 +175,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinski", "ceb": "sebuanski", "ii": "seÄuanski ji", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/sr-Latn-XK.json b/vendor/commerceguys/intl/resources/language/sr-Latn-XK.json index 05d0d19ba..a665343a7 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Latn-XK.json +++ b/vendor/commerceguys/intl/resources/language/sr-Latn-XK.json @@ -69,6 +69,7 @@ "ig": "igbo", "smn": "inari sami", "id": "indonežanski", + "iu": "inuktitutski", "ga": "irski", "xh": "isikosa", "zu": "isizulu", @@ -82,6 +83,7 @@ "yo": "joruba", "shi": "južni Å¡ilha", "kab": "kabile", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalendžinski", "kam": "kamba", @@ -142,6 +144,7 @@ "ne": "nepalski", "nnh": "ngiembun", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "nds": "niskonemaÄki", "nds-NL": "niskosaksonski", @@ -171,6 +174,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinski", "ceb": "sebuanski", "ii": "seÄuanski ji", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/sr-Latn.json b/vendor/commerceguys/intl/resources/language/sr-Latn.json index dd843aa7a..8ba82065a 100644 --- a/vendor/commerceguys/intl/resources/language/sr-Latn.json +++ b/vendor/commerceguys/intl/resources/language/sr-Latn.json @@ -69,6 +69,7 @@ "ig": "igbo", "smn": "inari sami", "id": "indonežanski", + "iu": "inuktitutski", "ga": "irski", "is": "islandski", "it": "italijanski", @@ -79,6 +80,7 @@ "yi": "jidiÅ¡", "yo": "joruba", "kab": "kabile", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalendžinski", "kam": "kamba", @@ -141,6 +143,7 @@ "ne": "nepalski", "nnh": "ngiembun", "jgo": "ngomba", + "yrl": "Nheengatu", "pcm": "nigerijski pidžin", "nds": "niskonemaÄki", "nds-NL": "niskosaksonski", @@ -170,6 +173,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinski", "ceb": "sebuanski", "ii": "seÄuanski ji", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/sr.json b/vendor/commerceguys/intl/resources/language/sr.json index aab97bfdc..6d328c4c1 100644 --- a/vendor/commerceguys/intl/resources/language/sr.json +++ b/vendor/commerceguys/intl/resources/language/sr.json @@ -57,6 +57,7 @@ "ig": "игбо", "smn": "инари Ñами", "id": "индонежанÑки", + "iu": "инуктитутÑки", "ga": "ирÑки", "is": "иÑландÑки", "it": "италијанÑки", @@ -157,6 +158,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "Ñантали", + "sc": "ÑардинÑки", "sah": "Ñаха", "sw": "Ñвахили", "ceb": "ÑебуанÑки", @@ -223,5 +225,7 @@ "sn": "шона", "es": "шпанÑки", "es-419": "шпанÑки (ЛатинÑка Ðмерика)", - "es-MX": "шпанÑки (МекÑико)" + "es-MX": "шпанÑки (МекÑико)", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sv.json b/vendor/commerceguys/intl/resources/language/sv.json index 9fabdb92b..605c8ec62 100644 --- a/vendor/commerceguys/intl/resources/language/sv.json +++ b/vendor/commerceguys/intl/resources/language/sv.json @@ -62,6 +62,7 @@ "hsb": "högsorbiska", "ig": "igbo", "id": "indonesiska", + "iu": "inuktitut", "ga": "iriska", "is": "isländska", "it": "italienska", @@ -71,6 +72,7 @@ "yi": "jiddisch", "dyo": "jola-fonyi", "kab": "kabyliska", + "kgp": "kaingang", "kln": "kalenjin", "kam": "kamba", "km": "kambodjanska", @@ -138,6 +140,7 @@ "nl": "nederländska", "ne": "nepalesiska", "jgo": "ngomba", + "yrl": "nheengatu", "pcm": "nigeriansk pidgin", "lrc": "nordluri", "nd": "nordndebele", @@ -166,6 +169,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardinska", "gsw": "schweizertyska", "fr-CH": "schweizisk franska", "de-CH": "schweizisk högtyska", diff --git a/vendor/commerceguys/intl/resources/language/sw-CD.json b/vendor/commerceguys/intl/resources/language/sw-CD.json index 4090449fc..de4631f60 100644 --- a/vendor/commerceguys/intl/resources/language/sw-CD.json +++ b/vendor/commerceguys/intl/resources/language/sw-CD.json @@ -1,5 +1,5 @@ { - "doi": "Dogri", + "kgp": "Kaingang", "af": "Kiafrikana", "agq": "Kiaghem", "fa": "Kiajemi", @@ -37,6 +37,7 @@ "zh-Hant": "Kichina cha Jadi", "ksh": "Kicologne", "da": "Kidenmaki", + "doi": "Kidogri", "dua": "Kiduala", "he": "Kiebrania", "ebu": "Kiembu", @@ -72,6 +73,7 @@ "en-AU": "Kiingereza (Australia)", "en-CA": "Kiingereza (Canada)", "en-GB": "Kiingereza (Uingereza)", + "iu": "Kiinuktituti", "is": "Kiisilandi", "it": "Kiitaliano", "luo": "Kijaluo", @@ -173,6 +175,7 @@ "sbp": "Kisangu", "sa": "Kisanskriti", "sat": "Kisantali", + "sc": "Kisardinia", "seh": "Kisena", "sr": "Kiserbia", "sn": "Kishona", @@ -223,5 +226,6 @@ "dz": "Kizongkha", "zu": "Kizulu", "rwk": "Lugha ya Rwa", + "yrl": "Nheengatu", "pcm": "Pijini ya Nijeria" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sw-KE.json b/vendor/commerceguys/intl/resources/language/sw-KE.json index fd5a91a11..d9f30441f 100644 --- a/vendor/commerceguys/intl/resources/language/sw-KE.json +++ b/vendor/commerceguys/intl/resources/language/sw-KE.json @@ -1,5 +1,5 @@ { - "doi": "Dogri", + "kgp": "Kaingang", "af": "Kiafrikana", "agq": "Kiaghem", "fa": "Kiajemi", @@ -36,6 +36,7 @@ "zh-Hant": "Kichina cha Jadi", "ksh": "Kicologne", "da": "Kidenmaki", + "doi": "Kidogri", "dua": "Kiduala", "he": "Kiebrania", "ebu": "Kiembu", @@ -72,6 +73,7 @@ "en-CA": "Kiingereza (Canada)", "en-GB": "Kiingereza (Uingereza)", "nnh": "Kiingiemboon", + "iu": "Kiinuktituti", "is": "Kiisilandi", "it": "Kiitaliano", "luo": "Kijaluo", @@ -173,6 +175,7 @@ "sbp": "Kisangu", "sa": "Kisanskriti", "sat": "Kisantali", + "sc": "Kisardinia", "seh": "Kisena", "sr": "Kiserbia", "sn": "Kishona", @@ -223,5 +226,6 @@ "dje": "Kizarma", "dz": "Kizongkha", "zu": "Kizulu", - "rwk": "Lugha ya Rwa" + "rwk": "Lugha ya Rwa", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/sw.json b/vendor/commerceguys/intl/resources/language/sw.json index 24ffb1d29..be663771c 100644 --- a/vendor/commerceguys/intl/resources/language/sw.json +++ b/vendor/commerceguys/intl/resources/language/sw.json @@ -1,5 +1,5 @@ { - "doi": "Dogri", + "kgp": "Kaingang", "af": "Kiafrikana", "agq": "Kiaghem", "fa": "Kiajemi", @@ -37,6 +37,7 @@ "zh-Hant": "Kichina cha Jadi", "ksh": "Kicologne", "da": "Kidenmaki", + "doi": "Kidogri", "dua": "Kiduala", "he": "Kiebrania", "ebu": "Kiembu", @@ -72,6 +73,7 @@ "en-AU": "Kiingereza (Australia)", "en-CA": "Kiingereza (Canada)", "en-GB": "Kiingereza (Uingereza)", + "iu": "Kiinuktituti", "is": "Kiisilandi", "it": "Kiitaliano", "luo": "Kijaluo", @@ -171,6 +173,7 @@ "sbp": "Kisangu", "sa": "Kisanskriti", "sat": "Kisantali", + "sc": "Kisardinia", "seh": "Kisena", "sr": "Kiserbia", "sn": "Kishona", @@ -223,5 +226,6 @@ "kkj": "Lugha ya Kako", "nnh": "Lugha ya Ngiemboon", "rwk": "Lugha ya Rwa", + "yrl": "Nheengatu", "pcm": "Pijini ya Nigeria" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ta.json b/vendor/commerceguys/intl/resources/language/ta.json index 8a0c065ef..a174a705e 100644 --- a/vendor/commerceguys/intl/resources/language/ta.json +++ b/vendor/commerceguys/intl/resources/language/ta.json @@ -19,6 +19,7 @@ "hi": "இநà¯à®¤à®¿", "id": "இநà¯à®¤à¯‹à®©à¯‡à®·à®¿à®¯à®©à¯", "smn": "இனாரி சமி", + "iu": "இனà¯à®•à®¿à®Ÿà¯‚டà¯", "ee": "ஈவà¯", "uk": "உகà¯à®°à¯ˆà®©à®¿à®¯à®©à¯", "ug": "உயà¯à®•à¯à®°à¯", @@ -80,6 +81,7 @@ "saq": "சமà¯à®ªà¯à®°à¯", "sa": "சமஸà¯à®•à®¿à®°à¯à®¤à®®à¯", "sg": "சாஙà¯à®•à¯‹", + "sc": "சாரà¯à®¤à¯€à®©à®¿à®¯à®©à¯", "sat": "சானà¯à®Ÿà®¾à®²à®¿", "cgg": "சிகா", "si": "சிஙà¯à®•à®³à®®à¯", @@ -223,5 +225,7 @@ "haw": "ஹவாயியனà¯", "he": "ஹீபà¯à®°à¯‚", "xh": "ஹோசா", - "ha": "ஹௌஸா" + "ha": "ஹௌஸா", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/te.json b/vendor/commerceguys/intl/resources/language/te.json index 6436d4036..baada99cd 100644 --- a/vendor/commerceguys/intl/resources/language/te.json +++ b/vendor/commerceguys/intl/resources/language/te.json @@ -20,6 +20,7 @@ "it": "ఇటాలియనà±", "yi": "ఇడà±à°¡à°¿à°·à±", "smn": "ఇనారి సామి", + "iu": "ఇనà±à°•à±à°Ÿà°¿à°Ÿà±à°Ÿà±", "uk": "ఉకà±à°°à±†à°¯à°¿à°¨à°¿à°¯à°¨à±", "uz": "ఉజà±à°¬à±†à°•à±", "nd": "ఉతà±à°¤à°° దెబెలె", @@ -201,6 +202,7 @@ "sg": "సాంగో", "zh-Hant": "సాంపà±à°°à°¦à°¾à°¯à°• చైనీసà±", "sah": "సాఖా", + "sc": "సారà±à°¡à±€à°¨à°¿à°¯à°¨à±", "sd": "సింధీ", "si": "సింహళం", "tzm": "సెంటà±à°°à°²à± à°…à°Ÿà±à°²à°¾à°¸à± టామాజైటà±", @@ -223,5 +225,7 @@ "haw": "హవాయియనà±", "hi": "హిందీ", "he": "హిబà±à°°à±‚", - "ha": "హౌసా" + "ha": "హౌసా", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/tg.json b/vendor/commerceguys/intl/resources/language/tg.json index 56d600e88..8f127ac6a 100644 --- a/vendor/commerceguys/intl/resources/language/tg.json +++ b/vendor/commerceguys/intl/resources/language/tg.json @@ -25,6 +25,7 @@ "dyo": "Jola-Fonyi", "kea": "Kabuverdianu", "kab": "Kabyle", + "kgp": "Kaingang", "kkj": "Kako", "kl": "Kalaallisut", "kln": "Kalenjin", @@ -54,6 +55,7 @@ "nds-NL": "nds (ÐидерландиÑ)", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "nd": "North Ndebele", "lrc": "Northern Luri", @@ -68,6 +70,7 @@ "saq": "Samburu", "sg": "Sango", "sbp": "Sangu", + "sc": "Sardinian", "seh": "Sena", "ksb": "Shambala", "sn": "Shona", @@ -123,6 +126,7 @@ "yi": "идиш", "smn": "инари Ñамӣ", "id": "индонезӣ", + "iu": "инуктитутӣ", "ga": "ирландӣ", "is": "иÑландӣ", "es": "иÑпанӣ", diff --git a/vendor/commerceguys/intl/resources/language/th.json b/vendor/commerceguys/intl/resources/language/th.json index 72ed46974..6a6ce934e 100644 --- a/vendor/commerceguys/intl/resources/language/th.json +++ b/vendor/commerceguys/intl/resources/language/th.json @@ -24,6 +24,7 @@ "ky": "คีร์à¸à¸µà¸‹", "gu": "คุชราต", "qu": "เคชวา", + "kgp": "เคนà¸à¹ˆà¸²à¸‡", "ku": "เคิร์ด", "ckb": "เคิร์ดตà¸à¸™à¸à¸¥à¸²à¸‡", "ks": "à¹à¸„ชเมียร์", @@ -50,6 +51,7 @@ "sah": "ซาคา", "se": "ซามิเหนืà¸", "smn": "ซามิà¸à¸µà¸™à¸²à¸£à¸µ", + "sc": "ซาร์เดà¸à¸²", "dje": "ซาร์มา", "su": "ซุนดา", "zu": "ซูลู", @@ -187,6 +189,7 @@ "si": "สิงหล", "sd": "สินธิ", "ii": "เสฉวนยี่", + "yrl": "เหงงà¸à¸²à¸•à¸¸", "os": "à¸à¸à¸ªà¹€à¸‹à¹€à¸•à¸µà¸¢", "agq": "à¸à¸±à¸à¹€à¸®à¸¡", "en": "à¸à¸±à¸‡à¸à¸¤à¸©", @@ -204,6 +207,7 @@ "ig": "à¸à¸´à¸à¹‚บ", "it": "à¸à¸´à¸•à¸²à¸¥à¸µ", "id": "à¸à¸´à¸™à¹‚ดนีเซีย", + "iu": "à¸à¸´à¸™à¸¸à¸à¸•à¸´à¸•à¸¸à¸•", "ewo": "à¸à¸µà¸§à¸±à¸™à¹‚ด", "jgo": "à¸à¸¶à¸™à¸à¸à¸¡à¸šà¸²", "uz": "à¸à¸¸à¸‹à¹€à¸šà¸", diff --git a/vendor/commerceguys/intl/resources/language/tk.json b/vendor/commerceguys/intl/resources/language/tk.json index d346e444a..68f689de5 100644 --- a/vendor/commerceguys/intl/resources/language/tk.json +++ b/vendor/commerceguys/intl/resources/language/tk.json @@ -69,6 +69,7 @@ "ig": "igbo dili", "smn": "inari-saam dili", "id": "indonez dili", + "iu": "inuktitut dili", "en": "iňlis dili", "en-AU": "iňlis dili (Awstraliýa)", "en-GB": "iňlis dili (Beýik Britaniýa)", @@ -81,6 +82,7 @@ "it": "italýan dili", "kab": "kabil dili", "kea": "kabuwerdianu dili", + "kgp": "Kaingang", "kkj": "kako dili", "kln": "kalenjin dili", "kam": "kamba dili", @@ -141,9 +143,10 @@ "ne": "nepal dili", "nnh": "ngembun dili", "jgo": "ngomba dili", + "yrl": "Nheengatu", "nl": "niderland dili", "pcm": "nigeriýa-pijin dili", - "no": "Norwegian", + "no": "norweg dili", "nb": "norwegiýa bukmol dili", "nn": "norwegiýa nýunorsk dili", "nus": "nuer dili", @@ -170,6 +173,7 @@ "sbp": "sangu dili", "sa": "sanskrit dili", "sat": "santali dili", + "sc": "sardin dili", "ceb": "sebuan dili", "seh": "sena dili", "sr": "serb dili", diff --git a/vendor/commerceguys/intl/resources/language/to.json b/vendor/commerceguys/intl/resources/language/to.json index b988c2f5e..9c6b75083 100644 --- a/vendor/commerceguys/intl/resources/language/to.json +++ b/vendor/commerceguys/intl/resources/language/to.json @@ -19,6 +19,7 @@ "dyo": "lea fakaiola-fonÄ«", "yi": "lea fakaÄ«tisi", "gd": "lea fakakaeliki", + "kgp": "lea fakakaingangi", "kkj": "lea fakakako", "kl": "lea fakakalaÊ»alisuti", "kln": "lea fakakalenisini", @@ -90,6 +91,7 @@ "naq": "lea fakanama", "ne": "lea fakanepali", "nd": "lea fakanetepele-tokelau", + "yrl": "lea fakaneʻēngatÅ«", "nyn": "lea fakanianikole", "jgo": "lea fakanikÅmipa", "nn": "lea fakanoauÄ“-ninosiki", @@ -122,6 +124,7 @@ "pa": "lea fakapÅ«nusapi", "sah": "lea fakasaka", "nds-NL": "lea fakasakisoni-hifo", + "sc": "lea fakasaletÄ«nia", "se": "lea fakasami-tokelau", "smn": "lea fakasami-Ê»inali", "saq": "lea fakasamipulu", @@ -212,6 +215,7 @@ "ml": "lea fakaÊ»initia-malÄialami", "te": "lea fakaÊ»initia-teluku", "id": "lea fakaÊ»initÅnesia", + "iu": "lea fakaÊ»inuketituti", "yo": "lea fakaÊ»iÅlupa", "it": "lea fakaʻītali", "om": "lea fakaÊ»olomo", diff --git a/vendor/commerceguys/intl/resources/language/tr.json b/vendor/commerceguys/intl/resources/language/tr.json index 750dac0ae..297740b7c 100644 --- a/vendor/commerceguys/intl/resources/language/tr.json +++ b/vendor/commerceguys/intl/resources/language/tr.json @@ -72,6 +72,7 @@ "smn": "Ä°nari Laponcası", "en-GB": "Ä°ngiliz Ä°ngilizcesi", "en": "Ä°ngilizce", + "iu": "Ä°nuktitut dili", "ga": "Ä°rlandaca", "gd": "Ä°skoç Gaelcesi", "es": "Ä°spanyolca", @@ -85,6 +86,7 @@ "dyo": "Jola-Fonyi", "kab": "Kabiliyece", "kea": "Kabuverdianu", + "kgp": "Kaingang", "kkj": "Kako", "kln": "Kalenjin", "kam": "Kamba", @@ -152,6 +154,7 @@ "ne": "Nepalce", "nnh": "Ngiemboon", "jgo": "Ngomba", + "yrl": "Nheengatu", "pcm": "Nijerya Pidgin dili", "no": "Norveççe", "nb": "Norveççe BokmÃ¥l", @@ -177,6 +180,7 @@ "sbp": "Sangu", "sa": "Sanskrit", "sat": "Santali", + "sc": "Sardunya dili", "ceb": "Sebuano dili", "seh": "Sena", "sr": "Sırpça", diff --git a/vendor/commerceguys/intl/resources/language/uk.json b/vendor/commerceguys/intl/resources/language/uk.json index 8072ef0fa..f8d3e4b5a 100644 --- a/vendor/commerceguys/intl/resources/language/uk.json +++ b/vendor/commerceguys/intl/resources/language/uk.json @@ -1,12 +1,13 @@ { - "en-AU": "авÑтралійÑька англійÑька", - "de-AT": "авÑтрійÑька німецька", "agq": "агем", "az": "азербайджанÑька", "ak": "акан", "sq": "албанÑька", "am": "амхарÑька", "en": "англійÑька", + "en-AU": "англійÑька (ÐвÑтраліÑ)", + "en-GB": "англійÑька (Велика БританіÑ)", + "en-CA": "англійÑька (Канада)", "ar": "арабÑька", "as": "аÑамÑька", "ast": "аÑтурійÑька", @@ -25,7 +26,6 @@ "bg": "болгарÑька", "bs": "боÑнійÑька", "br": "бретонÑька", - "en-GB": "британÑька англійÑька", "vai": "ваї", "cy": "валлійÑька", "wa": "валлонÑька", @@ -59,6 +59,7 @@ "he": "іврит", "ig": "ігбо", "id": "індонезійÑька", + "iu": "інуктітут", "ga": "ірландÑька", "is": "Ñ–ÑландÑька", "es": "Ñ–ÑпанÑька", @@ -72,7 +73,6 @@ "kl": "калаалліÑут", "kln": "календжин", "kam": "камба", - "en-CA": "канадÑька англійÑька", "fr-CA": "канадÑька французька", "kn": "каннада", "yue": "кантонÑька", @@ -138,6 +138,7 @@ "pcm": "нігерійÑько-креольÑька", "nl": "нідерландÑька", "de": "німецька", + "de-AT": "німецька (ÐвÑтріÑ)", "no": "норвезька", "nb": "норвезька (букмол)", "nn": "норвезька (нюношк)", @@ -166,6 +167,7 @@ "sbp": "Ñангу", "sa": "ÑанÑкрит", "sat": "ÑантальÑька", + "sc": "ÑардинÑька", "sah": "Ñаха", "ceb": "ÑебуанÑька", "seh": "Ñена", @@ -223,5 +225,7 @@ "gd": "шотландÑька гельÑька", "jv": "ÑванÑька", "yav": "Ñнгбен", - "ja": "ÑпонÑька" + "ja": "ÑпонÑька", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ur-IN.json b/vendor/commerceguys/intl/resources/language/ur-IN.json index 67bc19994..3b3e61525 100644 --- a/vendor/commerceguys/intl/resources/language/ur-IN.json +++ b/vendor/commerceguys/intl/resources/language/ur-IN.json @@ -20,6 +20,7 @@ "en": "انگریزی", "om": "اورومو", "os": "اوسیٹک", + "iu": "اینÙکٹیٹٹ", "ee": "ایو", "ewo": "ایوانڈو", "az": "آذربائیجانی", @@ -76,6 +77,7 @@ "km": "خمیر", "dua": "دوالا", "nl": "ÚˆÚ†", + "doi": "ڈوگری", "da": "ڈینش", "dsb": "ذیلی سربیائی", "rwk": "روا", @@ -95,6 +97,7 @@ "sg": "ساںغو", "ii": "سچوان ای", "sr": "سربین", + "sc": "سردینین", "gd": "سکاٹش گیلک", "sk": "سلوواک", "sl": "سلووینیائی", @@ -223,5 +226,6 @@ "uk": "یوکرینیائی", "el": "یونانی", "ug": "یوئگÛر", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/ur.json b/vendor/commerceguys/intl/resources/language/ur.json index 1200d8639..accdbae79 100644 --- a/vendor/commerceguys/intl/resources/language/ur.json +++ b/vendor/commerceguys/intl/resources/language/ur.json @@ -21,6 +21,7 @@ "en": "انگریزی", "om": "اورومو", "os": "اوسیٹک", + "iu": "اینÙکٹیٹٹ", "ee": "ایو", "ewo": "ایوانڈو", "az": "آذربائیجانی", @@ -77,6 +78,7 @@ "km": "خمیر", "dua": "دوالا", "nl": "ÚˆÚ†", + "doi": "ڈوگری", "da": "ڈینش", "dsb": "ذیلی سربیائی", "rwk": "روا", @@ -96,6 +98,7 @@ "sg": "ساںغو", "ii": "سچوان ای", "sr": "سربین", + "sc": "سردینین", "gd": "سکاٹش گیلک", "sk": "سلوواک", "sl": "سلووینیائی", @@ -223,5 +226,6 @@ "uk": "یوکرینیائی", "el": "یونانی", "ug": "یوئگÛر", - "doi": "Dogri" + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/language/uz-Cyrl.json b/vendor/commerceguys/intl/resources/language/uz-Cyrl.json index 6b0142d3e..2d7442eb6 100644 --- a/vendor/commerceguys/intl/resources/language/uz-Cyrl.json +++ b/vendor/commerceguys/intl/resources/language/uz-Cyrl.json @@ -1,12 +1,15 @@ { "doi": "Dogri", + "kgp": "Kaingang", "nds": "Low German", "luo": "Luo", "mai": "Maithili", "nds-NL": "nds (ÐидерландиÑ)", + "yrl": "Nheengatu", "pcm": "Nigerian Pidgin", "no": "Norwegian", "os": "Ossetic", + "sc": "Sardinian", "ii": "Sichuan Yi", "wa": "Walloon", "agq": "агемча", @@ -64,6 +67,7 @@ "en-GB": "инглизча (БританиÑ)", "en-CA": "инглизча (Канада)", "id": "индонезча", + "iu": "инуктитут", "ga": "ирландча", "is": "иÑландча", "es": "иÑпанча", diff --git a/vendor/commerceguys/intl/resources/language/uz.json b/vendor/commerceguys/intl/resources/language/uz.json index fccaf004a..22d601352 100644 --- a/vendor/commerceguys/intl/resources/language/uz.json +++ b/vendor/commerceguys/intl/resources/language/uz.json @@ -24,7 +24,7 @@ "br": "breton", "da": "dan", "dyo": "diola-fogni", - "doi": "Dogri", + "doi": "dogri", "dua": "duala", "dz": "dzongka", "ebu": "embu", @@ -58,6 +58,7 @@ "en-GB": "ingliz (Britaniya)", "en-CA": "ingliz (Kanada)", "en": "inglizcha", + "iu": "inuktitut", "ga": "irland", "is": "island", "es-419": "ispan (Lotin Amerikasi)", @@ -67,6 +68,7 @@ "he": "ivrit", "kab": "kabil", "kea": "kabuverdianu", + "kgp": "Kaingang", "kkj": "kako", "kln": "kalenjin", "kam": "kamba", @@ -125,10 +127,11 @@ "ne": "nepal", "nnh": "ngiyembun", "jgo": "ngomba", + "yrl": "Nheengatu", "nl": "niderland", + "no": "norveg", "nb": "norveg-bokmal", "nn": "norveg-nyunorsk", - "no": "Norwegian", "nus": "nuer", "nyn": "nyankole", "or": "oriya", @@ -156,6 +159,7 @@ "sbp": "sangu", "sa": "sanskrit", "sat": "santali", + "sc": "sardin", "sah": "saxa", "ceb": "sebuan", "seh": "sena", diff --git a/vendor/commerceguys/intl/resources/language/vi.json b/vendor/commerceguys/intl/resources/language/vi.json index 54db88990..bffa71df1 100644 --- a/vendor/commerceguys/intl/resources/language/vi.json +++ b/vendor/commerceguys/intl/resources/language/vi.json @@ -1,4 +1,6 @@ { + "kgp": "Kaingang", + "yrl": "Nheengatu", "ar": "Tiếng Ả Ráºp", "af": "Tiếng Afrikaans", "agq": "Tiếng Aghem", @@ -77,6 +79,7 @@ "ig": "Tiếng Igbo", "smn": "Tiếng Inari Sami", "id": "Tiếng Indonesia", + "iu": "Tiếng Inuktitut", "ga": "Tiếng Ireland", "it": "Tiếng Italy", "jv": "Tiếng Java", @@ -120,7 +123,7 @@ "ml": "Tiếng Malayalam", "mt": "Tiếng Malta", "mni": "Tiếng Manipuri", - "mi": "Tiếng Maori", + "mi": "Tiếng MÄori", "mr": "Tiếng Marathi", "mas": "Tiếng Masai", "mzn": "Tiếng Mazanderani", @@ -168,6 +171,7 @@ "sg": "Tiếng Sango", "sbp": "Tiếng Sangu", "sat": "Tiếng Santali", + "sc": "Tiếng Sardinia", "cs": "Tiếng Séc", "seh": "Tiếng Sena", "sr": "Tiếng Serbia", diff --git a/vendor/commerceguys/intl/resources/language/yue-Hans.json b/vendor/commerceguys/intl/resources/language/yue-Hans.json index 757657509..87f9cf345 100644 --- a/vendor/commerceguys/intl/resources/language/yue-Hans.json +++ b/vendor/commerceguys/intl/resources/language/yue-Hans.json @@ -84,6 +84,7 @@ "kkj": "å¡åº“æ–‡", "kln": "å¡ä¼¦é‡‘æ–‡", "kam": "å¡å§†å·´æ–‡", + "kgp": "åŽåˆšæ–‡", "kn": "åŽé‚£è¾¾æ–‡", "kw": "康瓦耳文", "ksh": "科隆文", @@ -130,6 +131,7 @@ "my": "缅甸文", "ro-MD": "摩尔多瓦文", "naq": "纳马文", + "yrl": "奈æ©åŠ 图文", "nn": "è€è¯ºæ–¯å…‹æŒªå¨æ–‡", "af": "å—éžè·å…°æ–‡", "ne": "尼泊尔文", @@ -146,6 +148,7 @@ "ka": "乔治亚文", "ja": "日文", "sv": "瑞典文", + "sc": "æ’’ä¸æ–‡", "saq": "è¨å¸ƒé²æ–‡", "sr": "塞尔维亚文", "sn": "å¡žå†…åŠ å°”æ–‡", @@ -209,6 +212,7 @@ "ewo": "ä¾æ±ªéƒ½æ–‡", "it": "义大利文", "yi": "æ„第绪文", + "iu": "å› çº½ç‰¹æ–‡", "id": "å°å°¼æ–‡", "en": "英文", "en-AU": "英文 (澳洲)", diff --git a/vendor/commerceguys/intl/resources/language/yue.json b/vendor/commerceguys/intl/resources/language/yue.json index c5633cec3..5192cb480 100644 --- a/vendor/commerceguys/intl/resources/language/yue.json +++ b/vendor/commerceguys/intl/resources/language/yue.json @@ -49,6 +49,7 @@ "id": "å°å°¼æ–‡", "ki": "å‰åº«å°¤æ–‡", "ky": "å‰çˆ¾å‰æ–¯æ–‡", + "iu": "å› ç´ç‰¹æ–‡", "doi": "å¤šæ ¼ä¾†æ–‡", "nmg": "夸西奧文", "dyo": "朱拉文", @@ -65,6 +66,7 @@ "bem": "別姆巴文", "nus": "努埃爾文", "kn": "åŽé‚£é”æ–‡", + "kgp": "åŽå‰›æ–‡", "he": "希伯來文", "shi": "希爾哈文", "el": "希臘文", @@ -78,6 +80,7 @@ "ewo": "ä¾æ±ªéƒ½æ–‡", "ta": "å¦ç±³çˆ¾æ–‡", "cgg": "å¥‡åŠ æ–‡", + "yrl": "奈æ©åŠ 圖文", "bn": "åŸåŠ 拉文", "dz": "å®—å¡æ–‡", "ksb": "尚巴拉文", @@ -203,6 +206,7 @@ "de-AT": "å¾·æ–‡ (奧地利)", "gsw": "德文(瑞士)", "ro-MD": "摩爾多瓦文", + "sc": "æ’’ä¸æ–‡", "zgh": "標準摩洛哥塔馬塞特文", "or": "æ利亞文", "my": "緬甸文", diff --git a/vendor/commerceguys/intl/resources/language/zh-Hant-HK.json b/vendor/commerceguys/intl/resources/language/zh-Hant-HK.json index b30718a4d..96f2d10fc 100644 --- a/vendor/commerceguys/intl/resources/language/zh-Hant-HK.json +++ b/vendor/commerceguys/intl/resources/language/zh-Hant-HK.json @@ -54,6 +54,7 @@ "hi": "å°åœ°æ–‡", "ki": "å‰åº«å°¤æ–‡", "ky": "å‰çˆ¾å‰æ–¯æ–‡", + "iu": "å› ç´ç‰¹æ–‡", "doi": "å¤šæ ¼ä¾†æ–‡", "nmg": "夸西奧文", "dyo": "朱拉文", @@ -66,6 +67,7 @@ "hr": "克羅地亞文", "bem": "別姆巴文", "nus": "努埃爾文", + "kgp": "åŽå‰›æ–‡", "kn": "åŽç´é”æ–‡", "he": "希伯來文", "shi": "希爾哈文", @@ -78,6 +80,7 @@ "hy": "亞美尼亞文", "ewo": "ä¾æ±ªéƒ½æ–‡", "cgg": "å¥‡åŠ æ–‡", + "yrl": "奈æ©åŠ 圖文", "bn": "åŸåŠ 拉文", "dz": "å®—å¡æ–‡", "ksb": "尚巴拉文", @@ -202,6 +205,7 @@ "de": "å¾·æ–‡", "zgh": "æ‘©æ´›å“¥æ¨™æº–å¡”é¦¬é½Šæ ¼ç‰¹æ–‡", "ro-MD": "摩爾多瓦羅馬尼亞文", + "sc": "æ’’ä¸æ–‡", "pt-PT": "æ洲葡è„牙文", "my": "緬甸文", "lu": "é¯å·´åŠ ä¸¹åŠ æ–‡", diff --git a/vendor/commerceguys/intl/resources/language/zh-Hant.json b/vendor/commerceguys/intl/resources/language/zh-Hant.json index 8c45d81fe..87e755933 100644 --- a/vendor/commerceguys/intl/resources/language/zh-Hant.json +++ b/vendor/commerceguys/intl/resources/language/zh-Hant.json @@ -50,6 +50,7 @@ "hi": "å°åœ°æ–‡", "ki": "å‰åº«å°¤æ–‡", "ky": "å‰çˆ¾å‰æ–¯æ–‡", + "iu": "å› ç´ç‰¹æ–‡", "doi": "å¤šæ ¼ä¾†æ–‡", "nmg": "夸西奧文", "dyo": "朱拉文", @@ -66,6 +67,7 @@ "bem": "別姆巴文", "nus": "努埃爾文", "kn": "åŽé‚£é”æ–‡", + "kgp": "åŽå‰›æ–‡", "he": "希伯來文", "shi": "希爾哈文", "el": "希臘文", @@ -80,6 +82,7 @@ "ta": "å¦ç±³çˆ¾æ–‡", "cgg": "å¥‡åŠ æ–‡", "pcm": "奈åŠåˆ©äºžçš®æ¬½æ–‡", + "yrl": "奈æ©åŠ 圖文", "bn": "åŸåŠ 拉文", "dz": "å®—å¡æ–‡", "ksb": "尚巴拉文", @@ -203,6 +206,7 @@ "de-AT": "德文(奧地利)", "gsw": "德文(瑞士)", "ro-MD": "摩爾多瓦文", + "sc": "æ’’ä¸æ–‡", "zgh": "標準摩洛哥塔馬塞特文", "or": "æ迪亞文", "my": "緬甸文", diff --git a/vendor/commerceguys/intl/resources/language/zh.json b/vendor/commerceguys/intl/resources/language/zh.json index df6fb5f30..459a2d7ec 100644 --- a/vendor/commerceguys/intl/resources/language/zh.json +++ b/vendor/commerceguys/intl/resources/language/zh.json @@ -151,6 +151,7 @@ "gsw": "瑞士德è¯", "fr-CH": "瑞士法è¯", "de-CH": "瑞士高地德è¯", + "sc": "è¨ä¸è¯", "sah": "è¨å“ˆè¯", "sr": "塞尔维亚è¯", "seh": "塞纳è¯", @@ -210,6 +211,7 @@ "smn": "伊纳里è¨ç±³è¯", "it": "æ„大利è¯", "yi": "æ„第绪è¯", + "iu": "å› çº½ç‰¹è¯", "hi": "å°åœ°è¯", "id": "å°åº¦å°¼è¥¿äºšè¯", "en-GB": "英国英è¯", @@ -223,5 +225,7 @@ "zh": "ä¸æ–‡", "dyo": "朱拉è¯", "dz": "å®—å¡è¯", - "zu": "祖é²è¯" + "zu": "祖é²è¯", + "kgp": "Kaingang", + "yrl": "Nheengatu" }
\ No newline at end of file diff --git a/vendor/commerceguys/intl/scripts/fetch_data.sh b/vendor/commerceguys/intl/scripts/fetch_data.sh index 1b3a339a5..f5c3f2110 100755 --- a/vendor/commerceguys/intl/scripts/fetch_data.sh +++ b/vendor/commerceguys/intl/scripts/fetch_data.sh @@ -6,7 +6,7 @@ rm -fR assets mkdir assets cd assets -git clone https://github.com/unicode-org/cldr-json.git cldr +git clone --depth 1 https://github.com/unicode-org/cldr-json.git cldr if command -v wget >/dev/null 2>&1; then diff --git a/vendor/commerceguys/intl/scripts/generate_base.php b/vendor/commerceguys/intl/scripts/generate_base.php index 102a2cfae..a299c15cf 100644 --- a/vendor/commerceguys/intl/scripts/generate_base.php +++ b/vendor/commerceguys/intl/scripts/generate_base.php @@ -31,12 +31,15 @@ if (!function_exists('collator_create')) { // Locales listed without a "-" match all variants. // Locales listed with a "-" match only those exact ones. $ignoredLocales = [ + // English is our fallback, we don't need another. + 'und', // Esperanto, Interlingua, Volapuk are made up languages. 'eo', 'ia', 'vo', - // Church Slavic, Manx, Prussian, Sanskrit are historical languages. - 'cu', 'gv', 'prg', 'sa', + // Belarus (Classical orthography), Church Slavic, Manx, Prussian, + // Sanskrit are historical languages. + 'be-tarask', 'cu', 'gv', 'prg', 'sa', // Valencian differs from its parent only by a single character (è/é). - 'ca-ES-VALENCIA', + 'ca-ES-valencia', // Africa secondary languages. 'agq', 'ak', 'am', 'asa', 'bas', 'bem', 'bez', 'bm', 'cgg', 'dav', 'dje', 'dua', 'dyo', 'ebu', 'ee', 'ewo', 'ff', 'ff-Latn', 'guz', @@ -48,12 +51,11 @@ $ignoredLocales = [ 'wo', 'xog', 'xh', 'zgh', 'yav', 'yo', 'zu', // Europe secondary languages. 'br', 'dsb', 'fo', 'fur', 'fy', 'hsb', 'ksh', 'kw', 'nds', 'or', 'rm', - 'se', 'smn', 'wae', + 'sc', 'se', 'smn', 'wae', // Other infrequently used locales. - 'ceb', 'ccp', 'chr', 'ckb', 'haw', 'ii', 'jv', 'kl', 'kn', 'lkt', + 'ceb', 'ccp', 'chr', 'ckb', 'haw', 'ii', 'jv', 'kgp', 'kl', 'kn', 'lkt', 'lrc', 'mi', 'mzn', 'os', 'qu', 'row', 'sah', 'su', 'tt', 'ug', 'yi', - // Special "grouping" locales. - 'root', 'en-US-POSIX', + 'yrl', ]; /** diff --git a/vendor/commerceguys/intl/scripts/generate_language_data.php b/vendor/commerceguys/intl/scripts/generate_language_data.php index c6215e3fd..34279f444 100644 --- a/vendor/commerceguys/intl/scripts/generate_language_data.php +++ b/vendor/commerceguys/intl/scripts/generate_language_data.php @@ -78,8 +78,8 @@ function generate_languages() // Skip all languages that aren't an available locale at the same time. // This reduces the language list from about 515 to about 185 languages. $allowedLanguages = scandir($localeDirectory); - $allowedLanguages[] = 'wa'; - $allowedLanguages = array_diff($allowedLanguages, ['eo', 'ia', 'vo', 'cu', 'gv', 'prg', 'root']); + $allowedLanguages = array_merge($allowedLanguages, ['iu', 'wa']); + $allowedLanguages = array_diff($allowedLanguages, ['eo', 'ia', 'vo', 'cu', 'gv', 'prg', 'und']); // Languages that are untranslated in most locales (as of CLDR v34). $allowedLanguages = array_diff($allowedLanguages, ['ccp', 'fa-AF']); diff --git a/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php b/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php index ad06ce5c0..e412587b8 100644 --- a/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php +++ b/vendor/commerceguys/intl/src/Currency/CurrencyRepository.php @@ -46,16 +46,16 @@ class CurrencyRepository implements CurrencyRepositoryInterface protected $availableLocales = [ 'af', 'ar', 'as', 'ast', 'az', 'be', 'bg', 'bn', 'brx', 'bs', 'bs-Cyrl', 'ca', 'ce', 'cs', 'cy', 'da', 'de', 'de-CH', 'dz', 'el', 'en', 'en-001', - 'en-AU', 'en-GG', 'en-IM', 'en-JE', 'es', 'es-419', 'es-CL', 'es-GT', - 'es-MX', 'es-US', 'es-VE', 'et', 'eu', 'fa', 'fa-AF', 'fi', 'fil', 'fr', - 'fr-CA', 'ga', 'gd', 'gl', 'gsw', 'gu', 'he', 'hi', 'hr', 'hu', 'hy', - 'id', 'is', 'it', 'ja', 'ka', 'kk', 'km', 'ko', 'kok', 'ks', 'ky', 'lb', - 'lo', 'lt', 'lv', 'mg', 'mk', 'ml', 'mn', 'mr', 'ms', 'my', 'nb', 'ne', - 'nl', 'nn', 'no', 'pa', 'pl', 'ps', 'pt', 'pt-PT', 'rn', 'ro', 'ru', - 'sd', 'si', 'sk', 'sl', 'so', 'sq', 'sr', 'sr-Cyrl-BA', 'sr-Latn', - 'sr-Latn-BA', 'sv', 'sw', 'sw-CD', 'sw-KE', 'ta', 'te', 'th', 'tk', - 'tr', 'uk', 'ur', 'ur-IN', 'uz', 'uz-Cyrl', 'vi', 'yue', 'yue-Hans', - 'zh', 'zh-Hans-HK', 'zh-Hant', 'zh-Hant-HK' + 'en-AU', 'en-CA', 'en-GG', 'en-IM', 'en-JE', 'en-PH', 'es', 'es-419', + 'es-CL', 'es-GT', 'es-MX', 'es-US', 'es-VE', 'et', 'eu', 'fa', 'fa-AF', + 'fi', 'fil', 'fr', 'fr-CA', 'ga', 'gd', 'gl', 'gsw', 'gu', 'he', 'hi', + 'hr', 'hu', 'hy', 'id', 'is', 'it', 'ja', 'ka', 'kk', 'km', 'ko', 'kok', + 'ks', 'ky', 'lb', 'lo', 'lt', 'lv', 'mg', 'mk', 'ml', 'mn', 'mr', 'ms', + 'my', 'ne', 'nl', 'nn', 'no', 'pa', 'pl', 'ps', 'pt', 'pt-PT', 'rn', + 'ro', 'ru', 'sd', 'si', 'sk', 'sl', 'so', 'sq', 'sr', 'sr-Cyrl-BA', + 'sr-Latn', 'sr-Latn-BA', 'sv', 'sw', 'sw-CD', 'sw-KE', 'ta', 'te', 'th', + 'tk', 'tr', 'uk', 'ur', 'ur-IN', 'uz', 'uz-Cyrl', 'vi', 'yue', + 'yue-Hans', 'zh', 'zh-Hans-HK', 'zh-Hant', 'zh-Hant-HK' ]; /** diff --git a/vendor/commerceguys/intl/src/Language/LanguageRepository.php b/vendor/commerceguys/intl/src/Language/LanguageRepository.php index 285381848..f39f7454d 100644 --- a/vendor/commerceguys/intl/src/Language/LanguageRepository.php +++ b/vendor/commerceguys/intl/src/Language/LanguageRepository.php @@ -47,19 +47,19 @@ class LanguageRepository implements LanguageRepositoryInterface 'af', 'ar', 'ar-EG', 'ar-LY', 'ar-SA', 'as', 'ast', 'az', 'az-Cyrl', 'be', 'bg', 'bn', 'bn-IN', 'brx', 'bs', 'bs-Cyrl', 'ca', 'ce', 'cs', 'cy', 'da', 'de', 'de-AT', 'de-CH', 'dz', 'el', 'en', 'en-001', 'en-AU', - 'en-CA', 'en-IN', 'en-NZ', 'es', 'es-419', 'es-AR', 'es-BO', 'es-CL', - 'es-CO', 'es-CR', 'es-DO', 'es-EC', 'es-GT', 'es-HN', 'es-MX', 'es-NI', - 'es-PA', 'es-PE', 'es-PR', 'es-PY', 'es-SV', 'es-US', 'es-VE', 'et', - 'eu', 'fa', 'fa-AF', 'fi', 'fil', 'fr', 'fr-BE', 'fr-CA', 'fr-CH', 'ga', - 'gd', 'gl', 'gsw', 'gu', 'he', 'hi', 'hr', 'hu', 'hy', 'id', 'is', 'it', - 'ja', 'ka', 'kk', 'km', 'ko', 'kok', 'ks', 'ku', 'ky', 'lb', 'lo', 'lt', - 'lv', 'mg', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'nb', 'ne', 'nl', - 'nn', 'no', 'pa', 'pl', 'ps', 'ps-PK', 'pt', 'pt-PT', 'rn', 'ro', - 'ro-MD', 'ru', 'rw', 'sd', 'si', 'sk', 'sl', 'so', 'sq', 'sr', - 'sr-Cyrl-BA', 'sr-Cyrl-ME', 'sr-Cyrl-XK', 'sr-Latn', 'sr-Latn-BA', - 'sr-Latn-ME', 'sr-Latn-XK', 'sv', 'sw', 'sw-CD', 'sw-KE', 'ta', 'te', - 'tg', 'th', 'tk', 'to', 'tr', 'uk', 'ur', 'ur-IN', 'uz', 'uz-Cyrl', - 'vi', 'yue', 'yue-Hans', 'zh', 'zh-Hant', 'zh-Hant-HK' + 'en-CA', 'en-IN', 'es', 'es-419', 'es-AR', 'es-BO', 'es-CL', 'es-CO', + 'es-CR', 'es-DO', 'es-EC', 'es-GT', 'es-HN', 'es-MX', 'es-NI', 'es-PA', + 'es-PE', 'es-PR', 'es-PY', 'es-SV', 'es-US', 'es-VE', 'et', 'eu', 'fa', + 'fa-AF', 'fi', 'fil', 'fr', 'fr-BE', 'fr-CA', 'fr-CH', 'ga', 'gd', 'gl', + 'gsw', 'gu', 'he', 'hi', 'hr', 'hu', 'hy', 'id', 'is', 'it', 'ja', 'ka', + 'kk', 'km', 'ko', 'kok', 'ks', 'ku', 'ky', 'lb', 'lo', 'lt', 'lv', 'mg', + 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'ne', 'nl', 'nn', 'no', 'pa', + 'pl', 'ps', 'ps-PK', 'pt', 'pt-PT', 'rn', 'ro', 'ro-MD', 'ru', 'rw', + 'sd', 'si', 'sk', 'sl', 'so', 'sq', 'sr', 'sr-Cyrl-BA', 'sr-Cyrl-ME', + 'sr-Cyrl-XK', 'sr-Latn', 'sr-Latn-BA', 'sr-Latn-ME', 'sr-Latn-XK', 'sv', + 'sw', 'sw-CD', 'sw-KE', 'ta', 'te', 'tg', 'th', 'tk', 'to', 'tr', 'uk', + 'ur', 'ur-IN', 'uz', 'uz-Cyrl', 'vi', 'yue', 'yue-Hans', 'zh', + 'zh-Hant', 'zh-Hant-HK' ]; /** diff --git a/vendor/commerceguys/intl/src/Locale.php b/vendor/commerceguys/intl/src/Locale.php index f9948e7e6..509b28190 100644 --- a/vendor/commerceguys/intl/src/Locale.php +++ b/vendor/commerceguys/intl/src/Locale.php @@ -72,7 +72,6 @@ final class Locale 'en-BS' => 'en-001', 'en-BW' => 'en-001', 'en-BZ' => 'en-001', - 'en-CA' => 'en-001', 'en-CC' => 'en-001', 'en-CK' => 'en-001', 'en-CM' => 'en-001', @@ -120,7 +119,6 @@ final class Locale 'en-NU' => 'en-001', 'en-NZ' => 'en-001', 'en-PG' => 'en-001', - 'en-PH' => 'en-001', 'en-PK' => 'en-001', 'en-PN' => 'en-001', 'en-PW' => 'en-001', @@ -192,37 +190,38 @@ final class Locale 'pt-MZ' => 'pt-PT', 'pt-ST' => 'pt-PT', 'pt-TL' => 'pt-PT', - 'az-Arab' => 'root', - 'az-Cyrl' => 'root', - 'blt-Latn' => 'root', - 'bs-Cyrl' => 'root', - 'byn-Latn' => 'root', - 'en-Dsrt' => 'root', - 'en-Shaw' => 'root', - 'hi-Latn' => 'root', - 'iu-Latn' => 'root', - 'kk-Arab' => 'root', - 'ks-Deva' => 'root', - 'ku-Arab' => 'root', - 'ky-Arab' => 'root', - 'ky-Latn' => 'root', - 'ml-Arab' => 'root', - 'mn-Mong' => 'root', - 'mni-Mtei' => 'root', - 'ms-Arab' => 'root', - 'pa-Arab' => 'root', - 'sat-Deva' => 'root', - 'sd-Deva' => 'root', - 'sd-Khoj' => 'root', - 'sd-Sind' => 'root', - 'so-Arab' => 'root', - 'sr-Latn' => 'root', - 'sw-Arab' => 'root', - 'tg-Arab' => 'root', - 'uz-Arab' => 'root', - 'uz-Cyrl' => 'root', - 'yue-Hans' => 'root', - 'zh-Hant' => 'root', + 'az-Arab' => 'und', + 'az-Cyrl' => 'und', + 'bal-Latn' => 'und', + 'blt-Latn' => 'und', + 'bs-Cyrl' => 'und', + 'byn-Latn' => 'und', + 'en-Dsrt' => 'und', + 'en-Shaw' => 'und', + 'hi-Latn' => 'und', + 'iu-Latn' => 'und', + 'kk-Arab' => 'und', + 'ks-Deva' => 'und', + 'ku-Arab' => 'und', + 'ky-Arab' => 'und', + 'ky-Latn' => 'und', + 'ml-Arab' => 'und', + 'mn-Mong' => 'und', + 'mni-Mtei' => 'und', + 'ms-Arab' => 'und', + 'pa-Arab' => 'und', + 'sat-Deva' => 'und', + 'sd-Deva' => 'und', + 'sd-Khoj' => 'und', + 'sd-Sind' => 'und', + 'so-Arab' => 'und', + 'sr-Latn' => 'und', + 'sw-Arab' => 'und', + 'tg-Arab' => 'und', + 'uz-Arab' => 'und', + 'uz-Cyrl' => 'und', + 'yue-Hans' => 'und', + 'zh-Hant' => 'und', 'zh-Hant-MO' => 'zh-Hant-HK', ]; @@ -397,9 +396,9 @@ final class Locale array_pop($localeParts); $parent = implode('-', $localeParts); } - // The library doesn't have data for the empty 'root' locale, it + // The library doesn't have data for the empty 'und' locale, it // is more user friendly to use the configured fallback instead. - if ($parent == 'root') { + if ($parent == 'und') { $parent = null; } diff --git a/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php b/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php index 8fc2f5c99..5258ba442 100644 --- a/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php +++ b/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php @@ -83,6 +83,12 @@ class NumberFormatRepository implements NumberFormatRepositoryInterface 'minus_sign' => '؜-', 'percent_sign' => '٪؜', ], + 'ar-AE' => [ + 'currency_pattern' => '¤ #,##0.00', + 'plus_sign' => '‎+', + 'minus_sign' => '‎-', + 'percent_sign' => '‎%‎', + ], 'ar-DZ' => [ 'currency_pattern' => '¤ #,##0.00', 'decimal_separator' => ',', @@ -697,14 +703,6 @@ class NumberFormatRepository implements NumberFormatRepositoryInterface 'currency_pattern' => '#,##0.00 ¤', 'accounting_currency_pattern' => '¤ #,##0.00', ], - 'nb' => [ - 'percent_pattern' => '#,##0 %', - 'currency_pattern' => '¤ #,##0.00', - 'accounting_currency_pattern' => '¤ #,##0.00', - 'decimal_separator' => ',', - 'grouping_separator' => ' ', - 'minus_sign' => '−', - ], 'ne' => [ 'numbering_system' => 'deva', 'decimal_pattern' => '#,##,##0.###', @@ -728,8 +726,8 @@ class NumberFormatRepository implements NumberFormatRepositoryInterface ], 'no' => [ 'percent_pattern' => '#,##0 %', - 'currency_pattern' => '¤ #,##0.00', - 'accounting_currency_pattern' => '¤ #,##0.00', + 'currency_pattern' => '¤ #,##0.00;¤ -#,##0.00', + 'accounting_currency_pattern' => '¤ #,##0.00;(¤ #,##0.00)', 'decimal_separator' => ',', 'grouping_separator' => ' ', 'minus_sign' => '−', diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 0cd6055d1..afef3fa2a 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -149,7 +149,7 @@ class ClassLoader /** * @return string[] Array of classname => path - * @psalm-var array<string, string> + * @psalm-return array<string, string> */ public function getClassMap() { diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 7c5502ca4..d50e0c9fc 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -24,8 +24,21 @@ use Composer\Semver\VersionParser; */ class InstalledVersions { + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null + */ private static $installed; + + /** + * @var bool|null + */ private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> + */ private static $installedByVendor = array(); /** diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 06b693913..09137bb42 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -379,17 +379,14 @@ return array( 'OAuth2\\TokenType\\Bearer' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php', 'OAuth2\\TokenType\\Mac' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php', 'OAuth2\\TokenType\\TokenTypeInterface' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php', - 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php', - 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', - 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', + 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/src/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/src/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/src/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/src/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/src/NullLogger.php', 'Ramsey\\Collection\\AbstractArray' => $vendorDir . '/ramsey/collection/src/AbstractArray.php', 'Ramsey\\Collection\\AbstractCollection' => $vendorDir . '/ramsey/collection/src/AbstractCollection.php', 'Ramsey\\Collection\\AbstractSet' => $vendorDir . '/ramsey/collection/src/AbstractSet.php', @@ -649,6 +646,7 @@ return array( 'Sabre\\DAV\\Auth\\Backend\\File' => $vendorDir . '/sabre/dav/lib/DAV/Auth/Backend/File.php', 'Sabre\\DAV\\Auth\\Backend\\IMAP' => $vendorDir . '/sabre/dav/lib/DAV/Auth/Backend/IMAP.php', 'Sabre\\DAV\\Auth\\Backend\\PDO' => $vendorDir . '/sabre/dav/lib/DAV/Auth/Backend/PDO.php', + 'Sabre\\DAV\\Auth\\Backend\\PDOBasicAuth' => $vendorDir . '/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php', 'Sabre\\DAV\\Auth\\Plugin' => $vendorDir . '/sabre/dav/lib/DAV/Auth/Plugin.php', 'Sabre\\DAV\\Browser\\GuessContentType' => $vendorDir . '/sabre/dav/lib/DAV/Browser/GuessContentType.php', 'Sabre\\DAV\\Browser\\HtmlOutput' => $vendorDir . '/sabre/dav/lib/DAV/Browser/HtmlOutput.php', @@ -847,6 +845,13 @@ return array( 'Sabre\\VObject\\Splitter\\VCard' => $vendorDir . '/sabre/vobject/lib/Splitter/VCard.php', 'Sabre\\VObject\\StringUtil' => $vendorDir . '/sabre/vobject/lib/StringUtil.php', 'Sabre\\VObject\\TimeZoneUtil' => $vendorDir . '/sabre/vobject/lib/TimeZoneUtil.php', + 'Sabre\\VObject\\TimezoneGuesser\\FindFromOffset' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php', + 'Sabre\\VObject\\TimezoneGuesser\\FindFromTimezoneIdentifier' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php', + 'Sabre\\VObject\\TimezoneGuesser\\FindFromTimezoneMap' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php', + 'Sabre\\VObject\\TimezoneGuesser\\GuessFromLicEntry' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php', + 'Sabre\\VObject\\TimezoneGuesser\\GuessFromMsTzId' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php', + 'Sabre\\VObject\\TimezoneGuesser\\TimezoneFinder' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php', + 'Sabre\\VObject\\TimezoneGuesser\\TimezoneGuesser' => $vendorDir . '/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php', 'Sabre\\VObject\\UUIDUtil' => $vendorDir . '/sabre/vobject/lib/UUIDUtil.php', 'Sabre\\VObject\\VCardConverter' => $vendorDir . '/sabre/vobject/lib/VCardConverter.php', 'Sabre\\VObject\\Version' => $vendorDir . '/sabre/vobject/lib/Version.php', @@ -903,7 +908,6 @@ return array( 'SimplePie_XML_Declaration_Parser' => $vendorDir . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php', 'SimplePie_gzdecode' => $vendorDir . '/simplepie/simplepie/library/SimplePie/gzdecode.php', 'Smarty' => $vendorDir . '/smarty/smarty/libs/Smarty.class.php', - 'SmartyBC' => $vendorDir . '/smarty/smarty/libs/SmartyBC.class.php', 'SmartyCompilerException' => $vendorDir . '/smarty/smarty/libs/sysplugins/smartycompilerexception.php', 'SmartyException' => $vendorDir . '/smarty/smarty/libs/sysplugins/smartyexception.php', 'Smarty_Autoloader' => $vendorDir . '/smarty/smarty/libs/Autoloader.php', @@ -943,7 +947,6 @@ return array( 'Smarty_Internal_Compile_If' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php', 'Smarty_Internal_Compile_Ifclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php', 'Smarty_Internal_Compile_Include' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php', - 'Smarty_Internal_Compile_Include_Php' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php', 'Smarty_Internal_Compile_Insert' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php', 'Smarty_Internal_Compile_Ldelim' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php', 'Smarty_Internal_Compile_Make_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php', @@ -956,7 +959,6 @@ return array( 'Smarty_Internal_Compile_Private_Modifier' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php', 'Smarty_Internal_Compile_Private_Object_Block_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php', 'Smarty_Internal_Compile_Private_Object_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php', - 'Smarty_Internal_Compile_Private_Php' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php', 'Smarty_Internal_Compile_Private_Print_Expression' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php', 'Smarty_Internal_Compile_Private_Registered_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php', 'Smarty_Internal_Compile_Private_Registered_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php', @@ -1037,7 +1039,6 @@ return array( 'Smarty_Internal_Resource_Extends' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php', 'Smarty_Internal_Resource_File' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php', 'Smarty_Internal_Resource_Php' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php', - 'Smarty_Internal_Resource_Registered' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php', 'Smarty_Internal_Resource_Stream' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php', 'Smarty_Internal_Resource_String' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php', 'Smarty_Internal_Runtime_CacheModify' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php', @@ -1305,6 +1306,7 @@ return array( 'Zotlabs\\Module\\Page' => $baseDir . '/Zotlabs/Module/Page.php', 'Zotlabs\\Module\\Pconfig' => $baseDir . '/Zotlabs/Module/Pconfig.php', 'Zotlabs\\Module\\Pdledit' => $baseDir . '/Zotlabs/Module/Pdledit.php', + 'Zotlabs\\Module\\Pdledit_gui' => $baseDir . '/Zotlabs/Module/Pdledit_gui.php', 'Zotlabs\\Module\\Permcat' => $baseDir . '/Zotlabs/Module/Permcat.php', 'Zotlabs\\Module\\Permcats' => $baseDir . '/Zotlabs/Module/Permcats.php', 'Zotlabs\\Module\\Photo' => $baseDir . '/Zotlabs/Module/Photo.php', @@ -1671,6 +1673,8 @@ return array( 'Zotlabs\\Update\\_1248' => $baseDir . '/Zotlabs/Update/_1248.php', 'Zotlabs\\Update\\_1249' => $baseDir . '/Zotlabs/Update/_1249.php', 'Zotlabs\\Update\\_1250' => $baseDir . '/Zotlabs/Update/_1250.php', + 'Zotlabs\\Update\\_1251' => $baseDir . '/Zotlabs/Update/_1251.php', + 'Zotlabs\\Update\\_1252' => $baseDir . '/Zotlabs/Update/_1252.php', 'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => $baseDir . '/Zotlabs/Web/HTTPSig.php', @@ -1699,13 +1703,11 @@ return array( 'Zotlabs\\Widget\\Chatroom_list' => $baseDir . '/Zotlabs/Widget/Chatroom_list.php', 'Zotlabs\\Widget\\Chatroom_members' => $baseDir . '/Zotlabs/Widget/Chatroom_members.php', 'Zotlabs\\Widget\\Clock' => $baseDir . '/Zotlabs/Widget/Clock.php', - 'Zotlabs\\Widget\\Collections' => $baseDir . '/Zotlabs/Widget/Collections.php', 'Zotlabs\\Widget\\Common_friends' => $baseDir . '/Zotlabs/Widget/Common_friends.php', 'Zotlabs\\Widget\\Cover_photo' => $baseDir . '/Zotlabs/Widget/Cover_photo.php', 'Zotlabs\\Widget\\Design_tools' => $baseDir . '/Zotlabs/Widget/Design_tools.php', 'Zotlabs\\Widget\\Dirsort' => $baseDir . '/Zotlabs/Widget/Dirsort.php', 'Zotlabs\\Widget\\Dirtags' => $baseDir . '/Zotlabs/Widget/Dirtags.php', - 'Zotlabs\\Widget\\Eventstools' => $baseDir . '/Zotlabs/Widget/Eventstools.php', 'Zotlabs\\Widget\\Filer' => $baseDir . '/Zotlabs/Widget/Filer.php', 'Zotlabs\\Widget\\Findpeople' => $baseDir . '/Zotlabs/Widget/Findpeople.php', 'Zotlabs\\Widget\\Follow' => $baseDir . '/Zotlabs/Widget/Follow.php', @@ -1727,13 +1729,11 @@ return array( 'Zotlabs\\Widget\\Portfolio' => $baseDir . '/Zotlabs/Widget/Portfolio.php', 'Zotlabs\\Widget\\Privacygroups' => $baseDir . '/Zotlabs/Widget/Privacygroups.php', 'Zotlabs\\Widget\\Profile' => $baseDir . '/Zotlabs/Widget/Profile.php', - 'Zotlabs\\Widget\\Pubsites' => $baseDir . '/Zotlabs/Widget/Pubsites.php', 'Zotlabs\\Widget\\Pubtagcloud' => $baseDir . '/Zotlabs/Widget/Pubtagcloud.php', 'Zotlabs\\Widget\\Random_block' => $baseDir . '/Zotlabs/Widget/Random_block.php', 'Zotlabs\\Widget\\Rating' => $baseDir . '/Zotlabs/Widget/Rating.php', 'Zotlabs\\Widget\\Savedsearch' => $baseDir . '/Zotlabs/Widget/Savedsearch.php', 'Zotlabs\\Widget\\Settings_menu' => $baseDir . '/Zotlabs/Widget/Settings_menu.php', - 'Zotlabs\\Widget\\Shortprofile' => $baseDir . '/Zotlabs/Widget/Shortprofile.php', 'Zotlabs\\Widget\\Sitesearch' => $baseDir . '/Zotlabs/Widget/Sitesearch.php', 'Zotlabs\\Widget\\Suggestedchats' => $baseDir . '/Zotlabs/Widget/Suggestedchats.php', 'Zotlabs\\Widget\\Suggestions' => $baseDir . '/Zotlabs/Widget/Suggestions.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 8339af74c..c99f72dbb 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -23,7 +23,7 @@ return array( 'Sabre\\CalDAV\\' => array($vendorDir . '/sabre/dav/lib/CalDAV'), 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), 'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), 'Michelf\\' => array($vendorDir . '/michelf/php-markdown/Michelf'), 'League\\HTMLToMarkdown\\' => array($vendorDir . '/league/html-to-markdown/src'), 'ID3Parser\\' => array($vendorDir . '/lukasreschke/id3parser/src'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 01be3a52c..602c3d547 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -67,11 +67,16 @@ class ComposerAutoloaderInit7b34d7e50a62201ec5d5e526a5b8b35d } } +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ function composerRequire7b34d7e50a62201ec5d5e526a5b8b35d($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; } } diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 5d08c1a72..6a5ddf6d4 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -157,7 +157,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d ), 'Psr\\Log\\' => array ( - 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', + 0 => __DIR__ . '/..' . '/psr/log/src', ), 'Michelf\\' => array ( @@ -597,17 +597,14 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'OAuth2\\TokenType\\Bearer' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php', 'OAuth2\\TokenType\\Mac' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php', 'OAuth2\\TokenType\\TokenTypeInterface' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php', - 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php', - 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', - 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', + 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/src/NullLogger.php', 'Ramsey\\Collection\\AbstractArray' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractArray.php', 'Ramsey\\Collection\\AbstractCollection' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractCollection.php', 'Ramsey\\Collection\\AbstractSet' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractSet.php', @@ -867,6 +864,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Sabre\\DAV\\Auth\\Backend\\File' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Auth/Backend/File.php', 'Sabre\\DAV\\Auth\\Backend\\IMAP' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Auth/Backend/IMAP.php', 'Sabre\\DAV\\Auth\\Backend\\PDO' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Auth/Backend/PDO.php', + 'Sabre\\DAV\\Auth\\Backend\\PDOBasicAuth' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php', 'Sabre\\DAV\\Auth\\Plugin' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Auth/Plugin.php', 'Sabre\\DAV\\Browser\\GuessContentType' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Browser/GuessContentType.php', 'Sabre\\DAV\\Browser\\HtmlOutput' => __DIR__ . '/..' . '/sabre/dav/lib/DAV/Browser/HtmlOutput.php', @@ -1065,6 +1063,13 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Sabre\\VObject\\Splitter\\VCard' => __DIR__ . '/..' . '/sabre/vobject/lib/Splitter/VCard.php', 'Sabre\\VObject\\StringUtil' => __DIR__ . '/..' . '/sabre/vobject/lib/StringUtil.php', 'Sabre\\VObject\\TimeZoneUtil' => __DIR__ . '/..' . '/sabre/vobject/lib/TimeZoneUtil.php', + 'Sabre\\VObject\\TimezoneGuesser\\FindFromOffset' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php', + 'Sabre\\VObject\\TimezoneGuesser\\FindFromTimezoneIdentifier' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php', + 'Sabre\\VObject\\TimezoneGuesser\\FindFromTimezoneMap' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php', + 'Sabre\\VObject\\TimezoneGuesser\\GuessFromLicEntry' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php', + 'Sabre\\VObject\\TimezoneGuesser\\GuessFromMsTzId' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php', + 'Sabre\\VObject\\TimezoneGuesser\\TimezoneFinder' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php', + 'Sabre\\VObject\\TimezoneGuesser\\TimezoneGuesser' => __DIR__ . '/..' . '/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php', 'Sabre\\VObject\\UUIDUtil' => __DIR__ . '/..' . '/sabre/vobject/lib/UUIDUtil.php', 'Sabre\\VObject\\VCardConverter' => __DIR__ . '/..' . '/sabre/vobject/lib/VCardConverter.php', 'Sabre\\VObject\\Version' => __DIR__ . '/..' . '/sabre/vobject/lib/Version.php', @@ -1121,7 +1126,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'SimplePie_XML_Declaration_Parser' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php', 'SimplePie_gzdecode' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/gzdecode.php', 'Smarty' => __DIR__ . '/..' . '/smarty/smarty/libs/Smarty.class.php', - 'SmartyBC' => __DIR__ . '/..' . '/smarty/smarty/libs/SmartyBC.class.php', 'SmartyCompilerException' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smartycompilerexception.php', 'SmartyException' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smartyexception.php', 'Smarty_Autoloader' => __DIR__ . '/..' . '/smarty/smarty/libs/Autoloader.php', @@ -1161,7 +1165,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Smarty_Internal_Compile_If' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php', 'Smarty_Internal_Compile_Ifclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php', 'Smarty_Internal_Compile_Include' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php', - 'Smarty_Internal_Compile_Include_Php' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php', 'Smarty_Internal_Compile_Insert' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php', 'Smarty_Internal_Compile_Ldelim' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php', 'Smarty_Internal_Compile_Make_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php', @@ -1174,7 +1177,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Smarty_Internal_Compile_Private_Modifier' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php', 'Smarty_Internal_Compile_Private_Object_Block_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php', 'Smarty_Internal_Compile_Private_Object_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php', - 'Smarty_Internal_Compile_Private_Php' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php', 'Smarty_Internal_Compile_Private_Print_Expression' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php', 'Smarty_Internal_Compile_Private_Registered_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php', 'Smarty_Internal_Compile_Private_Registered_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php', @@ -1255,7 +1257,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Smarty_Internal_Resource_Extends' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php', 'Smarty_Internal_Resource_File' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php', 'Smarty_Internal_Resource_Php' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php', - 'Smarty_Internal_Resource_Registered' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php', 'Smarty_Internal_Resource_Stream' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php', 'Smarty_Internal_Resource_String' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php', 'Smarty_Internal_Runtime_CacheModify' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php', @@ -1523,6 +1524,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Page' => __DIR__ . '/../..' . '/Zotlabs/Module/Page.php', 'Zotlabs\\Module\\Pconfig' => __DIR__ . '/../..' . '/Zotlabs/Module/Pconfig.php', 'Zotlabs\\Module\\Pdledit' => __DIR__ . '/../..' . '/Zotlabs/Module/Pdledit.php', + 'Zotlabs\\Module\\Pdledit_gui' => __DIR__ . '/../..' . '/Zotlabs/Module/Pdledit_gui.php', 'Zotlabs\\Module\\Permcat' => __DIR__ . '/../..' . '/Zotlabs/Module/Permcat.php', 'Zotlabs\\Module\\Permcats' => __DIR__ . '/../..' . '/Zotlabs/Module/Permcats.php', 'Zotlabs\\Module\\Photo' => __DIR__ . '/../..' . '/Zotlabs/Module/Photo.php', @@ -1889,6 +1891,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Update\\_1248' => __DIR__ . '/../..' . '/Zotlabs/Update/_1248.php', 'Zotlabs\\Update\\_1249' => __DIR__ . '/../..' . '/Zotlabs/Update/_1249.php', 'Zotlabs\\Update\\_1250' => __DIR__ . '/../..' . '/Zotlabs/Update/_1250.php', + 'Zotlabs\\Update\\_1251' => __DIR__ . '/../..' . '/Zotlabs/Update/_1251.php', + 'Zotlabs\\Update\\_1252' => __DIR__ . '/../..' . '/Zotlabs/Update/_1252.php', 'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPSig.php', @@ -1917,13 +1921,11 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Widget\\Chatroom_list' => __DIR__ . '/../..' . '/Zotlabs/Widget/Chatroom_list.php', 'Zotlabs\\Widget\\Chatroom_members' => __DIR__ . '/../..' . '/Zotlabs/Widget/Chatroom_members.php', 'Zotlabs\\Widget\\Clock' => __DIR__ . '/../..' . '/Zotlabs/Widget/Clock.php', - 'Zotlabs\\Widget\\Collections' => __DIR__ . '/../..' . '/Zotlabs/Widget/Collections.php', 'Zotlabs\\Widget\\Common_friends' => __DIR__ . '/../..' . '/Zotlabs/Widget/Common_friends.php', 'Zotlabs\\Widget\\Cover_photo' => __DIR__ . '/../..' . '/Zotlabs/Widget/Cover_photo.php', 'Zotlabs\\Widget\\Design_tools' => __DIR__ . '/../..' . '/Zotlabs/Widget/Design_tools.php', 'Zotlabs\\Widget\\Dirsort' => __DIR__ . '/../..' . '/Zotlabs/Widget/Dirsort.php', 'Zotlabs\\Widget\\Dirtags' => __DIR__ . '/../..' . '/Zotlabs/Widget/Dirtags.php', - 'Zotlabs\\Widget\\Eventstools' => __DIR__ . '/../..' . '/Zotlabs/Widget/Eventstools.php', 'Zotlabs\\Widget\\Filer' => __DIR__ . '/../..' . '/Zotlabs/Widget/Filer.php', 'Zotlabs\\Widget\\Findpeople' => __DIR__ . '/../..' . '/Zotlabs/Widget/Findpeople.php', 'Zotlabs\\Widget\\Follow' => __DIR__ . '/../..' . '/Zotlabs/Widget/Follow.php', @@ -1945,13 +1947,11 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Widget\\Portfolio' => __DIR__ . '/../..' . '/Zotlabs/Widget/Portfolio.php', 'Zotlabs\\Widget\\Privacygroups' => __DIR__ . '/../..' . '/Zotlabs/Widget/Privacygroups.php', 'Zotlabs\\Widget\\Profile' => __DIR__ . '/../..' . '/Zotlabs/Widget/Profile.php', - 'Zotlabs\\Widget\\Pubsites' => __DIR__ . '/../..' . '/Zotlabs/Widget/Pubsites.php', 'Zotlabs\\Widget\\Pubtagcloud' => __DIR__ . '/../..' . '/Zotlabs/Widget/Pubtagcloud.php', 'Zotlabs\\Widget\\Random_block' => __DIR__ . '/../..' . '/Zotlabs/Widget/Random_block.php', 'Zotlabs\\Widget\\Rating' => __DIR__ . '/../..' . '/Zotlabs/Widget/Rating.php', 'Zotlabs\\Widget\\Savedsearch' => __DIR__ . '/../..' . '/Zotlabs/Widget/Savedsearch.php', 'Zotlabs\\Widget\\Settings_menu' => __DIR__ . '/../..' . '/Zotlabs/Widget/Settings_menu.php', - 'Zotlabs\\Widget\\Shortprofile' => __DIR__ . '/../..' . '/Zotlabs/Widget/Shortprofile.php', 'Zotlabs\\Widget\\Sitesearch' => __DIR__ . '/../..' . '/Zotlabs/Widget/Sitesearch.php', 'Zotlabs\\Widget\\Suggestedchats' => __DIR__ . '/../..' . '/Zotlabs/Widget/Suggestedchats.php', 'Zotlabs\\Widget\\Suggestions' => __DIR__ . '/../..' . '/Zotlabs/Widget/Suggestions.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 81f2cc6f5..f4ab53044 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -194,17 +194,17 @@ }, { "name": "commerceguys/intl", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", + "version": "v1.1.1", + "version_normalized": "1.1.1.0", "source": { "type": "git", "url": "https://github.com/commerceguys/intl.git", - "reference": "90b4f75c4917927a1960c0dcaa002a91ab97f5d5" + "reference": "cab3b55dbf8c1753fe54457404082c777a8c154f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/commerceguys/intl/zipball/90b4f75c4917927a1960c0dcaa002a91ab97f5d5", - "reference": "90b4f75c4917927a1960c0dcaa002a91ab97f5d5", + "url": "https://api.github.com/repos/commerceguys/intl/zipball/cab3b55dbf8c1753fe54457404082c777a8c154f", + "reference": "cab3b55dbf8c1753fe54457404082c777a8c154f", "shasum": "" }, "require": { @@ -214,7 +214,7 @@ "mikey179/vfsstream": "1.*", "phpunit/phpunit": "^7.5" }, - "time": "2021-05-17T08:25:58+00:00", + "time": "2021-10-30T18:07:14+00:00", "type": "library", "extra": { "branch-alias": { @@ -239,7 +239,7 @@ "description": "Internationalization library powered by CLDR data.", "support": { "issues": "https://github.com/commerceguys/intl/issues", - "source": "https://github.com/commerceguys/intl/tree/v1.1.0" + "source": "https://github.com/commerceguys/intl/tree/v1.1.1" }, "install-path": "../commerceguys/intl" }, @@ -287,26 +287,23 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", - "version_normalized": "4.13.0.0", + "version": "v4.14.0", + "version_normalized": "4.14.0.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75", + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75", "shasum": "" }, "require": { "php": ">=5.2" }, - "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" - }, - "time": "2020-06-29T00:56:53+00:00", + "time": "2021-12-25T01:21:49+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -336,32 +333,36 @@ "keywords": [ "html" ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0" + }, "install-path": "../ezyang/htmlpurifier" }, { "name": "jbroadway/urlify", - "version": "1.2.2-stable", - "version_normalized": "1.2.2.0", + "version": "1.2.3-stable", + "version_normalized": "1.2.3.0", "source": { "type": "git", "url": "https://github.com/jbroadway/urlify.git", - "reference": "9b227e8548f16268cef55b5eb5d659a801fa824b" + "reference": "b7c142a247bd5fac2bb62ca2491bd151c4d1dee4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbroadway/urlify/zipball/9b227e8548f16268cef55b5eb5d659a801fa824b", - "reference": "9b227e8548f16268cef55b5eb5d659a801fa824b", + "url": "https://api.github.com/repos/jbroadway/urlify/zipball/b7c142a247bd5fac2bb62ca2491bd151c4d1dee4", + "reference": "b7c142a247bd5fac2bb62ca2491bd151c4d1dee4", "shasum": "" }, "require": { - "php": ">=7.2.0", + "php": ">=7.2", "voku/portable-ascii": "^1.4", "voku/stop-words": "^2.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0" + "phpunit/phpunit": "^8.5" }, - "time": "2020-06-14T17:15:34+00:00", + "time": "2021-12-29T21:23:40+00:00", "type": "library", "extra": { "branch-alias": { @@ -385,38 +386,46 @@ "homepage": "http://www.johnnybroadway.com/" } ], - "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.", + "description": "A fast PHP slug generator and transliteration library that converts non-ascii characters for use in URLs.", "homepage": "https://github.com/jbroadway/urlify", "keywords": [ + "ascii", + "blogging", + "blogs", + "downcode", "encode", "iconv", "link", + "seo", "slug", + "slugify", + "slugs", "translit", "transliterate", "transliteration", + "unicode", "url", "urlify" ], "support": { "issues": "https://github.com/jbroadway/urlify/issues", - "source": "https://github.com/jbroadway/urlify/tree/master" + "source": "https://github.com/jbroadway/urlify/tree/1.2.3-stable" }, "install-path": "../jbroadway/urlify" }, { "name": "league/html-to-markdown", - "version": "5.0.1", - "version_normalized": "5.0.1.0", + "version": "5.1.0", + "version_normalized": "5.1.0.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "e5600a2c5ce7b7571b16732c7086940f56f7abec" + "reference": "e0fc8cf07bdabbcd3765341ecb50c34c271d64e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/e5600a2c5ce7b7571b16732c7086940f56f7abec", - "reference": "e5600a2c5ce7b7571b16732c7086940f56f7abec", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/e0fc8cf07bdabbcd3765341ecb50c34c271d64e1", + "reference": "e0fc8cf07bdabbcd3765341ecb50c34c271d64e1", "shasum": "" }, "require": { @@ -426,20 +435,20 @@ }, "require-dev": { "mikehaertl/php-shellcommand": "^1.1.0", - "phpstan/phpstan": "^0.12.82", + "phpstan/phpstan": "^0.12.99", "phpunit/phpunit": "^8.5 || ^9.2", "scrutinizer/ocular": "^1.6", "unleashedtech/php-coding-standard": "^2.7", - "vimeo/psalm": "^4.6" + "vimeo/psalm": "^4.22" }, - "time": "2021-09-17T20:00:27+00:00", + "time": "2022-03-02T17:24:08+00:00", "bin": [ "bin/html-to-markdown" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-master": "5.2-dev" } }, "installation-source": "dist", @@ -474,7 +483,7 @@ ], "support": { "issues": "https://github.com/thephpleague/html-to-markdown/issues", - "source": "https://github.com/thephpleague/html-to-markdown/tree/5.0.1" + "source": "https://github.com/thephpleague/html-to-markdown/tree/5.1.0" }, "funding": [ { @@ -537,17 +546,17 @@ }, { "name": "michelf/php-markdown", - "version": "1.9.0", - "version_normalized": "1.9.0.0", + "version": "1.9.1", + "version_normalized": "1.9.1.0", "source": { "type": "git", "url": "https://github.com/michelf/php-markdown.git", - "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c" + "reference": "5024d623c1a057dcd2d076d25b7d270a1d0d55f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/c83178d49e372ca967d1a8c77ae4e051b3a3c75c", - "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/5024d623c1a057dcd2d076d25b7d270a1d0d55f3", + "reference": "5024d623c1a057dcd2d076d25b7d270a1d0d55f3", "shasum": "" }, "require": { @@ -556,7 +565,7 @@ "require-dev": { "phpunit/phpunit": ">=4.3 <5.8" }, - "time": "2019-12-02T02:32:27+00:00", + "time": "2021-11-24T02:52:38+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -585,6 +594,10 @@ "keywords": [ "markdown" ], + "support": { + "issues": "https://github.com/michelf/php-markdown/issues", + "source": "https://github.com/michelf/php-markdown/tree/1.9.1" + }, "install-path": "../michelf/php-markdown" }, { @@ -640,17 +653,17 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.33", - "version_normalized": "2.0.33.0", + "version": "2.0.36", + "version_normalized": "2.0.36.0", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "fb53b7889497ec7c1362c94e61d8127ac67ea094" + "reference": "a97547126396548c224703a267a30af1592be146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/fb53b7889497ec7c1362c94e61d8127ac67ea094", - "reference": "fb53b7889497ec7c1362c94e61d8127ac67ea094", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/a97547126396548c224703a267a30af1592be146", + "reference": "a97547126396548c224703a267a30af1592be146", "shasum": "" }, "require": { @@ -667,7 +680,7 @@ "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, - "time": "2021-08-16T04:20:12+00:00", + "time": "2022-01-30T08:48:36+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -732,7 +745,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.33" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.36" }, "funding": [ { @@ -752,33 +765,33 @@ }, { "name": "psr/log", - "version": "1.1.4", - "version_normalized": "1.1.4.0", + "version": "2.0.0", + "version_normalized": "2.0.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, - "time": "2021-05-03T11:20:27+00:00", + "time": "2021-07-14T16:41:46+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -799,7 +812,7 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, "install-path": "../psr/log" }, @@ -988,17 +1001,17 @@ }, { "name": "sabre/dav", - "version": "4.1.5", - "version_normalized": "4.1.5.0", + "version": "4.3.1", + "version_normalized": "4.3.1.0", "source": { "type": "git", "url": "https://github.com/sabre-io/dav.git", - "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22" + "reference": "130abb7017f56e0d99b04eb94b041e000a8e9b39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", - "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/130abb7017f56e0d99b04eb94b041e000a8e9b39", + "reference": "130abb7017f56e0d99b04eb94b041e000a8e9b39", "shasum": "" }, "require": { @@ -1013,7 +1026,7 @@ "ext-spl": "*", "lib-libxml": ">=2.7.0", "php": "^7.1.0 || ^8.0", - "psr/log": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", "sabre/event": "^5.0", "sabre/http": "^5.0.5", "sabre/uri": "^2.0", @@ -1032,7 +1045,7 @@ "ext-imap": "*", "ext-pdo": "*" }, - "time": "2021-02-12T07:54:23+00:00", + "time": "2022-01-20T13:59:29+00:00", "bin": [ "bin/sabredav", "bin/naturalselection" @@ -1077,39 +1090,39 @@ }, { "name": "sabre/event", - "version": "5.1.2", - "version_normalized": "5.1.2.0", + "version": "5.1.4", + "version_normalized": "5.1.4.0", "source": { "type": "git", "url": "https://github.com/sabre-io/event.git", - "reference": "c120bec57c17b6251a496efc82b732418b49d50a" + "reference": "d7da22897125d34d7eddf7977758191c06a74497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/c120bec57c17b6251a496efc82b732418b49d50a", - "reference": "c120bec57c17b6251a496efc82b732418b49d50a", + "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497", + "reference": "d7da22897125d34d7eddf7977758191c06a74497", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, - "time": "2020-10-03T11:02:22+00:00", + "time": "2021-11-04T06:51:17+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" - ] + ], + "psr-4": { + "Sabre\\Event\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1146,17 +1159,17 @@ }, { "name": "sabre/http", - "version": "5.1.1", - "version_normalized": "5.1.1.0", + "version": "5.1.3", + "version_normalized": "5.1.3.0", "source": { "type": "git", "url": "https://github.com/sabre-io/http.git", - "reference": "d0aafede6961df6195ce7a8dad49296b0aaee22e" + "reference": "315f592adfcba8aeb73c2fd64285205747acbbd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/http/zipball/d0aafede6961df6195ce7a8dad49296b0aaee22e", - "reference": "d0aafede6961df6195ce7a8dad49296b0aaee22e", + "url": "https://api.github.com/repos/sabre-io/http/zipball/315f592adfcba8aeb73c2fd64285205747acbbd7", + "reference": "315f592adfcba8aeb73c2fd64285205747acbbd7", "shasum": "" }, "require": { @@ -1168,14 +1181,14 @@ "sabre/uri": "^2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, "suggest": { "ext-curl": " to make http requests with the Client class" }, - "time": "2020-10-03T11:27:32+00:00", + "time": "2021-11-04T07:02:36+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1212,28 +1225,28 @@ }, { "name": "sabre/uri", - "version": "2.2.1", - "version_normalized": "2.2.1.0", + "version": "2.2.2", + "version_normalized": "2.2.2.0", "source": { "type": "git", "url": "https://github.com/sabre-io/uri.git", - "reference": "f502edffafea8d746825bd5f0b923a60fd2715ff" + "reference": "7cb0f489578afad5006e85cd60f18ff33f2d440d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/f502edffafea8d746825bd5f0b923a60fd2715ff", - "reference": "f502edffafea8d746825bd5f0b923a60fd2715ff", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/7cb0f489578afad5006e85cd60f18ff33f2d440d", + "reference": "7cb0f489578afad5006e85cd60f18ff33f2d440d", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, - "time": "2020-10-03T10:33:23+00:00", + "time": "2021-11-04T09:29:58+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1272,17 +1285,17 @@ }, { "name": "sabre/vobject", - "version": "4.3.5", - "version_normalized": "4.3.5.0", + "version": "4.4.1", + "version_normalized": "4.4.1.0", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83" + "reference": "06feff370141fd3118609f808e86d9315864bf14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d8a0a9ae215a8acfb51afc29101c7344670b9c83", - "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/06feff370141fd3118609f808e86d9315864bf14", + "reference": "06feff370141fd3118609f808e86d9315864bf14", "shasum": "" }, "require": { @@ -1299,7 +1312,7 @@ "suggest": { "hoa/bench": "If you would like to run the benchmark scripts" }, - "time": "2021-02-12T06:28:04+00:00", + "time": "2021-12-07T09:45:33+00:00", "bin": [ "bin/vobject", "bin/generate_vcards" @@ -1379,17 +1392,17 @@ }, { "name": "sabre/xml", - "version": "2.2.3", - "version_normalized": "2.2.3.0", + "version": "2.2.5", + "version_normalized": "2.2.5.0", "source": { "type": "git", "url": "https://github.com/sabre-io/xml.git", - "reference": "c3b959f821c19b36952ec4a595edd695c216bfc6" + "reference": "a6af111850e7536d200d9637c34885cd3c77a86c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/xml/zipball/c3b959f821c19b36952ec4a595edd695c216bfc6", - "reference": "c3b959f821c19b36952ec4a595edd695c216bfc6", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/a6af111850e7536d200d9637c34885cd3c77a86c", + "reference": "a6af111850e7536d200d9637c34885cd3c77a86c", "shasum": "" }, "require": { @@ -1401,21 +1414,21 @@ "sabre/uri": ">=1.0,<3.0.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, - "time": "2020-10-03T10:08:14+00:00", + "time": "2021-11-04T06:37:27+00:00", "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Sabre\\Xml\\": "lib/" - }, "files": [ "lib/Deserializer/functions.php", "lib/Serializer/functions.php" - ] + ], + "psr-4": { + "Sabre\\Xml\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1451,17 +1464,17 @@ }, { "name": "simplepie/simplepie", - "version": "1.5.6", - "version_normalized": "1.5.6.0", + "version": "1.5.8", + "version_normalized": "1.5.8.0", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6" + "reference": "d1d80f37264c9f1ed7fa3434eca14d179cb689b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6", - "reference": "1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/d1d80f37264c9f1ed7fa3434eca14d179cb689b1", + "reference": "d1d80f37264c9f1ed7fa3434eca14d179cb689b1", "shasum": "" }, "require": { @@ -1471,7 +1484,7 @@ "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~5.4.3 || ~6.5" + "yoast/phpunit-polyfills": "^1.0.1" }, "suggest": { "ext-curl": "", @@ -1480,7 +1493,7 @@ "ext-mbstring": "", "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" }, - "time": "2020-10-14T07:17:22+00:00", + "time": "2021-12-24T02:53:50+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1522,38 +1535,38 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/1.5.6", + "source": "https://github.com/simplepie/simplepie/tree/1.5.8", "issues": "https://github.com/simplepie/simplepie/issues" }, "install-path": "../simplepie/simplepie" }, { "name": "smarty/smarty", - "version": "v3.1.39", - "version_normalized": "3.1.39.0", + "version": "v4.1.0", + "version_normalized": "4.1.0.0", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "e27da524f7bcd7361e3ea5cdfa99c4378a7b5419" + "reference": "9e0536de18b53ba193364291ef0303b0ab9903e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/e27da524f7bcd7361e3ea5cdfa99c4378a7b5419", - "reference": "e27da524f7bcd7361e3ea5cdfa99c4378a7b5419", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/9e0536de18b53ba193364291ef0303b0ab9903e1", + "reference": "9e0536de18b53ba193364291ef0303b0ab9903e1", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^6.5 || ^5.7 || ^4.8", + "phpunit/phpunit": "^8.5 || ^7.5", "smarty/smarty-lexer": "^3.1" }, - "time": "2021-02-17T21:57:51+00:00", + "time": "2022-02-06T20:34:27+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0.x-dev" } }, "installation-source": "dist", @@ -1578,43 +1591,49 @@ { "name": "Rodney Rehm", "email": "rodney.rehm@medialize.de" + }, + { + "name": "Simon Wisselink", + "homepage": "https://www.iwink.nl/" } ], "description": "Smarty - the compiling PHP template engine", - "homepage": "http://www.smarty.net", + "homepage": "https://smarty-php.github.io/smarty/", "keywords": [ "templating" ], "support": { - "forum": "http://www.smarty.net/forums/", - "irc": "irc://irc.freenode.org/smarty", + "forum": "https://github.com/smarty-php/smarty/discussions", "issues": "https://github.com/smarty-php/smarty/issues", - "source": "https://github.com/smarty-php/smarty/tree/v3.1.39" + "source": "https://github.com/smarty-php/smarty/tree/v4.1.0" }, "install-path": "../smarty/smarty" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", - "version_normalized": "1.23.0.0", + "version": "v1.24.0", + "version_normalized": "1.24.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, - "time": "2021-02-19T12:13:01+00:00", + "time": "2021-10-20T20:35:02+00:00", "type": "library", "extra": { "branch-alias": { @@ -1657,7 +1676,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" }, "funding": [ { @@ -1677,23 +1696,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", - "version_normalized": "1.23.1.0", + "version": "v1.24.0", + "version_normalized": "1.24.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2021-07-28T13:41:28+00:00", + "time": "2021-09-13T13:58:33+00:00", "type": "library", "extra": { "branch-alias": { @@ -1706,12 +1725,12 @@ }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -1743,7 +1762,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" }, "funding": [ { @@ -1763,23 +1782,23 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", - "version_normalized": "1.23.0.0", + "version": "v1.24.0", + "version_normalized": "1.24.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2021-05-21T13:25:03+00:00", + "time": "2021-09-13T13:58:11+00:00", "type": "library", "extra": { "branch-alias": { @@ -1792,12 +1811,12 @@ }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -1825,7 +1844,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" }, "funding": [ { @@ -1898,17 +1917,17 @@ }, { "name": "voku/portable-ascii", - "version": "1.5.6", - "version_normalized": "1.5.6.0", + "version": "1.6.1", + "version_normalized": "1.6.1.0", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { @@ -1920,7 +1939,7 @@ "suggest": { "ext-intl": "Use Intl for transliterator_transliterate() support" }, - "time": "2020-11-12T00:07:28+00:00", + "time": "2022-01-24T18:55:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1947,7 +1966,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 1bf306fa8..e0123da64 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'application', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '69ba4eb0558938845fdc96957850672940965e11', + 'reference' => '6930c4e23b8b24f7436c0e265d751460bed9b1d2', 'name' => 'zotlabs/hubzilla', 'dev' => false, ), @@ -38,12 +38,12 @@ 'dev_requirement' => false, ), 'commerceguys/intl' => array( - 'pretty_version' => 'v1.1.0', - 'version' => '1.1.0.0', + 'pretty_version' => 'v1.1.1', + 'version' => '1.1.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../commerceguys/intl', 'aliases' => array(), - 'reference' => '90b4f75c4917927a1960c0dcaa002a91ab97f5d5', + 'reference' => 'cab3b55dbf8c1753fe54457404082c777a8c154f', 'dev_requirement' => false, ), 'desandro/imagesloaded' => array( @@ -56,30 +56,30 @@ 'dev_requirement' => false, ), 'ezyang/htmlpurifier' => array( - 'pretty_version' => 'v4.13.0', - 'version' => '4.13.0.0', + 'pretty_version' => 'v4.14.0', + 'version' => '4.14.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../ezyang/htmlpurifier', 'aliases' => array(), - 'reference' => '08e27c97e4c6ed02f37c5b2b20488046c8d90d75', + 'reference' => '12ab42bd6e742c70c0a52f7b82477fcd44e64b75', 'dev_requirement' => false, ), 'jbroadway/urlify' => array( - 'pretty_version' => '1.2.2-stable', - 'version' => '1.2.2.0', + 'pretty_version' => '1.2.3-stable', + 'version' => '1.2.3.0', 'type' => 'library', 'install_path' => __DIR__ . '/../jbroadway/urlify', 'aliases' => array(), - 'reference' => '9b227e8548f16268cef55b5eb5d659a801fa824b', + 'reference' => 'b7c142a247bd5fac2bb62ca2491bd151c4d1dee4', 'dev_requirement' => false, ), 'league/html-to-markdown' => array( - 'pretty_version' => '5.0.1', - 'version' => '5.0.1.0', + 'pretty_version' => '5.1.0', + 'version' => '5.1.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../league/html-to-markdown', 'aliases' => array(), - 'reference' => 'e5600a2c5ce7b7571b16732c7086940f56f7abec', + 'reference' => 'e0fc8cf07bdabbcd3765341ecb50c34c271d64e1', 'dev_requirement' => false, ), 'lukasreschke/id3parser' => array( @@ -92,12 +92,12 @@ 'dev_requirement' => false, ), 'michelf/php-markdown' => array( - 'pretty_version' => '1.9.0', - 'version' => '1.9.0.0', + 'pretty_version' => '1.9.1', + 'version' => '1.9.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../michelf/php-markdown', 'aliases' => array(), - 'reference' => 'c83178d49e372ca967d1a8c77ae4e051b3a3c75c', + 'reference' => '5024d623c1a057dcd2d076d25b7d270a1d0d55f3', 'dev_requirement' => false, ), 'pear/text_languagedetect' => array( @@ -110,21 +110,21 @@ 'dev_requirement' => false, ), 'phpseclib/phpseclib' => array( - 'pretty_version' => '2.0.33', - 'version' => '2.0.33.0', + 'pretty_version' => '2.0.36', + 'version' => '2.0.36.0', 'type' => 'library', 'install_path' => __DIR__ . '/../phpseclib/phpseclib', 'aliases' => array(), - 'reference' => 'fb53b7889497ec7c1362c94e61d8127ac67ea094', + 'reference' => 'a97547126396548c224703a267a30af1592be146', 'dev_requirement' => false, ), 'psr/log' => array( - 'pretty_version' => '1.1.4', - 'version' => '1.1.4.0', + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), - 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', + 'reference' => 'ef29f6d262798707a9edd554e2b82517ef3a9376', 'dev_requirement' => false, ), 'ramsey/collection' => array( @@ -152,102 +152,102 @@ ), ), 'sabre/dav' => array( - 'pretty_version' => '4.1.5', - 'version' => '4.1.5.0', + 'pretty_version' => '4.3.1', + 'version' => '4.3.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../sabre/dav', 'aliases' => array(), - 'reference' => 'c1afdc77a95efea6ee40c03c45f57c3c0c80ec22', + 'reference' => '130abb7017f56e0d99b04eb94b041e000a8e9b39', 'dev_requirement' => false, ), 'sabre/event' => array( - 'pretty_version' => '5.1.2', - 'version' => '5.1.2.0', + 'pretty_version' => '5.1.4', + 'version' => '5.1.4.0', 'type' => 'library', 'install_path' => __DIR__ . '/../sabre/event', 'aliases' => array(), - 'reference' => 'c120bec57c17b6251a496efc82b732418b49d50a', + 'reference' => 'd7da22897125d34d7eddf7977758191c06a74497', 'dev_requirement' => false, ), 'sabre/http' => array( - 'pretty_version' => '5.1.1', - 'version' => '5.1.1.0', + 'pretty_version' => '5.1.3', + 'version' => '5.1.3.0', 'type' => 'library', 'install_path' => __DIR__ . '/../sabre/http', 'aliases' => array(), - 'reference' => 'd0aafede6961df6195ce7a8dad49296b0aaee22e', + 'reference' => '315f592adfcba8aeb73c2fd64285205747acbbd7', 'dev_requirement' => false, ), 'sabre/uri' => array( - 'pretty_version' => '2.2.1', - 'version' => '2.2.1.0', + 'pretty_version' => '2.2.2', + 'version' => '2.2.2.0', 'type' => 'library', 'install_path' => __DIR__ . '/../sabre/uri', 'aliases' => array(), - 'reference' => 'f502edffafea8d746825bd5f0b923a60fd2715ff', + 'reference' => '7cb0f489578afad5006e85cd60f18ff33f2d440d', 'dev_requirement' => false, ), 'sabre/vobject' => array( - 'pretty_version' => '4.3.5', - 'version' => '4.3.5.0', + 'pretty_version' => '4.4.1', + 'version' => '4.4.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../sabre/vobject', 'aliases' => array(), - 'reference' => 'd8a0a9ae215a8acfb51afc29101c7344670b9c83', + 'reference' => '06feff370141fd3118609f808e86d9315864bf14', 'dev_requirement' => false, ), 'sabre/xml' => array( - 'pretty_version' => '2.2.3', - 'version' => '2.2.3.0', + 'pretty_version' => '2.2.5', + 'version' => '2.2.5.0', 'type' => 'library', 'install_path' => __DIR__ . '/../sabre/xml', 'aliases' => array(), - 'reference' => 'c3b959f821c19b36952ec4a595edd695c216bfc6', + 'reference' => 'a6af111850e7536d200d9637c34885cd3c77a86c', 'dev_requirement' => false, ), 'simplepie/simplepie' => array( - 'pretty_version' => '1.5.6', - 'version' => '1.5.6.0', + 'pretty_version' => '1.5.8', + 'version' => '1.5.8.0', 'type' => 'library', 'install_path' => __DIR__ . '/../simplepie/simplepie', 'aliases' => array(), - 'reference' => '1c68e14ca3ac84346b6e6fe3c5eedf725d0f92c6', + 'reference' => 'd1d80f37264c9f1ed7fa3434eca14d179cb689b1', 'dev_requirement' => false, ), 'smarty/smarty' => array( - 'pretty_version' => 'v3.1.39', - 'version' => '3.1.39.0', + 'pretty_version' => 'v4.1.0', + 'version' => '4.1.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../smarty/smarty', 'aliases' => array(), - 'reference' => 'e27da524f7bcd7361e3ea5cdfa99c4378a7b5419', + 'reference' => '9e0536de18b53ba193364291ef0303b0ab9903e1', 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', + 'pretty_version' => 'v1.24.0', + 'version' => '1.24.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), - 'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce', + 'reference' => '30885182c981ab175d4d034db0f6f469898070ab', 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.23.1', - 'version' => '1.23.1.0', + 'pretty_version' => 'v1.24.0', + 'version' => '1.24.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), - 'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be', + 'reference' => '57b712b08eddb97c762a8caa32c84e037892d2e9', 'dev_requirement' => false, ), 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', + 'pretty_version' => 'v1.24.0', + 'version' => '1.24.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php81', 'aliases' => array(), - 'reference' => 'e66119f3de95efc359483f810c4c3e6436279436', + 'reference' => '5de4ba2d41b15f9bd0e19b2ab9674135813ec98f', 'dev_requirement' => false, ), 'twbs/bootstrap' => array( @@ -266,12 +266,12 @@ ), ), 'voku/portable-ascii' => array( - 'pretty_version' => '1.5.6', - 'version' => '1.5.6.0', + 'pretty_version' => '1.6.1', + 'version' => '1.6.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../voku/portable-ascii', 'aliases' => array(), - 'reference' => '80953678b19901e5165c56752d087fc11526017c', + 'reference' => '87337c91b9dfacee02452244ee14ab3c43bc485a', 'dev_requirement' => false, ), 'voku/stop-words' => array( @@ -289,7 +289,7 @@ 'type' => 'application', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '69ba4eb0558938845fdc96957850672940965e11', + 'reference' => '6930c4e23b8b24f7436c0e265d751460bed9b1d2', 'dev_requirement' => false, ), ), diff --git a/vendor/ezyang/htmlpurifier/README.md b/vendor/ezyang/htmlpurifier/README.md index 9e0becc0a..e6b7199c1 100644 --- a/vendor/ezyang/htmlpurifier/README.md +++ b/vendor/ezyang/htmlpurifier/README.md @@ -1,4 +1,4 @@ -HTML Purifier [![Build Status](https://secure.travis-ci.org/ezyang/htmlpurifier.svg?branch=master)](http://travis-ci.org/ezyang/htmlpurifier) +HTML Purifier [![Build Status](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml) ============= HTML Purifier is an HTML filtering solution that uses a unique combination diff --git a/vendor/ezyang/htmlpurifier/VERSION b/vendor/ezyang/htmlpurifier/VERSION index 01b73abe5..09ce0ce71 100644 --- a/vendor/ezyang/htmlpurifier/VERSION +++ b/vendor/ezyang/htmlpurifier/VERSION @@ -1 +1 @@ -4.13.0
\ No newline at end of file +4.14.0
\ No newline at end of file diff --git a/vendor/ezyang/htmlpurifier/composer.json b/vendor/ezyang/htmlpurifier/composer.json index 0ff86b5df..5f62d889d 100644 --- a/vendor/ezyang/htmlpurifier/composer.json +++ b/vendor/ezyang/htmlpurifier/composer.json @@ -15,9 +15,6 @@ "require": { "php": ">=5.2" }, - "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" - }, "autoload": { "psr-0": { "HTMLPurifier": "library/" }, "files": ["library/HTMLPurifier.composer.php"], diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php index c271cd158..0a17ee4ad 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php @@ -4,12 +4,11 @@ * @file * Legacy autoloader for systems lacking spl_autoload_register * - * Must be separate to prevent deprecation warning on PHP 7.2 */ -function __autoload($class) +spl_autoload_register(function($class) { - return HTMLPurifier_Bootstrap::autoload($class); -} + return HTMLPurifier_Bootstrap::autoload($class); +}); // vim: et sw=4 sts=4 diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php index 9d8d29926..7a691132f 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php @@ -17,6 +17,7 @@ if (function_exists('spl_autoload_register') && function_exists('spl_autoload_un require dirname(__FILE__) . '/HTMLPurifier.autoload-legacy.php'; } +// phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.zend_ze1_compatibility_modeRemoved if (ini_get('zend.ze1_compatibility_mode')) { trigger_error("HTML Purifier is not compatible with zend.ze1_compatibility_mode; please turn it off", E_USER_ERROR); } diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php index 151e6752d..ee81cac68 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php @@ -7,7 +7,7 @@ * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS * FILE, changes will be overwritten the next time the script is run. * - * @version 4.13.0 + * @version 4.14.0 * * @warning * You must *not* include any other HTML Purifier files before this file, diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php index 3c0f8a0ec..2177fc851 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php @@ -19,7 +19,7 @@ */ /* - HTML Purifier 4.13.0 - Standards Compliant HTML Filtering + HTML Purifier 4.14.0 - Standards Compliant HTML Filtering Copyright (C) 2006-2008 Edward Z. Yang This library is free software; you can redistribute it and/or @@ -58,12 +58,12 @@ class HTMLPurifier * Version of HTML Purifier. * @type string */ - public $version = '4.13.0'; + public $version = '4.14.0'; /** * Constant with version of HTML Purifier. */ - const VERSION = '4.13.0'; + const VERSION = '4.14.0'; /** * Global configuration object. diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php index 7f1ea3b0f..28c49883a 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php @@ -25,6 +25,7 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef $this->info['background-repeat'] = $def->info['background-repeat']; $this->info['background-attachment'] = $def->info['background-attachment']; $this->info['background-position'] = $def->info['background-position']; + $this->info['background-size'] = $def->info['background-size']; } /** @@ -53,6 +54,7 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef $caught['repeat'] = false; $caught['attachment'] = false; $caught['position'] = false; + $caught['size'] = false; $i = 0; // number of catches diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php index 21f1a5899..3f08b81c5 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php @@ -109,6 +109,22 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition ); $this->info['background-position'] = new HTMLPurifier_AttrDef_CSS_BackgroundPosition(); + $this->info['background-size'] = new HTMLPurifier_AttrDef_CSS_Composite( + array( + new HTMLPurifier_AttrDef_Enum( + array( + 'auto', + 'cover', + 'contain', + 'initial', + 'inherit', + ) + ), + new HTMLPurifier_AttrDef_CSS_Percentage(), + new HTMLPurifier_AttrDef_CSS_Length() + ) + ); + $border_color = $this->info['border-top-color'] = $this->info['border-bottom-color'] = diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php index cb6b3e6cd..67c7e9535 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php @@ -164,7 +164,7 @@ class HTMLPurifier_ChildDef_Table extends HTMLPurifier_ChildDef } } - if (empty($content)) { + if (empty($content) && $thead === false && $tfoot === false) { return false; } diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php index 3133d8a4f..16a6b322b 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php @@ -21,7 +21,7 @@ class HTMLPurifier_Config * HTML Purifier's version * @type string */ - public $version = '4.13.0'; + public $version = '4.14.0'; /** * Whether or not to automatically finalize @@ -803,7 +803,7 @@ class HTMLPurifier_Config if ($index !== false) { $array = (isset($array[$index]) && is_array($array[$index])) ? $array[$index] : array(); } - $mq = $mq_fix && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc(); + $mq = $mq_fix && version_compare(PHP_VERSION, '7.4.0', '<') && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc(); $allowed = HTMLPurifier_Config::getAllowedDirectivesForForm($allowed, $schema); $ret = array(); diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README index 2e35c1c3d..2e35c1c3d 100644..100755 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php index 6d898f80c..9dbb98729 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php @@ -257,8 +257,9 @@ class HTMLPurifier_HTMLModule */ public function makeLookup($list) { + $args = func_get_args(); if (is_string($list)) { - $list = func_get_args(); + $list = $args; } $ret = array(); foreach ($list as $value) { diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php index 08aa23247..12173ba70 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php @@ -146,10 +146,7 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule $type = "info_$type"; $e = $this; } - // PHP does some weird parsing when I do - // $e->$type[$attr], so I have to assign a ref. - $f =& $e->$type; - $f[$attr] = $fix; + $e->{$type}[$attr] = $fix; break; case 'tag_transform': $this->info_tag_transform[$params['element']] = $fix; diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php index 700a25dbc..9ee3ffcc9 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php @@ -168,9 +168,11 @@ class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule // @vspace for img ------------------------------------------------ $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace'); - // @width for hr, td, th ------------------------------------------ + // @width for table, hr, td, th, col ------------------------------------------ + $r['table@width'] = $r['td@width'] = $r['th@width'] = + $r['col@width'] = $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width'); return $r; diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php index 74f83eaa7..3b6d70f6e 100644 --- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php +++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php @@ -40,6 +40,9 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector '/\\b((?:[a-z][\\w\\-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\))+(?:\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'".,<>?\x{00ab}\x{00bb}\x{201c}\x{201d}\x{2018}\x{2019}]))/iu', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE); + if ($bits === false) { + return; + } $token = array(); diff --git a/vendor/jbroadway/urlify/.github/workflows/ci.yml b/vendor/jbroadway/urlify/.github/workflows/ci.yml new file mode 100644 index 000000000..869334f57 --- /dev/null +++ b/vendor/jbroadway/urlify/.github/workflows/ci.yml @@ -0,0 +1,41 @@ +name: "Continuous Integration" + +on: + - push + - pull_request + +env: + COMPOSER_FLAGS: "--no-interaction --prefer-dist" + +jobs: + tests: + name: "CI" + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "7.2" + - "7.3" + - "7.4" + - "8.0" + + dependencies: [highest] + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Setup PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + + - name: "Install dependencies" + run: | + composer update ${{ env.COMPOSER_FLAGS }} + + - name: "Run tests" + run: "composer exec phpunit -- --verbose" diff --git a/vendor/jbroadway/urlify/README.md b/vendor/jbroadway/urlify/README.md index 74780485f..0dcfab189 100644 --- a/vendor/jbroadway/urlify/README.md +++ b/vendor/jbroadway/urlify/README.md @@ -1,4 +1,10 @@ -# URLify for PHP [![Build Status](https://travis-ci.org/jbroadway/urlify.png)](https://travis-ci.org/jbroadway/urlify) +# URLify for PHP + +![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/jbroadway/urlify/Continuous%20Integration/master) +![Packagist License](https://img.shields.io/packagist/l/jbroadway/urlify) +![Packagist Version](https://img.shields.io/packagist/v/jbroadway/urlify) +![Packagist PHP Version Support](https://img.shields.io/packagist/php-v/jbroadway/urlify) +![Packagist Downloads](https://img.shields.io/packagist/dt/jbroadway/urlify) A fast PHP slug generator and transliteration library, started as a PHP port of [URLify.js](https://github.com/django/django/blob/master/django/contrib/admin/static/admin/js/urlify.js) diff --git a/vendor/jbroadway/urlify/composer.json b/vendor/jbroadway/urlify/composer.json index a7731b0ea..d24b8a2d9 100644 --- a/vendor/jbroadway/urlify/composer.json +++ b/vendor/jbroadway/urlify/composer.json @@ -1,8 +1,8 @@ { "name": "jbroadway/urlify", "type": "library", - "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.", - "keywords": ["urlify","transliterate","translit","transliteration","url","encode","slug","link","iconv"], + "description": "A fast PHP slug generator and transliteration library that converts non-ascii characters for use in URLs.", + "keywords": ["urlify","transliterate","translit","transliteration","url","encode","downcode","slug","slugify","slugs","link","iconv","blogging","blogs","unicode","ascii","seo"], "homepage": "https://github.com/jbroadway/urlify", "license": "BSD-3-Clause-Clear", "authors": [ @@ -13,12 +13,12 @@ } ], "require": { - "php": ">=7.2.0", + "php": ">=7.2", "voku/portable-ascii": "^1.4", "voku/stop-words": "^2.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0" + "phpunit/phpunit": "^8.5" }, "autoload": { "psr-0": { "URLify": "" } diff --git a/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/1_Conversion_error.yaml b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/1_Conversion_error.yaml new file mode 100644 index 000000000..7f267b208 --- /dev/null +++ b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/1_Conversion_error.yaml @@ -0,0 +1,25 @@ +name: "📃 Bug Report (Incorrect Markdown)" +description: I'm not getting the Markdown I expect +body: + - type: input + id: affected-versions + attributes: + label: Version(s) affected + placeholder: x.y.z + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the problem. + validations: + required: true + - type: textarea + id: how-to-reproduce + attributes: + label: How to reproduce + description: | + Provide the HTML input and any other information that would help us reproduce the problem. + validations: + required: true diff --git a/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/2_Bug_report.yaml b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/2_Bug_report.yaml new file mode 100644 index 000000000..2045fb79a --- /dev/null +++ b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/2_Bug_report.yaml @@ -0,0 +1,43 @@ +name: "🛠Bug Report (Other)" +description: Report all other errors and problems +body: + - type: input + id: affected-versions + attributes: + label: Version(s) affected + placeholder: x.y.z + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the problem. + validations: + required: true + - type: textarea + id: how-to-reproduce + attributes: + label: How to reproduce + description: | + HTML and/or any other information needed to reproduce the problem. + validations: + required: true + - type: textarea + id: possible-solution + attributes: + label: Possible solution + description: | + Optional: only if you have suggestions on a fix/reason for the bug + - type: textarea + id: additional-context + attributes: + label: Additional context + description: | + Optional: any other context about the problem: log messages, screenshots, etc. + - type: textarea + id: feedback + attributes: + label: Did this project help you today? Did it make you happy in any way? + description: | + Optional: Sometimes we get tired of reading bug reports and working on complex features, so if you have anything positive to share about how this library might have helped you we'd love to hear it! diff --git a/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/3_Feature_request.yaml b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/3_Feature_request.yaml new file mode 100644 index 000000000..2d91a58d0 --- /dev/null +++ b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/3_Feature_request.yaml @@ -0,0 +1,27 @@ +name: "🚀 Feature Request" +description: RFC and ideas for new features and improvements +labels: + - enhancement +body: + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the problem. + validations: + required: true + - type: textarea + id: example + attributes: + label: Example + description: | + A simple example of the new feature in action (include PHP code, sample HTML/Markdown, etc.) + If the new feature changes an existing feature, include a simple before/after comparison. + validations: + required: true + - type: textarea + id: feedback + attributes: + label: Did this project help you today? Did it make you happy in any way? + description: | + Optional: Sometimes we get tired of reading bug reports and working on complex features, so if you have anything positive to share about how this library might have helped you we'd love to hear it! diff --git a/vendor/league/html-to-markdown/CHANGELOG.md b/vendor/league/html-to-markdown/CHANGELOG.md index 36fb1249e..60e8e6f24 100644 --- a/vendor/league/html-to-markdown/CHANGELOG.md +++ b/vendor/league/html-to-markdown/CHANGELOG.md @@ -4,6 +4,22 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip ## [Unreleased][unreleased] +## [5.1.0] - 2022-03-02 + +### Changed + + - Changed horizontal rule style (#218, #219) + +### Fixed + + - Fixed `Element::getValue()` not handling possible nulls + +## [5.0.2] - 2021-11-06 + +### Fixed + + - Fixed missplaced comment nodes appearing at the start of the HTML input (#212) + ## [5.0.1] - 2021-09-17 ### Fixed @@ -299,7 +315,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/5.0.1...master +[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/5.1.0...master +[5.1.0]: https://github.com/thephpleague/html-to-markdown/compare/5.0.2...5.1.0 +[5.0.2]: https://github.com/thephpleague/html-to-markdown/compare/5.0.1...5.0.2 [5.0.1]: https://github.com/thephpleague/html-to-markdown/compare/5.0.0...5.0.1 [5.0.0]: https://github.com/thephpleague/html-to-markdown/compare/4.10.0...5.0.0 [4.10.0]: https://github.com/thephpleague/html-to-markdown/compare/4.9.1...4.10.0 diff --git a/vendor/league/html-to-markdown/composer.json b/vendor/league/html-to-markdown/composer.json index af3e41058..22ca054f3 100644 --- a/vendor/league/html-to-markdown/composer.json +++ b/vendor/league/html-to-markdown/composer.json @@ -36,16 +36,21 @@ }, "require-dev": { "mikehaertl/php-shellcommand": "^1.1.0", - "phpstan/phpstan": "^0.12.82", + "phpstan/phpstan": "^0.12.99", "phpunit/phpunit": "^8.5 || ^9.2", "scrutinizer/ocular": "^1.6", "unleashedtech/php-coding-standard": "^2.7", - "vimeo/psalm": "^4.6" + "vimeo/psalm": "^4.22" }, "bin": ["bin/html-to-markdown"], "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-master": "5.2-dev" + } + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true } } } diff --git a/vendor/league/html-to-markdown/psalm.xml b/vendor/league/html-to-markdown/psalm.xml index 729e9a919..30258a709 100644 --- a/vendor/league/html-to-markdown/psalm.xml +++ b/vendor/league/html-to-markdown/psalm.xml @@ -1,6 +1,5 @@ <?xml version="1.0"?> <psalm - totallyTyped="false" errorLevel="3" resolveFromConfigFile="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" diff --git a/vendor/league/html-to-markdown/src/Converter/HorizontalRuleConverter.php b/vendor/league/html-to-markdown/src/Converter/HorizontalRuleConverter.php index ce280cc79..a2b1ac14a 100644 --- a/vendor/league/html-to-markdown/src/Converter/HorizontalRuleConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/HorizontalRuleConverter.php @@ -10,7 +10,7 @@ class HorizontalRuleConverter implements ConverterInterface { public function convert(ElementInterface $element): string { - return "- - - - - -\n\n"; + return "---\n\n"; } /** diff --git a/vendor/league/html-to-markdown/src/Element.php b/vendor/league/html-to-markdown/src/Element.php index 5407f1ffb..0515b5995 100644 --- a/vendor/league/html-to-markdown/src/Element.php +++ b/vendor/league/html-to-markdown/src/Element.php @@ -63,7 +63,7 @@ class Element implements ElementInterface public function getValue(): string { - return $this->node->nodeValue; + return $this->node->nodeValue ?? ''; } public function hasParent(): bool diff --git a/vendor/league/html-to-markdown/src/HtmlConverter.php b/vendor/league/html-to-markdown/src/HtmlConverter.php index 7cd543b34..7162b256d 100644 --- a/vendor/league/html-to-markdown/src/HtmlConverter.php +++ b/vendor/league/html-to-markdown/src/HtmlConverter.php @@ -121,6 +121,8 @@ class HtmlConverter implements HtmlConverterInterface $document->loadHTML('<?xml encoding="UTF-8">' . $html); $document->encoding = 'UTF-8'; + $this->replaceMisplacedComments($document); + if ($this->getConfig()->getOption('suppress_errors')) { \libxml_clear_errors(); } @@ -129,6 +131,36 @@ class HtmlConverter implements HtmlConverterInterface } /** + * Finds any comment nodes outside <html> element and moves them into <body>. + * + * @see https://github.com/thephpleague/html-to-markdown/issues/212 + * @see https://3v4l.org/7bC33 + */ + private function replaceMisplacedComments(\DOMDocument $document): void + { + // Find ny comment nodes at the root of the document. + $misplacedComments = (new \DOMXPath($document))->query('/comment()'); + if ($misplacedComments === false) { + return; + } + + $body = $document->getElementsByTagName('body')->item(0); + if ($body === null) { + return; + } + + // Loop over comment nodes in reverse so we put them inside <body> in + // their original order. + for ($index = $misplacedComments->length - 1; $index >= 0; $index--) { + if ($body->firstChild === null) { + $body->insertBefore($misplacedComments[$index]); + } else { + $body->insertBefore($misplacedComments[$index], $body->firstChild); + } + } + } + + /** * Convert Children * * Recursive function to drill into the DOM and convert each node into Markdown from the inside out. diff --git a/vendor/michelf/php-markdown/.travis.yml b/vendor/michelf/php-markdown/.travis.yml index d46714787..440045be3 100644 --- a/vendor/michelf/php-markdown/.travis.yml +++ b/vendor/michelf/php-markdown/.travis.yml @@ -1,25 +1,29 @@ language: php -sudo: false +matrix: + include: + - php: hhvm-3.18 + dist: trusty + - php: 5.3 + dist: precise + - php: 5.4 + dist: trusty + - php: 5.5 + dist: trusty + - php: 5.6 + dist: xenial + - php: 7.0 + dist: xenial + - php: 7.1 + dist: bionic + - php: 7.2 + dist: bionic + - php: 7.3 + dist: bionic + - php: 7.4 + dist: bionic -cache: - directories: - - $HOME/.composer/ - -# Run tests against all these PHP versions -# TODO: When it becomes possible in TravisCI, switch 7.4snapshot to plain 7.4 -php: - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - 7.3 - - 7.4snapshot - - hhvm - -before_script: +install: - composer install --prefer-dist script: diff --git a/vendor/michelf/php-markdown/License.md b/vendor/michelf/php-markdown/License.md index 16bbd5400..25d1e16b6 100644 --- a/vendor/michelf/php-markdown/License.md +++ b/vendor/michelf/php-markdown/License.md @@ -1,5 +1,5 @@ PHP Markdown Lib -Copyright (c) 2004-2019 Michel Fortin +Copyright (c) 2004-2021 Michel Fortin <https://michelf.ca/> All rights reserved. diff --git a/vendor/michelf/php-markdown/Michelf/Markdown.php b/vendor/michelf/php-markdown/Michelf/Markdown.php index 43b3c79e8..f644080c7 100644 --- a/vendor/michelf/php-markdown/Michelf/Markdown.php +++ b/vendor/michelf/php-markdown/Michelf/Markdown.php @@ -4,7 +4,7 @@ * * @package php-markdown * @author Michel Fortin <michel.fortin@michelf.com> - * @copyright 2004-2019 Michel Fortin <https://michelf.com/projects/php-markdown/> + * @copyright 2004-2021 Michel Fortin <https://michelf.com/projects/php-markdown/> * @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/> */ @@ -18,7 +18,7 @@ class Markdown implements MarkdownInterface { * Define the package version * @var string */ - const MARKDOWNLIB_VERSION = "1.9.0"; + const MARKDOWNLIB_VERSION = "1.9.1"; /** * Simple function interface - Initialize the parser and return the result @@ -354,7 +354,7 @@ class Markdown implements MarkdownInterface { $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'. 'script|noscript|style|form|fieldset|iframe|math|svg|'. 'article|section|nav|aside|hgroup|header|footer|'. - 'figure'; + 'figure|details|summary'; // Regular expression for the content of a block tag. $nested_tags_level = 4; diff --git a/vendor/michelf/php-markdown/Michelf/MarkdownExtra.php b/vendor/michelf/php-markdown/Michelf/MarkdownExtra.php index 62d25f38e..888f5f28d 100644 --- a/vendor/michelf/php-markdown/Michelf/MarkdownExtra.php +++ b/vendor/michelf/php-markdown/Michelf/MarkdownExtra.php @@ -4,7 +4,7 @@ * * @package php-markdown * @author Michel Fortin <michel.fortin@michelf.com> - * @copyright 2004-2019 Michel Fortin <https://michelf.com/projects/php-markdown/> + * @copyright 2004-2021 Michel Fortin <https://michelf.com/projects/php-markdown/> * @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/> */ @@ -345,7 +345,7 @@ class MarkdownExtra extends \Michelf\Markdown { * Tags that are always treated as block tags * @var string */ - protected $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption|figure'; + protected $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption|figure|details|summary'; /** * Tags treated as block tags only if the opening tag is alone on its line @@ -932,6 +932,7 @@ class MarkdownExtra extends \Michelf\Markdown { protected function _doAnchors_inline_callback($matches) { $link_text = $this->runSpanGamut($matches[2]); $url = $matches[3] === '' ? $matches[4] : $matches[3]; + $title_quote =& $matches[6]; $title =& $matches[7]; $attr = $this->doExtraAttributes("a", $dummy =& $matches[8]); @@ -944,7 +945,7 @@ class MarkdownExtra extends \Michelf\Markdown { $url = $this->encodeURLAttribute($url); $result = "<a href=\"$url\""; - if (isset($title)) { + if (isset($title) && $title_quote) { $title = $this->encodeAttribute($title); $result .= " title=\"$title\""; } @@ -1056,13 +1057,14 @@ class MarkdownExtra extends \Michelf\Markdown { protected function _doImages_inline_callback($matches) { $alt_text = $matches[2]; $url = $matches[3] === '' ? $matches[4] : $matches[3]; + $title_quote =& $matches[6]; $title =& $matches[7]; $attr = $this->doExtraAttributes("img", $dummy =& $matches[8]); $alt_text = $this->encodeAttribute($alt_text); $url = $this->encodeURLAttribute($url); $result = "<img src=\"$url\" alt=\"$alt_text\""; - if (isset($title)) { + if (isset($title) && $title_quote) { $title = $this->encodeAttribute($title); $result .= " title=\"$title\""; // $title already quoted } diff --git a/vendor/michelf/php-markdown/Michelf/MarkdownInterface.php b/vendor/michelf/php-markdown/Michelf/MarkdownInterface.php index 006452445..32069dff2 100644 --- a/vendor/michelf/php-markdown/Michelf/MarkdownInterface.php +++ b/vendor/michelf/php-markdown/Michelf/MarkdownInterface.php @@ -4,7 +4,7 @@ * * @package php-markdown * @author Michel Fortin <michel.fortin@michelf.com> - * @copyright 2004-2019 Michel Fortin <https://michelf.com/projects/php-markdown/> + * @copyright 2004-2021 Michel Fortin <https://michelf.com/projects/php-markdown/> * @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/> */ diff --git a/vendor/michelf/php-markdown/Readme.md b/vendor/michelf/php-markdown/Readme.md index e1eb30660..1a0ee06eb 100644 --- a/vendor/michelf/php-markdown/Readme.md +++ b/vendor/michelf/php-markdown/Readme.md @@ -1,7 +1,7 @@ PHP Markdown ============ -PHP Markdown Lib 1.9.0 - 1 Dec 2019 +PHP Markdown Lib 1.9.1 - 23 Nov 2021 by Michel Fortin <https://michelf.ca/> @@ -183,6 +183,17 @@ PHP Markdown, please visit [michelf.ca/donate]. Version History --------------- +PHP Markdown Lib 1.9.1 (23 Nov 2021) + +* Now treating `<details>` and `<summary>` as block level so they don't + get wrapped in `<p>`. + (Thanks to Thomas Hochstein for the fix.) + +* Fix for unintended blank title attribute when adding supplementary attributes + to a link in Markdown Extra. + (Thanks to Richie Black for the fix.) + + PHP Markdown Lib 1.9.0 (1 Dec 2019) * Added `fn_backlink_label` configuration variable to put some text in the @@ -399,7 +410,7 @@ Copyright and License --------------------- PHP Markdown Lib -Copyright (c) 2004-2019 Michel Fortin +Copyright (c) 2004-2021 Michel Fortin <https://michelf.ca/> All rights reserved. diff --git a/vendor/michelf/php-markdown/test/helpers/MarkdownTestHelper.php b/vendor/michelf/php-markdown/test/helpers/MarkdownTestHelper.php index 545dabd12..ffca0c969 100644 --- a/vendor/michelf/php-markdown/test/helpers/MarkdownTestHelper.php +++ b/vendor/michelf/php-markdown/test/helpers/MarkdownTestHelper.php @@ -20,7 +20,7 @@ class MarkdownTestHelper RecursiveRegexIterator::GET_MATCH ); - $dataValues = []; + $dataValues = array(); /** @var SplFileInfo $inputFile */ foreach ($regexIterator as $inputFiles) { @@ -31,7 +31,7 @@ class MarkdownTestHelper $expectedHtmlPath = substr($inputMarkdownPath, 0, -4) . 'html'; $xhtml = false; } - $dataValues[] = [$inputMarkdownPath, $expectedHtmlPath, $xhtml]; + $dataValues[] = array($inputMarkdownPath, $expectedHtmlPath, $xhtml); } } diff --git a/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).html b/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).html index 1451d625b..efb6763cd 100644 --- a/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).html +++ b/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).html @@ -14,6 +14,13 @@ <hr class="foo" id="bar" > +<p>Details and Summary:</p> + +<details> + <summary>Some details</summary> + <p>More info about the details.</p> +</details> + <p>Regression:</p> <pre> diff --git a/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).text b/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).text index 359b622fd..7b67dde68 100644 --- a/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).text +++ b/vendor/michelf/php-markdown/test/resources/php-markdown.mdtest/Inline HTML (Simple).text @@ -14,6 +14,13 @@ Hr's: <hr class="foo" id="bar" > +Details and Summary: + +<details> + <summary>Some details</summary> + <p>More info about the details.</p> +</details> + Regression: <pre> diff --git a/vendor/phpseclib/phpseclib/BACKERS.md b/vendor/phpseclib/phpseclib/BACKERS.md index e03152ca1..87e3fd2bd 100644 --- a/vendor/phpseclib/phpseclib/BACKERS.md +++ b/vendor/phpseclib/phpseclib/BACKERS.md @@ -4,5 +4,9 @@ phpseclib ongoing development is made possible by [Tidelift](https://tidelift.co ## Backers +- Allan Simon +- Raghu Veer Dendukuri - Zane Hooper -- [Setasign](https://www.setasign.com/)
\ No newline at end of file +- [Setasign](https://www.setasign.com/) +- [Charles Severance](https://github.com/csev) +- [Rachel Fish](https://github.com/itsrachelfish)
\ No newline at end of file diff --git a/vendor/phpseclib/phpseclib/README.md b/vendor/phpseclib/phpseclib/README.md index 099486dc9..61cc09907 100644 --- a/vendor/phpseclib/phpseclib/README.md +++ b/vendor/phpseclib/phpseclib/README.md @@ -1,6 +1,6 @@ # phpseclib - PHP Secure Communications Library -[![Build Status](https://travis-ci.com/phpseclib/phpseclib.svg?branch=2.0)](https://travis-ci.com/phpseclib/phpseclib) +[![Build Status](https://travis-ci.com/phpseclib/phpseclib.svg?branch=2.0)](https://travis-ci.com/github/phpseclib/phpseclib) ## Supporting phpseclib @@ -52,7 +52,7 @@ SSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / * Composer compatible (PSR-0 autoloading) * Install using Composer: `composer require phpseclib/phpseclib:~1.0` * Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm) -* [Download 1.0.19 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.19.zip/download) +* [Download 1.0.20 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.20.zip/download) ## Security contact information @@ -66,6 +66,12 @@ Need Support? * [Create a Support Ticket on GitHub](https://github.com/phpseclib/phpseclib/issues/new) * [Browse the Support Forum](http://www.frostjedi.com/phpbb/viewforum.php?f=46) (no longer in use) +## Special Thanks + +Special Thanks to our Patreon sponsors!: + +- Allan Simon + ## Contributing 1. Fork the Project diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php index 8822b9b88..6335a2484 100644 --- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php @@ -79,7 +79,11 @@ abstract class Base /** * Encrypt / decrypt using the Cipher Feedback mode (8bit) */ - const MODE_CFB8 = 38; + const MODE_CFB8 = 6; + /** + * Encrypt / decrypt using the Output Feedback mode (8bit) + */ + const MODE_OFB8 = 7; /** * Encrypt / decrypt using the Output Feedback mode. * @@ -484,6 +488,7 @@ abstract class Base case self::MODE_CTR: case self::MODE_CFB: case self::MODE_CFB8: + case self::MODE_OFB8: case self::MODE_OFB: case self::MODE_STREAM: $this->mode = $mode; @@ -773,8 +778,25 @@ abstract class Base } } return $ciphertext; + case self::MODE_OFB8: + $ciphertext = ''; + $len = strlen($plaintext); + $iv = $this->encryptIV; + + for ($i = 0; $i < $len; ++$i) { + $xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV); + $ciphertext.= $plaintext[$i] ^ $xor; + $iv = substr($iv, 1) . $xor[0]; + } + + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + break; case self::MODE_OFB: return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer); + case self::MODE_OFB8: + // OpenSSL has built in support for cfb8 but not ofb8 } } @@ -959,12 +981,14 @@ abstract class Base } break; case self::MODE_CFB8: + // compared to regular CFB, which encrypts a block at a time, + // here, we're encrypting a byte at a time $ciphertext = ''; $len = strlen($plaintext); $iv = $this->encryptIV; for ($i = 0; $i < $len; ++$i) { - $ciphertext .= ($c = $plaintext[$i] ^ $this->_encryptBlock($iv)); + $ciphertext.= ($c = $plaintext[$i] ^ $this->_encryptBlock($iv)); $iv = substr($iv, 1) . $c; } @@ -976,6 +1000,21 @@ abstract class Base } } break; + case self::MODE_OFB8: + $ciphertext = ''; + $len = strlen($plaintext); + $iv = $this->encryptIV; + + for ($i = 0; $i < $len; ++$i) { + $xor = $this->_encryptBlock($iv); + $ciphertext.= $plaintext[$i] ^ $xor; + $iv = substr($iv, 1) . $xor[0]; + } + + if ($this->continuousBuffer) { + $this->encryptIV = $iv; + } + break; case self::MODE_OFB: $xor = $this->encryptIV; if (strlen($buffer['xor'])) { @@ -1116,6 +1155,21 @@ abstract class Base } } break; + case self::MODE_OFB8: + $plaintext = ''; + $len = strlen($ciphertext); + $iv = $this->decryptIV; + + for ($i = 0; $i < $len; ++$i) { + $xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV); + $plaintext.= $ciphertext[$i] ^ $xor; + $iv = substr($iv, 1) . $xor[0]; + } + + if ($this->continuousBuffer) { + $this->decryptIV = $iv; + } + break; case self::MODE_OFB: $plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer); } @@ -1290,7 +1344,7 @@ abstract class Base $iv = $this->decryptIV; for ($i = 0; $i < $len; ++$i) { - $plaintext .= $ciphertext[$i] ^ $this->_encryptBlock($iv); + $plaintext.= $ciphertext[$i] ^ $this->_encryptBlock($iv); $iv = substr($iv, 1) . $ciphertext[$i]; } @@ -1302,6 +1356,21 @@ abstract class Base } } break; + case self::MODE_OFB8: + $plaintext = ''; + $len = strlen($ciphertext); + $iv = $this->decryptIV; + + for ($i = 0; $i < $len; ++$i) { + $xor = $this->_encryptBlock($iv); + $plaintext.= $ciphertext[$i] ^ $xor; + $iv = substr($iv, 1) . $xor[0]; + } + + if ($this->continuousBuffer) { + $this->decryptIV = $iv; + } + break; case self::MODE_OFB: $xor = $this->decryptIV; if (strlen($buffer['xor'])) { @@ -1864,6 +1933,7 @@ abstract class Base self::MODE_CFB => 'ncfb', self::MODE_CFB8 => MCRYPT_MODE_CFB, self::MODE_OFB => MCRYPT_MODE_NOFB, + self::MODE_OFB8 => MCRYPT_MODE_OFB, self::MODE_STREAM => MCRYPT_MODE_STREAM, ); @@ -2446,7 +2516,7 @@ abstract class Base for ($_i = 0; $_i < $_len; ++$_i) { $in = $_iv; '.$encrypt_block.' - $_ciphertext .= ($_c = $_text[$_i] ^ $in); + $_ciphertext.= ($_c = $_text[$_i] ^ $in); $_iv = substr($_iv, 1) . $_c; } @@ -2468,7 +2538,7 @@ abstract class Base for ($_i = 0; $_i < $_len; ++$_i) { $in = $_iv; '.$encrypt_block.' - $_plaintext .= $_text[$_i] ^ $in; + $_plaintext.= $_text[$_i] ^ $in; $_iv = substr($_iv, 1) . $_text[$_i]; } @@ -2483,6 +2553,44 @@ abstract class Base return $_plaintext; '; break; + case self::MODE_OFB8: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_len = strlen($_text); + $_iv = $self->encryptIV; + + for ($_i = 0; $_i < $_len; ++$_i) { + $in = $_iv; + '.$encrypt_block.' + $_ciphertext.= $_text[$_i] ^ $in; + $_iv = substr($_iv, 1) . $in[0]; + } + + if ($self->continuousBuffer) { + $self->encryptIV = $_iv; + } + + return $_ciphertext; + '; + $decrypt = $init_encrypt . ' + $_plaintext = ""; + $_len = strlen($_text); + $_iv = $self->decryptIV; + + for ($_i = 0; $_i < $_len; ++$_i) { + $in = $_iv; + '.$encrypt_block.' + $_plaintext.= $_text[$_i] ^ $in; + $_iv = substr($_iv, 1) . $in[0]; + } + + if ($self->continuousBuffer) { + $self->decryptIV = $_iv; + } + + return $_plaintext; + '; + break; case self::MODE_OFB: $encrypt = $init_encrypt . ' $_ciphertext = ""; diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php index e26fe41dd..59999d706 100644 --- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php @@ -470,7 +470,7 @@ class RSA case defined('MATH_BIGINTEGER_OPENSSL_DISABLE'): define('CRYPT_RSA_MODE', self::MODE_INTERNAL); break; - case extension_loaded('openssl') && file_exists($this->configFile): + case function_exists('phpinfo') && extension_loaded('openssl') && file_exists($this->configFile): // some versions of XAMPP have mismatched versions of OpenSSL which causes it not to work $versions = array(); @@ -878,9 +878,9 @@ class RSA ); $key = "openssh-key-v1\0$key"; - return "-----BEGIN OPENSSH PRIVATE KEY-----\r\n" . - chunk_split(base64_encode($key), 70) . - "-----END OPENSSH PRIVATE KEY-----"; + return "-----BEGIN OPENSSH PRIVATE KEY-----\n" . + chunk_split(base64_encode($key), 70, "\n") . + "-----END OPENSSH PRIVATE KEY-----\n"; default: // eg. self::PRIVATE_FORMAT_PKCS1 $components = array(); foreach ($raw as $name => $value) { diff --git a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php index fc24b9145..52adcd450 100644 --- a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php +++ b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php @@ -263,7 +263,7 @@ class BigInteger } } - if (extension_loaded('openssl') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { + if (function_exists('phpinfo') && extension_loaded('openssl') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { // some versions of XAMPP have mismatched versions of OpenSSL which causes it not to work $versions = array(); diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php index 1e6fba9fc..0c06c35f4 100644 --- a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php @@ -5,9 +5,7 @@ * * PHP version 5 * - * Currently only supports SFTPv2 and v3, which, according to wikipedia.org, "is the most widely used version, - * implemented by the popular OpenSSH SFTP server". If you want SFTPv4/5/6 support, provide me with access - * to an SFTPv4/5/6 server. + * Supports SFTPv2/3/4/5/6. Defaults to v3. * * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}. * @@ -155,6 +153,24 @@ class SFTP extends SSH2 var $version; /** + * Default Server SFTP version + * + * @var int + * @see self::_initChannel() + * @access private + */ + var $defaultVersion; + + /** + * Preferred SFTP version + * + * @var int + * @see self::_initChannel() + * @access private + */ + var $preferredVersion = 3; + + /** * Current working directory * * @var string @@ -270,6 +286,21 @@ class SFTP extends SSH2 var $preserveTime = false; /** + * Arbitrary Length Packets Flag + * + * Determines whether or not packets of any length should be allowed, + * in cases where the server chooses the packet length (such as + * directory listings). By default, packets are only allowed to be + * 256 * 1024 bytes (SFTP_MAX_MSG_LENGTH from OpenSSH's sftp-common.h) + * + * @see self::enableArbitraryLengthPackets() + * @see self::_get_sftp_packet() + * @var bool + * @access private + */ + var $allow_arbitrary_length_packets = false; + + /** * Was the last packet due to the channels being closed or not? * * @see self::get() @@ -280,6 +311,14 @@ class SFTP extends SSH2 var $channel_close = false; /** + * Has the SFTP channel been partially negotiated? + * + * @var bool + * @access private + */ + var $partial_init = false; + + /** * Default Constructor. * * Connects to an SFTP server @@ -299,15 +338,13 @@ class SFTP extends SSH2 $this->packet_types = array( 1 => 'NET_SFTP_INIT', 2 => 'NET_SFTP_VERSION', - /* the format of SSH_FXP_OPEN changed between SFTPv4 and SFTPv5+: - SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.1 - pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 */ 3 => 'NET_SFTP_OPEN', 4 => 'NET_SFTP_CLOSE', 5 => 'NET_SFTP_READ', 6 => 'NET_SFTP_WRITE', 7 => 'NET_SFTP_LSTAT', 9 => 'NET_SFTP_SETSTAT', + 10 => 'NET_SFTP_FSETSTAT', 11 => 'NET_SFTP_OPENDIR', 12 => 'NET_SFTP_READDIR', 13 => 'NET_SFTP_REMOVE', @@ -315,18 +352,13 @@ class SFTP extends SSH2 15 => 'NET_SFTP_RMDIR', 16 => 'NET_SFTP_REALPATH', 17 => 'NET_SFTP_STAT', - /* the format of SSH_FXP_RENAME changed between SFTPv4 and SFTPv5+: - SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 - pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.5 */ 18 => 'NET_SFTP_RENAME', 19 => 'NET_SFTP_READLINK', 20 => 'NET_SFTP_SYMLINK', + 21 => 'NET_SFTP_LINK', 101=> 'NET_SFTP_STATUS', 102=> 'NET_SFTP_HANDLE', - /* the format of SSH_FXP_NAME changed between SFTPv3 and SFTPv4+: - SFTPv4+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.4 - pre-SFTPv4 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-7 */ 103=> 'NET_SFTP_DATA', 104=> 'NET_SFTP_NAME', 105=> 'NET_SFTP_ATTRS', @@ -371,25 +403,59 @@ class SFTP extends SSH2 // the order, in this case, matters quite a lot - see \phpseclib\Net\SFTP::_parseAttributes() to understand why $this->attributes = array( 0x00000001 => 'NET_SFTP_ATTR_SIZE', - 0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+ + 0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+ + 0x00000080 => 'NET_SFTP_ATTR_OWNERGROUP', // defined in SFTPv4+ 0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS', 0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME', + 0x00000010 => 'NET_SFTP_ATTR_CREATETIME', // SFTPv4+ + 0x00000020 => 'NET_SFTP_ATTR_MODIFYTIME', + 0x00000040 => 'NET_SFTP_ATTR_ACL', + 0x00000100 => 'NET_SFTP_ATTR_SUBSECOND_TIMES', + 0x00000200 => 'NET_SFTP_ATTR_BITS', // SFTPv5+ + 0x00000400 => 'NET_SFTP_ATTR_ALLOCATION_SIZE', // SFTPv6+ + 0x00000800 => 'NET_SFTP_ATTR_TEXT_HINT', + 0x00001000 => 'NET_SFTP_ATTR_MIME_TYPE', + 0x00002000 => 'NET_SFTP_ATTR_LINK_COUNT', + 0x00004000 => 'NET_SFTP_ATTR_UNTRANSLATED_NAME', + 0x00008000 => 'NET_SFTP_ATTR_CTIME', // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers // yields inconsistent behavior depending on how php is compiled. so we left shift -1 (which, in // two's compliment, consists of all 1 bits) by 31. on 64-bit systems this'll yield 0xFFFFFFFF80000000. // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored. (-1 << 31) & 0xFFFFFFFF => 'NET_SFTP_ATTR_EXTENDED' ); - // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 - // the flag definitions change somewhat in SFTPv5+. if SFTPv5+ support is added to this library, maybe name - // the array for that $this->open5_flags and similarly alter the constant names. $this->open_flags = array( 0x00000001 => 'NET_SFTP_OPEN_READ', 0x00000002 => 'NET_SFTP_OPEN_WRITE', 0x00000004 => 'NET_SFTP_OPEN_APPEND', 0x00000008 => 'NET_SFTP_OPEN_CREATE', 0x00000010 => 'NET_SFTP_OPEN_TRUNCATE', - 0x00000020 => 'NET_SFTP_OPEN_EXCL' + 0x00000020 => 'NET_SFTP_OPEN_EXCL', + 0x00000040 => 'NET_SFTP_OPEN_TEXT' // defined in SFTPv4 + ); + // SFTPv5+ changed the flags up: + // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-8.1.1.3 + $this->open_flags5 = array( + // when SSH_FXF_ACCESS_DISPOSITION is a 3 bit field that controls how the file is opened + 0x00000000 => 'NET_SFTP_OPEN_CREATE_NEW', + 0x00000001 => 'NET_SFTP_OPEN_CREATE_TRUNCATE', + 0x00000002 => 'NET_SFTP_OPEN_OPEN_EXISTING', + 0x00000003 => 'NET_SFTP_OPEN_OPEN_OR_CREATE', + 0x00000004 => 'NET_SFTP_OPEN_TRUNCATE_EXISTING', + // the rest of the flags are not supported + 0x00000008 => 'NET_SFTP_OPEN_APPEND_DATA', // "the offset field of SS_FXP_WRITE requests is ignored" + 0x00000010 => 'NET_SFTP_OPEN_APPEND_DATA_ATOMIC', + 0x00000020 => 'NET_SFTP_OPEN_TEXT_MODE', + 0x00000040 => 'NET_SFTP_OPEN_BLOCK_READ', + 0x00000080 => 'NET_SFTP_OPEN_BLOCK_WRITE', + 0x00000100 => 'NET_SFTP_OPEN_BLOCK_DELETE', + 0x00000200 => 'NET_SFTP_OPEN_BLOCK_ADVISORY', + 0x00000400 => 'NET_SFTP_OPEN_NOFOLLOW', + 0x00000800 => 'NET_SFTP_OPEN_DELETE_ON_CLOSE', + 0x00001000 => 'NET_SFTP_OPEN_ACCESS_AUDIT_ALARM_INFO', + 0x00002000 => 'NET_SFTP_OPEN_ACCESS_BACKUP', + 0x00004000 => 'NET_SFTP_OPEN_BACKUP_STREAM', + 0x00008000 => 'NET_SFTP_OPEN_OVERRIDE_OWNER', ); // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 // see \phpseclib\Net\SFTP::_parseLongname() for an explanation @@ -411,6 +477,7 @@ class SFTP extends SSH2 $this->status_codes, $this->attributes, $this->open_flags, + $this->open_flags5, $this->file_types ); @@ -423,28 +490,31 @@ class SFTP extends SSH2 } /** - * Login + * Check a few things before SFTP functions are called * - * @param string $username * @return bool * @access public */ - function login($username) + function _precheck() { - if (!call_user_func_array('parent::login', func_get_args())) { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { return false; } - return $this->_init_sftp_connection(); + if ($this->pwd === false) { + return $this->_init_sftp_connection(); + } + + return true; } /** - * (Re)initializes the SFTP channel + * Partially initialize an SFTP connection * * @return bool - * @access private + * @access public */ - function _init_sftp_connection() + function _partial_init_sftp_connection() { $this->window_size_server_to_client[self::CHANNEL] = $this->window_size; @@ -531,11 +601,13 @@ class SFTP extends SSH2 return false; } + $this->use_request_id = true; + if (strlen($response) < 4) { return false; } extract(unpack('Nversion', $this->_string_shift($response, 4))); - $this->version = $version; + $this->defaultVersion = $version; while (!empty($response)) { if (strlen($response) < 4) { return false; @@ -550,21 +622,22 @@ class SFTP extends SSH2 $this->extensions[$key] = $value; } - /* - SFTPv4+ defines a 'newline' extension. SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com', - however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's - not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for - one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that - 'newline@vandyke.com' would. - */ - /* - if (isset($this->extensions['newline@vandyke.com'])) { - $this->extensions['newline'] = $this->extensions['newline@vandyke.com']; - unset($this->extensions['newline@vandyke.com']); - } - */ + $this->partial_init = true; - $this->use_request_id = true; + return true; + } + + /** + * (Re)initializes the SFTP channel + * + * @return bool + * @access private + */ + function _init_sftp_connection() + { + if (!$this->partial_init && !$this->_partial_init_sftp_connection()) { + return false; + } /* A Note on SFTPv4/5/6 support: @@ -589,12 +662,60 @@ class SFTP extends SSH2 in draft-ietf-secsh-filexfer-13 would be quite impossible. As such, what \phpseclib\Net\SFTP would do is close the channel and reopen it with a new and updated SSH_FXP_INIT packet. */ - switch ($this->version) { - case 2: - case 3: - break; - default: - return false; + $this->version = $this->defaultVersion; + if (isset($this->extensions['versions']) && (!$this->preferredVersion || $this->preferredVersion != $this->version)) { + $versions = explode(',', $this->extensions['versions']); + $supported = array(6, 5, 4); + if ($this->preferredVersion) { + $supported = array_diff($supported, array($this->preferredVersion)); + array_unshift($supported, $this->preferredVersion); + } + foreach ($supported as $ver) { + if (in_array($ver, $versions)) { + if ($ver === $this->version) { + break; + } + $this->version = (int) $ver; + $packet = pack('Na*Na*', strlen('version-select'), 'version-select', strlen($ver), $ver); + if (!$this->_send_sftp_packet(NET_SFTP_EXTENDED, $packet)) { + return false; + } + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + break; + } + } + } + + /* + SFTPv4+ defines a 'newline' extension. SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com', + however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's + not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for + one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that + 'newline@vandyke.com' would. + */ + /* + if (isset($this->extensions['newline@vandyke.com'])) { + $this->extensions['newline'] = $this->extensions['newline@vandyke.com']; + unset($this->extensions['newline@vandyke.com']); + } + */ + + if ($this->version < 2 || $this->version > 6) { + return false; } $this->pwd = $this->_realpath('.'); @@ -655,6 +776,26 @@ class SFTP extends SSH2 } /** + * Enable arbitrary length packets + * + * @access public + */ + function enableArbitraryLengthPackets() + { + $this->allow_arbitrary_length_packets = true; + } + + /** + * Disable arbitrary length packets + * + * @access public + */ + function disableArbitraryLengthPackets() + { + $this->allow_arbitrary_length_packets = false; + } + + /** * Returns the current directory name * * @return mixed @@ -662,6 +803,10 @@ class SFTP extends SSH2 */ function pwd() { + if (!$this->_precheck()) { + return false; + } + return $this->pwd; } @@ -703,6 +848,10 @@ class SFTP extends SSH2 */ function realpath($path) { + if (!$this->_precheck()) { + return false; + } + return $this->_realpath($path); } @@ -785,7 +934,7 @@ class SFTP extends SSH2 */ function chdir($dir) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -942,7 +1091,7 @@ class SFTP extends SSH2 */ function _list($dir, $raw = true) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -997,13 +1146,17 @@ class SFTP extends SSH2 } extract(unpack('Nlength', $this->_string_shift($response, 4))); $shortname = $this->_string_shift($response, $length); - if (strlen($response) < 4) { - return false; + // SFTPv4 "removed the long filename from the names structure-- it can now be + // built from information available in the attrs structure." + if ($this->version < 4) { + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $longname = $this->_string_shift($response, $length); } - extract(unpack('Nlength', $this->_string_shift($response, 4))); - $longname = $this->_string_shift($response, $length); $attributes = $this->_parseAttributes($response); - if (!isset($attributes['type'])) { + if (!isset($attributes['type']) && $this->version < 4) { $fileType = $this->_parseLongname($longname); if ($fileType) { $attributes['type'] = $fileType; @@ -1163,10 +1316,6 @@ class SFTP extends SSH2 */ function size($filename) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { - return false; - } - $result = $this->stat($filename); if ($result === false) { return false; @@ -1283,7 +1432,7 @@ class SFTP extends SSH2 */ function stat($filename) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1340,7 +1489,7 @@ class SFTP extends SSH2 */ function lstat($filename) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1454,7 +1603,7 @@ class SFTP extends SSH2 */ function touch($filename, $time = null, $atime = null) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1470,9 +1619,25 @@ class SFTP extends SSH2 $atime = $time; } - $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_EXCL; - $attr = pack('N3', NET_SFTP_ATTR_ACCESSTIME, $time, $atime); - $packet = pack('Na*Na*', strlen($filename), $filename, $flags, $attr); + if ($this->version < 4) { + $attr = pack('N3', NET_SFTP_ATTR_ACCESSTIME, $atime, $time); + } else { + $attr = pack( + 'N5', + NET_SFTP_ATTR_ACCESSTIME | NET_SFTP_ATTR_MODIFYTIME, + $atime / 4294967296, + $atime, + $time / 4294967296, + $time + ); + } + + $packet = pack('Na*', strlen($filename), $filename); + $packet.= $this->version >= 5 ? + pack('N2', 0, NET_SFTP_OPEN_OPEN_EXISTING) : + pack('N', NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_EXCL); + $packet.= $attr; + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { return false; } @@ -1495,19 +1660,47 @@ class SFTP extends SSH2 /** * Changes file or directory owner * + * $uid should be an int for SFTPv3 and a string for SFTPv4+. Ideally the string + * would be of the form "user@dns_domain" but it does not need to be. + * `$sftp->getSupportedVersions()['version']` will return the specific version + * that's being used. + * * Returns true on success or false on error. * * @param string $filename - * @param int $uid + * @param int|string $uid * @param bool $recursive * @return bool * @access public */ function chown($filename, $uid, $recursive = false) { - // quoting from <http://www.kernel.org/doc/man-pages/online/pages/man2/chown.2.html>, - // "if the owner or group is specified as -1, then that ID is not changed" - $attr = pack('N3', NET_SFTP_ATTR_UIDGID, $uid, -1); + /* + quoting <https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.5>, + + "To avoid a representation that is tied to a particular underlying + implementation at the client or server, the use of UTF-8 strings has + been chosen. The string should be of the form "user@dns_domain". + This will allow for a client and server that do not use the same + local representation the ability to translate to a common syntax that + can be interpreted by both. In the case where there is no + translation available to the client or server, the attribute value + must be constructed without the "@"." + + phpseclib _could_ auto append the dns_domain to $uid BUT what if it shouldn't + have one? phpseclib would have no way of knowing so rather than guess phpseclib + will just use whatever value the user provided + */ + + $attr = $this->version < 4 ? + // quoting <http://www.kernel.org/doc/man-pages/online/pages/man2/chown.2.html>, + // "if the owner or group is specified as -1, then that ID is not changed" + pack('N3', NET_SFTP_ATTR_UIDGID, $uid, -1) : + // quoting <https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.5>, + // "If either the owner or group field is zero length, the field should be + // considered absent, and no change should be made to that specific field + // during a modification operation" + pack('NNa*Na*', NET_SFTP_ATTR_OWNERGROUP, strlen($uid), $uid, 0, ''); return $this->_setstat($filename, $attr, $recursive); } @@ -1515,17 +1708,24 @@ class SFTP extends SSH2 /** * Changes file or directory group * + * $gid should be an int for SFTPv3 and a string for SFTPv4+. Ideally the string + * would be of the form "user@dns_domain" but it does not need to be. + * `$sftp->getSupportedVersions()['version']` will return the specific version + * that's being used. + * * Returns true on success or false on error. * * @param string $filename - * @param int $gid + * @param int|string $gid * @param bool $recursive * @return bool * @access public */ function chgrp($filename, $gid, $recursive = false) { - $attr = pack('N3', NET_SFTP_ATTR_UIDGID, -1, $gid); + $attr = $this->version < 4 ? + pack('N3', NET_SFTP_ATTR_UIDGID, -1, $gid) : + pack('NNa*Na*', NET_SFTP_ATTR_OWNERGROUP, 0, '', strlen($gid), $gid); return $this->_setstat($filename, $attr, $recursive); } @@ -1592,7 +1792,7 @@ class SFTP extends SSH2 */ function _setstat($filename, $attr, $recursive) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1610,9 +1810,10 @@ class SFTP extends SSH2 return $result; } - // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to - // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT. - if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) { + $packet = $this->version >= 4 ? + pack('Na*a*Ca*', strlen($filename), $filename, substr($attr, 0, 4), NET_SFTP_TYPE_UNKNOWN, substr($attr, 4)) : + pack('Na*a*', strlen($filename), $filename, $attr); + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, $packet)) { return false; } @@ -1682,7 +1883,10 @@ class SFTP extends SSH2 return false; } } else { - if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($temp), $temp, $attr))) { + $packet = $this->version >= 4 ? + pack('Na*Ca*', strlen($temp), $temp, NET_SFTP_TYPE_UNKNOWN, $attr) : + pack('Na*a*', strlen($temp), $temp, $attr); + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, $packet)) { return false; } @@ -1697,7 +1901,10 @@ class SFTP extends SSH2 } } - if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($path), $path, $attr))) { + $packet = $this->version >= 4 ? + pack('Na*Ca*', strlen($temp), $temp, NET_SFTP_TYPE_UNKNOWN, $attr) : + pack('Na*a*', strlen($temp), $temp, $attr); + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, $packet)) { return false; } @@ -1722,7 +1929,7 @@ class SFTP extends SSH2 */ function readlink($link) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1772,15 +1979,44 @@ class SFTP extends SSH2 */ function symlink($target, $link) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } //$target = $this->_realpath($target); $link = $this->_realpath($link); - $packet = pack('Na*Na*', strlen($target), $target, strlen($link), $link); - if (!$this->_send_sftp_packet(NET_SFTP_SYMLINK, $packet)) { + /* quoting https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-09#section-12.1 : + + Changed the SYMLINK packet to be LINK and give it the ability to + create hard links. Also change it's packet number because many + implementation implemented SYMLINK with the arguments reversed. + Hopefully the new argument names make it clear which way is which. + */ + if ($this->version == 6) { + $type = NET_SFTP_LINK; + $packet = pack('Na*Na*C', strlen($link), $link, strlen($target), $target, 1); + } else { + $type = NET_SFTP_SYMLINK; + /* quoting http://bxr.su/OpenBSD/usr.bin/ssh/PROTOCOL#347 : + + 3.1. sftp: Reversal of arguments to SSH_FXP_SYMLINK + + When OpenSSH's sftp-server was implemented, the order of the arguments + to the SSH_FXP_SYMLINK method was inadvertently reversed. Unfortunately, + the reversal was not noticed until the server was widely deployed. Since + fixing this to follow the specification would cause incompatibility, the + current order was retained. For correct operation, clients should send + SSH_FXP_SYMLINK as follows: + + uint32 id + string targetpath + string linkpath */ + $packet = substr($this->server_identifier, 0, 15) == 'SSH-2.0-OpenSSH' ? + pack('Na*Na*', strlen($target), $target, strlen($link), $link) : + pack('Na*Na*', strlen($link), $link, strlen($target), $target); + } + if (!$this->_send_sftp_packet($type, $packet)) { return false; } @@ -1813,7 +2049,7 @@ class SFTP extends SSH2 */ function mkdir($dir, $mode = -1, $recursive = false) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1882,7 +2118,7 @@ class SFTP extends SSH2 */ function rmdir($dir) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1931,7 +2167,8 @@ class SFTP extends SSH2 * contain as many bytes as filename.ext does on your local filesystem. If your filename.ext is 1MB then that is how * large $remote_file will be, as well. * - * Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number of bytes to return, and returns a string if there is some data or null if there is no more data + * Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number + * of bytes to return, and returns a string if there is some data or null if there is no more data * * If $data is a resource then it'll be used as a resource instead. * @@ -1967,7 +2204,7 @@ class SFTP extends SSH2 */ function put($remote_file, $data, $mode = self::SOURCE_STRING, $start = -1, $local_start = -1, $progressCallback = null) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -1978,10 +2215,14 @@ class SFTP extends SSH2 $this->_remove_from_stat_cache($remote_file); - $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE; - // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file." - // in practice, it doesn't seem to do that. - //$flags|= ($mode & self::RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE; + if ($this->version >= 5) { + $flags = NET_SFTP_OPEN_OPEN_OR_CREATE; + } else { + $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE; + // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file." + // in practice, it doesn't seem to do that. + //$flags|= ($mode & SFTP::RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE; + } if ($start >= 0) { $offset = $start; @@ -1991,10 +2232,17 @@ class SFTP extends SSH2 $offset = $size !== false ? $size : 0; } else { $offset = 0; - $flags|= NET_SFTP_OPEN_TRUNCATE; + if ($this->version >= 5) { + $flags = NET_SFTP_OPEN_CREATE_TRUNCATE; + } else { + $flags|= NET_SFTP_OPEN_TRUNCATE; + } } - $packet = pack('Na*N2', strlen($remote_file), $remote_file, $flags, 0); + $packet = pack('Na*', strlen($remote_file), $remote_file); + $packet.= $this->version >= 5 ? + pack('N3', 0, $flags, 0) : + pack('N2', $flags, 0); if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { return false; } @@ -2103,6 +2351,8 @@ class SFTP extends SSH2 } } + $result = $this->_close_handle($handle); + if (!$this->_read_put_responses($i)) { if ($mode & self::SOURCE_LOCAL_FILE) { fclose($fp); @@ -2111,18 +2361,33 @@ class SFTP extends SSH2 return false; } - if ($mode & self::SOURCE_LOCAL_FILE) { - if ($this->preserveTime) { - $stat = fstat($fp); - $this->touch($remote_file, $stat['mtime'], $stat['atime']); - } - + if ($mode & SFTP::SOURCE_LOCAL_FILE) { if (isset($fp) && is_resource($fp)) { fclose($fp); } + + if ($this->preserveTime) { + $stat = stat($data); + if ($this->version < 4) { + $attr = pack('N3', NET_SFTP_ATTR_ACCESSTIME, $stat['atime'], $stat['mtime']); + } else { + $attr = pack( + 'N5', + NET_SFTP_ATTR_ACCESSTIME | NET_SFTP_ATTR_MODIFYTIME, + $stat['atime'] / 4294967296, + $stat['atime'], + $stat['mtime'] / 4294967296, + $stat['mtime'] + ); + } + + if (!$this->_setstat($remote_file, $attr, false)) { + user_error('Error setting file time'); + } + } } - return $this->_close_handle($handle); + return $result; } /** @@ -2209,7 +2474,7 @@ class SFTP extends SSH2 */ function get($remote_file, $local_file = false, $offset = 0, $length = -1, $progressCallback = null) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -2218,7 +2483,10 @@ class SFTP extends SSH2 return false; } - $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0); + $packet = pack('Na*', strlen($remote_file), $remote_file); + $packet.= $this->version >= 5 ? + pack('N3', 0, NET_SFTP_OPEN_OPEN_EXISTING, 0) : + pack('N2', NET_SFTP_OPEN_READ, 0); if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { return false; } @@ -2320,6 +2588,7 @@ class SFTP extends SSH2 } // maybe the file was successfully transferred, maybe it wasn't if ($this->channel_close) { + $this->partial_init = false; $this->_init_sftp_connection(); return false; } else { @@ -2369,7 +2638,7 @@ class SFTP extends SSH2 */ function delete($path, $recursive = true) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -2498,6 +2767,10 @@ class SFTP extends SSH2 function file_exists($path) { if ($this->use_stat_cache) { + if (!$this->_precheck()) { + return false; + } + $path = $this->_realpath($path); $result = $this->_query_stat_cache($path); @@ -2568,6 +2841,10 @@ class SFTP extends SSH2 */ function is_readable($path) { + if (!$this->_precheck()) { + return false; + } + $path = $this->_realpath($path); $packet = pack('Na*N2', strlen($path), $path, NET_SFTP_OPEN_READ, 0); @@ -2596,6 +2873,10 @@ class SFTP extends SSH2 */ function is_writable($path) { + if (!$this->_precheck()) { + return false; + } + $path = $this->_realpath($path); $packet = pack('Na*N2', strlen($path), $path, NET_SFTP_OPEN_WRITE, 0); @@ -2776,6 +3057,10 @@ class SFTP extends SSH2 */ function _get_xstat_cache_prop($path, $prop, $type) { + if (!$this->_precheck()) { + return false; + } + if ($this->use_stat_cache) { $path = $this->_realpath($path); @@ -2796,7 +3081,9 @@ class SFTP extends SSH2 } /** - * Renames a file or a directory on the SFTP server + * Renames a file or a directory on the SFTP server. + * + * If the file already exists this will return false * * @param string $oldname * @param string $newname @@ -2805,7 +3092,7 @@ class SFTP extends SSH2 */ function rename($oldname, $newname) { - if (!($this->bitmap & SSH2::MASK_LOGIN)) { + if (!$this->_precheck()) { return false; } @@ -2817,6 +3104,18 @@ class SFTP extends SSH2 // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 $packet = pack('Na*Na*', strlen($oldname), $oldname, strlen($newname), $newname); + if ($this->version >= 5) { + /* quoting https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-05#section-6.5 , + + 'flags' is 0 or a combination of: + + SSH_FXP_RENAME_OVERWRITE 0x00000001 + SSH_FXP_RENAME_ATOMIC 0x00000002 + SSH_FXP_RENAME_NATIVE 0x00000004 + + (none of these are currently supported) */ + $packet.= "\0\0\0\0"; + } if (!$this->_send_sftp_packet(NET_SFTP_RENAME, $packet)) { return false; } @@ -2847,6 +3146,31 @@ class SFTP extends SSH2 } /** + * Parse Time + * + * See '7.7. Times' of draft-ietf-secsh-filexfer-13 for more info. + * + * @param string $key + * @param int $flags + * @param string $response + * @return array + * @access private + */ + function _parseTime($key, $flags, &$response) + { + if (strlen($response) < 8) { + user_error('Malformed file attributes'); + return array(); + } + $attr = array(); + $attr[$key] = hexdec(bin2hex($this->_string_shift($response, 8))); + if ($flags & NET_SFTP_ATTR_SUBSECOND_TIMES) { + $attr+= extract(unpack('N' . $key . '_nseconds', $this->_string_shift($response, 4))); + } + return $attr; + } + + /** * Parse Attributes * * See '7. File Attributes' of draft-ietf-secsh-filexfer-13 for more info. @@ -2857,16 +3181,56 @@ class SFTP extends SSH2 */ function _parseAttributes(&$response) { + if ($this->version >= 4) { + $length = 5; + $format = 'Nflags/Ctype'; + } else { + $length = 4; + $format = 'Nflags'; + } + $attr = array(); - if (strlen($response) < 4) { + if (strlen($response) < $length) { user_error('Malformed file attributes'); return array(); } - extract(unpack('Nflags', $this->_string_shift($response, 4))); - // SFTPv4+ have a type field (a byte) that follows the above flag field + extract(unpack($format, $this->_string_shift($response, $length))); + if (isset($type)) { + $attr['type'] = $type; + } foreach ($this->attributes as $key => $value) { switch ($flags & $key) { - case NET_SFTP_ATTR_SIZE: // 0x00000001 + case NET_SFTP_ATTR_UIDGID: + if ($this->version > 3) { + continue 2; + } + break; + case NET_SFTP_ATTR_CREATETIME: + case NET_SFTP_ATTR_MODIFYTIME: + case NET_SFTP_ATTR_ACL: + case NET_SFTP_ATTR_OWNERGROUP: + case NET_SFTP_ATTR_SUBSECOND_TIMES: + if ($this->version < 4) { + continue 2; + } + break; + case NET_SFTP_ATTR_BITS: + if ($this->version < 5) { + continue 2; + } + break; + case NET_SFTP_ATTR_ALLOCATION_SIZE: + case NET_SFTP_ATTR_TEXT_HINT: + case NET_SFTP_ATTR_MIME_TYPE: + case NET_SFTP_ATTR_LINK_COUNT: + case NET_SFTP_ATTR_UNTRANSLATED_NAME: + case NET_SFTP_ATTR_CTIME: + if ($this->version < 6) { + continue 2; + } + } + switch ($flags & $key) { + case NET_SFTP_ATTR_SIZE: // 0x00000001 // The size attribute is defined as an unsigned 64-bit integer. // The following will use floats on 32-bit platforms, if necessary. // As can be seen in the BigInteger class, floats are generally @@ -2875,14 +3239,14 @@ class SFTP extends SSH2 // of precision. Interpreted in filesize, 2^50 bytes = 1024 TiB. $attr['size'] = hexdec(bin2hex($this->_string_shift($response, 8))); break; - case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only) + case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 or earlier) if (strlen($response) < 8) { user_error('Malformed file attributes'); return $attr; } $attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8)); break; - case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004 + case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004 if (strlen($response) < 4) { user_error('Malformed file attributes'); return $attr; @@ -2896,14 +3260,134 @@ class SFTP extends SSH2 $attr+= array('type' => $fileType); } break; - case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008 + case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008 + if ($this->version >= 4) { + $attr+= $this->_parseTime('atime', $flags, $response); + break; + } if (strlen($response) < 8) { user_error('Malformed file attributes'); return $attr; } $attr+= unpack('Natime/Nmtime', $this->_string_shift($response, 8)); break; - case NET_SFTP_ATTR_EXTENDED: // 0x80000000 + case NET_SFTP_ATTR_CREATETIME: // 0x00000010 (SFTPv4+) + $attr+= $this->_parseTime('createtime', $flags, $response); + break; + case NET_SFTP_ATTR_MODIFYTIME: // 0x00000020 + $attr+= $this->_parseTime('mtime', $flags, $response); + break; + case NET_SFTP_ATTR_ACL: // 0x00000040 + // access control list + // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-04#section-5.7 + // currently unsupported + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Ncount', $this->_string_shift($response, 4))); + for ($i = 0; $i < $count; $i++) { + if (strlen($response) < 16) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Ntype/Nflag/Nmask/Nlength', $this->_string_shift($response, 16))); + if (strlen($response) < $length) { + user_error('Malformed file attributes'); + return $attr; + } + $this->_string_shift($response, $length); // who + } + break; + case NET_SFTP_ATTR_OWNERGROUP: // 0x00000080 + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if (strlen($response) < $length) { + user_error('Malformed file attributes'); + return $attr; + } + $attr['owner'] = $this->_string_shift($response, $length); + + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if (strlen($response) < $length) { + user_error('Malformed file attributes'); + return $attr; + } + $attr['group'] = $this->_string_shift($response, $length); + break; + case NET_SFTP_ATTR_SUBSECOND_TIMES: // 0x00000100 + break; + case NET_SFTP_ATTR_BITS: // 0x00000200 (SFTPv5+) + // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-05#section-5.8 + // currently unsupported + // tells if you file is: + // readonly, system, hidden, case inensitive, archive, encrypted, compressed, sparse + // append only, immutable, sync + if (strlen($response) < 8) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nattrib-bits/Nattrib-bits-valid', $this->_string_shift($response, 8))); + break; + case NET_SFTP_ATTR_ALLOCATION_SIZE: // 0x00000400 (SFTPv6+) + // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.4 + // represents the number of bytes htat the file consumes on the disk. will + // usually be larger than the 'size' field + $attr['allocation-size'] = hexdec(bin2hex($this->_string_shift($response, 8))); + break; + case NET_SFTP_ATTR_TEXT_HINT: // 0x00000800 + // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.10 + // currently unsupported + // tells if file is "known text", "guessed text", "known binary", "guessed binary" + extract(unpack('Ctext-hint', $this->_string_shift($response))); + break; + case NET_SFTP_ATTR_MIME_TYPE: // 0x00001000 + // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.11 + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if (strlen($response) < $length) { + user_error('Malformed file attributes'); + return $attr; + } + $attr['mime-type'] = $this->_string_shift($response, $length); + break; + case NET_SFTP_ATTR_LINK_COUNT: // 0x00002000 + // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.12 + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + $attr+= unpack('Nlink-count', $this->_string_shift($response, 4)); + break; + case NET_SFTP_ATTR_UNTRANSLATED_NAME:// 0x00004000 + // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.13 + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if (strlen($response) < $length) { + user_error('Malformed file attributes'); + return $attr; + } + $attr['untranslated-name'] = $this->_string_shift($response, $length); + break; + case NET_SFTP_ATTR_CTIME: // 0x00008000 + // 'ctime' contains the last time the file attributes were changed. The + // exact meaning of this field depends on the server. + $attr+= $this->_parseTime('ctime', $flags, $response); + break; + case NET_SFTP_ATTR_EXTENDED: // 0x80000000 if (strlen($response) < 4) { user_error('Malformed file attributes'); return $attr; @@ -3124,9 +3608,8 @@ class SFTP extends SSH2 $tempLength = $length; $tempLength-= strlen($this->packet_buffer); - // 256 * 1024 is what SFTP_MAX_MSG_LENGTH is set to in OpenSSH's sftp-common.h - if (!$this->use_request_id && $tempLength > 256 * 1024) { + if (!$this->allow_arbitrary_length_packets && !$this->use_request_id && $tempLength > 256 * 1024) { user_error('Invalid SFTP packet size'); return false; } @@ -3244,7 +3727,15 @@ class SFTP extends SSH2 */ function getSupportedVersions() { - $temp = array('version' => $this->version); + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + if (!$this->partial_init) { + $this->_partial_init_sftp_connection(); + } + + $temp = array('version' => $this->defaultVersion); if (isset($this->extensions['versions'])) { $temp['extensions'] = $this->extensions['versions']; } @@ -3252,6 +3743,36 @@ class SFTP extends SSH2 } /** + * Get supported SFTP versions + * + * @return array + * @access public + */ + function getNegotiatedVersion() + { + if (!$this->_precheck()) { + return false; + } + + return $this->version; + } + + /** + * Set preferred version + * + * If you're preferred version isn't supported then the highest supported + * version of SFTP will be utilized. Set to null or false or int(0) to + * unset the preferred version + * + * @param int $version + * @access public + */ + function setPreferredVersion($version) + { + $this->preferredVersion = $version; + } + + /** * Disconnect * * @param int $reason diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php index e449d987a..7ec4a1e36 100644 --- a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php @@ -71,6 +71,25 @@ use phpseclib\System\SSH\Agent; class SSH2 { /**#@+ + * Compression Types + * + * @access private + */ + /** + * No compression + */ + const NET_SSH2_COMPRESSION_NONE = 1; + /** + * zlib compression + */ + const NET_SSH2_COMPRESSION_ZLIB = 2; + /** + * zlib@openssh.com + */ + const NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH = 3; + /**#@-*/ + + /**#@+ * Execution Bitmap Masks * * @see \phpseclib\Net\SSH2::bitmap @@ -975,8 +994,65 @@ class SSH2 * * @see https://tools.ietf.org/html/rfc4252#section-5.1 * @var array|null + * @access private + */ + var $auth_methods_to_continue = null; + + /** + * Compression method + * + * @var int + * @access private + */ + var $compress = self::NET_SSH2_COMPRESSION_NONE; + + /** + * Decompression method + * + * @var resource|object + * @access private + */ + var $decompress = self::NET_SSH2_COMPRESSION_NONE; + + /** + * Compression context + * + * @var int + * @access private + */ + var $compress_context; + + /** + * Decompression context + * + * @var resource|object + * @access private + */ + var $decompress_context; + + /** + * Regenerate Compression Context + * + * @var bool + * @access private */ - private $auth_methods_to_continue = null; + var $regenerate_compression_context = false; + + /** + * Regenerate Decompression Context + * + * @var bool + * @access private + */ + var $regenerate_decompression_context = false; + + /** + * Smart multi-factor authentication flag + * + * @var bool + * @access private + */ + var $smartMFA = true; /** * Default Constructor. @@ -1218,8 +1294,8 @@ class SSH2 $read = array($this->fsock); $write = $except = null; $start = microtime(true); - $sec = floor($this->curTimeout); - $usec = 1000000 * ($this->curTimeout - $sec); + $sec = (int) floor($this->curTimeout); + $usec = (int) (1000000 * ($this->curTimeout - $sec)); // on windows this returns a "Warning: Invalid CRT parameters detected" error // the !count() is done as a workaround for <https://bugs.php.net/42682> if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { @@ -1234,6 +1310,7 @@ class SSH2 if (strlen($temp) == 255) { continue; } + if ($temp === false) { return false; } @@ -1569,19 +1646,25 @@ class SSH2 return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } + $compression_map = array( + 'none' => self::NET_SSH2_COMPRESSION_NONE, + 'zlib' => self::NET_SSH2_COMPRESSION_ZLIB, + 'zlib@openssh.com' => self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH + ); + $compression_algorithm_out = $this->_array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server); if ($compression_algorithm_out === false) { user_error('No compatible client to server compression algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } - //$this->decompress = $compression_algorithm_out == 'zlib'; + $this->compress = $compression_map[$compression_algorithm_out]; - $compression_algorithm_in = $this->_array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_client_to_server); + $compression_algorithm_in = $this->_array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_server_to_client); if ($compression_algorithm_in === false) { user_error('No compatible server to client compression algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } - //$this->compress = $compression_algorithm_in == 'zlib'; + $this->decompress = $compression_map[$compression_algorithm_in]; // Only relevant in diffie-hellman-group-exchange-sha{1,256}, otherwise empty. $exchange_hash_rfc4419 = ''; @@ -2014,6 +2097,8 @@ class SSH2 } $this->hmac_check->setKey(substr($key, 0, $checkKeyLength)); + $this->regenerate_compression_context = $this->regenerate_decompression_context = true; + return true; } @@ -2142,7 +2227,7 @@ class SSH2 // try logging with 'none' as an authentication method first since that's what // PuTTY does - if (substr($this->server_identifier, 0, 13) != 'SSH-2.0-CoreFTP' && $this->auth_methods_to_continue === null) { + if (substr($this->server_identifier, 0, 15) != 'SSH-2.0-CoreFTP' && $this->auth_methods_to_continue === null) { if ($this->_login($username)) { return true; } @@ -2174,9 +2259,61 @@ class SSH2 return $this->_login_helper($username); } - foreach ($args as $arg) { - if ($this->_login_helper($username, $arg)) { - return true; + while (count($args)) { + if (!$this->auth_methods_to_continue || !$this->smartMFA) { + $newargs = $args; + $args = array(); + } else { + $newargs = array(); + foreach ($this->auth_methods_to_continue as $method) { + switch ($method) { + case 'publickey': + foreach ($args as $key => $arg) { + if (is_object($arg)) { + $newargs[] = $arg; + unset($args[$key]); + break; + } + } + break; + case 'keyboard-interactive': + $hasArray = $hasString = false; + foreach ($args as $arg) { + if ($hasArray || is_array($arg)) { + $hasArray = true; + break; + } + if ($hasString || is_string($arg)) { + $hasString = true; + break; + } + } + if ($hasArray && $hasString) { + foreach ($args as $key => $arg) { + if (is_array($arg)) { + $newargs[] = $arg; + break 2; + } + } + } + case 'password': + foreach ($args as $key => $arg) { + $newargs[] = $arg; + unset($args[$key]); + break; + } + } + } + } + + if (!count($newargs)) { + return false; + } + + foreach ($newargs as $arg) { + if ($this->_login_helper($username, $arg)) { + return true; + } } } return false; @@ -2814,26 +2951,12 @@ class SSH2 return false; } - $response = $this->_get_binary_packet(); - if ($response === false) { - $this->bitmap = 0; - user_error('Connection closed by server'); - return false; - } - - if (!strlen($response)) { - return false; + $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST; + if (!$this->_get_channel_packet(self::CHANNEL_EXEC)) { + user_error('Unable to request pseudo-terminal'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } - list(, $type) = unpack('C', $this->_string_shift($response, 1)); - switch ($type) { - case NET_SSH2_MSG_CHANNEL_SUCCESS: - break; - case NET_SSH2_MSG_CHANNEL_FAILURE: - default: - user_error('Unable to request pseudo-terminal'); - return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); - } $this->in_request_pty_exec = true; } @@ -2954,6 +3077,13 @@ class SSH2 return false; } + $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST; + + if (!$this->_get_channel_packet(self::CHANNEL_SHELL)) { + user_error('Unable to request pseudo-terminal'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + $packet = pack( 'CNNa*C', NET_SSH2_MSG_CHANNEL_REQUEST, @@ -2966,7 +3096,12 @@ class SSH2 return false; } - $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_IGNORE; + $response = $this->_get_channel_packet(self::CHANNEL_SHELL); + if ($response === false) { + return false; + } + + $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA; $this->bitmap |= self::MASK_SHELL; @@ -3369,8 +3504,8 @@ class SSH2 $this->curTimeout-= $elapsed; } - $sec = floor($this->curTimeout); - $usec = 1000000 * ($this->curTimeout - $sec); + $sec = (int)floor($this->curTimeout); + $usec = (int)(1000000 * ($this->curTimeout - $sec)); // on windows this returns a "Warning: Invalid CRT parameters detected" error if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { @@ -3384,7 +3519,7 @@ class SSH2 if (!is_resource($this->fsock) || feof($this->fsock)) { $this->bitmap = 0; - user_error('Connection closed prematurely'); + user_error('Connection closed (by server) prematurely ' . $elapsed . 's'); return false; } @@ -3392,7 +3527,8 @@ class SSH2 $raw = stream_get_contents($this->fsock, $this->decrypt_block_size); if (!strlen($raw)) { - return ''; + user_error('No data received from server'); + return false; } if ($this->decrypt !== false) { @@ -3455,9 +3591,41 @@ class SSH2 } } - //if ($this->decompress) { - // $payload = gzinflate(substr($payload, 2)); - //} + switch ($this->decompress) { + case self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH: + if (!$this->isAuthenticated()) { + break; + } + case self::NET_SSH2_COMPRESSION_ZLIB: + if ($this->regenerate_decompression_context) { + $this->regenerate_decompression_context = false; + + $cmf = ord($payload[0]); + $cm = $cmf & 0x0F; + if ($cm != 8) { // deflate + user_error("Only CM = 8 ('deflate') is supported ($cm)"); + } + $cinfo = ($cmf & 0xF0) >> 4; + if ($cinfo > 7) { + user_error("CINFO above 7 is not allowed ($cinfo)"); + } + $windowSize = 1 << ($cinfo + 8); + + $flg = ord($payload[1]); + //$fcheck = $flg && 0x0F; + if ((($cmf << 8) | $flg) % 31) { + user_error('fcheck failed'); + } + $fdict = boolval($flg & 0x20); + $flevel = ($flg & 0xC0) >> 6; + + $this->decompress_context = inflate_init(ZLIB_ENCODING_RAW, array('window' => $cinfo + 8)); + $payload = substr($payload, 2); + } + if ($this->decompress_context) { + $payload = inflate_add($this->decompress_context, $payload, ZLIB_PARTIAL_FLUSH); + } + } $this->get_seq_no++; @@ -3737,7 +3905,20 @@ class SSH2 function _get_channel_packet($client_channel, $skip_extended = false) { if (!empty($this->channel_buffers[$client_channel])) { - return array_shift($this->channel_buffers[$client_channel]); + switch ($this->channel_status[$client_channel]) { + case NET_SSH2_MSG_CHANNEL_REQUEST: + foreach ($this->channel_buffers[$client_channel] as $i => $packet) { + switch (ord($packet[0])) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + case NET_SSH2_MSG_CHANNEL_FAILURE: + unset($this->channel_buffers[$client_channel][$i]); + return substr($packet, 1); + } + } + break; + default: + return substr(array_shift($this->channel_buffers[$client_channel]), 1); + } } while (true) { @@ -3811,10 +3992,7 @@ class SSH2 if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) { return $data; } - if (!isset($this->channel_buffers[$channel])) { - $this->channel_buffers[$channel] = array(); - } - $this->channel_buffers[$channel][] = $data; + $this->channel_buffers[$channel][] = chr($type) . $data; continue 2; case NET_SSH2_MSG_CHANNEL_REQUEST: @@ -3893,20 +4071,15 @@ class SSH2 $result = $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended); $this->_on_channel_open(); return $result; - //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE: - default: + case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE: user_error('Unable to open channel'); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); - } - break; - case NET_SSH2_MSG_IGNORE: - switch ($type) { - case NET_SSH2_MSG_CHANNEL_SUCCESS: - //$this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_DATA; - continue 3; - case NET_SSH2_MSG_CHANNEL_FAILURE: - user_error('Error opening channel'); - return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + default: + if ($client_channel == $channel) { + user_error('Unexpected response to open request'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + return $this->_get_channel_packet($client_channel, $skip_extended); } break; case NET_SSH2_MSG_CHANNEL_REQUEST: @@ -3915,6 +4088,14 @@ class SSH2 return true; case NET_SSH2_MSG_CHANNEL_FAILURE: return false; + case NET_SSH2_MSG_CHANNEL_DATA: + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $data = $this->_string_shift($response, $length); + $this->channel_buffers[$channel][] = chr($type) . $data; + return $this->_get_channel_packet($client_channel, $skip_extended); default: user_error('Unable to fulfill channel request'); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); @@ -3928,10 +4109,6 @@ class SSH2 switch ($type) { case NET_SSH2_MSG_CHANNEL_DATA: - //if ($this->channel_status[$channel] == NET_SSH2_MSG_IGNORE) { - // $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_DATA; - //} - /* if ($channel == self::CHANNEL_EXEC) { // SCP requires null packets, such as this, be sent. further, in the case of the ssh.com SSH server @@ -3958,10 +4135,7 @@ class SSH2 if ($client_channel == $channel) { return $data; } - if (!isset($this->channel_buffers[$channel])) { - $this->channel_buffers[$channel] = array(); - } - $this->channel_buffers[$channel][] = $data; + $this->channel_buffers[$channel][] = chr($type) . $data; break; case NET_SSH2_MSG_CHANNEL_CLOSE: $this->curTimeout = 5; @@ -3980,7 +4154,7 @@ class SSH2 case NET_SSH2_MSG_CHANNEL_EOF: break; default: - user_error('Error reading channel data'); + user_error("Error reading channel data ($type)"); return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } } @@ -4005,11 +4179,27 @@ class SSH2 return false; } - //if ($this->compress) { - // // the -4 removes the checksum: - // // http://php.net/function.gzcompress#57710 - // $data = substr(gzcompress($data), 0, -4); - //} + if (!isset($logged)) { + $logged = $data; + } + + switch ($this->compress) { + case self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH: + if (!$this->isAuthenticated()) { + break; + } + case self::NET_SSH2_COMPRESSION_ZLIB: + if (!$this->regenerate_compression_context) { + $header = ''; + } else { + $this->regenerate_compression_context = false; + $this->compress_context = deflate_init(ZLIB_ENCODING_RAW, array('window' => 15)); + $header = "\x78\x9C"; + } + if ($this->compress_context) { + $data = $header . deflate_add($this->compress_context, $data, ZLIB_PARTIAL_FLUSH); + } + } // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9 $packet_length = strlen($data) + 9; @@ -4037,10 +4227,10 @@ class SSH2 if (defined('NET_SSH2_LOGGING')) { $current = microtime(true); - $message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')'; + $message_number = isset($this->message_numbers[ord($logged[0])]) ? $this->message_numbers[ord($logged[0])] : 'UNKNOWN (' . ord($logged[0]) . ')'; $message_number = '-> ' . $message_number . ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)'; - $this->_append_log($message_number, isset($logged) ? $logged : $data); + $this->_append_log($message_number, $logged); $this->last_packet = $current; } @@ -4735,10 +4925,12 @@ class SSH2 */ function getSupportedCompressionAlgorithms() { - return array( - 'none' // REQUIRED no compression - //'zlib' // OPTIONAL ZLIB (LZ77) compression - ); + $algos = array('none'); // REQUIRED no compression + if (function_exists('deflate_init')) { + $algos[] = 'zlib@openssh.com'; // https://datatracker.ietf.org/doc/html/draft-miller-secsh-compression-delayed + $algos[] = 'zlib'; + } + return $algos; } /** @@ -4753,18 +4945,24 @@ class SSH2 { $this->_connect(); + $compression_map = array( + self::NET_SSH2_COMPRESSION_NONE => 'none', + self::NET_SSH2_COMPRESSION_ZLIB => 'zlib', + self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH => 'zlib@openssh.com' + ); + return array( 'kex' => $this->kex_algorithm, 'hostkey' => $this->signature_format, 'client_to_server' => array( 'crypt' => $this->encrypt->name, 'mac' => $this->hmac_create->name, - 'comp' => 'none', + 'comp' => $compression_map[$this->compress], ), 'server_to_client' => array( 'crypt' => $this->decrypt->name, 'mac' => $this->hmac_check->name, - 'comp' => 'none', + 'comp' => $compression_map[$this->decompress], ) ); } @@ -5173,8 +5371,24 @@ class SSH2 * @see https://tools.ietf.org/html/rfc4252#section-5.1 * @return array|null */ - public function getAuthMethodsToContinue() + function getAuthMethodsToContinue() { return $this->auth_methods_to_continue; } + + /** + * Enables "smart" multi-factor authentication (MFA) + */ + function enableSmartMFA() + { + $this->smartMFA = true; + } + + /** + * Disables "smart" multi-factor authentication (MFA) + */ + function disableSmartMFA() + { + $this->smartMFA = false; + } } diff --git a/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php b/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php index 0da0999fd..547688f9f 100644 --- a/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php +++ b/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php @@ -7,7 +7,8 @@ if (extension_loaded('mbstring')) { // 2 - MB_OVERLOAD_STRING - if (ini_get('mbstring.func_overload') & 2) { + // mbstring.func_overload is deprecated in php 7.2 and removed in php 8.0. + if (version_compare(PHP_VERSION, '8.0.0') < 0 && ini_get('mbstring.func_overload') & 2) { throw new \UnexpectedValueException( 'Overloading of string functions using mbstring.func_overload ' . 'is not supported by phpseclib.' diff --git a/vendor/psr/log/Psr/Log/AbstractLogger.php b/vendor/psr/log/Psr/Log/AbstractLogger.php deleted file mode 100644 index e02f9daf3..000000000 --- a/vendor/psr/log/Psr/Log/AbstractLogger.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php - -namespace Psr\Log; - -/** - * This is a simple Logger implementation that other Loggers can inherit from. - * - * It simply delegates all log-level-specific methods to the `log` method to - * reduce boilerplate code that a simple Logger that does the same thing with - * messages regardless of the error level has to implement. - */ -abstract class AbstractLogger implements LoggerInterface -{ - /** - * System is unusable. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function emergency($message, array $context = array()) - { - $this->log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function alert($message, array $context = array()) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function critical($message, array $context = array()) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function error($message, array $context = array()) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function warning($message, array $context = array()) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function notice($message, array $context = array()) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function info($message, array $context = array()) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function debug($message, array $context = array()) - { - $this->log(LogLevel::DEBUG, $message, $context); - } -} diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json index ca0569537..f3f066719 100644 --- a/vendor/psr/log/composer.json +++ b/vendor/psr/log/composer.json @@ -11,16 +11,16 @@ } ], "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } } } diff --git a/vendor/psr/log/src/AbstractLogger.php b/vendor/psr/log/src/AbstractLogger.php new file mode 100644 index 000000000..d60a091af --- /dev/null +++ b/vendor/psr/log/src/AbstractLogger.php @@ -0,0 +1,15 @@ +<?php + +namespace Psr\Log; + +/** + * This is a simple Logger implementation that other Loggers can inherit from. + * + * It simply delegates all log-level-specific methods to the `log` method to + * reduce boilerplate code that a simple Logger that does the same thing with + * messages regardless of the error level has to implement. + */ +abstract class AbstractLogger implements LoggerInterface +{ + use LoggerTrait; +} diff --git a/vendor/psr/log/Psr/Log/InvalidArgumentException.php b/vendor/psr/log/src/InvalidArgumentException.php index 67f852d1d..67f852d1d 100644 --- a/vendor/psr/log/Psr/Log/InvalidArgumentException.php +++ b/vendor/psr/log/src/InvalidArgumentException.php diff --git a/vendor/psr/log/Psr/Log/LogLevel.php b/vendor/psr/log/src/LogLevel.php index 9cebcace6..9cebcace6 100644 --- a/vendor/psr/log/Psr/Log/LogLevel.php +++ b/vendor/psr/log/src/LogLevel.php diff --git a/vendor/psr/log/Psr/Log/LoggerAwareInterface.php b/vendor/psr/log/src/LoggerAwareInterface.php index 4d64f4786..4d64f4786 100644 --- a/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +++ b/vendor/psr/log/src/LoggerAwareInterface.php diff --git a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php b/vendor/psr/log/src/LoggerAwareTrait.php index 82bf45c89..5f1553a4c 100644 --- a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +++ b/vendor/psr/log/src/LoggerAwareTrait.php @@ -12,7 +12,7 @@ trait LoggerAwareTrait * * @var LoggerInterface|null */ - protected $logger; + protected ?LoggerInterface $logger = null; /** * Sets a logger. diff --git a/vendor/psr/log/Psr/Log/LoggerInterface.php b/vendor/psr/log/src/LoggerInterface.php index 2206cfde4..b4d062b9b 100644 --- a/vendor/psr/log/Psr/Log/LoggerInterface.php +++ b/vendor/psr/log/src/LoggerInterface.php @@ -22,12 +22,12 @@ interface LoggerInterface /** * System is unusable. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function emergency($message, array $context = array()); + public function emergency(string|\Stringable $message, array $context = []); /** * Action must be taken immediately. @@ -35,35 +35,35 @@ interface LoggerInterface * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function alert($message, array $context = array()); + public function alert(string|\Stringable $message, array $context = []); /** * Critical conditions. * * Example: Application component unavailable, unexpected exception. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function critical($message, array $context = array()); + public function critical(string|\Stringable $message, array $context = []); /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function error($message, array $context = array()); + public function error(string|\Stringable $message, array $context = []); /** * Exceptional occurrences that are not errors. @@ -71,55 +71,55 @@ interface LoggerInterface * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function warning($message, array $context = array()); + public function warning(string|\Stringable $message, array $context = []); /** * Normal but significant events. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function notice($message, array $context = array()); + public function notice(string|\Stringable $message, array $context = []); /** * Interesting events. * * Example: User logs in, SQL logs. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function info($message, array $context = array()); + public function info(string|\Stringable $message, array $context = []); /** * Detailed debug information. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function debug($message, array $context = array()); + public function debug(string|\Stringable $message, array $context = []); /** * Logs with an arbitrary level. * * @param mixed $level - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void * * @throws \Psr\Log\InvalidArgumentException */ - public function log($level, $message, array $context = array()); + public function log($level, string|\Stringable $message, array $context = []); } diff --git a/vendor/psr/log/Psr/Log/LoggerTrait.php b/vendor/psr/log/src/LoggerTrait.php index e392fef0a..920bda77f 100644 --- a/vendor/psr/log/Psr/Log/LoggerTrait.php +++ b/vendor/psr/log/src/LoggerTrait.php @@ -15,12 +15,12 @@ trait LoggerTrait /** * System is unusable. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function emergency($message, array $context = array()) + public function emergency(string|\Stringable $message, array $context = []) { $this->log(LogLevel::EMERGENCY, $message, $context); } @@ -31,12 +31,12 @@ trait LoggerTrait * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function alert($message, array $context = array()) + public function alert(string|\Stringable $message, array $context = []) { $this->log(LogLevel::ALERT, $message, $context); } @@ -46,12 +46,12 @@ trait LoggerTrait * * Example: Application component unavailable, unexpected exception. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function critical($message, array $context = array()) + public function critical(string|\Stringable $message, array $context = []) { $this->log(LogLevel::CRITICAL, $message, $context); } @@ -60,12 +60,12 @@ trait LoggerTrait * Runtime errors that do not require immediate action but should typically * be logged and monitored. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function error($message, array $context = array()) + public function error(string|\Stringable $message, array $context = []) { $this->log(LogLevel::ERROR, $message, $context); } @@ -76,12 +76,12 @@ trait LoggerTrait * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function warning($message, array $context = array()) + public function warning(string|\Stringable $message, array $context = []) { $this->log(LogLevel::WARNING, $message, $context); } @@ -89,12 +89,12 @@ trait LoggerTrait /** * Normal but significant events. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function notice($message, array $context = array()) + public function notice(string|\Stringable $message, array $context = []) { $this->log(LogLevel::NOTICE, $message, $context); } @@ -104,12 +104,12 @@ trait LoggerTrait * * Example: User logs in, SQL logs. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function info($message, array $context = array()) + public function info(string|\Stringable $message, array $context = []) { $this->log(LogLevel::INFO, $message, $context); } @@ -117,12 +117,12 @@ trait LoggerTrait /** * Detailed debug information. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function debug($message, array $context = array()) + public function debug(string|\Stringable $message, array $context = []) { $this->log(LogLevel::DEBUG, $message, $context); } @@ -131,12 +131,12 @@ trait LoggerTrait * Logs with an arbitrary level. * * @param mixed $level - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void * * @throws \Psr\Log\InvalidArgumentException */ - abstract public function log($level, $message, array $context = array()); + abstract public function log($level, string|\Stringable $message, array $context = []); } diff --git a/vendor/psr/log/Psr/Log/NullLogger.php b/vendor/psr/log/src/NullLogger.php index c8f7293b1..560770571 100644 --- a/vendor/psr/log/Psr/Log/NullLogger.php +++ b/vendor/psr/log/src/NullLogger.php @@ -16,14 +16,14 @@ class NullLogger extends AbstractLogger * Logs with an arbitrary level. * * @param mixed $level - * @param string $message - * @param array $context + * @param string|\Stringable $message + * @param array $context * * @return void * * @throws \Psr\Log\InvalidArgumentException */ - public function log($level, $message, array $context = array()) + public function log($level, string|\Stringable $message, array $context = []) { // noop } diff --git a/vendor/sabre/dav/.github/workflows/ci.yml b/vendor/sabre/dav/.github/workflows/ci.yml new file mode 100644 index 000000000..f41b38535 --- /dev/null +++ b/vendor/sabre/dav/.github/workflows/ci.yml @@ -0,0 +1,127 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: + +jobs: + code-analysis: + runs-on: ubuntu-latest + name: Code Analysis (PHP ${{ matrix.php-versions }}) + strategy: + fail-fast: false + matrix: + php-versions: [ '7.4' ] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: PHP CS-Fixer + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: PHPStan + run: composer phpstan + + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: [ '7.1', '7.2', '7.3', '7.4', '8.0' ] + coverage: [ 'none' ] + streaming: [ false ] + include: + - php-versions: '8.1' + coverage: 'pcov' + streaming: true + + services: + mariadb: + image: mariadb + env: + MARIADB_DATABASE: 'sabredav_test' + MARIADB_ROOT_PASSWORD: root + ports: + - 3306:3306 + postgres: + image: postgres + env: + POSTGRES_DB: 'sabredav_test' + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, pdo_sqlite, pgsql, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: PHPUnit + if: matrix.streaming == false + run: vendor/bin/phpunit --verbose --configuration tests/phpunit.xml --coverage-clover=coverage.xml + env: + SABRE_MYSQLUSER: root + SABRE_MYSQLPASS: root + SABRE_MYSQLDSN: "mysql:host=127.0.0.1;port=3306;dbname=sabredav_test" + SABRE_PGSQLDSN: "pgsql:host=127.0.0.1;port=5432;dbname=sabredav_test;user=postgres;password=postgres" + + - name: PHPUnit (with streaming) + if: matrix.streaming == true + run: vendor/bin/phpunit --verbose --configuration tests/phpunit.xml --coverage-clover=coverage.xml + env: + SABRE_MYSQLUSER: root + SABRE_MYSQLPASS: root + SABRE_MYSQLDSN: "mysql:host=127.0.0.1;port=3306;dbname=sabredav_test" + SABRE_PGSQLDSN: "pgsql:host=127.0.0.1;port=5432;dbname=sabredav_test;user=postgres;password=postgres" + RUN_TEST_WITH_STREAMING_PROPFIND: "true" + + - uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/dav/composer.json b/vendor/sabre/dav/composer.json index 7c9596d21..5f0a44d66 100644 --- a/vendor/sabre/dav/composer.json +++ b/vendor/sabre/dav/composer.json @@ -29,7 +29,7 @@ "ext-date" : "*", "ext-iconv" : "*", "lib-libxml" : ">=2.7.0", - "psr/log": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", "ext-json": "*" }, "require-dev" : { diff --git a/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php b/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php index 0d5df3968..2f48ab982 100644 --- a/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php +++ b/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php @@ -948,42 +948,46 @@ SQL; } list($calendarId, $instanceId) = $calendarId; - // Current synctoken - $stmt = $this->pdo->prepare('SELECT synctoken FROM '.$this->calendarTableName.' WHERE id = ?'); - $stmt->execute([$calendarId]); - $currentToken = $stmt->fetchColumn(0); - - if (is_null($currentToken)) { - return null; - } - $result = [ - 'syncToken' => $currentToken, 'added' => [], 'modified' => [], 'deleted' => [], ]; if ($syncToken) { - $query = 'SELECT uri, operation FROM '.$this->calendarChangesTableName.' WHERE synctoken >= ? AND synctoken < ? AND calendarid = ? ORDER BY synctoken'; + $query = 'SELECT uri, operation, synctoken FROM '.$this->calendarChangesTableName.' WHERE synctoken >= ? AND calendarid = ? ORDER BY synctoken'; if ($limit > 0) { - $query .= ' LIMIT '.(int) $limit; + // Fetch one more raw to detect result truncation + $query .= ' LIMIT '.((int) $limit + 1); } // Fetching all changes $stmt = $this->pdo->prepare($query); - $stmt->execute([$syncToken, $currentToken, $calendarId]); + $stmt->execute([$syncToken, $calendarId]); $changes = []; // This loop ensures that any duplicates are overwritten, only the // last change on a node is relevant. while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { - $changes[$row['uri']] = $row['operation']; + $changes[$row['uri']] = $row; } + $currentToken = null; + $result_count = 0; foreach ($changes as $uri => $operation) { - switch ($operation) { + if (!is_null($limit) && $result_count >= $limit) { + $result['result_truncated'] = true; + break; + } + + if (null === $currentToken || $currentToken < $operation['synctoken'] + 1) { + // SyncToken in CalDAV perspective is consistently the next number of the last synced change event in this class. + $currentToken = $operation['synctoken'] + 1; + } + + ++$result_count; + switch ($operation['operation']) { case 1: $result['added'][] = $uri; break; @@ -995,7 +999,24 @@ SQL; break; } } + + if (!is_null($currentToken)) { + $result['syncToken'] = $currentToken; + } else { + // This means returned value is equivalent to syncToken + $result['syncToken'] = $syncToken; + } } else { + // Current synctoken + $stmt = $this->pdo->prepare('SELECT synctoken FROM '.$this->calendarTableName.' WHERE id = ?'); + $stmt->execute([$calendarId]); + $currentToken = $stmt->fetchColumn(0); + + if (is_null($currentToken)) { + return null; + } + $result['syncToken'] = $currentToken; + // No synctoken supplied, this is the initial sync. $query = 'SELECT uri FROM '.$this->calendarObjectTableName.' WHERE calendarid = ?'; $stmt = $this->pdo->prepare($query); diff --git a/vendor/sabre/dav/lib/CalDAV/Calendar.php b/vendor/sabre/dav/lib/CalDAV/Calendar.php index 9f32e702a..6e989314d 100644 --- a/vendor/sabre/dav/lib/CalDAV/Calendar.php +++ b/vendor/sabre/dav/lib/CalDAV/Calendar.php @@ -396,7 +396,8 @@ class Calendar implements ICalendar, DAV\IProperties, DAV\Sync\ISyncCollection, * 'deleted' => [ * 'foo.php.bak', * 'old.txt' - * ] + * ], + * 'result_truncated' : true * ]; * * The syncToken property should reflect the *current* syncToken of the @@ -406,6 +407,9 @@ class Calendar implements ICalendar, DAV\IProperties, DAV\Sync\ISyncCollection, * If the syncToken is specified as null, this is an initial sync, and all * members should be reported. * + * If result is truncated due to server limitation or limit by client, + * set result_truncated to true, otherwise set to false or do not add the key. + * * The modified property is an array of nodenames that have changed since * the last token. * @@ -422,12 +426,17 @@ class Calendar implements ICalendar, DAV\IProperties, DAV\Sync\ISyncCollection, * should be treated as infinite. * * If the limit (infinite or not) is higher than you're willing to return, - * you should throw a Sabre\DAV\Exception\TooMuchMatches() exception. + * the result should be truncated to fit the limit. + * Note that even when the result is truncated, syncToken must be consistent + * with the truncated result, not the result before truncation. + * (See RFC6578 Section 3.6 for detail) * * If the syncToken is expired (due to data cleanup) or unknown, you must * return null. * * The limit is 'suggestive'. You are free to ignore it. + * TODO: RFC6578 Setion 3.7 says that the server must fail when the server + * cannot truncate according to the limit, so it may not be just suggestive. * * @param string $syncToken * @param int $syncLevel diff --git a/vendor/sabre/dav/lib/CalDAV/Plugin.php b/vendor/sabre/dav/lib/CalDAV/Plugin.php index da172049e..98f4f554c 100644 --- a/vendor/sabre/dav/lib/CalDAV/Plugin.php +++ b/vendor/sabre/dav/lib/CalDAV/Plugin.php @@ -243,7 +243,7 @@ class Plugin extends DAV\ServerPlugin * @param mixed $report * @param mixed $path * - * @return bool + * @return bool|null */ public function report($reportName, $report, $path) { diff --git a/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php b/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php index 38a7ca96f..3cc360f1d 100644 --- a/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php +++ b/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php @@ -735,9 +735,7 @@ class Plugin extends ServerPlugin /** * This method is responsible for parsing a free-busy query request and - * returning it's result. - * - * @return string + * returning its result in $response. */ protected function handleFreeBusyRequest(IOutbox $outbox, VObject\Component $vObject, RequestInterface $request, ResponseInterface $response) { diff --git a/vendor/sabre/dav/lib/CalDAV/Subscriptions/Subscription.php b/vendor/sabre/dav/lib/CalDAV/Subscriptions/Subscription.php index 3be1b609e..8d56e6441 100644 --- a/vendor/sabre/dav/lib/CalDAV/Subscriptions/Subscription.php +++ b/vendor/sabre/dav/lib/CalDAV/Subscriptions/Subscription.php @@ -75,7 +75,7 @@ class Subscription extends Collection implements ISubscription, IACL /** * Returns the last modification time. * - * @return int + * @return int|null */ public function getLastModified() { diff --git a/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php b/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php new file mode 100644 index 000000000..39324e4db --- /dev/null +++ b/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php @@ -0,0 +1,114 @@ +<?php + +namespace Sabre\DAV\Auth\Backend; + +/** + * This is an authentication backend that uses a database to manage passwords. + * + * @copyright Copyright (C) fruux GmbH (https://fruux.com/) + * @license http://sabre.io/license/ Modified BSD License + */ +class PDOBasicAuth extends AbstractBasic +{ + /** + * Reference to PDO connection. + * + * @var PDO + */ + protected $pdo; + + /** + * PDO table name we'll be using. + * + * @var string + */ + protected $tableName; + + /** + * PDO digest column name we'll be using + * (i.e. digest, password, password_hash). + * + * @var string + */ + protected $digestColumn; + + /** + * PDO uuid(unique user identifier) column name we'll be using + * (i.e. username, email). + * + * @var string + */ + protected $uuidColumn; + + /** + * Digest prefix: + * if the backend you are using for is prefixing + * your password hashes set this option to your prefix to + * cut it off before verfiying. + * + * @var string + */ + protected $digestPrefix; + + /** + * Creates the backend object. + * + * If the filename argument is passed in, it will parse out the specified file fist. + */ + public function __construct(\PDO $pdo, array $options = []) + { + $this->pdo = $pdo; + if (isset($options['tableName'])) { + $this->tableName = $options['tableName']; + } else { + $this->tableName = 'users'; + } + if (isset($options['digestColumn'])) { + $this->digestColumn = $options['digestColumn']; + } else { + $this->digestColumn = 'digest'; + } + if (isset($options['uuidColumn'])) { + $this->uuidColumn = $options['uuidColumn']; + } else { + $this->uuidColumn = 'username'; + } + if (isset($options['digestPrefix'])) { + $this->digestPrefix = $options['digestPrefix']; + } + } + + /** + * Validates a username and password. + * + * This method should return true or false depending on if login + * succeeded. + * + * @param string $username + * @param string $password + * + * @return bool + */ + public function validateUserPass($username, $password) + { + $stmt = $this->pdo->prepare('SELECT '.$this->digestColumn.' FROM '.$this->tableName.' WHERE '.$this->uuidColumn.' = ?'); + $stmt->execute([$username]); + $result = $stmt->fetchAll(); + + if (!count($result)) { + return false; + } else { + $digest = $result[0][$this->digestColumn]; + + if (isset($this->digestPrefix)) { + $digest = substr($digest, strlen($this->digestPrefix)); + } + + if (password_verify($password, $digest)) { + return true; + } + + return false; + } + } +} diff --git a/vendor/sabre/dav/lib/DAV/Auth/Plugin.php b/vendor/sabre/dav/lib/DAV/Auth/Plugin.php index 68adbede5..eb4f27ca6 100644 --- a/vendor/sabre/dav/lib/DAV/Auth/Plugin.php +++ b/vendor/sabre/dav/lib/DAV/Auth/Plugin.php @@ -113,8 +113,6 @@ class Plugin extends ServerPlugin /** * This method is called before any HTTP method and forces users to be authenticated. - * - * @return bool */ public function beforeMethod(RequestInterface $request, ResponseInterface $response) { @@ -204,8 +202,6 @@ class Plugin extends ServerPlugin * This method will for example cause a HTTP Basic backend to set a * WWW-Authorization header, indicating to the client that it should * authenticate. - * - * @return array */ public function challenge(RequestInterface $request, ResponseInterface $response) { diff --git a/vendor/sabre/dav/lib/DAV/Browser/Plugin.php b/vendor/sabre/dav/lib/DAV/Browser/Plugin.php index 2f155d9ea..89495e5db 100644 --- a/vendor/sabre/dav/lib/DAV/Browser/Plugin.php +++ b/vendor/sabre/dav/lib/DAV/Browser/Plugin.php @@ -85,8 +85,6 @@ class Plugin extends DAV\ServerPlugin /** * This method intercepts GET requests that have ?sabreAction=info * appended to the URL. - * - * @return bool */ public function httpGetEarly(RequestInterface $request, ResponseInterface $response) { diff --git a/vendor/sabre/dav/lib/DAV/Locks/Plugin.php b/vendor/sabre/dav/lib/DAV/Locks/Plugin.php index 110bfce06..2443f204c 100644 --- a/vendor/sabre/dav/lib/DAV/Locks/Plugin.php +++ b/vendor/sabre/dav/lib/DAV/Locks/Plugin.php @@ -295,6 +295,10 @@ class Plugin extends DAV\ServerPlugin { $locks = $this->getLocks($path, $includeChildren = true); foreach ($locks as $lock) { + // don't delete a lock on a parent dir + if (0 !== strpos($lock->uri, $path)) { + continue; + } $this->unlockNode($path, $lock); } } diff --git a/vendor/sabre/dav/lib/DAV/Server.php b/vendor/sabre/dav/lib/DAV/Server.php index de663d0c1..1f8300d4a 100644 --- a/vendor/sabre/dav/lib/DAV/Server.php +++ b/vendor/sabre/dav/lib/DAV/Server.php @@ -895,7 +895,7 @@ class Server implements LoggerAwareInterface, EmitterInterface } $propertyNames = $propFind->getRequestedProperties(); - $propFindType = !empty($propertyNames) ? PropFind::NORMAL : PropFind::ALLPROPS; + $propFindType = !$propFind->isAllProps() ? PropFind::NORMAL : PropFind::ALLPROPS; foreach ($this->tree->getChildren($path) as $childNode) { if ('' !== $path) { @@ -1237,6 +1237,7 @@ class Server implements LoggerAwareInterface, EmitterInterface $this->tree->markDirty($parentUri); $this->emit('afterBind', [$uri]); + $this->emit('afterCreateCollection', [$uri]); } /** diff --git a/vendor/sabre/dav/lib/DAV/Sync/Plugin.php b/vendor/sabre/dav/lib/DAV/Sync/Plugin.php index 32106abb3..8609f759e 100644 --- a/vendor/sabre/dav/lib/DAV/Sync/Plugin.php +++ b/vendor/sabre/dav/lib/DAV/Sync/Plugin.php @@ -124,6 +124,10 @@ class Plugin extends DAV\ServerPlugin throw new DAV\Exception\InvalidSyncToken('Invalid or unknown sync token'); } + if (!array_key_exists('result_truncated', $changeInfo)) { + $changeInfo['result_truncated'] = false; + } + // Encoding the response $this->sendSyncCollectionResponse( $changeInfo['syncToken'], @@ -131,7 +135,8 @@ class Plugin extends DAV\ServerPlugin $changeInfo['added'], $changeInfo['modified'], $changeInfo['deleted'], - $report->properties + $report->properties, + $changeInfo['result_truncated'] ); } @@ -141,7 +146,7 @@ class Plugin extends DAV\ServerPlugin * @param string $syncToken * @param string $collectionUrl */ - protected function sendSyncCollectionResponse($syncToken, $collectionUrl, array $added, array $modified, array $deleted, array $properties) + protected function sendSyncCollectionResponse($syncToken, $collectionUrl, array $added, array $modified, array $deleted, array $properties, bool $resultTruncated = false) { $fullPaths = []; @@ -164,6 +169,10 @@ class Plugin extends DAV\ServerPlugin $fullPath = $collectionUrl.'/'.$item; $responses[] = new DAV\Xml\Element\Response($fullPath, [], 404); } + if ($resultTruncated) { + $responses[] = new DAV\Xml\Element\Response($collectionUrl.'/', [], 507); + } + $multiStatus = new DAV\Xml\Response\MultiStatus($responses, self::SYNCTOKEN_PREFIX.$syncToken); $this->server->httpResponse->setStatus(207); diff --git a/vendor/sabre/dav/lib/DAV/Tree.php b/vendor/sabre/dav/lib/DAV/Tree.php index 2417979a6..8215e2c39 100644 --- a/vendor/sabre/dav/lib/DAV/Tree.php +++ b/vendor/sabre/dav/lib/DAV/Tree.php @@ -226,7 +226,7 @@ class Tree // flushing the entire cache $path = trim($path, '/'); foreach ($this->cache as $nodePath => $node) { - if ('' === $path || $nodePath == $path || 0 === strpos($nodePath, $path.'/')) { + if ('' === $path || $nodePath == $path || 0 === strpos((string) $nodePath, $path.'/')) { unset($this->cache[$nodePath]); } } diff --git a/vendor/sabre/dav/lib/DAV/Version.php b/vendor/sabre/dav/lib/DAV/Version.php index b25d6c07a..f8b56bb98 100644 --- a/vendor/sabre/dav/lib/DAV/Version.php +++ b/vendor/sabre/dav/lib/DAV/Version.php @@ -16,5 +16,5 @@ class Version /** * Full version number. */ - public const VERSION = '4.1.5'; + public const VERSION = '4.3.1'; } diff --git a/vendor/sabre/dav/lib/DAV/Xml/Element/Response.php b/vendor/sabre/dav/lib/DAV/Xml/Element/Response.php index 45c161fa4..79f06a09b 100644 --- a/vendor/sabre/dav/lib/DAV/Xml/Element/Response.php +++ b/vendor/sabre/dav/lib/DAV/Xml/Element/Response.php @@ -121,7 +121,7 @@ class Response implements Element foreach ($this->getResponseProperties() as $status => $properties) { // Skipping empty lists - if (!$properties || (!ctype_digit($status) && !is_int($status))) { + if (!$properties || (!is_int($status) && !ctype_digit($status))) { continue; } $empty = false; @@ -186,8 +186,21 @@ class Response implements Element return []; } + + if (!$reader->read()) { + $reader->next(); + + return []; + } + + if (Reader::END_ELEMENT === $reader->nodeType) { + $reader->next(); + + return []; + } + $values = []; - $reader->read(); + do { if (Reader::ELEMENT === $reader->nodeType) { $clark = $reader->getClark(); @@ -199,9 +212,12 @@ class Response implements Element $values[$clark] = $reader->parseCurrentElement()['value']; } } else { - $reader->read(); + if (!$reader->read()) { + break; + } } } while (Reader::END_ELEMENT !== $reader->nodeType); + $reader->read(); return $values; diff --git a/vendor/sabre/dav/lib/DAVACL/Plugin.php b/vendor/sabre/dav/lib/DAVACL/Plugin.php index 6f071927d..46d680e15 100644 --- a/vendor/sabre/dav/lib/DAVACL/Plugin.php +++ b/vendor/sabre/dav/lib/DAVACL/Plugin.php @@ -927,8 +927,6 @@ class Plugin extends DAV\ServerPlugin * Triggered before properties are looked up in specific nodes. * * @TODO really should be broken into multiple methods, or even a class. - * - * @return bool */ public function propFind(DAV\PropFind $propFind, DAV\INode $node) { @@ -1070,8 +1068,6 @@ class Plugin extends DAV\ServerPlugin * @param string $reportName * @param mixed $report * @param mixed $path - * - * @return bool */ public function report($reportName, $report, $path) { diff --git a/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/AbstractBackend.php b/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/AbstractBackend.php index 03a9c4bad..f61a0c953 100644 --- a/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/AbstractBackend.php +++ b/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/AbstractBackend.php @@ -33,7 +33,7 @@ abstract class AbstractBackend implements BackendInterface * @param string $uri * @param string $principalPrefix * - * @return string + * @return string|null */ public function findByUri($uri, $principalPrefix) { diff --git a/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/BackendInterface.php b/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/BackendInterface.php index 72717a59b..7140a9295 100644 --- a/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/BackendInterface.php +++ b/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/BackendInterface.php @@ -110,7 +110,7 @@ interface BackendInterface * @param string $uri * @param string $principalPrefix * - * @return string + * @return string|null */ public function findByUri($uri, $principalPrefix); diff --git a/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php b/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php index 24aeffad9..52092128f 100644 --- a/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php +++ b/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php @@ -142,6 +142,8 @@ class Principal extends DAV\Xml\Property\Href case self::ALL: return '<em>all</em>'; } + + return '<em>unknown</em>'; } /** diff --git a/vendor/sabre/event/.github/workflows/ci.yml b/vendor/sabre/event/.github/workflows/ci.yml new file mode 100644 index 000000000..3473cd2de --- /dev/null +++ b/vendor/sabre/event/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/event/composer.json b/vendor/sabre/event/composer.json index 181afe190..42fb4aa22 100644 --- a/vendor/sabre/event/composer.json +++ b/vendor/sabre/event/composer.json @@ -46,7 +46,7 @@ } }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0" }, diff --git a/vendor/sabre/event/lib/EventEmitter.php b/vendor/sabre/event/lib/EventEmitter.php index 18971e3ee..865c99b53 100644 --- a/vendor/sabre/event/lib/EventEmitter.php +++ b/vendor/sabre/event/lib/EventEmitter.php @@ -7,7 +7,7 @@ namespace Sabre\Event; /** * This is the old name for the Emitter class. * - * Instead of of using EventEmitter, please use Emitter. They are identical + * Instead of using EventEmitter, please use Emitter. They are identical * otherwise. * * @copyright Copyright (C) fruux GmbH (https://fruux.com/) diff --git a/vendor/sabre/event/lib/Loop/Loop.php b/vendor/sabre/event/lib/Loop/Loop.php index ec09be921..b85a7a440 100644 --- a/vendor/sabre/event/lib/Loop/Loop.php +++ b/vendor/sabre/event/lib/Loop/Loop.php @@ -273,7 +273,9 @@ class Loop $read = $this->readStreams; $write = $this->writeStreams; $except = null; - if (stream_select($read, $write, $except, (null === $timeout) ? null : 0, $timeout ? (int) ($timeout * 1000000) : 0)) { + // stream_select changes behavior in 8.1 to forbid passing non-null microseconds when the seconds are null. + // Older versions of php don't allow passing null to microseconds. + if (null !== $timeout ? stream_select($read, $write, $except, 0, (int) ($timeout * 1000000)) : stream_select($read, $write, $except, null)) { // See PHP Bug https://bugs.php.net/bug.php?id=62452 // Fixed in PHP7 foreach ($read as $readStream) { diff --git a/vendor/sabre/event/lib/Promise.php b/vendor/sabre/event/lib/Promise.php index 1228561af..42969a55f 100644 --- a/vendor/sabre/event/lib/Promise.php +++ b/vendor/sabre/event/lib/Promise.php @@ -144,7 +144,7 @@ class Promise } /** - * Marks this promise as rejected, and set it's rejection reason. + * Marks this promise as rejected, and set its rejection reason. */ public function reject(Throwable $reason) { diff --git a/vendor/sabre/event/lib/Promise/functions.php b/vendor/sabre/event/lib/Promise/functions.php index 986fe2b00..fbed63471 100644 --- a/vendor/sabre/event/lib/Promise/functions.php +++ b/vendor/sabre/event/lib/Promise/functions.php @@ -18,7 +18,7 @@ use Throwable; /** * This function takes an array of Promises, and returns a Promise that - * resolves when all of the given arguments have resolved. + * resolves when all the given arguments have resolved. * * The returned Promise will resolve with a value that's an array of all the * values the given promises have been resolved with. diff --git a/vendor/sabre/event/lib/Version.php b/vendor/sabre/event/lib/Version.php index 457aea9b2..fe8f5c3bf 100644 --- a/vendor/sabre/event/lib/Version.php +++ b/vendor/sabre/event/lib/Version.php @@ -16,5 +16,5 @@ class Version /** * Full version number. */ - const VERSION = '5.1.2'; + const VERSION = '5.1.4'; } diff --git a/vendor/sabre/event/lib/WildcardEmitter.php b/vendor/sabre/event/lib/WildcardEmitter.php index 1b7c248b2..997709e8a 100644 --- a/vendor/sabre/event/lib/WildcardEmitter.php +++ b/vendor/sabre/event/lib/WildcardEmitter.php @@ -22,9 +22,9 @@ namespace Sabre\Event; * - Using ":" as a separator is optional, but it's highly recommended to use * some kind of separator. * - * The WilcardEmitter is a bit slower than the regular Emitter. If you code + * The WildcardEmitter is a bit slower than the regular Emitter. If your code * must be very high performance, it might be better to try to use the other - * emitter. For must usage the difference is negligible though. + * emitter. For most usage the difference is negligible though. * * @copyright Copyright (C) fruux GmbH (https://fruux.com/) * @author Evert Pot (http://evertpot.com/) diff --git a/vendor/sabre/http/.github/workflows/ci.yml b/vendor/sabre/http/.github/workflows/ci.yml new file mode 100644 index 000000000..91b509bf0 --- /dev/null +++ b/vendor/sabre/http/.github/workflows/ci.yml @@ -0,0 +1,64 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: ctype, curl, mbstring + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Run application server + run: php -S localhost:8000 -t tests/www 2>/dev/null & + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/http/.travis.yml b/vendor/sabre/http/.travis.yml deleted file mode 100644 index c93e4ae75..000000000 --- a/vendor/sabre/http/.travis.yml +++ /dev/null @@ -1,51 +0,0 @@ -language: php -sudo: required -php: - - 7.1 - - 7.2 - - 7.3 - - 7.4 - -env: - global: - - RUN_PHPCSFIXER="TRUE" - - RUN_PHPUNIT="TRUE" - - RUN_PHPSTAN="FALSE" - matrix: - - PREFER_LOWEST="" REPORT_COVERAGE="TRUE" WITH_COVERAGE="--coverage-clover=coverage.xml" - - PREFER_LOWEST="--prefer-lowest" REPORT_COVERAGE="FALSE" WITH_COVERAGE="" - -matrix: - include: - - name: 'PHP8' - dist: focal - php: nightly - env: - - RUN_PHPCSFIXER="FALSE" - - REPORT_COVERAGE="FALSE" - - name: 'PHPStan' - php: 7.4 - env: - - RUN_PHPCSFIXER="FALSE" - - RUN_PHPUNIT="FALSE" - - RUN_PHPSTAN="TRUE" - - REPORT_COVERAGE="FALSE" - fast_finish: true - -cache: - directories: - - $HOME/.composer/cache - -before_script: - - if [ $RUN_PHPCSFIXER == "FALSE" ]; then composer remove --dev friendsofphp/php-cs-fixer; fi - - composer update $PREFER_LOWEST - - PHP_BIN=$(phpenv which php) - - sudo $PHP_BIN -S localhost:80 -t $TRAVIS_BUILD_DIR/tests/www 2>/dev/null & - -script: - - if [ $RUN_PHPCSFIXER == "TRUE" ]; then php vendor/bin/php-cs-fixer fix --dry-run --diff; fi - - if [ $RUN_PHPUNIT == "TRUE" ]; then php vendor/bin/phpunit --configuration tests/phpunit.xml $WITH_COVERAGE; fi - - if [ $RUN_PHPSTAN == "TRUE" ]; then composer phpstan; fi - -after_success: - - if [ $REPORT_COVERAGE == "TRUE" ]; then bash <(curl -s https://codecov.io/bash); fi diff --git a/vendor/sabre/http/CHANGELOG.md b/vendor/sabre/http/CHANGELOG.md index eb226f7a5..4db8cc772 100644 --- a/vendor/sabre/http/CHANGELOG.md +++ b/vendor/sabre/http/CHANGELOG.md @@ -1,6 +1,18 @@ ChangeLog ========= +5.1.3 (2021-11-04) +------------------ + +* #179 version bump that was missed in 5.1.2 (@phil-davis) + +5.1.2 (2021-11-04) +------------------------- + +* #169 Ensure $_SERVER keys are read as strings (@fredrik-eriksson) +* #170 Fix deprecated usages on PHP 8.1 (@cedric-anne) +* #175 Add resource size to CURL options in client (from #172 ) (@Dartui) + 5.1.1 (2020-10-03) ------------------------- diff --git a/vendor/sabre/http/composer.json b/vendor/sabre/http/composer.json index 7f54df6e8..353646a28 100644 --- a/vendor/sabre/http/composer.json +++ b/vendor/sabre/http/composer.json @@ -13,7 +13,7 @@ "sabre/uri" : "^2.0" }, "require-dev" : { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0" }, diff --git a/vendor/sabre/http/lib/Client.php b/vendor/sabre/http/lib/Client.php index b79c564da..99ffcf8cb 100644 --- a/vendor/sabre/http/lib/Client.php +++ b/vendor/sabre/http/lib/Client.php @@ -376,11 +376,16 @@ class Client extends EventEmitter default: $body = $request->getBody(); if (is_resource($body)) { + $bodyStat = fstat($body); + // This needs to be set to PUT, regardless of the actual // method used. Without it, INFILE will be ignored for some // reason. $settings[CURLOPT_PUT] = true; - $settings[CURLOPT_INFILE] = $request->getBody(); + $settings[CURLOPT_INFILE] = $body; + if (false !== $bodyStat && array_key_exists('size', $bodyStat)) { + $settings[CURLOPT_INFILESIZE] = $bodyStat['size']; + } } else { // For security we cast this to a string. If somehow an array could // be passed here, it would be possible for an attacker to use @ to diff --git a/vendor/sabre/http/lib/Message.php b/vendor/sabre/http/lib/Message.php index 90153fda5..6474f38d2 100644 --- a/vendor/sabre/http/lib/Message.php +++ b/vendor/sabre/http/lib/Message.php @@ -88,7 +88,7 @@ abstract class Message implements MessageInterface * @var string|int|null */ $contentLength = $this->getHeader('Content-Length'); - if (is_int($contentLength) || ctype_digit($contentLength)) { + if (null !== $contentLength && (is_int($contentLength) || ctype_digit($contentLength))) { return stream_get_contents($body, (int) $contentLength); } diff --git a/vendor/sabre/http/lib/Response.php b/vendor/sabre/http/lib/Response.php index 64dfbc0b2..2369bb41e 100644 --- a/vendor/sabre/http/lib/Response.php +++ b/vendor/sabre/http/lib/Response.php @@ -149,7 +149,7 @@ class Response extends Message implements ResponseInterface */ public function setStatus($status) { - if (ctype_digit($status) || is_int($status)) { + if (is_int($status) || ctype_digit($status)) { $statusCode = $status; $statusText = self::$statusCodes[$status] ?? 'Unknown'; } else { diff --git a/vendor/sabre/http/lib/Sapi.php b/vendor/sabre/http/lib/Sapi.php index 73674a5a1..823d5df25 100644 --- a/vendor/sabre/http/lib/Sapi.php +++ b/vendor/sabre/http/lib/Sapi.php @@ -154,6 +154,7 @@ class Sapi $hostName = 'localhost'; foreach ($serverArray as $key => $value) { + $key = (string) $key; switch ($key) { case 'SERVER_PROTOCOL': if ('HTTP/1.0' === $value) { diff --git a/vendor/sabre/http/lib/Version.php b/vendor/sabre/http/lib/Version.php index 624e2a78e..f182979c6 100644 --- a/vendor/sabre/http/lib/Version.php +++ b/vendor/sabre/http/lib/Version.php @@ -16,5 +16,5 @@ class Version /** * Full version number. */ - const VERSION = '5.1.1'; + const VERSION = '5.1.3'; } diff --git a/vendor/sabre/http/lib/functions.php b/vendor/sabre/http/lib/functions.php index a23840a1a..97673da46 100644 --- a/vendor/sabre/http/lib/functions.php +++ b/vendor/sabre/http/lib/functions.php @@ -331,8 +331,8 @@ function parseMimeType(string $str): array if (2 !== count($mimeType)) { // Illegal value var_dump($mimeType); - die(); - throw new InvalidArgumentException('Not a valid mime-type: '.$str); + exit(); + // throw new InvalidArgumentException('Not a valid mime-type: '.$str); } list($type, $subType) = $mimeType; diff --git a/vendor/sabre/uri/.github/workflows/ci.yml b/vendor/sabre/uri/.github/workflows/ci.yml new file mode 100644 index 000000000..3473cd2de --- /dev/null +++ b/vendor/sabre/uri/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/uri/composer.json b/vendor/sabre/uri/composer.json index 4a68797a5..d58fd51f7 100644 --- a/vendor/sabre/uri/composer.json +++ b/vendor/sabre/uri/composer.json @@ -37,7 +37,7 @@ } }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0" }, diff --git a/vendor/sabre/uri/lib/Version.php b/vendor/sabre/uri/lib/Version.php index 4a6c58405..4527a0d8a 100644 --- a/vendor/sabre/uri/lib/Version.php +++ b/vendor/sabre/uri/lib/Version.php @@ -16,5 +16,5 @@ class Version /** * Full version number. */ - const VERSION = '2.2.1'; + const VERSION = '2.2.2'; } diff --git a/vendor/sabre/uri/lib/functions.php b/vendor/sabre/uri/lib/functions.php index 0d64cead0..18a324337 100644 --- a/vendor/sabre/uri/lib/functions.php +++ b/vendor/sabre/uri/lib/functions.php @@ -84,7 +84,7 @@ function resolve(string $basePath, string $newPath): string $path = implode('/', $newPathParts); // If the source url ended with a /, we want to preserve that. - $newParts['path'] = $path; + $newParts['path'] = 0 === strpos($path, '/') ? $path : '/'.$path; if ($delta['query']) { $newParts['query'] = $delta['query']; } elseif (!empty($base['query']) && empty($delta['host']) && empty($delta['path'])) { @@ -214,7 +214,7 @@ function parse(string $uri): array * This function takes the components returned from PHP's parse_url, and uses * it to generate a new uri. * - * @param array<string, int|string> $parts + * @param array<string, int|string|null> $parts */ function build(array $parts): string { @@ -261,7 +261,7 @@ function build(array $parts): string * is used) and we need a method that just operates on UTF-8 characters. * * In addition basename and dirname are platform aware, and will treat - * backslash (\) as a directory separator on windows. + * backslash (\) as a directory separator on Windows. * * This method returns the 2 components as an array. * diff --git a/vendor/sabre/vobject/.github/workflows/ci.yml b/vendor/sabre/vobject/.github/workflows/ci.yml new file mode 100644 index 000000000..3a019fe77 --- /dev/null +++ b/vendor/sabre/vobject/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/vobject/README.md b/vendor/sabre/vobject/README.md index 5030cf276..659e3fa83 100644 --- a/vendor/sabre/vobject/README.md +++ b/vendor/sabre/vobject/README.md @@ -4,7 +4,7 @@ sabre/vobject The VObject library allows you to easily parse and manipulate [iCalendar](https://tools.ietf.org/html/rfc5545) and [vCard](https://tools.ietf.org/html/rfc6350) objects using PHP. -The goal of the VObject library is to create a very complete library, with an easy to use API. +The goal of the VObject library is to create a very complete library, with an easy-to-use API. Installation diff --git a/vendor/sabre/vobject/lib/Cli.php b/vendor/sabre/vobject/lib/Cli.php index 4984ac9b2..816e2cb31 100644 --- a/vendor/sabre/vobject/lib/Cli.php +++ b/vendor/sabre/vobject/lib/Cli.php @@ -453,8 +453,6 @@ HELP * Colorizes a file. * * @param Component $vObj - * - * @return int */ protected function color($vObj) { diff --git a/vendor/sabre/vobject/lib/Component.php b/vendor/sabre/vobject/lib/Component.php index 07f6a627f..f33b628a7 100644 --- a/vendor/sabre/vobject/lib/Component.php +++ b/vendor/sabre/vobject/lib/Component.php @@ -339,6 +339,7 @@ class Component extends Node * * @return array */ + #[\ReturnTypeWillChange] public function jsonSerialize() { $components = []; diff --git a/vendor/sabre/vobject/lib/Component/VCard.php b/vendor/sabre/vobject/lib/Component/VCard.php index 2430df621..eac789842 100644 --- a/vendor/sabre/vobject/lib/Component/VCard.php +++ b/vendor/sabre/vobject/lib/Component/VCard.php @@ -445,6 +445,7 @@ class VCard extends VObject\Document * * @return array */ + #[\ReturnTypeWillChange] public function jsonSerialize() { // A vcard does not have sub-components, so we're overriding this diff --git a/vendor/sabre/vobject/lib/ElementList.php b/vendor/sabre/vobject/lib/ElementList.php index 56058cbd5..860512649 100644 --- a/vendor/sabre/vobject/lib/ElementList.php +++ b/vendor/sabre/vobject/lib/ElementList.php @@ -25,6 +25,7 @@ class ElementList extends ArrayIterator * @param int $offset * @param mixed $value */ + #[\ReturnTypeWillChange] public function offsetSet($offset, $value) { throw new LogicException('You can not add new objects to an ElementList'); @@ -37,6 +38,7 @@ class ElementList extends ArrayIterator * * @param int $offset */ + #[\ReturnTypeWillChange] public function offsetUnset($offset) { throw new LogicException('You can not remove objects from an ElementList'); diff --git a/vendor/sabre/vobject/lib/ITip/Broker.php b/vendor/sabre/vobject/lib/ITip/Broker.php index 4e0368e13..b66a59f54 100644 --- a/vendor/sabre/vobject/lib/ITip/Broker.php +++ b/vendor/sabre/vobject/lib/ITip/Broker.php @@ -547,9 +547,13 @@ class Broker // properties changed in the event, or simply if there's a // difference in instances that the attendee is invited to. + $oldAttendeeInstances = array_keys($attendee['oldInstances']); + $newAttendeeInstances = array_keys($attendee['newInstances']); + $message->significantChange = 'REQUEST' === $attendee['forceSend'] || - array_keys($attendee['oldInstances']) != array_keys($attendee['newInstances']) || + count($oldAttendeeInstances) != count($newAttendeeInstances) || + count(array_diff($oldAttendeeInstances, $newAttendeeInstances)) > 0 || $oldEventInfo['significantChangeHash'] !== $eventInfo['significantChangeHash']; foreach ($attendee['newInstances'] as $instanceId => $instanceInfo) { @@ -816,7 +820,10 @@ class Broker $instances = []; $exdate = []; + $significantChangeEventProperties = []; + foreach ($calendar->VEVENT as $vevent) { + $eventSignificantChangeHash = ''; $rrule = []; if (is_null($uid)) { @@ -930,19 +937,26 @@ class Broker if (isset($vevent->$prop)) { $propertyValues = $vevent->select($prop); - $significantChangeHash .= $prop.':'; + $eventSignificantChangeHash .= $prop.':'; if ('EXDATE' === $prop) { - $significantChangeHash .= implode(',', $exdate).';'; + $eventSignificantChangeHash .= implode(',', $exdate).';'; } elseif ('RRULE' === $prop) { - $significantChangeHash .= implode(',', $rrule).';'; + $eventSignificantChangeHash .= implode(',', $rrule).';'; } else { foreach ($propertyValues as $val) { - $significantChangeHash .= $val->getValue().';'; + $eventSignificantChangeHash .= $val->getValue().';'; } } } } + $significantChangeEventProperties[] = $eventSignificantChangeHash; + } + + asort($significantChangeEventProperties); + + foreach ($significantChangeEventProperties as $eventSignificantChangeHash) { + $significantChangeHash .= $eventSignificantChangeHash; } $significantChangeHash = md5($significantChangeHash); diff --git a/vendor/sabre/vobject/lib/Node.php b/vendor/sabre/vobject/lib/Node.php index 4c0c04f72..2041b2ac7 100644 --- a/vendor/sabre/vobject/lib/Node.php +++ b/vendor/sabre/vobject/lib/Node.php @@ -73,6 +73,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * * @return array */ + #[\ReturnTypeWillChange] abstract public function jsonSerialize(); /** @@ -102,6 +103,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * * @return ElementList */ + #[\ReturnTypeWillChange] public function getIterator() { if (!is_null($this->iterator)) { @@ -157,6 +159,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * * @return int */ + #[\ReturnTypeWillChange] public function count() { $it = $this->getIterator(); @@ -177,6 +180,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * * @return bool */ + #[\ReturnTypeWillChange] public function offsetExists($offset) { $iterator = $this->getIterator(); @@ -193,6 +197,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * * @return mixed */ + #[\ReturnTypeWillChange] public function offsetGet($offset) { $iterator = $this->getIterator(); @@ -208,6 +213,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * @param int $offset * @param mixed $value */ + #[\ReturnTypeWillChange] public function offsetSet($offset, $value) { $iterator = $this->getIterator(); @@ -228,6 +234,7 @@ abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable, \Js * * @param int $offset */ + #[\ReturnTypeWillChange] public function offsetUnset($offset) { $iterator = $this->getIterator(); diff --git a/vendor/sabre/vobject/lib/Parameter.php b/vendor/sabre/vobject/lib/Parameter.php index 72f2ecbcb..7e4d55743 100644 --- a/vendor/sabre/vobject/lib/Parameter.php +++ b/vendor/sabre/vobject/lib/Parameter.php @@ -321,6 +321,7 @@ class Parameter extends Node * * @return array */ + #[\ReturnTypeWillChange] public function jsonSerialize() { return $this->value; @@ -354,6 +355,7 @@ class Parameter extends Node * * @return ElementList */ + #[\ReturnTypeWillChange] public function getIterator() { if (!is_null($this->iterator)) { diff --git a/vendor/sabre/vobject/lib/Parser/MimeDir.php b/vendor/sabre/vobject/lib/Parser/MimeDir.php index 385d340d7..db0f81531 100644 --- a/vendor/sabre/vobject/lib/Parser/MimeDir.php +++ b/vendor/sabre/vobject/lib/Parser/MimeDir.php @@ -439,7 +439,7 @@ class MimeDir extends Parser $propObj->add(null, $namelessParameter); } - if ('QUOTED-PRINTABLE' === strtoupper($propObj['ENCODING'])) { + if (isset($propObj['ENCODING']) && 'QUOTED-PRINTABLE' === strtoupper($propObj['ENCODING'])) { $propObj->setQuotedPrintableValue($this->extractQuotedPrintableValue()); } else { $charset = $this->charset; @@ -518,7 +518,7 @@ class MimeDir extends Parser * * Now for the parameters * - * If delimiter is not set (null) this method will just return a string. + * If delimiter is not set (empty string) this method will just return a string. * If it's a comma or a semi-colon the string will be split on those * characters, and always return an array. * diff --git a/vendor/sabre/vobject/lib/Property.php b/vendor/sabre/vobject/lib/Property.php index f9cf8e38e..50cda9684 100644 --- a/vendor/sabre/vobject/lib/Property.php +++ b/vendor/sabre/vobject/lib/Property.php @@ -52,7 +52,7 @@ abstract class Property extends Node * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ public $delimiter = ';'; @@ -276,6 +276,7 @@ abstract class Property extends Node * * @return array */ + #[\ReturnTypeWillChange] public function jsonSerialize() { $parameters = []; @@ -387,6 +388,7 @@ abstract class Property extends Node * * @return bool */ + #[\ReturnTypeWillChange] public function offsetExists($name) { if (is_int($name)) { @@ -413,6 +415,7 @@ abstract class Property extends Node * * @return Node */ + #[\ReturnTypeWillChange] public function offsetGet($name) { if (is_int($name)) { @@ -433,6 +436,7 @@ abstract class Property extends Node * @param string $name * @param mixed $value */ + #[\ReturnTypeWillChange] public function offsetSet($name, $value) { if (is_int($name)) { @@ -453,6 +457,7 @@ abstract class Property extends Node * * @param string $name */ + #[\ReturnTypeWillChange] public function offsetUnset($name) { if (is_int($name)) { diff --git a/vendor/sabre/vobject/lib/Property/Binary.php b/vendor/sabre/vobject/lib/Property/Binary.php index ec6713fdd..1262dd054 100644 --- a/vendor/sabre/vobject/lib/Property/Binary.php +++ b/vendor/sabre/vobject/lib/Property/Binary.php @@ -24,9 +24,9 @@ class Binary extends Property * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Updates the current value. diff --git a/vendor/sabre/vobject/lib/Property/FloatValue.php b/vendor/sabre/vobject/lib/Property/FloatValue.php index 0d0346968..e780ae6c1 100644 --- a/vendor/sabre/vobject/lib/Property/FloatValue.php +++ b/vendor/sabre/vobject/lib/Property/FloatValue.php @@ -21,7 +21,7 @@ class FloatValue extends Property * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ public $delimiter = ';'; diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php b/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php index 86be66c15..2dbbc6eaf 100644 --- a/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php +++ b/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php @@ -19,9 +19,9 @@ class CalAddress extends Text * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Returns the type of value. diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php b/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php index d635e17ae..ca71633b9 100644 --- a/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php +++ b/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php @@ -300,6 +300,7 @@ class DateTime extends Property * @param string $name * @param mixed $value */ + #[\ReturnTypeWillChange] public function offsetSet($name, $value) { parent::offsetSet($name, $value); diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/Duration.php b/vendor/sabre/vobject/lib/Property/ICalendar/Duration.php index 87f008160..e18fe191e 100644 --- a/vendor/sabre/vobject/lib/Property/ICalendar/Duration.php +++ b/vendor/sabre/vobject/lib/Property/ICalendar/Duration.php @@ -22,7 +22,7 @@ class Duration extends Property * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ public $delimiter = ','; diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/Period.php b/vendor/sabre/vobject/lib/Property/ICalendar/Period.php index eb3752770..ae8a78911 100644 --- a/vendor/sabre/vobject/lib/Property/ICalendar/Period.php +++ b/vendor/sabre/vobject/lib/Property/ICalendar/Period.php @@ -23,7 +23,7 @@ class Period extends Property * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ public $delimiter = ','; diff --git a/vendor/sabre/vobject/lib/Property/Time.php b/vendor/sabre/vobject/lib/Property/Time.php index 544b5ced3..1b81609aa 100644 --- a/vendor/sabre/vobject/lib/Property/Time.php +++ b/vendor/sabre/vobject/lib/Property/Time.php @@ -19,9 +19,9 @@ class Time extends Text * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Returns the type of value. diff --git a/vendor/sabre/vobject/lib/Property/Uri.php b/vendor/sabre/vobject/lib/Property/Uri.php index 830cd3f18..1ad1fb199 100644 --- a/vendor/sabre/vobject/lib/Property/Uri.php +++ b/vendor/sabre/vobject/lib/Property/Uri.php @@ -20,9 +20,9 @@ class Uri extends Text * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Returns the type of value. diff --git a/vendor/sabre/vobject/lib/Property/UtcOffset.php b/vendor/sabre/vobject/lib/Property/UtcOffset.php index 248ed40ea..04b88447f 100644 --- a/vendor/sabre/vobject/lib/Property/UtcOffset.php +++ b/vendor/sabre/vobject/lib/Property/UtcOffset.php @@ -17,9 +17,9 @@ class UtcOffset extends Text * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Returns the type of value. diff --git a/vendor/sabre/vobject/lib/Property/VCard/DateAndOrTime.php b/vendor/sabre/vobject/lib/Property/VCard/DateAndOrTime.php index 09918b31a..7bf79c48c 100644 --- a/vendor/sabre/vobject/lib/Property/VCard/DateAndOrTime.php +++ b/vendor/sabre/vobject/lib/Property/VCard/DateAndOrTime.php @@ -24,9 +24,9 @@ class DateAndOrTime extends Property /** * Field separator. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Returns the type of value. diff --git a/vendor/sabre/vobject/lib/Property/VCard/TimeStamp.php b/vendor/sabre/vobject/lib/Property/VCard/TimeStamp.php index fccf2d600..da6ea3d44 100644 --- a/vendor/sabre/vobject/lib/Property/VCard/TimeStamp.php +++ b/vendor/sabre/vobject/lib/Property/VCard/TimeStamp.php @@ -21,9 +21,9 @@ class TimeStamp extends Text * In case this is a multi-value property. This string will be used as a * delimiter. * - * @var string|null + * @var string */ - public $delimiter = null; + public $delimiter = ''; /** * Returns the type of value. diff --git a/vendor/sabre/vobject/lib/Recur/EventIterator.php b/vendor/sabre/vobject/lib/Recur/EventIterator.php index e42ca1360..61f05d7de 100644 --- a/vendor/sabre/vobject/lib/Recur/EventIterator.php +++ b/vendor/sabre/vobject/lib/Recur/EventIterator.php @@ -198,6 +198,7 @@ class EventIterator implements \Iterator * * @return DateTimeImmutable */ + #[\ReturnTypeWillChange] public function current() { if ($this->currentDate) { @@ -229,9 +230,13 @@ class EventIterator implements \Iterator if (!$this->valid()) { return; } - $end = clone $this->currentDate; + if ($this->currentOverriddenEvent && $this->currentOverriddenEvent->DTEND) { + return $this->currentOverriddenEvent->DTEND->getDateTime($this->timeZone); + } else { + $end = clone $this->currentDate; - return $end->modify('+'.$this->eventDuration.' seconds'); + return $end->modify('+'.$this->eventDuration.' seconds'); + } } /** @@ -281,6 +286,7 @@ class EventIterator implements \Iterator * * @return int */ + #[\ReturnTypeWillChange] public function key() { // The counter is always 1 ahead. @@ -293,6 +299,7 @@ class EventIterator implements \Iterator * * @return bool */ + #[\ReturnTypeWillChange] public function valid() { if ($this->counter > Settings::$maxRecurrences && -1 !== Settings::$maxRecurrences) { @@ -304,7 +311,10 @@ class EventIterator implements \Iterator /** * Sets the iterator back to the starting point. + * + * @return void */ + #[\ReturnTypeWillChange] public function rewind() { $this->recurIterator->rewind(); @@ -327,7 +337,10 @@ class EventIterator implements \Iterator /** * Advances the iterator with one step. + * + * @return void */ + #[\ReturnTypeWillChange] public function next() { $this->currentOverriddenEvent = null; diff --git a/vendor/sabre/vobject/lib/Recur/RDateIterator.php b/vendor/sabre/vobject/lib/Recur/RDateIterator.php index d117e152c..5d56657fa 100644 --- a/vendor/sabre/vobject/lib/Recur/RDateIterator.php +++ b/vendor/sabre/vobject/lib/Recur/RDateIterator.php @@ -35,6 +35,7 @@ class RDateIterator implements Iterator /* Implementation of the Iterator interface {{{ */ + #[\ReturnTypeWillChange] public function current() { if (!$this->valid()) { @@ -49,6 +50,7 @@ class RDateIterator implements Iterator * * @return int */ + #[\ReturnTypeWillChange] public function key() { return $this->counter; @@ -60,6 +62,7 @@ class RDateIterator implements Iterator * * @return bool */ + #[\ReturnTypeWillChange] public function valid() { return $this->counter <= count($this->dates); @@ -67,7 +70,10 @@ class RDateIterator implements Iterator /** * Resets the iterator. + * + * @return void */ + #[\ReturnTypeWillChange] public function rewind() { $this->currentDate = clone $this->startDate; @@ -76,7 +82,10 @@ class RDateIterator implements Iterator /** * Goes on to the next iteration. + * + * @return void */ + #[\ReturnTypeWillChange] public function next() { ++$this->counter; diff --git a/vendor/sabre/vobject/lib/Recur/RRuleIterator.php b/vendor/sabre/vobject/lib/Recur/RRuleIterator.php index 0511f0ade..d556aa6c3 100644 --- a/vendor/sabre/vobject/lib/Recur/RRuleIterator.php +++ b/vendor/sabre/vobject/lib/Recur/RRuleIterator.php @@ -38,6 +38,7 @@ class RRuleIterator implements Iterator /* Implementation of the Iterator interface {{{ */ + #[\ReturnTypeWillChange] public function current() { if (!$this->valid()) { @@ -52,6 +53,7 @@ class RRuleIterator implements Iterator * * @return int */ + #[\ReturnTypeWillChange] public function key() { return $this->counter; @@ -64,6 +66,7 @@ class RRuleIterator implements Iterator * * @return bool */ + #[\ReturnTypeWillChange] public function valid() { if (null === $this->currentDate) { @@ -78,7 +81,10 @@ class RRuleIterator implements Iterator /** * Resets the iterator. + * + * @return void */ + #[\ReturnTypeWillChange] public function rewind() { $this->currentDate = clone $this->startDate; @@ -87,7 +93,10 @@ class RRuleIterator implements Iterator /** * Goes on to the next iteration. + * + * @return void */ + #[\ReturnTypeWillChange] public function next() { // Otherwise, we find the next event in the normal RRULE diff --git a/vendor/sabre/vobject/lib/TimeZoneUtil.php b/vendor/sabre/vobject/lib/TimeZoneUtil.php index 2c407fee6..6422c0930 100644 --- a/vendor/sabre/vobject/lib/TimeZoneUtil.php +++ b/vendor/sabre/vobject/lib/TimeZoneUtil.php @@ -2,6 +2,16 @@ namespace Sabre\VObject; +use DateTimeZone; +use InvalidArgumentException; +use Sabre\VObject\TimezoneGuesser\FindFromOffset; +use Sabre\VObject\TimezoneGuesser\FindFromTimezoneIdentifier; +use Sabre\VObject\TimezoneGuesser\FindFromTimezoneMap; +use Sabre\VObject\TimezoneGuesser\GuessFromLicEntry; +use Sabre\VObject\TimezoneGuesser\GuessFromMsTzId; +use Sabre\VObject\TimezoneGuesser\TimezoneFinder; +use Sabre\VObject\TimezoneGuesser\TimezoneGuesser; + /** * Time zone name translation. * @@ -14,17 +24,136 @@ namespace Sabre\VObject; */ class TimeZoneUtil { + /** @var self */ + private static $instance = null; + + /** @var TimezoneGuesser[] */ + private $timezoneGuessers = []; + + /** @var TimezoneFinder[] */ + private $timezoneFinders = []; + + private function __construct() + { + $this->addGuesser('lic', new GuessFromLicEntry()); + $this->addGuesser('msTzId', new GuessFromMsTzId()); + $this->addFinder('tzid', new FindFromTimezoneIdentifier()); + $this->addFinder('tzmap', new FindFromTimezoneMap()); + $this->addFinder('offset', new FindFromOffset()); + } + + private static function getInstance(): self + { + if (null === self::$instance) { + self::$instance = new self(); + } + + return self::$instance; + } + + private function addGuesser(string $key, TimezoneGuesser $guesser): void + { + $this->timezoneGuessers[$key] = $guesser; + } + + private function addFinder(string $key, TimezoneFinder $finder): void + { + $this->timezoneFinders[$key] = $finder; + } + + /** + * This method will try to find out the correct timezone for an iCalendar + * date-time value. + * + * You must pass the contents of the TZID parameter, as well as the full + * calendar. + * + * If the lookup fails, this method will return the default PHP timezone + * (as configured using date_default_timezone_set, or the date.timezone ini + * setting). + * + * Alternatively, if $failIfUncertain is set to true, it will throw an + * exception if we cannot accurately determine the timezone. + */ + private function findTimeZone(string $tzid, Component $vcalendar = null, bool $failIfUncertain = false): DateTimeZone + { + foreach ($this->timezoneFinders as $timezoneFinder) { + $timezone = $timezoneFinder->find($tzid, $failIfUncertain); + if (!$timezone instanceof DateTimeZone) { + continue; + } + + return $timezone; + } + + if ($vcalendar) { + // If that didn't work, we will scan VTIMEZONE objects + foreach ($vcalendar->select('VTIMEZONE') as $vtimezone) { + if ((string) $vtimezone->TZID === $tzid) { + foreach ($this->timezoneGuessers as $timezoneGuesser) { + $timezone = $timezoneGuesser->guess($vtimezone, $failIfUncertain); + if (!$timezone instanceof DateTimeZone) { + continue; + } + + return $timezone; + } + } + } + } + + if ($failIfUncertain) { + throw new InvalidArgumentException('We were unable to determine the correct PHP timezone for tzid: '.$tzid); + } + + // If we got all the way here, we default to whatever has been set as the PHP default timezone. + return new DateTimeZone(date_default_timezone_get()); + } + + public static function addTimezoneGuesser(string $key, TimezoneGuesser $guesser): void + { + self::getInstance()->addGuesser($key, $guesser); + } + + public static function addTimezoneFinder(string $key, TimezoneFinder $finder): void + { + self::getInstance()->addFinder($key, $finder); + } + + /** + * @param string $tzid + * @param false $failIfUncertain + * + * @return DateTimeZone + */ + public static function getTimeZone($tzid, Component $vcalendar = null, $failIfUncertain = false) + { + return self::getInstance()->findTimeZone($tzid, $vcalendar, $failIfUncertain); + } + + public static function clean(): void + { + self::$instance = null; + } + + // Keeping things for backwards compatibility + /** + * @var array|null + * + * @deprecated + */ public static $map = null; /** * List of microsoft exchange timezone ids. * * Source: http://msdn.microsoft.com/en-us/library/aa563018(loband).aspx + * + * @deprecated */ public static $microsoftExchangeMap = [ 0 => 'UTC', 31 => 'Africa/Casablanca', - // Insanely, id #2 is used for both Europe/Lisbon, and Europe/Sarajevo. // I'm not even kidding.. We handle this special case in the // getTimeZone method. @@ -104,134 +233,10 @@ class TimeZoneUtil ]; /** - * This method will try to find out the correct timezone for an iCalendar - * date-time value. - * - * You must pass the contents of the TZID parameter, as well as the full - * calendar. - * - * If the lookup fails, this method will return the default PHP timezone - * (as configured using date_default_timezone_set, or the date.timezone ini - * setting). - * - * Alternatively, if $failIfUncertain is set to true, it will throw an - * exception if we cannot accurately determine the timezone. - * - * @param string $tzid - * @param Sabre\VObject\Component $vcalendar - * - * @return \DateTimeZone - */ - public static function getTimeZone($tzid, Component $vcalendar = null, $failIfUncertain = false) - { - // First we will just see if the tzid is a support timezone identifier. - // - // The only exception is if the timezone starts with (. This is to - // handle cases where certain microsoft products generate timezone - // identifiers that for instance look like: - // - // (GMT+01.00) Sarajevo/Warsaw/Zagreb - // - // Since PHP 5.5.10, the first bit will be used as the timezone and - // this method will return just GMT+01:00. This is wrong, because it - // doesn't take DST into account. - if ('(' !== $tzid[0]) { - // PHP has a bug that logs PHP warnings even it shouldn't: - // https://bugs.php.net/bug.php?id=67881 - // - // That's why we're checking if we'll be able to successfully instantiate - // \DateTimeZone() before doing so. Otherwise we could simply instantiate - // and catch the exception. - $tzIdentifiers = \DateTimeZone::listIdentifiers(); - - try { - if ( - (in_array($tzid, $tzIdentifiers)) || - (preg_match('/^GMT(\+|-)([0-9]{4})$/', $tzid, $matches)) || - (in_array($tzid, self::getIdentifiersBC())) - ) { - return new \DateTimeZone($tzid); - } - } catch (\Exception $e) { - } - } - - self::loadTzMaps(); - - // Next, we check if the tzid is somewhere in our tzid map. - if (isset(self::$map[$tzid])) { - return new \DateTimeZone(self::$map[$tzid]); - } - - // Some Microsoft products prefix the offset first, so let's strip that off - // and see if it is our tzid map. We don't want to check for this first just - // in case there are overrides in our tzid map. - if (preg_match('/^\((UTC|GMT)(\+|\-)[\d]{2}\:[\d]{2}\) (.*)/', $tzid, $matches)) { - $tzidAlternate = $matches[3]; - if (isset(self::$map[$tzidAlternate])) { - return new \DateTimeZone(self::$map[$tzidAlternate]); - } - } - - // Maybe the author was hyper-lazy and just included an offset. We - // support it, but we aren't happy about it. - if (preg_match('/^GMT(\+|-)([0-9]{4})$/', $tzid, $matches)) { - // Note that the path in the source will never be taken from PHP 5.5.10 - // onwards. PHP 5.5.10 supports the "GMT+0100" style of format, so it - // already gets returned early in this function. Once we drop support - // for versions under PHP 5.5.10, this bit can be taken out of the - // source. - // @codeCoverageIgnoreStart - return new \DateTimeZone('Etc/GMT'.$matches[1].ltrim(substr($matches[2], 0, 2), '0')); - // @codeCoverageIgnoreEnd - } - - if ($vcalendar) { - // If that didn't work, we will scan VTIMEZONE objects - foreach ($vcalendar->select('VTIMEZONE') as $vtimezone) { - if ((string) $vtimezone->TZID === $tzid) { - // Some clients add 'X-LIC-LOCATION' with the olson name. - if (isset($vtimezone->{'X-LIC-LOCATION'})) { - $lic = (string) $vtimezone->{'X-LIC-LOCATION'}; - - // Libical generators may specify strings like - // "SystemV/EST5EDT". For those we must remove the - // SystemV part. - if ('SystemV/' === substr($lic, 0, 8)) { - $lic = substr($lic, 8); - } - - return self::getTimeZone($lic, null, $failIfUncertain); - } - // Microsoft may add a magic number, which we also have an - // answer for. - if (isset($vtimezone->{'X-MICROSOFT-CDO-TZID'})) { - $cdoId = (int) $vtimezone->{'X-MICROSOFT-CDO-TZID'}->getValue(); - - // 2 can mean both Europe/Lisbon and Europe/Sarajevo. - if (2 === $cdoId && false !== strpos((string) $vtimezone->TZID, 'Sarajevo')) { - return new \DateTimeZone('Europe/Sarajevo'); - } - - if (isset(self::$microsoftExchangeMap[$cdoId])) { - return new \DateTimeZone(self::$microsoftExchangeMap[$cdoId]); - } - } - } - } - } - - if ($failIfUncertain) { - throw new \InvalidArgumentException('We were unable to determine the correct PHP timezone for tzid: '.$tzid); - } - - // If we got all the way here, we default to UTC. - return new \DateTimeZone(date_default_timezone_get()); - } - - /** * This method will load in all the tz mapping information, if it's not yet * done. + * + * @deprecated */ public static function loadTzMaps() { @@ -257,6 +262,8 @@ class TimeZoneUtil * (See timezonedata/php-bc.php and timezonedata php-workaround.php) * * @return array + * + * @deprecated */ public static function getIdentifiersBC() { diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php new file mode 100644 index 000000000..990ac9692 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class FindFromOffset implements TimezoneFinder +{ + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone + { + // Maybe the author was hyper-lazy and just included an offset. We + // support it, but we aren't happy about it. + if (preg_match('/^GMT(\+|-)([0-9]{4})$/', $tzid, $matches)) { + // Note that the path in the source will never be taken from PHP 5.5.10 + // onwards. PHP 5.5.10 supports the "GMT+0100" style of format, so it + // already gets returned early in this function. Once we drop support + // for versions under PHP 5.5.10, this bit can be taken out of the + // source. + // @codeCoverageIgnoreStart + return new DateTimeZone('Etc/GMT'.$matches[1].ltrim(substr($matches[2], 0, 2), '0')); + // @codeCoverageIgnoreEnd + } + + return null; + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php new file mode 100644 index 000000000..d8c6d5d3b --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php @@ -0,0 +1,71 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Exception; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class FindFromTimezoneIdentifier implements TimezoneFinder +{ + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone + { + // First we will just see if the tzid is a support timezone identifier. + // + // The only exception is if the timezone starts with (. This is to + // handle cases where certain microsoft products generate timezone + // identifiers that for instance look like: + // + // (GMT+01.00) Sarajevo/Warsaw/Zagreb + // + // Since PHP 5.5.10, the first bit will be used as the timezone and + // this method will return just GMT+01:00. This is wrong, because it + // doesn't take DST into account + if (!isset($tzid[0])) { + return null; + } + if ('(' === $tzid[0]) { + return null; + } + // PHP has a bug that logs PHP warnings even it shouldn't: + // https://bugs.php.net/bug.php?id=67881 + // + // That's why we're checking if we'll be able to successfully instantiate + // \DateTimeZone() before doing so. Otherwise we could simply instantiate + // and catch the exception. + $tzIdentifiers = DateTimeZone::listIdentifiers(); + + try { + if ( + (in_array($tzid, $tzIdentifiers)) || + (preg_match('/^GMT(\+|-)([0-9]{4})$/', $tzid, $matches)) || + (in_array($tzid, $this->getIdentifiersBC())) + ) { + return new DateTimeZone($tzid); + } + } catch (Exception $e) { + } + + return null; + } + + /** + * This method returns an array of timezone identifiers, that are supported + * by DateTimeZone(), but not returned by DateTimeZone::listIdentifiers(). + * + * We're not using DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC) because: + * - It's not supported by some PHP versions as well as HHVM. + * - It also returns identifiers, that are invalid values for new DateTimeZone() on some PHP versions. + * (See timezonedata/php-bc.php and timezonedata php-workaround.php) + * + * @return array + */ + private function getIdentifiersBC() + { + return include __DIR__.'/../timezonedata/php-bc.php'; + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php new file mode 100644 index 000000000..b52ba6a19 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php @@ -0,0 +1,78 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class FindFromTimezoneMap implements TimezoneFinder +{ + private $map = []; + + private $patterns = [ + '/^\((UTC|GMT)(\+|\-)[\d]{2}\:[\d]{2}\) (.*)/', + '/^\((UTC|GMT)(\+|\-)[\d]{2}\.[\d]{2}\) (.*)/', + ]; + + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone + { + // Next, we check if the tzid is somewhere in our tzid map. + if ($this->hasTzInMap($tzid)) { + return new DateTimeZone($this->getTzFromMap($tzid)); + } + + // Some Microsoft products prefix the offset first, so let's strip that off + // and see if it is our tzid map. We don't want to check for this first just + // in case there are overrides in our tzid map. + foreach ($this->patterns as $pattern) { + if (!preg_match($pattern, $tzid, $matches)) { + continue; + } + $tzidAlternate = $matches[3]; + if ($this->hasTzInMap($tzidAlternate)) { + return new DateTimeZone($this->getTzFromMap($tzidAlternate)); + } + } + + return null; + } + + /** + * This method returns an array of timezone identifiers, that are supported + * by DateTimeZone(), but not returned by DateTimeZone::listIdentifiers(). + * + * We're not using DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC) because: + * - It's not supported by some PHP versions as well as HHVM. + * - It also returns identifiers, that are invalid values for new DateTimeZone() on some PHP versions. + * (See timezonedata/php-bc.php and timezonedata php-workaround.php) + * + * @return array + */ + private function getTzMaps() + { + if ([] === $this->map) { + $this->map = array_merge( + include __DIR__.'/../timezonedata/windowszones.php', + include __DIR__.'/../timezonedata/lotuszones.php', + include __DIR__.'/../timezonedata/exchangezones.php', + include __DIR__.'/../timezonedata/php-workaround.php' + ); + } + + return $this->map; + } + + private function getTzFromMap(string $tzid): string + { + return $this->getTzMaps()[$tzid]; + } + + private function hasTzInMap(string $tzid): bool + { + return isset($this->getTzMaps()[$tzid]); + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php new file mode 100644 index 000000000..f340a3962 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Sabre\VObject\Component\VTimeZone; +use Sabre\VObject\TimeZoneUtil; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class GuessFromLicEntry implements TimezoneGuesser +{ + public function guess(VTimeZone $vtimezone, bool $failIfUncertain = false): ?DateTimeZone + { + if (!isset($vtimezone->{'X-LIC-LOCATION'})) { + return null; + } + + $lic = (string) $vtimezone->{'X-LIC-LOCATION'}; + + // Libical generators may specify strings like + // "SystemV/EST5EDT". For those we must remove the + // SystemV part. + if ('SystemV/' === substr($lic, 0, 8)) { + $lic = substr($lic, 8); + } + + return TimeZoneUtil::getTimeZone($lic, null, $failIfUncertain); + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php new file mode 100644 index 000000000..b11ce1832 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php @@ -0,0 +1,119 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Sabre\VObject\Component\VTimeZone; + +class GuessFromMsTzId implements TimezoneGuesser +{ + /** + * List of microsoft exchange timezone ids. + * + * Source: http://msdn.microsoft.com/en-us/library/aa563018(loband).aspx + */ + public static $microsoftExchangeMap = [ + 0 => 'UTC', + 31 => 'Africa/Casablanca', + + // Insanely, id #2 is used for both Europe/Lisbon, and Europe/Sarajevo. + // I'm not even kidding.. We handle this special case in the + // getTimeZone method. + 2 => 'Europe/Lisbon', + 1 => 'Europe/London', + 4 => 'Europe/Berlin', + 6 => 'Europe/Prague', + 3 => 'Europe/Paris', + 69 => 'Africa/Luanda', // This was a best guess + 7 => 'Europe/Athens', + 5 => 'Europe/Bucharest', + 49 => 'Africa/Cairo', + 50 => 'Africa/Harare', + 59 => 'Europe/Helsinki', + 27 => 'Asia/Jerusalem', + 26 => 'Asia/Baghdad', + 74 => 'Asia/Kuwait', + 51 => 'Europe/Moscow', + 56 => 'Africa/Nairobi', + 25 => 'Asia/Tehran', + 24 => 'Asia/Muscat', // Best guess + 54 => 'Asia/Baku', + 48 => 'Asia/Kabul', + 58 => 'Asia/Yekaterinburg', + 47 => 'Asia/Karachi', + 23 => 'Asia/Calcutta', + 62 => 'Asia/Kathmandu', + 46 => 'Asia/Almaty', + 71 => 'Asia/Dhaka', + 66 => 'Asia/Colombo', + 61 => 'Asia/Rangoon', + 22 => 'Asia/Bangkok', + 64 => 'Asia/Krasnoyarsk', + 45 => 'Asia/Shanghai', + 63 => 'Asia/Irkutsk', + 21 => 'Asia/Singapore', + 73 => 'Australia/Perth', + 75 => 'Asia/Taipei', + 20 => 'Asia/Tokyo', + 72 => 'Asia/Seoul', + 70 => 'Asia/Yakutsk', + 19 => 'Australia/Adelaide', + 44 => 'Australia/Darwin', + 18 => 'Australia/Brisbane', + 76 => 'Australia/Sydney', + 43 => 'Pacific/Guam', + 42 => 'Australia/Hobart', + 68 => 'Asia/Vladivostok', + 41 => 'Asia/Magadan', + 17 => 'Pacific/Auckland', + 40 => 'Pacific/Fiji', + 67 => 'Pacific/Tongatapu', + 29 => 'Atlantic/Azores', + 53 => 'Atlantic/Cape_Verde', + 30 => 'America/Noronha', + 8 => 'America/Sao_Paulo', // Best guess + 32 => 'America/Argentina/Buenos_Aires', + 60 => 'America/Godthab', + 28 => 'America/St_Johns', + 9 => 'America/Halifax', + 33 => 'America/Caracas', + 65 => 'America/Santiago', + 35 => 'America/Bogota', + 10 => 'America/New_York', + 34 => 'America/Indiana/Indianapolis', + 55 => 'America/Guatemala', + 11 => 'America/Chicago', + 37 => 'America/Mexico_City', + 36 => 'America/Edmonton', + 38 => 'America/Phoenix', + 12 => 'America/Denver', // Best guess + 13 => 'America/Los_Angeles', // Best guess + 14 => 'America/Anchorage', + 15 => 'Pacific/Honolulu', + 16 => 'Pacific/Midway', + 39 => 'Pacific/Kwajalein', + ]; + + public function guess(VTimeZone $vtimezone, bool $throwIfUnsure = false): ?DateTimeZone + { + // Microsoft may add a magic number, which we also have an + // answer for. + if (!isset($vtimezone->{'X-MICROSOFT-CDO-TZID'})) { + return null; + } + $cdoId = (int) $vtimezone->{'X-MICROSOFT-CDO-TZID'}->getValue(); + + // 2 can mean both Europe/Lisbon and Europe/Sarajevo. + if (2 === $cdoId && false !== strpos((string) $vtimezone->TZID, 'Sarajevo')) { + return new DateTimeZone('Europe/Sarajevo'); + } + + if (isset(self::$microsoftExchangeMap[$cdoId])) { + return new DateTimeZone(self::$microsoftExchangeMap[$cdoId]); + } + + return null; + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php new file mode 100644 index 000000000..5aa880a1c --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php @@ -0,0 +1,10 @@ +<?php + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; + +interface TimezoneFinder +{ + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone; +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php new file mode 100644 index 000000000..5e193bb52 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php @@ -0,0 +1,11 @@ +<?php + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Sabre\VObject\Component\VTimeZone; + +interface TimezoneGuesser +{ + public function guess(VTimeZone $vtimezone, bool $failIfUncertain = false): ?DateTimeZone; +} diff --git a/vendor/sabre/vobject/lib/Version.php b/vendor/sabre/vobject/lib/Version.php index 63452400f..64938bf0b 100644 --- a/vendor/sabre/vobject/lib/Version.php +++ b/vendor/sabre/vobject/lib/Version.php @@ -14,5 +14,5 @@ class Version /** * Full version number. */ - const VERSION = '4.3.5'; + const VERSION = '4.4.1'; } diff --git a/vendor/sabre/xml/.github/workflows/ci.yml b/vendor/sabre/xml/.github/workflows/ci.yml new file mode 100644 index 000000000..3473cd2de --- /dev/null +++ b/vendor/sabre/xml/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/xml/.gitignore b/vendor/sabre/xml/.gitignore deleted file mode 100644 index 9715e9028..000000000 --- a/vendor/sabre/xml/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Composer -vendor -composer.lock - -# Tests -tests/cov -tests/.phpunit.result.cache -.php_cs.cache diff --git a/vendor/sabre/xml/.php_cs.dist b/vendor/sabre/xml/.php_cs.dist deleted file mode 100644 index c5c78a971..000000000 --- a/vendor/sabre/xml/.php_cs.dist +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -$config = PhpCsFixer\Config::create(); -$config->getFinder() - ->exclude('vendor') - ->in(__DIR__); -$config->setRules([ - '@PSR1' => true, - '@Symfony' => true -]); - -return $config;
\ No newline at end of file diff --git a/vendor/sabre/xml/.travis.yml b/vendor/sabre/xml/.travis.yml deleted file mode 100644 index fc4a98d8e..000000000 --- a/vendor/sabre/xml/.travis.yml +++ /dev/null @@ -1,49 +0,0 @@ -language: php -sudo: required -php: - - 7.1 - - 7.2 - - 7.3 - - 7.4 - -env: - global: - - RUN_PHPCSFIXER="TRUE" - - RUN_PHPUNIT="TRUE" - - RUN_PHPSTAN="FALSE" - matrix: - - PREFER_LOWEST="" REPORT_COVERAGE="TRUE" WITH_COVERAGE="--coverage-clover=coverage.xml" - - PREFER_LOWEST="--prefer-lowest" REPORT_COVERAGE="FALSE" WITH_COVERAGE="" - -matrix: - include: - - name: 'PHP8' - dist: focal - php: nightly - env: - - RUN_PHPCSFIXER="FALSE" - - REPORT_COVERAGE="FALSE" - - name: 'PHPStan' - php: 7.4 - env: - - RUN_PHPCSFIXER="FALSE" - - RUN_PHPUNIT="FALSE" - - RUN_PHPSTAN="TRUE" - - REPORT_COVERAGE="FALSE" - fast_finish: true - -cache: - directories: - - $HOME/.composer/cache - -before_script: - - if [ $RUN_PHPCSFIXER == "FALSE" ]; then composer remove --dev friendsofphp/php-cs-fixer; fi - - composer update $PREFER_LOWEST - -script: - - if [ $RUN_PHPCSFIXER == "TRUE" ]; then php vendor/bin/php-cs-fixer fix --dry-run --diff; fi - - if [ $RUN_PHPUNIT == "TRUE" ]; then php vendor/bin/phpunit --configuration tests/phpunit.xml $WITH_COVERAGE; fi - - if [ $RUN_PHPSTAN == "TRUE" ]; then composer phpstan; fi - -after_success: - - if [ $REPORT_COVERAGE == "TRUE" ]; then bash <(curl -s https://codecov.io/bash); fi diff --git a/vendor/sabre/xml/CHANGELOG.md b/vendor/sabre/xml/CHANGELOG.md deleted file mode 100644 index cdd21fe51..000000000 --- a/vendor/sabre/xml/CHANGELOG.md +++ /dev/null @@ -1,287 +0,0 @@ -ChangeLog -========= - -2.2.3 (2020-10-03) ------------------- -* #191: add changelog and version bump that was missed in 2.2.2 - -2.2.2 (2020-10-03) ------------------- -* #190: adjust libxml_disable_entity_loader calls ready for PHP 8.0 (@phil-davis) - -2.2.1 (2020-05-11) ------------------- - -* #183: fixed warning 'xml cannot be empty while reading', which might lead to a infinite-loop (@mrow4a) -* #179, #178, #177 #176: several build/continous integration related improvements (@phil-davis) - -2.2.0 (2020-01-31) ------------------- - -* #171: Added Support for PHP 7.4, dropped Support for PHP 7.0 (@staabm, @phil-davis) -* #174: Update testsuite to phpunit8 (@phil-davis) -* Added phpstan coverage (@phil-davis) -* #144: Added a new `functionCaller` deserializer function for executing a callable when reading a XML -element (@vsouz4) - - -2.1.3 (2019-08-14) ------------------- - -* #166: Throw exception when empty inputs found - - -2.1.2 (2019-01-09) ------------------- - -* #161: Prevent infinite loop on empty xml elements - - -2.1.1 (2018-10-09) ------------------- - -* #149: Properly detect xml parse errors in `parseCurrentElement()` edge-cases - - -2.1.0 (2018-02-08) ------------------- - -* #112: Added a `mixedContent` deserializer function, which might be useful - if you're parsing HTML-like documents with elements that contain both text - and other elements as siblings. (@staabm). - - -2.0.0 (2016-11-15) ------------------- - -* Now requires PHP 7. -* Uses typehints everywhere. -* Fixed some minor strict typing-related issues. -* Removed workaround for PHP bug [64230](https://bugs.php.net/bug.php?id=64230). - - -1.5.0 (2016-10-09) ------------------- - -* Now requires PHP 5.5. -* Using `finally` to always roll back the context stack when serializing. -* #94: Fixed an infinite loop condition when reading some invalid XML - documents. - - -1.4.2 (2016-05-19) ------------------- - -* The `contextStack` in the Reader object is now correctly rolled back in - error conditions (@staabm). -* repeatingElements deserializer now still parses if a bare element name - without clark notation was given. -* `$elementMap` in the Reader now also supports bare element names. -* `Service::expect()` can now also work with bare element names. - - -1.4.1 (2016-03-12) ------------------ - -* Parsing clark-notation is now cached. This can speed up parsing large - documents with lots of repeating elements a fair bit. (@icewind1991). - - -1.4.0 (2016-02-14) ------------------- - -* Any array thrown into the serializer with numeric keys is now simply - traversed and each individual item is serialized. This fixes an issue - related to serializing value objects with array children. -* When serializing value objects, properties that have a null value or an - empty array are now skipped. We believe this to be the saner default, but - does constitute a BC break for those depending on this. -* Serializing array properties in value objects was broken. - - -1.3.0 (2015-12-29) ------------------- - -* The `Service` class adds a new `mapValueObject` method which provides basic - capabilities to map between ValueObjects and XML. -* #61: You can now specify serializers for specific classes, allowing you - separate the object you want to serialize from the serializer. This uses the - `$classMap` property which is defined on both the `Service` and `Writer`. -* It's now possible to pass an array of possible root elements to - `Sabre\Xml\Service::expect()`. -* Moved some parsing logic to `Reader::getDeserializerForElementName()`, - so people with more advanced use-cases can implement their own logic there. -* #63: When serializing elements using arrays, the `value` key in the array is - now optional. -* #62: Added a `keyValue` deserializer function. This can be used instead of - the `Element\KeyValue` class and is a lot more flexible. (@staabm) -* Also added an `enum` deserializer function to replace - `Element\Elements`. -* Using an empty string for a namespace prefix now has the same effect as - `null`. - - -1.2.0 (2015-08-30) ------------------- - -* #53: Added `parseGetElements`, a function like `parseInnerTree`, except - that it always returns an array of elements, or an empty array. - - -1.1.0 (2015-06-29) ------------------- - -* #44, #45: Catching broken and invalid XML better and throwing - `Sabre\Xml\LibXMLException` whenever we encounter errors. (@stefanmajoor, - @DaanBiesterbos) - - -1.0.0 (2015-05-25) ------------------- - -* No functional changes since 0.4.3. Marking it as 1.0.0 as a promise for - API stability. -* Using php-cs-fixer for automated CS enforcement. - - -0.4.3 (2015-04-01) ------------------ - -* Minor tweaks for the public release. - - -0.4.2 (2015-03-20) ------------------- - -* Removed `constants.php` again. They messed with PHPUnit and don't really - provide a great benefit. -* #41: Correctly handle self-closing xml elements. - - -0.4.1 (2015-03-19) ------------------- - -* #40: An element with an empty namespace (xmlns="") is not allowed to have a - prefix. This is now fixed. - - -0.4.0 (2015-03-18) ------------------- - -* Added `Sabre\Xml\Service`. This is intended as a simple way to centrally - configure xml applications and easily parse/write things from there. #35, #38. -* Renamed 'baseUri' to 'contextUri' everywhere. -* #36: Added a few convenience constants to `lib/constants.php`. -* `Sabre\Xml\Util::parseClarkNotation` is now in the `Sabre\Xml\Service` class. - - -0.3.1 (2015-02-08) ------------------- - -* Added `XmlDeserializable` to match `XmlSerializable`. - - -0.3.0 (2015-02-06) ------------------- - -* Added `$elementMap` argument to parseInnerTree, for quickly overriding - parsing rules within an element. - - -0.2.2 (2015-02-05) ------------------- - -* Now depends on sabre/uri 1.0. - - -0.2.1 (2014-12-17) ------------------- - -* LibXMLException now inherits from ParseException, so it's easy for users to - catch any exception thrown by the parser. - - -0.2.0 (2014-12-05) ------------------- - -* Major BC Break: method names for the Element interface have been renamed - from `serializeXml` and `deserializeXml` to `xmlSerialize` and - `xmlDeserialize`. This is so that it matches PHP's `JsonSerializable` - interface. -* #25: Added `XmlSerializable` to allow people to write serializers without - having to implement a deserializer in the same class. -* #26: Renamed the `Sabre\XML` namespace to `Sabre\Xml`. Due to composer magic - and the fact that PHP namespace are case-insensitive, this should not affect - anyone, unless you are doing exact string matches on class names. -* #23: It's not possible to automatically extract or serialize Xml fragments - from documents using `Sabre\Xml\Element\XmlFragment`. - - -0.1.0 (2014-11-24) ------------------- - -* #16: Added ability to override `elementMap`, `namespaceMap` and `baseUri` for - a fragment of a document during reading an writing using `pushContext` and - `popContext`. -* Removed: `Writer::$context` and `Reader::$context`. -* #15: Added `Reader::$baseUri` to match `Writer::$baseUri`. -* #20: Allow callbacks to be used instead of `Element` classes in the `Reader`. -* #25: Added `readText` to quickly grab all text from a node and advance the - reader to the next node. -* #15: Added `Sabre\XML\Element\Uri`. - - -0.0.6 (2014-09-26) ------------------- - -* Added: `CData` element. -* #13: Better support for xml with no namespaces. (@kalmas) -* Switched to PSR-4 directory structure. - - -0.0.5 (2013-03-27) ------------------- - -* Added: baseUri property to the Writer class. -* Added: The writeElement method can now write complex elements. -* Added: Throwing exception when invalid objects are written. - - -0.0.4 (2013-03-14) ------------------- - -* Fixed: The KeyValue parser was skipping over elements when there was no - whitespace between them. -* Fixed: Clearing libxml errors after parsing. -* Added: Support for CDATA. -* Added: Context properties. - - -0.0.3 (2013-02-22) ------------------- - -* Changed: Reader::parse returns an array with 1 level less depth. -* Added: A LibXMLException is now thrown if the XMLReader comes across an error. -* Fixed: Both the Elements and KeyValue parsers had severe issues with - nesting. -* Fixed: The reader now detects when the end of the document is hit before it - should (because we're still parsing an element). - - -0.0.2 (2013-02-17) ------------------- - -* Added: Elements parser. -* Added: KeyValue parser. -* Change: Reader::parseSubTree is now named parseInnerTree, and returns either - a string (in case of a text-node), or an array (in case there were child - elements). -* Added: Reader::parseCurrentElement is now public. - - -0.0.1 (2013-02-07) ------------------- - -* First alpha release - -Project started: 2012-11-13. First experiments in June 2009. diff --git a/vendor/sabre/xml/composer.json b/vendor/sabre/xml/composer.json index b54cf195b..4524cf59b 100644 --- a/vendor/sabre/xml/composer.json +++ b/vendor/sabre/xml/composer.json @@ -44,7 +44,7 @@ } }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0" }, diff --git a/vendor/sabre/xml/lib/ContextStackTrait.php b/vendor/sabre/xml/lib/ContextStackTrait.php index 757088847..4e15bd414 100644 --- a/vendor/sabre/xml/lib/ContextStackTrait.php +++ b/vendor/sabre/xml/lib/ContextStackTrait.php @@ -10,7 +10,7 @@ namespace Sabre\Xml; * The Context maintains information about a document during either reading or * writing. * - * During this process, it may be neccesary to override this context + * During this process, it may be necessary to override this context * information. * * This trait allows easy access to the context, and allows the end-user to diff --git a/vendor/sabre/xml/lib/Element/Base.php b/vendor/sabre/xml/lib/Element/Base.php index a1ce7ea5a..8a93191b1 100644 --- a/vendor/sabre/xml/lib/Element/Base.php +++ b/vendor/sabre/xml/lib/Element/Base.php @@ -35,7 +35,7 @@ class Base implements Xml\Element } /** - * The xmlSerialize metod is called during xml writing. + * The xmlSerialize method is called during xml writing. * * Use the $writer argument to write its own xml serialization. * @@ -58,7 +58,7 @@ class Base implements Xml\Element /** * The deserialize method is called during xml parsing. * - * This method is called statictly, this is because in theory this method + * This method is called statically, this is because in theory this method * may be used as a type of constructor, or factory method. * * Often you want to return an instance of the current class, but you are diff --git a/vendor/sabre/xml/lib/Element/Cdata.php b/vendor/sabre/xml/lib/Element/Cdata.php index 61d3213ff..1367343ff 100644 --- a/vendor/sabre/xml/lib/Element/Cdata.php +++ b/vendor/sabre/xml/lib/Element/Cdata.php @@ -12,7 +12,7 @@ use Sabre\Xml; * This element allows you to easily inject CDATA. * * Note that we strongly recommend avoiding CDATA nodes, unless you definitely - * know what you're doing, or you're working with unchangable systems that + * know what you're doing, or you're working with unchangeable systems that * require CDATA. * * @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/). @@ -37,12 +37,12 @@ class Cdata implements Xml\XmlSerializable } /** - * The xmlSerialize metod is called during xml writing. + * The xmlSerialize method is called during xml writing. * * Use the $writer argument to write its own xml serialization. * * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered + * implementing XmlSerializable should only ever write what's considered * its 'inner xml'. * * The parent of the current element is responsible for writing a diff --git a/vendor/sabre/xml/lib/Element/Elements.php b/vendor/sabre/xml/lib/Element/Elements.php index e51179833..fecce4c75 100644 --- a/vendor/sabre/xml/lib/Element/Elements.php +++ b/vendor/sabre/xml/lib/Element/Elements.php @@ -53,12 +53,12 @@ class Elements implements Xml\Element } /** - * The xmlSerialize metod is called during xml writing. + * The xmlSerialize method is called during xml writing. * * Use the $writer argument to write its own xml serialization. * * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered + * implementing XmlSerializable should only ever write what's considered * its 'inner xml'. * * The parent of the current element is responsible for writing a @@ -76,7 +76,7 @@ class Elements implements Xml\Element /** * The deserialize method is called during xml parsing. * - * This method is called statictly, this is because in theory this method + * This method is called statically, this is because in theory this method * may be used as a type of constructor, or factory method. * * Often you want to return an instance of the current class, but you are diff --git a/vendor/sabre/xml/lib/Element/KeyValue.php b/vendor/sabre/xml/lib/Element/KeyValue.php index dacee000a..17448880d 100644 --- a/vendor/sabre/xml/lib/Element/KeyValue.php +++ b/vendor/sabre/xml/lib/Element/KeyValue.php @@ -53,12 +53,12 @@ class KeyValue implements Xml\Element } /** - * The xmlSerialize metod is called during xml writing. + * The xmlSerialize method is called during xml writing. * * Use the $writer argument to write its own xml serialization. * * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered + * implementing XmlSerializable should only ever write what's considered * its 'inner xml'. * * The parent of the current element is responsible for writing a @@ -76,7 +76,7 @@ class KeyValue implements Xml\Element /** * The deserialize method is called during xml parsing. * - * This method is called staticly, this is because in theory this method + * This method is called statically, this is because in theory this method * may be used as a type of constructor, or factory method. * * Often you want to return an instance of the current class, but you are diff --git a/vendor/sabre/xml/lib/Element/Uri.php b/vendor/sabre/xml/lib/Element/Uri.php index 2644fbcd7..336212a53 100644 --- a/vendor/sabre/xml/lib/Element/Uri.php +++ b/vendor/sabre/xml/lib/Element/Uri.php @@ -42,12 +42,12 @@ class Uri implements Xml\Element } /** - * The xmlSerialize metod is called during xml writing. + * The xmlSerialize method is called during xml writing. * * Use the $writer argument to write its own xml serialization. * * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered + * implementing XmlSerializable should only ever write what's considered * its 'inner xml'. * * The parent of the current element is responsible for writing a diff --git a/vendor/sabre/xml/lib/Element/XmlFragment.php b/vendor/sabre/xml/lib/Element/XmlFragment.php index 12109e5c9..bf110eaee 100644 --- a/vendor/sabre/xml/lib/Element/XmlFragment.php +++ b/vendor/sabre/xml/lib/Element/XmlFragment.php @@ -48,12 +48,12 @@ class XmlFragment implements Element } /** - * The xmlSerialize metod is called during xml writing. + * The xmlSerialize method is called during xml writing. * * Use the $writer argument to write its own xml serialization. * * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered + * implementing XmlSerializable should only ever write what's considered * its 'inner xml'. * * The parent of the current element is responsible for writing a @@ -121,7 +121,7 @@ XML; /** * The deserialize method is called during xml parsing. * - * This method is called statictly, this is because in theory this method + * This method is called statically, this is because in theory this method * may be used as a type of constructor, or factory method. * * Often you want to return an instance of the current class, but you are diff --git a/vendor/sabre/xml/lib/LibXMLException.php b/vendor/sabre/xml/lib/LibXMLException.php index ae136f57b..fb074f97d 100644 --- a/vendor/sabre/xml/lib/LibXMLException.php +++ b/vendor/sabre/xml/lib/LibXMLException.php @@ -8,7 +8,7 @@ use LibXMLError; use Throwable; /** - * This exception is thrown when the Readers runs into a parsing error. + * This exception is thrown when the Reader runs into a parsing error. * * This exception effectively wraps 1 or more LibXMLError objects. * diff --git a/vendor/sabre/xml/lib/ParseException.php b/vendor/sabre/xml/lib/ParseException.php index 5980b5fc4..e237b8732 100644 --- a/vendor/sabre/xml/lib/ParseException.php +++ b/vendor/sabre/xml/lib/ParseException.php @@ -4,8 +4,7 @@ declare(strict_types=1); namespace Sabre\Xml; -use - Exception; +use Exception; /** * This is a base exception for any exception related to parsing xml files. diff --git a/vendor/sabre/xml/lib/Reader.php b/vendor/sabre/xml/lib/Reader.php index 368e8ffd2..7871a74f5 100644 --- a/vendor/sabre/xml/lib/Reader.php +++ b/vendor/sabre/xml/lib/Reader.php @@ -56,7 +56,7 @@ class Reader extends XMLReader public function parse(): array { $previousEntityState = null; - $shouldCallLibxmlDisableEntityLoader = (\PHP_VERSION_ID < 80000); + $shouldCallLibxmlDisableEntityLoader = (\LIBXML_VERSION < 20900); if ($shouldCallLibxmlDisableEntityLoader) { $previousEntityState = libxml_disable_entity_loader(true); } @@ -92,11 +92,11 @@ class Reader extends XMLReader /** * parseGetElements parses everything in the current sub-tree, - * and returns a an array of elements. + * and returns an array of elements. * * Each element has a 'name', 'value' and 'attributes' key. * - * If the the element didn't contain sub-elements, an empty array is always + * If the element didn't contain sub-elements, an empty array is always * returned. If there was any text inside the element, it will be * discarded. * @@ -249,7 +249,7 @@ class Reader extends XMLReader * * If the attributes are part of the same namespace, they will simply be * short keys. If they are defined on a different namespace, the attribute - * name will be retured in clark-notation. + * name will be returned in clark-notation. */ public function parseAttributes(): array { @@ -275,7 +275,7 @@ class Reader extends XMLReader /** * Returns the function that should be used to parse the element identified - * by it's clark-notation name. + * by its clark-notation name. */ public function getDeserializerForElementName(string $name): callable { diff --git a/vendor/sabre/xml/lib/Service.php b/vendor/sabre/xml/lib/Service.php index 596c93cc4..a8e34d254 100644 --- a/vendor/sabre/xml/lib/Service.php +++ b/vendor/sabre/xml/lib/Service.php @@ -7,7 +7,7 @@ namespace Sabre\Xml; /** * XML parsing and writing service. * - * You are encouraged to make a instance of this for your application and + * You are encouraged to make an instance of this for your application and * potentially extend it, as a central API point for dealing with xml and * configuring the reader and writer. * @@ -117,7 +117,7 @@ class Service $input = (string) stream_get_contents($input); } - // If input is empty, then its safe to throw exception + // If input is empty, then it's safe to throw an exception if (empty($input)) { throw new ParseException('The input element to parse is empty. Do not attempt to parse'); } @@ -161,7 +161,7 @@ class Service $input = (string) stream_get_contents($input); } - // If input is empty, then its safe to throw exception + // If input is empty, then it's safe to throw an exception if (empty($input)) { throw new ParseException('The input element to parse is empty. Do not attempt to parse'); } @@ -217,9 +217,9 @@ class Service } /** - * Map an xml element to a PHP class. + * Map an XML element to a PHP class. * - * Calling this function will automatically setup the Reader and Writer + * Calling this function will automatically set up the Reader and Writer * classes to turn a specific XML element to a PHP class. * * For example, given a class such as : diff --git a/vendor/sabre/xml/lib/Version.php b/vendor/sabre/xml/lib/Version.php index d4e465de9..1144bf085 100644 --- a/vendor/sabre/xml/lib/Version.php +++ b/vendor/sabre/xml/lib/Version.php @@ -16,5 +16,5 @@ class Version /** * Full version number. */ - const VERSION = '2.2.3'; + const VERSION = '2.2.5'; } diff --git a/vendor/sabre/xml/lib/XmlSerializable.php b/vendor/sabre/xml/lib/XmlSerializable.php index b22f8d5e8..2affc33f1 100644 --- a/vendor/sabre/xml/lib/XmlSerializable.php +++ b/vendor/sabre/xml/lib/XmlSerializable.php @@ -20,7 +20,7 @@ interface XmlSerializable * Use the $writer argument to write its own xml serialization. * * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered + * implementing XmlSerializable should only ever write what's considered * its 'inner xml'. * * The parent of the current element is responsible for writing a diff --git a/vendor/sabre/xml/phpstan.neon b/vendor/sabre/xml/phpstan.neon deleted file mode 100644 index d6dd4e577..000000000 --- a/vendor/sabre/xml/phpstan.neon +++ /dev/null @@ -1,6 +0,0 @@ -parameters: - level: 5 - ignoreErrors: - - - message: '!Parameter #3 \$uri of method XMLWriter::startElementNs\(\) expects string, null given.!' - path: lib/Writer.php diff --git a/vendor/simplepie/simplepie/.travis.yml b/vendor/simplepie/simplepie/.travis.yml deleted file mode 100644 index e44352dbb..000000000 --- a/vendor/simplepie/simplepie/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -language: php - -php: - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - 7.3 - - 7.4 - - nightly - -matrix: - allow_failures: - # Allow failures for unstable builds. - - php: "nightly" - -before_script: - - | - if [[ $TRAVIS_PHP_VERSION == "nightly" ]]; then - travis_retry composer install --no-interaction --ignore-platform-reqs - else - travis_retry composer install --no-interaction - fi - -script: - - composer test - -branches: - except: - - one-dot-two diff --git a/vendor/simplepie/simplepie/CHANGELOG.md b/vendor/simplepie/simplepie/CHANGELOG.md index 60395f0f7..c9efdb476 100644 --- a/vendor/simplepie/simplepie/CHANGELOG.md +++ b/vendor/simplepie/simplepie/CHANGELOG.md @@ -1,10 +1,55 @@ -## 1.5.5 (May 1, 2020) +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased](https://github.com/simplepie/simplepie/compare/1.5.7...master) + +## [1.5.7](https://github.com/simplepie/simplepie/compare/1.5.6...1.5.7) - 2021-12-19 + +* Fix PHP8 crash due to insufficient isset test by @Alkarex in [#670](https://github.com/simplepie/simplepie/pull/670) +* gitignore tests by @Alkarex in [#671](https://github.com/simplepie/simplepie/pull/671) +* Reduce memory when parsing large feeds by @Alkarex in [#672](https://github.com/simplepie/simplepie/pull/672) +* PHP8 catch ValueError for loadHTML() by @Alkarex in [#673](https://github.com/simplepie/simplepie/pull/673) +* Provide access to HTTP status code by @Alkarex in [#674](https://github.com/simplepie/simplepie/pull/674) +* Fix wrong type hint by @Alkarex in [#678](https://github.com/simplepie/simplepie/pull/678) +* Force HTTPS for selected domains by @Alkarex in [#676](https://github.com/simplepie/simplepie/pull/676) +* Prevent cache polution by @Alkarex in [#675](https://github.com/simplepie/simplepie/pull/675) +* Fix typo in comment by @Alkarex in [#680](https://github.com/simplepie/simplepie/pull/680) +* Remove HTTP credentials in HTTP Referer by @Alkarex in [#681](https://github.com/simplepie/simplepie/pull/681) +* CI: switch to GH Actions by @jrfnl in [#688](https://github.com/simplepie/simplepie/pull/688) +* PHP 8.1: fix "passing null to non-nullable" deprecation notice by @jrfnl in [#689](https://github.com/simplepie/simplepie/pull/689) +* Tests: PHPUnit cross-version compatibility by @jrfnl in [#690](https://github.com/simplepie/simplepie/pull/690) +* Tests: use strict assertions by @jrfnl in [#692](https://github.com/simplepie/simplepie/pull/692) +* CacheTest: handle different exceptions PHP cross-version by @jrfnl in [#691](https://github.com/simplepie/simplepie/pull/691) +* GH Actions: don't allow builds to fail on PHP 8.0 or 8.1 by @jrfnl in [#693](https://github.com/simplepie/simplepie/pull/693) +* Tests: use the correct parameter order by @jrfnl in [#694](https://github.com/simplepie/simplepie/pull/694) +* PHPUnit: update configuration by @jrfnl in [#696](https://github.com/simplepie/simplepie/pull/696) +* fix: better deal with proxy returning proxy headers (in response to cURL's Proxy-Connection header) by @shunf4 in [#698](https://github.com/simplepie/simplepie/pull/698) +* Handle multiple Link headers by @voegelas in [#700](https://github.com/simplepie/simplepie/pull/700) +* PHP 8.2: explicitly declare properties by @jrfnl in [#705](https://github.com/simplepie/simplepie/pull/705) +* New Contributor: @shunf4 made their first contribution in [#698](https://github.com/simplepie/simplepie/pull/698) +* New Contributor: @voegelas made their first contribution in [#700](https://github.com/simplepie/simplepie/pull/700) + +## [1.5.6](https://github.com/simplepie/simplepie/compare/1.5.5...1.5.6) - 2020-10-14 + +* PHP 8.0: prevent ValueError for invalid encoding [#657](https://github.com/simplepie/simplepie/pull/657) +* Travis: test against more recent PHP versions [#653](https://github.com/simplepie/simplepie/pull/653) +* PHP 8.0: handle removal of get_magic_quotes_gpc() [#654](https://github.com/simplepie/simplepie/pull/654) +* PHP 7.4/8.0: curly brace array access deprecated & removed [#655](https://github.com/simplepie/simplepie/pull/655) +* PHP 8.0: required parameters are no longer allowed after optional parameters [#656](https://github.com/simplepie/simplepie/pull/656) +* Fix permanent_url for HTTP 301 [#660](https://github.com/simplepie/simplepie/pull/660) +* Fix typo in MIME type in Content_Type_Sniffer [#661](https://github.com/simplepie/simplepie/pull/661) + +## [1.5.5](https://github.com/simplepie/simplepie/compare/1.5.4...1.5.5) - 2020-05-01 * Ensure that feeds retrieved with `force_feed` do not share the same cache as those retrieved without. [#643](https://github.com/simplepie/simplepie/pull/643) * Removed references to removed PHP directives and some PHP < 5.6 checks. [#645](https://github.com/simplepie/simplepie/pull/645) * Corrected incorrect alumni name. [#638](https://github.com/simplepie/simplepie/pull/638) -## 1.5.4 (December 17, 2019) +## [1.5.4](https://github.com/simplepie/simplepie/compare/1.5.3...1.5.4) - 2019-12-17 * PHP 5.6 or newer is now required. [#625](https://github.com/simplepie/simplepie/pull/625) * Fixed invalid docblock parameter types [#633](https://github.com/simplepie/simplepie/pull/633) @@ -12,7 +57,7 @@ * PHP 7.4 support: Fixed instances of accessing array offset on null type values. [#628](https://github.com/simplepie/simplepie/pull/628) * Return an effective feed URL when asking for non-permanent `subscribe_url`. [#627](https://github.com/simplepie/simplepie/pull/627) -## 1.5.3 (September 22, 2019) +## [1.5.3](https://github.com/simplepie/simplepie/compare/1.5.2...1.5.3) - 2019-09-22 * Replaced `pow()` call with `**` operator (micro performance optimization). [#622](https://github.com/simplepie/simplepie/pull/622) * Match links containing `feed` in the Locator class. [#621](https://github.com/simplepie/simplepie/pull/621) @@ -20,7 +65,7 @@ * Added support for Russian dates. [#607](https://github.com/simplepie/simplepie/pull/607) * Preemptively changed `is_writeable()` calls to `is_writable()` in case the former is deprecated in PHP. [#604](https://github.com/simplepie/simplepie/pull/604) -## 1.5.2 (August 2, 2018) +## [1.5.2](https://github.com/simplepie/simplepie/compare/1.5.1...1.5.2) - 2018-08-02 * Added support for PHPUnit 6. [#565](https://github.com/simplepie/simplepie/pull/565) * Added PHP module requirements to Composer. [#590](https://github.com/simplepie/simplepie/pull/590) @@ -35,7 +80,7 @@ * Fixed a bug where URL fragments are included when `SimplePie_File` normalizes URLs when really old versions of cURL are used. [#564](https://github.com/simplepie/simplepie/pull/564) * Updated `SimplePie_Locator` to respect cURL options specified. [#561](https://github.com/simplepie/simplepie/pull/561) -## 1.5.1 (November 17, 2017) +## [1.5.1](https://github.com/simplepie/simplepie/compare/1.5...1.5.1) - 2017-11-17 * Fixed photos so they are not added if the URL is empty. [#530](https://github.com/simplepie/simplepie/pull/530) * Fixed issues with retrieving feeds from behind a proxy. [#512](https://github.com/simplepie/simplepie/pull/512)/[#548](https://github.com/simplepie/simplepie/pull/548) @@ -48,14 +93,14 @@ * Update the registry if the Sanitize class has been changed. [#532](https://github.com/simplepie/simplepie/pull/532) * Changed the sanitization type for author and category back to text from HTML. [#531](https://github.com/simplepie/simplepie/pull/531) -## 1.5 (April 17, 2017) +## [1.5](https://github.com/simplepie/simplepie/compare/1.4.3...1.5) - 2017-04-17 * Introduced `SimplePie_Category->get_type()` for retrieving category type. [#492](https://github.com/simplepie/simplepie/pull/492) * Added `$enable_exceptions` to the class property declarations for `SimplePie` class. [#504](https://github.com/simplepie/simplepie/pull/504) * Titles are now parsed for ATOM10 enclosure links. [#507](https://github.com/simplepie/simplepie/pull/507) * `$item->get_id()` can now be forced to return the supplied ID instead of generating a new one. [#509](https://github.com/simplepie/simplepie/pull/509) -## 1.4.3 (November 26, 2016) +## [1.4.3](https://github.com/simplepie/simplepie/compare/1.4.2...1.4.3) - 2016-11-26 * Removed support for PHP 5.2. [#469](https://github.com/simplepie/simplepie/pull/469) * Added support for the PHP `UConverter` class. [#485](https://github.com/simplepie/simplepie/pull/485) @@ -76,18 +121,18 @@ * Fixed misspelled occurrences of "separated". [#459](https://github.com/simplepie/simplepie/pull/459) * Improvements to the compatibility test and error messages. [#488](https://github.com/simplepie/simplepie/pull/488) -## 1.4.2 (June 14, 2016) +## [1.4.2](https://github.com/simplepie/simplepie/compare/1.4.1...1.4.2) - 2016-06-14 * Fixed a bug with IRI parsing. * More cleanly separates discovery of microformats and parsing when php-mf2 is not present. -## 1.4.1 (June 2, 2016) +## [1.4.1](https://github.com/simplepie/simplepie/compare/1.4.0...1.4.1) - 2016-06-02 * Fixed inconsistent hash results in `SimplePie_Item->get_id()`. * Leading and trailing whitespace is now trimmed from XML feed content to prevent errors. [#445](https://github.com/simplepie/simplepie/pull/445) * Improved support for microformat feeds. -## 1.4.0 (April 25, 2016) +## [1.4.0](https://github.com/simplepie/simplepie/compare/1.4-beta...1.4.0) - 2016-04-25 * Dropped support for PHP 5.2. [#348](https://github.com/simplepie/simplepie/pull/348) * Serialized data is now used for hashing in `SimplePie_Item->get_id()`. [#348](https://github.com/simplepie/simplepie/pull/348) diff --git a/vendor/simplepie/simplepie/autoloader.php b/vendor/simplepie/simplepie/autoloader.php index e42f07b3a..bf34a7003 100644 --- a/vendor/simplepie/simplepie/autoloader.php +++ b/vendor/simplepie/simplepie/autoloader.php @@ -58,6 +58,8 @@ if (!class_exists('SimplePie')) */ class SimplePie_Autoloader { + protected $path; + /** * Constructor */ diff --git a/vendor/simplepie/simplepie/composer.json b/vendor/simplepie/simplepie/composer.json index d76ee7d4d..83efa2d82 100644 --- a/vendor/simplepie/simplepie/composer.json +++ b/vendor/simplepie/simplepie/composer.json @@ -30,7 +30,7 @@ "ext-xmlreader": "*" }, "require-dev": { - "phpunit/phpunit": "~5.4.3 || ~6.5" + "yoast/phpunit-polyfills": "^1.0.1" }, "suggest": { "ext-curl": "", diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php index a6a5a9e13..29c8ece01 100644..100755 --- 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.6 + * @version 1.5.8 * @copyright 2004-2017 Ryan Parman, Sam Sneddon, Ryan McCue * @author Ryan Parman * @author Sam Sneddon @@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie'); /** * SimplePie Version */ -define('SIMPLEPIE_VERSION', '1.5.6'); +define('SIMPLEPIE_VERSION', '1.5.8'); /** * SimplePie Build @@ -425,6 +425,13 @@ class SimplePie public $error; /** + * @var int HTTP status code + * @see SimplePie::status_code() + * @access private + */ + public $status_code; + + /** * @var object Instance of SimplePie_Sanitize (or other class) * @see SimplePie::set_sanitize_class() * @access private @@ -909,6 +916,39 @@ class SimplePie } /** + * Return the filename (i.e. hash, without path and without extension) of the file to cache a given URL. + * @param string $url The URL of the feed to be cached. + * @return string A filename (i.e. hash, without path and without extension). + */ + public function get_cache_filename($url) + { + // Append custom parameters to the URL to avoid cache pollution in case of multiple calls with different parameters. + $url .= $this->force_feed ? '#force_feed' : ''; + $options = array(); + if ($this->timeout != 10) + { + $options[CURLOPT_TIMEOUT] = $this->timeout; + } + if ($this->useragent !== SIMPLEPIE_USERAGENT) + { + $options[CURLOPT_USERAGENT] = $this->useragent; + } + if (!empty($this->curl_options)) + { + foreach ($this->curl_options as $k => $v) + { + $options[$k] = $v; + } + } + if (!empty($options)) + { + ksort($options); + $url .= '#' . urlencode(var_export($options, true)); + } + return call_user_func($this->cache_name_function, $url); + } + + /** * Set whether feed items should be sorted into reverse chronological order * * @param bool $enable Sort as reverse chronological order. @@ -1146,6 +1186,7 @@ class SimplePie $this->strip_attributes(false); $this->add_attributes(false); $this->set_image_handler(false); + $this->set_https_domains(array()); } } @@ -1249,6 +1290,19 @@ class SimplePie } /** + * Set the list of domains for which to force HTTPS. + * @see SimplePie_Sanitize::set_https_domains() + * @param array List of HTTPS domains. Example array('biz', 'example.com', 'example.org', 'www.example.net'). + */ + public function set_https_domains($domains = array()) + { + if (is_array($domains)) + { + $this->sanitize->set_https_domains($domains); + } + } + + /** * Set the handler to enable the display of cached images. * * @param string $page Web-accessible path to the handler_image.php file. @@ -1373,8 +1427,8 @@ class SimplePie // Decide whether to enable caching if ($this->cache && $parsed_feed_url['scheme'] !== '') { - $url = $this->feed_url . ($this->force_feed ? '#force_feed' : ''); - $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $url), 'spc')); + $filename = $this->get_cache_filename($this->feed_url); + $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, $filename, 'spc')); } // Fetch the data via SimplePie_File into $this->raw_data @@ -1514,7 +1568,7 @@ class SimplePie * Fetch the data via SimplePie_File * * If the data is already cached, attempt to fetch it from there instead - * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache + * @param SimplePie_Cache_Base|false $cache Cache handler, or false to not load from the cache * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type */ protected function fetch_data(&$cache) @@ -1577,6 +1631,7 @@ class SimplePie } $file = $this->registry->create('File', array($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options)); + $this->status_code = $file->status_code; if ($file->success) { @@ -1631,6 +1686,8 @@ class SimplePie $file = $this->registry->create('File', array($this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options)); } } + $this->status_code = $file->status_code; + // If the file connection has an error, set SimplePie::error to that and quit if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) { @@ -1728,7 +1785,7 @@ class SimplePie } /** - * Get the error message for the occured error + * Get the error message for the occurred error * * @return string|array Error message, or array of messages for multifeeds */ @@ -1738,6 +1795,16 @@ class SimplePie } /** + * Get the last HTTP status code + * + * @return int Status code + */ + public function status_code() + { + return $this->status_code; + } + + /** * Get the raw XML * * This is the same as the old `$feed->enable_xml_dump(true)`, but returns @@ -2580,13 +2647,19 @@ class SimplePie } } - if (isset($this->data['headers']['link']) && - preg_match('/<([^>]+)>; rel='.preg_quote($rel).'/', - $this->data['headers']['link'], $match)) + if (isset($this->data['headers']['link'])) { - return array($match[1]); + $link_headers = $this->data['headers']['link']; + if (is_string($link_headers)) { + $link_headers = array($link_headers); + } + $matches = preg_filter('/<([^>]+)>; rel='.preg_quote($rel).'/', '$1', $link_headers); + if (!empty($matches)) { + return $matches; + } } - else if (isset($this->data['links'][$rel])) + + if (isset($this->data['links'][$rel])) { return $this->data['links'][$rel]; } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php index 0b40d87c8..0b40d87c8 100644..100755 --- 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/Cache/Redis.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php index dbc88e829..a5925bec2 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php @@ -152,7 +152,7 @@ class SimplePie_Cache_Redis implements SimplePie_Cache_Base { if ($data !== false) { $return = $this->cache->set($this->name, $data); if ($this->options['expire']) { - return $this->cache->expire($this->name, $this->ttl); + return $this->cache->expire($this->name, $this->options['expire']); } return $return; } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php index 32216d848..8a4cffa30 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php @@ -1152,7 +1152,12 @@ class SimplePie_Enclosure // If we encounter an unsupported mime-type, check the file extension and guess intelligently. if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) { - switch (strtolower($this->get_extension())) + $extension = $this->get_extension(); + if ($extension === null) { + return null; + } + + switch (strtolower($extension)) { // Audio mime-types case 'aac': diff --git a/vendor/simplepie/simplepie/library/SimplePie/File.php b/vendor/simplepie/simplepie/library/SimplePie/File.php index 90ad8196a..c2d368b3b 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/File.php +++ b/vendor/simplepie/simplepie/library/SimplePie/File.php @@ -106,7 +106,7 @@ class SimplePie_File curl_setopt($fp, CURLOPT_FAILONERROR, 1); curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_REFERER, $url); + curl_setopt($fp, CURLOPT_REFERER, SimplePie_Misc::url_remove_credentials($url)); curl_setopt($fp, CURLOPT_USERAGENT, $useragent); curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); foreach ($curl_options as $curl_param => $curl_value) { @@ -119,6 +119,7 @@ class SimplePie_File curl_setopt($fp, CURLOPT_ENCODING, 'none'); $this->headers = curl_exec($fp); } + $this->status_code = curl_getinfo($fp, CURLINFO_HTTP_CODE); if (curl_errno($fp)) { $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); diff --git a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php index 1dbe06c3e..a4c48ddb7 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php @@ -507,11 +507,13 @@ class SimplePie_HTTP_Parser { $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.0 200 Connection established\r\n")) { + $exploded = explode("\r\n\r\n", $data, 2); + $data = end($exploded); } - 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); + if (false !== stripos($data, "HTTP/1.1 200 Connection established\r\n")) { + $exploded = explode("\r\n\r\n", $data, 2); + $data = end($exploded); } return $data; } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php index 5be6b1994..3ac4fa882 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Item.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php @@ -1803,7 +1803,7 @@ class SimplePie_Item } if (isset($content['attribs']['']['fileSize'])) { - $length = ceil($content['attribs']['']['fileSize']); + $length = intval($content['attribs']['']['fileSize']); } if (isset($content['attribs']['']['medium'])) { @@ -2425,7 +2425,7 @@ class SimplePie_Item } if (isset($content['attribs']['']['fileSize'])) { - $length = ceil($content['attribs']['']['fileSize']); + $length = intval($content['attribs']['']['fileSize']); } if (isset($content['attribs']['']['medium'])) { @@ -2790,7 +2790,7 @@ class SimplePie_Item } if (isset($link['attribs']['']['length'])) { - $length = ceil($link['attribs']['']['length']); + $length = intval($link['attribs']['']['length']); } if (isset($link['attribs']['']['title'])) { @@ -2833,7 +2833,7 @@ class SimplePie_Item } if (isset($link['attribs']['']['length'])) { - $length = ceil($link['attribs']['']['length']); + $length = intval($link['attribs']['']['length']); } // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor @@ -2862,13 +2862,14 @@ class SimplePie_Item $width = null; $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); + $url = $this->feed->sanitize->https_url($url); if (isset($enclosure[0]['attribs']['']['type'])) { $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); } if (isset($enclosure[0]['attribs']['']['length'])) { - $length = ceil($enclosure[0]['attribs']['']['length']); + $length = intval($enclosure[0]['attribs']['']['length']); } // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor diff --git a/vendor/simplepie/simplepie/library/SimplePie/Locator.php b/vendor/simplepie/simplepie/library/SimplePie/Locator.php index a207df6fe..c5fae0579 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Locator.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Locator.php @@ -64,6 +64,7 @@ class SimplePie_Locator var $max_checked_feeds = 10; var $force_fsockopen = false; var $curl_options = array(); + var $dom; protected $registry; public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = array()) @@ -75,12 +76,19 @@ class SimplePie_Locator $this->force_fsockopen = $force_fsockopen; $this->curl_options = $curl_options; - if (class_exists('DOMDocument')) + if (class_exists('DOMDocument') && $this->file->body != '') { $this->dom = new DOMDocument(); set_error_handler(array('SimplePie_Misc', 'silence_errors')); - $this->dom->loadHTML($this->file->body); + try + { + $this->dom->loadHTML($this->file->body); + } + catch (Throwable $ex) + { + $this->dom = null; + } restore_error_handler(); } else diff --git a/vendor/simplepie/simplepie/library/SimplePie/Misc.php b/vendor/simplepie/simplepie/library/SimplePie/Misc.php index a52498ac7..ce3cf0f54 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Misc.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Misc.php @@ -2260,4 +2260,14 @@ function embed_wmedia(width, height, link) { { // No-op } + + /** + * Sanitize a URL by removing HTTP credentials. + * @param string $url the URL to sanitize. + * @return string the same URL without HTTP credentials. + */ + public static function url_remove_credentials($url) + { + return preg_replace('#^(https?://)[^/:@]+:[^/:@]+@#i', '$1', $url); + } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/Parser.php index 4efdf41a7..3813b74b2 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Parser.php @@ -164,12 +164,30 @@ class SimplePie_Parser xml_set_element_handler($xml, 'tag_open', 'tag_close'); // Parse! - if (!xml_parse($xml, $data, true)) + $wrapper = @is_writable(sys_get_temp_dir()) ? 'php://temp' : 'php://memory'; + if (($stream = fopen($wrapper, 'r+')) && + fwrite($stream, $data) && + rewind($stream)) + { + //Parse by chunks not to use too much memory + do + { + $stream_data = fread($stream, 1048576); + if (!xml_parse($xml, $stream_data === false ? '' : $stream_data, feof($stream))) + { + $this->error_code = xml_get_error_code($xml); + $this->error_string = xml_error_string($this->error_code); + $return = false; + break; + } + } while (!feof($stream)); + fclose($stream); + } + else { - $this->error_code = xml_get_error_code($xml); - $this->error_string = xml_error_string($this->error_code); $return = false; } + $this->current_line = xml_get_current_line_number($xml); $this->current_column = xml_get_current_column_number($xml); $this->current_byte = xml_get_current_byte_index($xml); diff --git a/vendor/simplepie/simplepie/library/SimplePie/Registry.php b/vendor/simplepie/simplepie/library/SimplePie/Registry.php index bf3baf179..1aac51d07 100644..100755 --- a/vendor/simplepie/simplepie/library/SimplePie/Registry.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Registry.php @@ -208,7 +208,8 @@ class SimplePie_Registry { case 'Cache': // For backwards compatibility with old non-static - // Cache::create() methods + // Cache::create() methods in PHP < 8.0. + // No longer supported as of PHP 8.0. if ($method === 'get_handler') { $result = @call_user_func_array(array($class, 'create'), $parameters); diff --git a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php index 35838032f..d421c8307 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php @@ -71,6 +71,15 @@ class SimplePie_Sanitize var $useragent = ''; var $force_fsockopen = false; var $replace_url_attributes = null; + var $registry; + + /** + * List of domains for which to force HTTPS. + * @see SimplePie_Sanitize::set_https_domains() + * Array is a tree split at DNS levels. Example: + * array('biz' => true, 'com' => array('example' => true), 'net' => array('example' => array('www' => true))) + */ + var $https_domains = array(); public function __construct() { @@ -241,6 +250,68 @@ class SimplePie_Sanitize $this->replace_url_attributes = (array) $element_attribute; } + /** + * Set the list of domains for which to force HTTPS. + * @see SimplePie_Misc::https_url() + * Example array('biz', 'example.com', 'example.org', 'www.example.net'); + */ + public function set_https_domains($domains) + { + $this->https_domains = array(); + foreach ($domains as $domain) + { + $domain = trim($domain, ". \t\n\r\0\x0B"); + $segments = array_reverse(explode('.', $domain)); + $node =& $this->https_domains; + foreach ($segments as $segment) + {//Build a tree + if ($node === true) + { + break; + } + if (!isset($node[$segment])) + { + $node[$segment] = array(); + } + $node =& $node[$segment]; + } + $node = true; + } + } + + /** + * Check if the domain is in the list of forced HTTPS. + */ + protected function is_https_domain($domain) + { + $domain = trim($domain, '. '); + $segments = array_reverse(explode('.', $domain)); + $node =& $this->https_domains; + foreach ($segments as $segment) + {//Explore the tree + if (isset($node[$segment])) + { + $node =& $node[$segment]; + } + else + { + break; + } + } + return $node === true; + } + + /** + * Force HTTPS for selected Web sites. + */ + public function https_url($url) + { + return (strtolower(substr($url, 0, 7)) === 'http://') && + $this->is_https_domain(parse_url($url, PHP_URL_HOST)) ? + substr_replace($url, 's', 4, 0) : //Add the 's' to HTTPS + $url; + } + public function sanitize($data, $type, $base = '') { $data = trim($data); @@ -443,6 +514,7 @@ class SimplePie_Sanitize $value = $this->registry->call('Misc', 'absolutize_url', array($element->getAttribute($attribute), $this->base)); if ($value !== false) { + $value = $this->https_url($value); $element->setAttribute($attribute, $value); } } diff --git a/vendor/smarty/smarty/.github/workflows/ci.yml b/vendor/smarty/smarty/.github/workflows/ci.yml new file mode 100644 index 000000000..e27b60bfc --- /dev/null +++ b/vendor/smarty/smarty/.github/workflows/ci.yml @@ -0,0 +1,77 @@ +# https://help.github.com/en/categories/automating-your-workflow-with-github-actions + +on: + - pull_request + - push + +name: CI + +jobs: + tests: + name: Tests + + runs-on: ${{ matrix.os }} + + env: + PHP_EXTENSIONS: dom, json, libxml, mbstring, pdo_sqlite, soap, xml, xmlwriter + PHP_INI_VALUES: assert.exception=1, zend.assertions=1 + + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + + php-version: + - "7.1" + - "7.2" + - "7.3" + - "7.4" + - "8.0" + - "8.1" + + compiler: + - default + + include: + - os: ubuntu-latest + php-version: "8.0" + compiler: jit + - os: ubuntu-latest + php-version: "8.1" + compiler: jit + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Override PHP ini values for JIT compiler + if: matrix.compiler == 'jit' + run: echo "PHP_INI_VALUES::assert.exception=1, zend.assertions=1, opcache.enable=1, opcache.enable_cli=1, opcache.optimization_level=-1, opcache.jit=1255, opcache.jit_buffer_size=32M" >> $GITHUB_ENV + + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: pcov + extensions: ${{ env.PHP_EXTENSIONS }} + ini-values: ${{ env.PHP_INI_VALUES }} + + - name: Validate composer.json and composer.lock + run: composer validate + + - name: Cache Composer packages + id: composer-cache + uses: actions/cache@v2 + with: + path: vendor + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-php-${{ matrix.php-version }}- + + - name: Install dependencies + if: steps.composer-cache.outputs.cache-hit != 'true' + run: composer install --prefer-dist --no-progress --no-suggest + + - name: Run tests with phpunit + run: ./phpunit.sh diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md index e3bb93a4f..39e834837 100644 --- a/vendor/smarty/smarty/CHANGELOG.md +++ b/vendor/smarty/smarty/CHANGELOG.md @@ -6,11 +6,66 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [4.1.0] - 2022-02-06 + +### Added +- PHP8.1 compatibility [#713](https://github.com/smarty-php/smarty/pull/713) + +## [4.0.4] - 2022-01-18 + +### Fixed +- Fixed illegal characters bug in math function security check [#702](https://github.com/smarty-php/smarty/issues/702) + +## [4.0.3] - 2022-01-10 + +### Security +- Prevent evasion of the `static_classes` security policy. This addresses CVE-2021-21408 + +## [4.0.2] - 2022-01-10 + +### Security +- Prevent arbitrary PHP code execution through maliciously crafted expression for the math function. This addresses CVE-2021-29454 + +## [4.0.1] - 2022-01-09 + +### Security +- Rewrote the mailto function to not use `eval` when encoding with javascript + +## [4.0.0] - 2021-11-25 + +## [4.0.0-rc.0] - 2021-10-13 + +### Added +- You can now use `$smarty->muteUndefinedOrNullWarnings()` to activate convert warnings about undefined or null template vars to notices when running PHP8 + +### Changed +- Switch CI from Travis to Github CI +- Updated unit tests to avoid skipped and risky test warnings + +### Removed +- Dropped support for PHP7.0 and below, so Smarty now requires PHP >=7.1 +- Dropped support for php asp tags in templates (removed from php since php7.0) +- Dropped deprecated API calls that where only accessible through SmartyBC +- Dropped support for {php} and {include_php} tags and embedded PHP in templates. Embedded PHP will now be passed through as is. +- Removed all PHP_VERSION_ID and compare_version checks and conditional code blocks that are now no longer required +- Dropped deprecated SMARTY_RESOURCE_CHAR_SET and SMARTY_RESOURCE_DATE_FORMAT constants +- Dropped deprecated Smarty::muteExpectedErrors and Smarty::unmuteExpectedErrors API methods +- Dropped deprecated $smarty->getVariable() method. Use $smarty->getTemplateVars() instead. +- $smarty->registerResource() no longer accepts an array of callback functions + +## [3.1.40] - 2021-10-13 + +### Changed +- modifier escape now triggers a E_USER_NOTICE when an unsupported escape type is used https://github.com/smarty-php/smarty/pull/649 + +### Security +- More advanced javascript escaping to handle https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements thanks to m-haritonov + ## [3.1.39] - 2021-02-17 ### Security -- Prevent access to `$smarty.template_object` in sandbox mode -- Fixed code injection vulnerability by using illegal function names in `{function name='blah'}{/function}` +- Prevent access to `$smarty.template_object` in sandbox mode. This addresses CVE-2021-26119. +- Fixed code injection vulnerability by using illegal function names in `{function name='blah'}{/function}`. This addresses CVE-2021-26120. ## [3.1.38] - 2021-01-08 diff --git a/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt b/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt deleted file mode 100644 index 0644719c9..000000000 --- a/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt +++ /dev/null @@ -1,31 +0,0 @@ - - -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" - } - -If you are using (include) the composer generated autoloader.php which is located -in the /vendor folder it is no longer needed to require the Smarty.class.php file.
\ No newline at end of file diff --git a/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt b/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt deleted file mode 100644 index 67936a81a..000000000 --- a/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt +++ /dev/null @@ -1,91 +0,0 @@ -3.1.3" -New tags for inheritance parent and chilD -{parent} == {$smarty.block.parent} -{child} == {$smarty.block.child} -Both tags support the assign attribute like -{child assign=foo} - -3.1.31 -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. Separate 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/vendor/smarty/smarty/NEW_FEATURES.txt b/vendor/smarty/smarty/NEW_FEATURES.txt deleted file mode 100644 index 0b2cae1e0..000000000 --- a/vendor/smarty/smarty/NEW_FEATURES.txt +++ /dev/null @@ -1,291 +0,0 @@ - - -This file contains a brief description of new features which have been added to Smarty 3.1 - -Smarty 3.1.33-dev - Variable capture name in Smarty special variable - ================================================ - {$smarty.capture.$foo} can now be used to access the content of a named - capture block - -Smarty 3.1.32 - New tags for inheritance parent and child - ========================================= - {parent} == {$smarty.block.parent} - {child} == {$smarty.block.child} - Both tags support the assign attribute like - {child assign=foo} - - Deprecate functions Smarty::muteExpectedErrors() and Smarty::unmuteExpectedErrors() - =================================================================================== - These functions to start a special error handler are no longer needed as Smarty does - no longer use error suppression like @filemtime(). - For backward compatibility the functions still can be called. - - Using literals containing Smarty's left and right delimiter - =========================================================== - New Methods - $smarty->setLiterals(array $literals) - $smarty->addLiterals(array $literals) - to define literals containing Smarty delimiter. This can avoid the need for extreme usage - of {literal} {/literal} tags. - A) Treat '{{' and '}}' as literal - If Smarty::$auto_literal is enabled - {{ foo }} - will be treated now as literal. (This does apply for any number of delimiter repeatations). - However {{foo}} is not an literal but will be interpreted as a recursive Smarty tag. - If you use - $smarty->setLiterals(array('{{','}}')); - {{foo}} is now a literal as well. - NOTE: In the last example nested Smarty tags starting with '{{' or ending with '}}' will not - work any longer, but this should be very very raw occouring restriction. - B) Example 2 - Assume your delimiter are '<-' , '->' and '<--' , '-->' shall be literals - $smarty->setLiterals(array('<--','-->')); - - - The capture buffers can now be accessed as array - ================================================ - {capture name='foo'} - bah - {\capture} - {capture name='buh'} - blar - {\capture} - {foreach $smarty.capture as $name => $buffer} - .... - {/foreach} - -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 unknown 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 - ======= - Smarty does now invalidate automatically updated and cleared compiled or cached template files in OPCACHE. - Correct operation is no longer dependent on OPCACHE configuration settings. - - Template inheritance - ==================== - Template inheritance is now processed in run time. - See the INHERITANCE_RELEASE_NOTES - - Modifier regex_replace - ====================== - An optional limit parameter was added - - fetch() and display() - ===================== - The fetch() and display() methods of the template object accept now optionally the same parameter - as the corresponding Smarty methods to get the content of another template. - Example: - $template->display(); Does display template of template object - $template->display('foo.tpl'); Does display template 'foo.bar' - - File: resource - ============== - Multiple template_dir entries can now be selected by a comma separated list of indices. - The template_dir array is searched in the order of the indices. (Could be used to change the default search order) - Example: - $smarty->display('[1],[0]foo.bar'); - - Filter support - ============== - Optional filter names - An optional filter name was added to $smarty->registerFilter(). It can be used to unregister a filter by name. - - $smarty->registerFilter('output', $callback, 'name'); - $smarty->unregister('output', 'name'); - - Closures - $smarty->registerFilter() does now accept closures. - - $smarty->registerFilter('pre', function($source) {return $source;}); - If no optional filter name was specified it gets the default name 'closure'. - If you register multiple closures register each with a unique filter name. - - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1'); - - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2'); - - -Smarty 3.1.22 - - Namespace support within templates - ================================== - Within templates you can now use namespace specifications on: - - Constants like foo\bar\FOO - - Class names like foo\bar\Baz::FOO, foo\bar\Baz::$foo, foo\bar\Baz::foo() - - PHP function names like foo\bar\baz() - - Security - ======== - - disable special $smarty variable - - The Smarty_Security class has the new property $disabled_special_smarty_vars. - It's an array which can be loaded with the $smarty special variable names like - 'template_object', 'template', 'current_dir' and others which will be disabled. - Note: That this security check is performed at compile time. - - - limit template nesting - - Property $max_template_nesting of Smarty_Security does set the maximum template nesting level. - The main template is level 1. The nesting level is checked at run time. When the maximum will be exceeded - an Exception will be thrown. The default setting is 0 which does disable this check. - - - trusted static methods - - The Smarty_Security class has the new property $trusted_static_methods to restrict access to static methods. - It's an nested array of trusted class and method names. - Format: - array ( - 'class_1' => array('method_1', 'method_2'), // allowed methods - 'class_2' => array(), // all methods of class allowed - ) - To disable access for all methods of all classes set $trusted_static_methods = null; - The default value is an empty array() which does enables all methods of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted static properties - - The Smarty_Security class has the new property $trusted_static_properties to restrict access to static properties. - It's an nested array of trusted class and property names. - Format: - array ( - 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed - 'class_2' => array(), // all properties of class allowed - } - To disable access for all properties of all classes set $trusted_static_properties = null; - The default value is an empty array() which does enables all properties of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted constants . - The Smarty_Security class has the new property $trusted_constants to restrict access to constants. - It's an array of trusted constant names. - Format: - array ( - 'SMARTY_DIR' , // allowed constant - } - If the array is empty (default) the usage of constants can be controlled with the - Smarty_Security::$allow_constants property (default true) - - - - Compiled Templates - ================== - Smarty does now automatically detects a change of the $merge_compiled_includes and $escape_html - property and creates different compiled templates files depending on the setting. - - Same applies to config files and the $config_overwrite, $config_booleanize and - $config_read_hidden properties. - - Debugging - ========= - The layout of the debug window has been changed for better readability - - New class constants - Smarty::DEBUG_OFF - Smarty::DEBUG_ON - Smarty::DEBUG_INDIVIDUAL - have been introduced for setting the $debugging property. - - Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window. - diff --git a/vendor/smarty/smarty/README b/vendor/smarty/smarty/README deleted file mode 100644 index 9a71519bd..000000000 --- a/vendor/smarty/smarty/README +++ /dev/null @@ -1,575 +0,0 @@ -Smarty 3.x - -Author: Monte Ohrt <monte at ohrt dot com > -Author: Uwe Tews - -AN INTRODUCTION TO SMARTY 3 - -NOTICE FOR 3.1 release: - -Please see the SMARTY_3.1_NOTES.txt file that comes with the distribution. - -NOTICE for 3.0.5 release: - -Smarty now follows the PHP error_reporting level by default. If PHP does not mask E_NOTICE and you try to access an unset template variable, you will now get an E_NOTICE warning. To revert to the old behavior: - -$smarty->error_reporting = E_ALL & ~E_NOTICE; - -NOTICE for 3.0 release: - -IMPORTANT: Some API adjustments have been made between the RC4 and 3.0 release. -We felt it is better to make these now instead of after a 3.0 release, then have to -immediately deprecate APIs in 3.1. Online documentation has been updated -to reflect these changes. Specifically: - ----- API CHANGES RC4 -> 3.0 ---- - -$smarty->register->* -$smarty->unregister->* -$smarty->utility->* -$samrty->cache->* - -Have all been changed to local method calls such as: - -$smarty->clearAllCache() -$smarty->registerFoo() -$smarty->unregisterFoo() -$smarty->testInstall() -etc. - -Registration of function, block, compiler, and modifier plugins have been -consolidated under two API calls: - -$smarty->registerPlugin(...) -$smarty->unregisterPlugin(...) - -Registration of pre, post, output and variable filters have been -consolidated under two API calls: - -$smarty->registerFilter(...) -$smarty->unregisterFilter(...) - -Please refer to the online documentation for all specific changes: - -http://www.smarty.net/documentation - ----- - -The Smarty 3 API has been refactored to a syntax geared -for consistency and modularity. The Smarty 2 API syntax is still supported, but -will throw a deprecation notice. You can disable the notices, but it is highly -recommended to adjust your syntax to Smarty 3, as the Smarty 2 syntax must run -through an extra rerouting wrapper. - -Basically, all Smarty methods now follow the "fooBarBaz" camel case syntax. Also, -all Smarty properties now have getters and setters. So for example, the property -$smarty->cache_dir can be set with $smarty->setCacheDir('foo/') and can be -retrieved with $smarty->getCacheDir(). - -Some of the Smarty 3 APIs have been revoked such as the "is*" methods that were -just duplicate functions of the now available "get*" methods. - -Here is a rundown of the Smarty 3 API: - -$smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->display($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->isCached($template, $cache_id = null, $compile_id = null) -$smarty->createData($parent = null) -$smarty->createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->enableSecurity() -$smarty->disableSecurity() -$smarty->setTemplateDir($template_dir) -$smarty->addTemplateDir($template_dir) -$smarty->templateExists($resource_name) -$smarty->loadPlugin($plugin_name, $check = true) -$smarty->loadFilter($type, $name) -$smarty->setExceptionHandler($handler) -$smarty->addPluginsDir($plugins_dir) -$smarty->getGlobal($varname = null) -$smarty->getRegisteredObject($name) -$smarty->getDebugTemplate() -$smarty->setDebugTemplate($tpl_name) -$smarty->assign($tpl_var, $value = null, $nocache = false) -$smarty->assignGlobal($varname, $value = null, $nocache = false) -$smarty->assignByRef($tpl_var, &$value, $nocache = false) -$smarty->append($tpl_var, $value = null, $merge = false, $nocache = false) -$smarty->appendByRef($tpl_var, &$value, $merge = false) -$smarty->clearAssign($tpl_var) -$smarty->clearAllAssign() -$smarty->configLoad($config_file, $sections = null) -$smarty->getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) -$smarty->getConfigVariable($variable) -$smarty->getStreamVariable($variable) -$smarty->getConfigVars($varname = null) -$smarty->clearConfig($varname = null) -$smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true) -$smarty->clearAllCache($exp_time = null, $type = null) -$smarty->clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - -$smarty->registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = array()) - -$smarty->registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - -$smarty->registerFilter($type, $function_name) -$smarty->registerResource($resource_type, $function_names) -$smarty->registerDefaultPluginHandler($function_name) -$smarty->registerDefaultTemplateHandler($function_name) - -$smarty->unregisterPlugin($type, $tag) -$smarty->unregisterObject($object_name) -$smarty->unregisterFilter($type, $function_name) -$smarty->unregisterResource($resource_type) - -$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) -$smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) -$smarty->testInstall() - -// then all the getters/setters, available for all properties. Here are a few: - -$caching = $smarty->getCaching(); // get $smarty->caching -$smarty->setCaching(true); // set $smarty->caching -$smarty->setDeprecationNotices(false); // set $smarty->deprecation_notices -$smarty->setCacheId($id); // set $smarty->cache_id -$debugging = $smarty->getDebugging(); // get $smarty->debugging - - -FILE STRUCTURE - -The Smarty 3 file structure is similar to Smarty 2: - -/libs/ - Smarty.class.php -/libs/sysplugins/ - internal.* -/libs/plugins/ - function.mailto.php - modifier.escape.php - ... - -A lot of Smarty 3 core functionality lies in the sysplugins directory; you do -not need to change any files here. The /libs/plugins/ folder is where Smarty -plugins are located. You can add your own here, or create a separate plugin -directory, just the same as Smarty 2. You will still need to create your own -/cache/, /templates/, /templates_c/, /configs/ folders. Be sure /cache/ and -/templates_c/ are writable. - -The typical way to use Smarty 3 should also look familiar: - -require('Smarty.class.php'); -$smarty = new Smarty; -$smarty->assign('foo','bar'); -$smarty->display('index.tpl'); - - -However, Smarty 3 works completely different on the inside. Smarty 3 is mostly -backward compatible with Smarty 2, except for the following items: - -*) Smarty 3 is PHP 5 only. It will not work with PHP 4. -*) The {php} tag is disabled by default. Enable with $smarty->allow_php_tag=true. -*) 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; -*) The Smarty 3 API is a bit different. Many Smarty 2 API calls are deprecated - but still work. You will want to update your calls to Smarty 3 for maximum - efficiency. - - -There are many things that are new to Smarty 3. Here are the notable items: - -LEXER/PARSER -============ - -Smarty 3 now uses a lexing tokenizer for its parser/compiler. Basically, this -means Smarty has some syntax additions that make life easier such as in-template -math, shorter/intuitive function parameter options, infinite function recursion, -more accurate error handling, etc. - - -WHAT IS NEW IN SMARTY TEMPLATE SYNTAX -===================================== - -Smarty 3 allows expressions almost anywhere. Expressions can include PHP -functions as long as they are not disabled by the security policy, object -methods and properties, etc. The {math} plugin is no longer necessary but -is still supported for BC. - -Examples: -{$x+$y} will output the sum of x and y. -{$foo = strlen($bar)} function in assignment -{assign var=foo value= $x+$y} in attributes -{$foo = myfunct( ($x+$y)*3 )} as function parameter -{$foo[$x+3]} as array index - -Smarty tags can be used as values within other tags. -Example: {$foo={counter}+3} - -Smarty tags can also be used inside double quoted strings. -Example: {$foo="this is message {counter}"} - -You can define arrays within templates. -Examples: -{assign var=foo value=[1,2,3]} -{assign var=foo value=['y'=>'yellow','b'=>'blue']} -Arrays can be nested. -{assign var=foo value=[1,[9,8],3]} - -There is a new short syntax supported for assigning variables. -Example: {$foo=$bar+2} - -You can assign a value to a specific array element. If the variable exists but -is not an array, it is converted to an array before the new values are assigned. -Examples: -{$foo['bar']=1} -{$foo['bar']['blar']=1} - -You can append values to an array. If the variable exists but is not an array, -it is converted to an array before the new values are assigned. -Example: {$foo[]=1} - -You can use a PHP-like syntax for accessing array elements, as well as the -original "dot" notation. -Examples: -{$foo[1]} normal access -{$foo['bar']} -{$foo['bar'][1]} -{$foo[$x+$x]} index may contain any expression -{$foo[$bar[1]]} nested index -{$foo[section_name]} smarty section access, not array access! - -The original "dot" notation stays, and with improvements. -Examples: -{$foo.a.b.c} => $foo['a']['b']['c'] -{$foo.a.$b.c} => $foo['a'][$b]['c'] with variable index -{$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] with expression as index -{$foo.a.{$b.c}} => $foo['a'][$b['c']] with nested index - -note that { and } are used to address ambiguties when nesting the dot syntax. - -Variable names themselves can be variable and contain expressions. -Examples: -$foo normal variable -$foo_{$bar} variable name containing other variable -$foo_{$x+$y} variable name containing expressions -$foo_{$bar}_buh_{$blar} variable name with multiple segments -{$foo_{$x}} will output the variable $foo_1 if $x has a value of 1. - -Object method chaining is implemented. -Example: {$object->method1($x)->method2($y)} - -{for} tag added for looping (replacement for {section} tag): -{for $x=0, $y=count($foo); $x<$y; $x++} .... {/for} -Any number of statements can be used separated by comma as the first -initial expression at {for}. - -{for $x = $start to $end step $step} ... {/for}is in the SVN now . -You can use also -{for $x = $start to $end} ... {/for} -In this case the step value will be automatically 1 or -1 depending on the start and end values. -Instead of $start and $end you can use any valid expression. -Inside the loop the following special vars can be accessed: -$x@iteration = number of iteration -$x@total = total number of iterations -$x@first = true on first iteration -$x@last = true on last iteration - - -The Smarty 2 {section} syntax is still supported. - -New shorter {foreach} syntax to loop over an array. -Example: {foreach $myarray as $var}...{/foreach} - -Within the foreach loop, properties are access via: - -$var@key foreach $var array key -$var@iteration foreach current iteration count (1,2,3...) -$var@index foreach current index count (0,1,2...) -$var@total foreach $var array total -$var@first true on first iteration -$var@last true on last iteration - -The Smarty 2 {foreach} tag syntax is still supported. - -NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo. -If you want to access an array element with index foo, you must use quotes -such as {$bar['foo']}, or use the dot syntax {$bar.foo}. - -while block tag is now implemented: -{while $foo}...{/while} -{while $x lt 10}...{/while} - -Direct access to PHP functions: -Just as you can use PHP functions as modifiers directly, you can now access -PHP functions directly, provided they are permitted by security settings: -{time()} - -There is a new {function}...{/function} block tag to implement a template function. -This enables reuse of code sequences like a plugin function. It can call itself recursively. -Template function must be called with the new {call name=foo...} tag. - -Example: - -Template file: -{function name=menu level=0} - <ul class="level{$level}"> - {foreach $data as $entry} - {if is_array($entry)} - <li>{$entry@key}</li> - {call name=menu data=$entry level=$level+1} - {else} - <li>{$entry}</li> - {/if} - {/foreach} - </ul> -{/function} - -{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => - ['item3-3-1','item3-3-2']],'item4']} - -{call name=menu data=$menu} - - -Generated output: - * item1 - * item2 - * item3 - o item3-1 - o item3-2 - o item3-3 - + item3-3-1 - + item3-3-2 - * item4 - -The function tag itself must have the "name" attribute. This name is the tag -name when calling the function. The function tag may have any number of -additional attributes. These will be default settings for local variables. - -New {nocache} block function: -{nocache}...{/nocache} will declare a section of the template to be non-cached -when template caching is enabled. - -New nocache attribute: -You can declare variable/function output as non-cached with the nocache attribute. -Examples: - -{$foo nocache=true} -{$foo nocache} /* same */ - -{foo bar="baz" nocache=true} -{foo bar="baz" nocache} /* same */ - -{time() nocache=true} -{time() nocache} /* same */ - -Or you can also assign the variable in your script as nocache: -$smarty->assign('foo',$something,true); // third param is nocache setting -{$foo} /* non-cached */ - -$smarty.current_dir returns the directory name of the current template. - -You can use strings directly as templates with the "string" resource type. -Examples: -$smarty->display('string:This is my template, {$foo}!'); // php -{include file="string:This is my template, {$foo}!"} // template - - - -VARIABLE SCOPE / VARIABLE STORAGE -================================= - -In Smarty 2, all assigned variables were stored within the Smarty object. -Therefore, all variables assigned in PHP were accessible by all subsequent -fetch and display template calls. - -In Smarty 3, we have the choice to assign variables to the main Smarty object, -to user-created data objects, and to user-created template objects. -These objects can be chained. The object at the end of a chain can access all -variables belonging to that template and all variables within the parent objects. -The Smarty object can only be the root of a chain, but a chain can be isolated -from the Smarty object. - -All known Smarty assignment interfaces will work on the data and template objects. - -Besides the above mentioned objects, there is also a special storage area for -global variables. - -A Smarty data object can be created as follows: -$data = $smarty->createData(); // create root data object -$data->assign('foo','bar'); // assign variables as usual -$data->config_load('my.conf'); // load config file - -$data= $smarty->createData($smarty); // create data object having a parent link to -the Smarty object - -$data2= $smarty->createData($data); // create data object having a parent link to -the $data data object - -A template object can be created by using the createTemplate method. It has the -same parameter assignments as the fetch() or display() method. -Function definition: -function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) - -The first parameter can be a template name, a smarty object or a data object. - -Examples: -$tpl = $smarty->createTemplate('mytpl.tpl'); // create template object not linked to any parent -$tpl->assign('foo','bar'); // directly assign variables -$tpl->config_load('my.conf'); // load config file - -$tpl = $smarty->createTemplate('mytpl.tpl',$smarty); // create template having a parent link to the Smarty object -$tpl = $smarty->createTemplate('mytpl.tpl',$data); // create template having a parent link to the $data object - -The standard fetch() and display() methods will implicitly create a template object. -If the $parent parameter is not specified in these method calls, the template object -is will link back to the Smarty object as it's parent. - -If a template is called by an {include...} tag from another template, the -subtemplate links back to the calling template as it's parent. - -All variables assigned locally or from a parent template are accessible. If the -template creates or modifies a variable by using the {assign var=foo...} or -{$foo=...} tags, these new values are only known locally (local scope). When the -template exits, none of the new variables or modifications can be seen in the -parent template(s). This is same behavior as in Smarty 2. - -With Smarty 3, we can assign variables with a scope attribute which allows the -availablility of these new variables or modifications globally (ie in the parent -templates.) - -Possible scopes are local, parent, root and global. -Examples: -{assign var=foo value='bar'} // no scope is specified, the default 'local' -{$foo='bar'} // same, local scope -{assign var=foo value='bar' scope='local'} // same, local scope - -{assign var=foo value='bar' scope='parent'} // Values will be available to the parent object -{$foo='bar' scope='parent'} // (normally the calling template) - -{assign var=foo value='bar' scope='root'} // Values will be exported up to the root object, so they can -{$foo='bar' scope='root'} // be seen from all templates using the same root. - -{assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage, -{$foo='bar' scope='global'} // they are available to any and all templates. - - -The scope attribute can also be attached to the {include...} tag. In this case, -the specified scope will be the default scope for all assignments within the -included template. - - -PLUGINS -======= - -Smarty 3 plugins follow the same coding rules as in Smarty 2. -The main difference is that the template object is now passed in place of the smarty object. -The smarty object can be still be accessed through $template->smarty. - -smarty_plugintype_name (array $params, Smarty_Internal_Template $template) - -The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty 2 internals. - - -TEMPLATE INHERITANCE: -===================== - -With template inheritance you can define blocks, which are areas that can be -overridden by child templates, so your templates could look like this: - -parent.tpl: -<html> - <head> - <title>{block name='title'}My site name{/block}</title> - </head> - <body> - <h1>{block name='page-title'}Default page title{/block}</h1> - <div id="content"> - {block name='content'} - Default content - {/block} - </div> - </body> -</html> - -child.tpl: -{extends file='parent.tpl'} -{block name='title'} -Child title -{/block} - -grandchild.tpl: -{extends file='child.tpl'} -{block name='title'}Home - {$smarty.block.parent}{/block} -{block name='page-title'}My home{/block} -{block name='content'} - {foreach $images as $img} - <img src="{$img.url}" alt="{$img.description}" /> - {/foreach} -{/block} - -We redefined all the blocks here, however in the title block we used {$smarty.block.parent}, -which tells Smarty to insert the default content from the parent template in its place. -The content block was overridden to display the image files, and page-title has also be -overridden to display a completely different title. - -If we render grandchild.tpl we will get this: -<html> - <head> - <title>Home - Child title</title> - </head> - <body> - <h1>My home</h1> - <div id="content"> - <img src="/example.jpg" alt="image" /> - <img src="/example2.jpg" alt="image" /> - <img src="/example3.jpg" alt="image" /> - </div> - </body> -</html> - -NOTE: In the child templates everything outside the {extends} or {block} tag sections -is ignored. - -The inheritance tree can be as big as you want (meaning you can extend a file that -extends another one that extends another one and so on..), but be aware that all files -have to be checked for modifications at runtime so the more inheritance the more overhead you add. - -Instead of defining the parent/child relationships with the {extends} tag in the child template you -can use the resource as follow: - -$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); - -Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content -is appended or prepended to the child block content. - -{block name='title' append} My title {/block} - - -PHP STREAMS: -============ - -(see online documentation) - -VARIBLE FILTERS: -================ - -(see online documentation) - - -STATIC CLASS ACCESS AND NAMESPACE SUPPORT -========================================= - -You can register a class with optional namespace for the use in the template like: - -$smarty->register->templateClass('foo','name\name2\myclass'); - -In the template you can use it like this: -{foo::method()} etc. - - -======================= - -Please look through it and send any questions/suggestions/etc to the forums. - -http://www.phpinsider.com/smarty-forum/viewtopic.php?t=14168 - -Monte and Uwe diff --git a/vendor/smarty/smarty/README.md b/vendor/smarty/smarty/README.md index ee7edb1ab..782f0b2cb 100644 --- a/vendor/smarty/smarty/README.md +++ b/vendor/smarty/smarty/README.md @@ -1,78 +1,20 @@ -# Smarty 3 template engine -[smarty.net](https://www.smarty.net/) +# Smarty template engine +Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic. -[![Build Status](https://travis-ci.org/smarty-php/smarty.svg?branch=master)](https://travis-ci.org/smarty-php/smarty) +![CI](https://github.com/smarty-php/smarty/workflows/CI/badge.svg) ## Documentation - -For documentation see -[www.smarty.net/docs/en/](https://www.smarty.net/docs/en/) +Read the [documentation](https://smarty-php.github.io/smarty/) to find out how to use it. ## Requirements +Smarty can be run with PHP 7.1 to PHP 8.1. -Smarty can be run with PHP 5.2 to PHP 7.4. - -## 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" -} -``` +## Installation +Smarty versions 3.1.11 or later can be installed with [Composer](https://getcomposer.org/). -Which is a wrapper to install all 3 packages. +To get the latest stable version of Smarty use: +```bash +composer require smarty/smarty +```` -Composer can also be used for Smarty2 versions 2.6.24 to 2.6.30. +More in the [Getting Started](./docs/getting-started.md) section of the docs. diff --git a/vendor/smarty/smarty/SECURITY.md b/vendor/smarty/smarty/SECURITY.md new file mode 100644 index 000000000..d98ea0189 --- /dev/null +++ b/vendor/smarty/smarty/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +## Supported Versions + +Smarty currently supports the latest minor version of Smarty 3 and Smarty 4. (Smarty 4 has not been released yet.) + +| Version | Supported | +| ------- | ------------------ | +| 4.0.x | :white_check_mark: | +| 3.1.x | :white_check_mark: | +| < 3.1 | :x: | + +## Reporting a Vulnerability + + If you have discovered a security issue with Smarty, please contact us at mail [at] simonwisselink.nl. Do not + disclose your findings publicly and PLEASE PLEASE do not file an Issue. + +We will try to confirm the vulnerability and develop a fix if appropriate. When we release the fix, we will publish +a security release. Please let us know if you want to be credited. diff --git a/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt b/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt deleted file mode 100644 index fd36bd33b..000000000 --- a/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt +++ /dev/null @@ -1,109 +0,0 @@ -= 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 deleted file mode 100644 index 24bdec61a..000000000 --- a/vendor/smarty/smarty/SMARTY_3.0_BC_NOTES.txt +++ /dev/null @@ -1,24 +0,0 @@ -== Smarty2 backward compatibility == -All Smarty2 specific API functions and deprecated functionality 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 deleted file mode 100644 index d7c23ccc4..000000000 --- a/vendor/smarty/smarty/SMARTY_3.1_NOTES.txt +++ /dev/null @@ -1,306 +0,0 @@ -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 capital 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. variable 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/vendor/smarty/smarty/composer.json b/vendor/smarty/smarty/composer.json index 183f9f240..165bfd2a1 100644 --- a/vendor/smarty/smarty/composer.json +++ b/vendor/smarty/smarty/composer.json @@ -5,7 +5,7 @@ "keywords": [ "templating" ], - "homepage": "http://www.smarty.net", + "homepage": "https://smarty-php.github.io/smarty/", "license": "LGPL-3.0", "authors": [ { @@ -19,15 +19,18 @@ { "name": "Rodney Rehm", "email": "rodney.rehm@medialize.de" + }, + { + "name": "Simon Wisselink", + "homepage": "https://www.iwink.nl/" } ], "support": { - "irc": "irc://irc.freenode.org/smarty", "issues": "https://github.com/smarty-php/smarty/issues", - "forum": "http://www.smarty.net/forums/" + "forum": "https://github.com/smarty-php/smarty/discussions" }, "require": { - "php": ">=5.2" + "php": "^7.1 || ^8.0" }, "autoload": { "classmap": [ @@ -36,11 +39,11 @@ }, "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0.x-dev" } }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^6.5 || ^5.7 || ^4.8", + "phpunit/phpunit": "^8.5 || ^7.5", "smarty/smarty-lexer": "^3.1" } } diff --git a/vendor/smarty/smarty/docs/_config.yml b/vendor/smarty/smarty/docs/_config.yml new file mode 100644 index 000000000..2f7efbeab --- /dev/null +++ b/vendor/smarty/smarty/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-minimal
\ No newline at end of file diff --git a/vendor/smarty/smarty/docs/appendixes/tips.md b/vendor/smarty/smarty/docs/appendixes/tips.md new file mode 100644 index 000000000..b0ea40cc7 --- /dev/null +++ b/vendor/smarty/smarty/docs/appendixes/tips.md @@ -0,0 +1,332 @@ +Tips & Tricks {#tips} +============= + +Blank Variable Handling {#tips.blank.var.handling} +======================= + +There may be times when you want to print a default value for an empty +variable instead of printing nothing, such as printing ` ` so that +html table backgrounds work properly. Many would use an +[`{if}`](#language.function.if) statement to handle this, but there is a +shorthand way with Smarty, using the +[`default`](#language.modifier.default) variable modifier. + +> **Note** +> +> "Undefined variable" errors will show an E\_NOTICE if not disabled in +> PHP\'s [`error_reporting()`](&url.php-manual;error_reporting) level or +> Smarty\'s [`$error_reporting`](#variable.error.reporting) property and +> a variable had not been assigned to Smarty. + + + {* the long way *} + {if $title eq ''} + + {else} + {$title} + {/if} + + {* the short way *} + {$title|default:' '} + + + +See also [`default`](#language.modifier.default) modifier and [default +variable handling](#tips.default.var.handling). + +Default Variable Handling {#tips.default.var.handling} +========================= + +If a variable is used frequently throughout your templates, applying the +[`default`](#language.modifier.default) modifier every time it is +mentioned can get a bit ugly. You can remedy this by assigning the +variable its default value with the +[`{assign}`](#language.function.assign) function. + + + {* do this somewhere at the top of your template *} + {assign var='title' value=$title|default:'no title'} + + {* if $title was empty, it now contains the value "no title" when you use it *} + {$title} + + + +See also [`default`](#language.modifier.default) modifier and [blank +variable handling](#tips.blank.var.handling). + +Passing variable title to header template {#tips.passing.vars} +========================================= + +When the majority of your templates use the same headers and footers, it +is common to split those out into their own templates and +[`{include}`](#language.function.include) them. But what if the header +needs to have a different title, depending on what page you are coming +from? You can pass the title to the header as an +[attribute](#language.syntax.attributes) when it is included. + +`mainpage.tpl` - When the main page is drawn, the title of "Main Page" +is passed to the `header.tpl`, and will subsequently be used as the +title. + + + {include file='header.tpl' title='Main Page'} + {* template body goes here *} + {include file='footer.tpl'} + + + +`archives.tpl` - When the archives page is drawn, the title will be +"Archives". Notice in the archive example, we are using a variable from +the `archives_page.conf` file instead of a hard coded variable. + + + {config_load file='archive_page.conf'} + + {include file='header.tpl' title=#archivePageTitle#} + {* template body goes here *} + {include file='footer.tpl'} + + + +`header.tpl` - Notice that "Smarty News" is printed if the `$title` +variable is not set, using the [`default`](#language.modifier.default) +variable modifier. + + + <html> + <head> + <title>{$title|default:'Smarty News'}</title> + </head> + <body> + + + +`footer.tpl` + + + </body> + </html> + + + +Dates {#tips.dates} +===== + +As a rule of thumb, always pass dates to Smarty as +[timestamps](&url.php-manual;time). This allows template designers to +use the [`date_format`](#language.modifier.date.format) modifier for +full control over date formatting, and also makes it easy to compare +dates if necessary. + + + {$startDate|date_format} + + + +This will output: + + + Jan 4, 2009 + + + + + {$startDate|date_format:"%Y/%m/%d"} + + + +This will output: + + + 2009/01/04 + + + +Dates can be compared in the template by timestamps with: + + + {if $order_date < $invoice_date} + ...do something.. + {/if} + + + +When using [`{html_select_date}`](#language.function.html.select.date) +in a template, the programmer will most likely want to convert the +output from the form back into timestamp format. Here is a function to +help you with that. + + + <?php + + // this assumes your form elements are named + // startDate_Day, startDate_Month, startDate_Year + + $startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day); + + function makeTimeStamp($year='', $month='', $day='') + { + if(empty($year)) { + $year = strftime('%Y'); + } + if(empty($month)) { + $month = strftime('%m'); + } + if(empty($day)) { + $day = strftime('%d'); + } + + return mktime(0, 0, 0, $month, $day, $year); + } + ?> + + + +See also [`{html_select_date}`](#language.function.html.select.date), +[`{html_select_time}`](#language.function.html.select.time), +[`date_format`](#language.modifier.date.format) and +[`$smarty.now`](#language.variables.smarty.now), + +WAP/WML {#tips.wap} +======= + +WAP/WML templates require a php [Content-Type +header](&url.php-manual;header) to be passed along with the template. +The easist way to do this would be to write a custom function that +prints the header. If you are using [caching](#caching), that won\'t +work so we\'ll do it using the [`{insert}`](#language.function.insert) +tag; remember `{insert}` tags are not cached! Be sure that there is +nothing output to the browser before the template, or else the header +may fail. + + + <?php + + // be sure apache is configure for the .wml extensions! + // put this function somewhere in your application, or in Smarty.addons.php + function insert_header($params) + { + // this function expects $content argument + if (empty($params['content'])) { + return; + } + header($params['content']); + return; + } + + ?> + + + +your Smarty template *must* begin with the insert tag : + + + {insert name=header content="Content-Type: text/vnd.wap.wml"} + + <?xml version="1.0"?> + <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> + + <!-- begin new wml deck --> + <wml> + <!-- begin first card --> + <card> + <do type="accept"> + <go href="#two"/> + </do> + <p> + Welcome to WAP with Smarty! + Press OK to continue... + </p> + </card> + <!-- begin second card --> + <card id="two"> + <p> + Pretty easy isn't it? + </p> + </card> + </wml> + + + +Componentized Templates {#tips.componentized.templates} +======================= + +Traditionally, programming templates into your applications goes as +follows: First, you accumulate your variables within your PHP +application, (maybe with database queries.) Then, you instantiate your +Smarty object, [`assign()`](#api.assign) the variables and +[`display()`](#api.display) the template. So lets say for example we +have a stock ticker on our template. We would collect the stock data in +our application, then assign these variables in the template and display +it. Now wouldn\'t it be nice if you could add this stock ticker to any +application by merely including the template, and not worry about +fetching the data up front? + +You can do this by writing a custom plugin for fetching the content and +assigning it to a template variable. + +`function.load_ticker.php` - drop file in +[`$plugins directory`](#variable.plugins.dir) + + + <?php + + // setup our function for fetching stock data + function fetch_ticker($symbol) + { + // put logic here that fetches $ticker_info + // from some ticker resource + return $ticker_info; + } + + function smarty_function_load_ticker($params, $smarty) + { + // call the function + $ticker_info = fetch_ticker($params['symbol']); + + // assign template variable + $smarty->assign($params['assign'], $ticker_info); + } + ?> + + + +`index.tpl` + + + {load_ticker symbol='SMARTY' assign='ticker'} + + Stock Name: {$ticker.name} Stock Price: {$ticker.price} + + + +See also [`{include_php}`](#language.function.include.php), +[`{include}`](#language.function.include) and +[`{php}`](#language.function.php). + +Obfuscating E-mail Addresses {#tips.obfuscating.email} +============================ + +Do you ever wonder how your email address gets on so many spam mailing +lists? One way spammers collect email addresses is from web pages. To +help combat this problem, you can make your email address show up in +scrambled javascript in the HTML source, yet it it will look and work +correctly in the browser. This is done with the +[`{mailto}`](#language.function.mailto) plugin. + + + <div id="contact">Send inquiries to + {mailto address=$EmailAddress encode='javascript' subject='Hello'} + </div> + + + +> **Note** +> +> This method isn\'t 100% foolproof. A spammer could conceivably program +> his e-mail collector to decode these values, but not likely\.... +> hopefully..yet \... wheres that quantum computer :-?. + +See also [`escape`](#language.modifier.escape) modifier and +[`{mailto}`](#language.function.mailto). diff --git a/vendor/smarty/smarty/docs/appendixes/troubleshooting.md b/vendor/smarty/smarty/docs/appendixes/troubleshooting.md new file mode 100644 index 000000000..fe012c12c --- /dev/null +++ b/vendor/smarty/smarty/docs/appendixes/troubleshooting.md @@ -0,0 +1,120 @@ +Troubleshooting +=============== + +Smarty/PHP errors {#smarty.php.errors} +================= + +Smarty can catch many errors such as missing tag attributes or malformed +variable names. If this happens, you will see an error similar to the +following: + + + Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah' + in /path/to/smarty/Smarty.class.php on line 1041 + + Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name + in /path/to/smarty/Smarty.class.php on line 1041 + + + +Smarty shows you the template name, the line number and the error. After +that, the error consists of the actual line number in the Smarty class +that the error occurred. + +There are certain errors that Smarty cannot catch, such as missing close +tags. These types of errors usually end up in PHP compile-time parsing +errors. + + + Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75 + + + +When you encounter a PHP parsing error, the error line number will +correspond to the compiled PHP script, NOT the template itself. Usually +you can look at the template and spot the syntax error. Here are some +common things to look for: missing close tags for +[`{if}{/if}`](#language.function.if) or +[`{section}{/section}`](#language.function.if), or syntax of logic +within an `{if}` tag. If you can\'t find the error, you might have to +open the compiled PHP file and go to the line number to figure out where +the corresponding error is in the template. + + + Warning: Smarty error: unable to read resource: "index.tpl" in... + or + Warning: Smarty error: unable to read resource: "site.conf" in... + +- The [`$template_dir`](#variable.template.dir) is incorrect, doesn\'t + exist or the file `index.tpl` is not in the `templates/` directory + +- A [`{config_load}`](#language.function.config.load) function is + within a template (or [`configLoad()`](#api.config.load) has been + called) and either [`$config_dir`](#variable.config.dir) is + incorrect, does not exist or `site.conf` is not in the directory. + +<!-- --> + + + Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist, + or is not a directory... + + + +- Either the [`$compile_dir`](#variable.compile.dir)is incorrectly + set, the directory does not exist, or `templates_c` is a file and + not a directory. + +<!-- --> + + + Fatal error: Smarty error: unable to write to $compile_dir '.... + + + +- The [`$compile_dir`](#variable.compile.dir) is not writable by the + web server. See the bottom of the [installing + smarty](#installing.smarty.basic) page for more about permissions. + +<!-- --> + + + Fatal error: Smarty error: the $cache_dir 'cache' does not exist, + or is not a directory. in /.. + + + +- This means that [`$caching`](#variable.caching) is enabled and + either; the [`$cache_dir`](#variable.cache.dir) is incorrectly set, + the directory does not exist, or `cache/` is a file and not a + directory. + +<!-- --> + + + Fatal error: Smarty error: unable to write to $cache_dir '/... + + + +- This means that [`$caching`](#variable.caching) is enabled and the + [`$cache_dir`](#variable.cache.dir) is not writable by the web + server. See the bottom of the [installing + smarty](#installing.smarty.basic) page for permissions. + +<!-- --> + + + Warning: filemtime(): stat failed for /path/to/smarty/cache/3ab50a623e65185c49bf17c63c90cc56070ea85c.one.tpl.php + in /path/to/smarty/libs/sysplugins/smarty_resource.php + + + +- This means that your application registered a custom error hander + (using [set\_error\_handler()](&url.php-manual;set_error_handler)) + which is not respecting the given `$errno` as it should. If, for + whatever reason, this is the desired behaviour of your custom error + handler, please call + [`muteExpectedErrors()`](#api.mute.expected.errors) after you\'ve + registered your custom error handler. + +See also [debugging](#chapter.debugging.console). diff --git a/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md new file mode 100644 index 000000000..6429b4876 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md @@ -0,0 +1,41 @@ +Debugging Console {#chapter.debugging.console} +================= + +There is a debugging console included with Smarty. The console informs +you of all the [included](./language-builtin-functions/language-function-include.md) templates, +[assigned](../programmers/api-functions/api-assign.md) variables and +[config](./language-variables/language-config-variables.md) file variables for the current +invocation of the template. A template file named `debug.tpl` is +included with the distribution of Smarty which controls the formatting +of the console. + +Set [`$debugging`](../programmers/api-variables/variable-debugging.md) to TRUE in Smarty, and if needed +set [`$debug_tpl`](../programmers/api-variables/variable-debug-template.md) to the template resource +path to `debug.tpl` (this is in [`SMARTY_DIR`](../programmers/smarty-constants.md) by +default). When you load the page, a Javascript console window will pop +up and give you the names of all the included templates and assigned +variables for the current page. + +To see the available variables for a particular template, see the +[`{debug}`](./language-builtin-functions/language-function-debug.md) template function. To disable the +debugging console, set [`$debugging`](../programmers/api-variables/variable-debugging.md) to FALSE. You +can also temporarily turn on the debugging console by putting +`SMARTY_DEBUG` in the URL if you enable this option with +[`$debugging_ctrl`](../programmers/api-variables/variable-debugging-ctrl.md). + +> **Note** +> +> The debugging console does not work when you use the +> [`fetch()`](../programmers/api-functions/api-fetch.md) API, only when using +> [`display()`](../programmers/api-functions/api-display.md). It is a set of javascript statements +> added to the very bottom of the generated template. If you do not like +> javascript, you can edit the `debug.tpl` template to format the output +> however you like. Debug data is not cached and `debug.tpl` info is not +> included in the output of the debug console. + +> **Note** +> +> The load times of each template and config file are in seconds, or +> fractions thereof. + +See also [troubleshooting](../appendixes/troubleshooting.md). diff --git a/vendor/smarty/smarty/docs/designers/config-files.md b/vendor/smarty/smarty/docs/designers/config-files.md new file mode 100644 index 000000000..c840e3a67 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/config-files.md @@ -0,0 +1,77 @@ +Config Files {#config.files} +============ + +Config files are handy for designers to manage global template variables +from one file. One example is template colors. Normally if you wanted to +change the color scheme of an application, you would have to go through +each and every template file and change the colors. With a config file, +the colors can be kept in one place, and only one file needs to be +updated. + + + # global variables + pageTitle = "Main Menu" + bodyBgColor = #000000 + tableBgColor = #000000 + rowBgColor = #00ff00 + + [Customer] + pageTitle = "Customer Info" + + [Login] + pageTitle = "Login" + focus = "username" + Intro = """This is a value that spans more + than one line. you must enclose + it in triple quotes.""" + + # hidden section + [.Database] + host=my.example.com + db=ADDRESSBOOK + user=php-user + pass=foobar + + + +Values of [config file variables](./language-variables/language-config-variables.md) can be in +quotes, but not necessary. You can use either single or double quotes. +If you have a value that spans more than one line, enclose the entire +value with triple quotes (\"\"\"). You can put comments into config +files by any syntax that is not a valid config file syntax. We recommend +using a ` + #` (hash) at the beginning of the line. + +The example config file above has two sections. Section names are +enclosed in \[brackets\]. Section names can be arbitrary strings not +containing `[` or `]` symbols. The four variables at the top are global +variables, or variables not within a section. These variables are always +loaded from the config file. If a particular section is loaded, then the +global variables and the variables from that section are also loaded. If +a variable exists both as a global and in a section, the section +variable is used. If you name two variables the same within a section, +the last one will be used unless +[`$config_overwrite`](../programmers/api-variables/variable-config-overwrite.md) is disabled. + +Config files are loaded into templates with the built-in template +function [` + {config_load}`](./language-builtin-functions/language-function-config-load.md) or the API +[`configLoad()`](../programmers/api-functions/api-config-load.md) function. + +You can hide variables or entire sections by prepending the variable +name or section name with a period(.) eg `[.hidden]`. This is useful if +your application reads the config files and gets sensitive data from +them that the template engine does not need. If you have third parties +doing template editing, you can be certain that they cannot read +sensitive data from the config file by loading it into the template. + +Config files (or resources) are loaded by the same resource facilities +as templates. That means that a config file can also be loaded from a db +`$smarty->configLoad("db:my.conf")`. + +See also [`{config_load}`](./language-builtin-functions/language-function-config-load.md), +[`$config_overwrite`](../programmers/api-variables/variable-config-overwrite.md), +[`$default_config_handler_func`](../programmers/api-variables/variable-default-config-handler-func.md), +[`getConfigVars()`](../programmers/api-functions/api-get-config-vars.md), +[`clearConfig()`](../programmers/api-functions/api-clear-config.md) and +[`configLoad()`](../programmers/api-functions/api-config-load.md) diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax.md new file mode 100644 index 000000000..2509857c3 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax.md @@ -0,0 +1,33 @@ +Basic Syntax +============ + +A simple Smarty template could look like this: +```html +<h1>{$title|escape}</h1> +<ul> + {foreach $cities as $city} + <li>{$city.name|escape} ({$city.population})</li> + {foreachelse} + <li>no cities found</li> + {/foreach} +</ul> +``` + +All Smarty template tags are enclosed within delimiters. By default +these are `{` and `}`, but they can be +[changed](../programmers/api-variables/variable-left-delimiter.md). + +For the examples in this manual, we will assume that you are using the +default delimiters. In Smarty, all content outside of delimiters is +displayed as static content, or unchanged. When Smarty encounters +template tags, it attempts to interpret them, and displays the +appropriate output in their place. + +The basis components of the Smarty syntax are: +- [Comments](./language-basic-syntax/language-syntax-comments.md) +- [Variables](./language-basic-syntax/language-syntax-variables.md) +- [Functions](./language-basic-syntax/language-syntax-functions.md) +- [Attributes](./language-basic-syntax/language-syntax-attributes.md) +- [Quotes](./language-basic-syntax/language-syntax-quotes.md) +- [Math](./language-basic-syntax/language-math.md) +- [Escaping](./language-basic-syntax/language-escaping.md) diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md new file mode 100644 index 000000000..a62e7de89 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md @@ -0,0 +1,84 @@ +Escaping Smarty Parsing {#language.escaping} +======================= + +It is sometimes desirable or even necessary to have Smarty ignore +sections it would otherwise parse. A classic example is embedding +Javascript or CSS code in a template. The problem arises as those +languages use the { and } characters which are also the default +[delimiters](#language.function.ldelim) for Smarty. + +> **Note** +> +> A good practice for avoiding escapement altogether is by separating +> your Javascript/CSS into their own files and use standard HTML methods +> to access them. This will also take advantage of browser script +> caching. When you need to embed Smarty variables/functions into your +> Javascript/CSS, then the following applies. + +In Smarty templates, the { and } braces will be ignored so long as they +are surrounded by white space. This behavior can be disabled by setting +the Smarty class variable [`$auto_literal`](#variable.auto.literal) to +false. + + + <script> + // the following braces are ignored by Smarty + // since they are surrounded by whitespace + function foobar { + alert('foobar!'); + } + // this one will need literal escapement + {literal} + function bazzy {alert('foobar!');} + {/literal} + </script> + + + +[`{literal}..{/literal}`](#language.function.literal) blocks are used +for escaping blocks of template logic. You can also escape the braces +individually with +[`{ldelim}`](#language.function.ldelim),[`{rdelim}`](#language.function.ldelim) +tags or +[`{$smarty.ldelim}`,`{$smarty.rdelim}`](#language.variables.smarty.ldelim) +variables. + +Smarty\'s default delimiters { and } cleanly represent presentational +content. However if another set of delimiters suit your needs better, +you can change them with Smarty\'s +[`$left_delimiter`](#variable.left.delimiter) and +[`$right_delimiter`](#variable.right.delimiter) values. + +> **Note** +> +> Changing delimiters affects ALL template syntax and escapement. Be +> sure to clear out cache and compiled files if you decide to change +> them. + + + <?php + + $smarty->left_delimiter = '<!--{'; + $smarty->right_delimiter = '}-->'; + + $smarty->assign('foo', 'bar'); + $smarty->assign('name', 'Albert'); + $smarty->display('example.tpl'); + + ?> + + + +Where the template is: + + + Welcome <!--{$name}--> to Smarty + <script language="javascript"> + var foo = <!--{$foo}-->; + function dosomething() { + alert("foo is " + foo); + } + dosomething(); + </script> + + diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md new file mode 100644 index 000000000..dc78a3512 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md @@ -0,0 +1,29 @@ +Math {#language.math} +==== + +Math can be applied directly to variable values. + + + {$foo+1} + + {$foo*$bar} + + {* some more complicated examples *} + + {$foo->bar-$bar[1]*$baz->foo->bar()-3*7} + + {if ($foo+$bar.test%$baz*134232+10+$b+10)} + + {$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"} + + {assign var="foo" value="`$foo+$bar`"} + + + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md new file mode 100644 index 000000000..0fa7c7734 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md @@ -0,0 +1,50 @@ +Attributes {#language.syntax.attributes} +========== + +Most of the [functions](#language.syntax.functions) take attributes that +specify or modify their behavior. Attributes to Smarty functions are +much like HTML attributes. Static values don\'t have to be enclosed in +quotes, but it is required for literal strings. Variables with or +without modifiers may also be used, and should not be in quotes. You can +even use PHP function results, plugin results and complex expressions. + +Some attributes require boolean values (TRUE or FALSE). These can be +specified as `true` and `false`. If an attribute has no value assigned +it gets the default boolean value of true. + + + {include file="header.tpl"} + + {include file="header.tpl" nocache} // is equivalent to nocache=true + + {include file="header.tpl" attrib_name="attrib value"} + + {include file=$includeFile} + + {include file=#includeFile# title="My Title"} + + {assign var=foo value={counter}} // plugin result + + {assign var=foo value=substr($bar,2,5)} // PHP function result + + {assign var=foo value=$bar|strlen} // using modifier + + {assign var=foo value=$buh+$bar|strlen} // more complex expression + + {html_select_date display_days=true} + + {mailto address="smarty@example.com"} + + <select name="company_id"> + {html_options options=$companies selected=$company_id} + </select> + + + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md new file mode 100644 index 000000000..43104dbb6 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md @@ -0,0 +1,71 @@ +Comments {#language.syntax.comments} +======== + +Template comments are surrounded by asterisks, and that is surrounded by +the [delimiter](#variable.left.delimiter) tags like so: + +::: {.informalexample} + + {* this is a comment *} + + +::: + +Smarty comments are NOT displayed in the final output of the template, +unlike `<!-- HTML comments -->`. These are useful for making internal +notes in the templates which no one will see ;-) + + + {* I am a Smarty comment, I don't exist in the compiled output *} + <html> + <head> + <title>{$title}</title> + </head> + <body> + + {* another single line smarty comment *} + <!-- HTML comment that is sent to the browser --> + + {* this multiline smarty + comment is + not sent to browser + *} + + {********************************************************* + Multi line comment block with credits block + @ author: bg@example.com + @ maintainer: support@example.com + @ para: var that sets block style + @ css: the style output + **********************************************************} + + {* The header file with the main logo and stuff *} + {include file='header.tpl'} + + + {* Dev note: the $includeFile var is assigned in foo.php script *} + <!-- Displays main content block --> + {include file=$includeFile} + + {* this <select> block is redundant *} + {* + <select name="company"> + {html_options options=$vals selected=$selected_id} + </select> + *} + + <!-- Show header from affiliate is disabled --> + {* $affiliate|upper *} + + {* you cannot nest comments *} + {* + <select name="company"> + {* <option value="0">-- none -- </option> *} + {html_options options=$vals selected=$selected_id} + </select> + *} + + </body> + </html> + + diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md new file mode 100644 index 000000000..9c8c94049 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md @@ -0,0 +1,40 @@ +Functions {#language.syntax.functions} +========= + +Every Smarty tag either prints a [variable](#language.variables) or +invokes some sort of function. These are processed and displayed by +enclosing the function and its [attributes](#language.syntax.attributes) +within delimiters like so: `{funcname attr1="val1" attr2="val2"}`. + + + {config_load file="colors.conf"} + + {include file="header.tpl"} + {insert file="banner_ads.tpl" title="My Site"} + + {if $logged_in} + Welcome, <span style="color:{#fontColor#}">{$name}!</span> + {else} + hi, {$name} + {/if} + + {include file="footer.tpl"} + + + +- Both [built-in functions](#language.builtin.functions) and [custom + functions](#language.custom.functions) have the same syntax within + templates. + +- Built-in functions are the **inner** workings of Smarty, such as + [`{if}`](#language.function.if), + [`{section}`](#language.function.section) and + [`{strip}`](#language.function.strip). There should be no need to + change or modify them. + +- Custom functions are **additional** functions implemented via + [plugins](#plugins). They can be modified to your liking, or you can + create new ones. [`{html_options}`](#language.function.html.options) + is an example of a custom function. + +See also [`registerPlugin()`](#api.register.plugin) diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md new file mode 100644 index 000000000..6fe185c97 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md @@ -0,0 +1,61 @@ +Embedding Vars in Double Quotes {#language.syntax.quotes} +=============================== + +- Smarty will recognize [assigned](#api.assign) + [variables](#language.syntax.variables) embedded in \"double + quotes\" so long as the variable name contains only numbers, letters + and under\_scores. See [naming](&url.php-manual;language.variables) + for more detail. + +- With any other characters, for example a period(.) or + `$object->reference`, then the variable must be surrounded by + `` `backticks` ``. + +- In addition Smarty3 does allow embedded Smarty tags in double quoted + strings. This is useful if you want to include variables with + modifiers, plugin or PHP function results. + +<!-- --> + + + {func var="test $foo test"} // sees $foo + {func var="test $foo_bar test"} // sees $foo_bar + {func var="test `$foo[0]` test"} // sees $foo[0] + {func var="test `$foo[bar]` test"} // sees $foo[bar] + {func var="test $foo.bar test"} // sees $foo (not $foo.bar) + {func var="test `$foo.bar` test"} // sees $foo.bar + {func var="test `$foo.bar` test"|escape} // modifiers outside quotes! + {func var="test {$foo|escape} test"} // modifiers inside quotes! + {func var="test {time()} test"} // PHP function result + {func var="test {counter} test"} // plugin result + {func var="variable foo is {if !$foo}not {/if} defined"} // Smarty block function + + + + + {* will replace $tpl_name with value *} + {include file="subdir/$tpl_name.tpl"} + + {* does NOT replace $tpl_name *} + {include file='subdir/$tpl_name.tpl'} // vars require double quotes! + + {* must have backticks as it contains a dot "." *} + {cycle values="one,two,`$smarty.config.myval`"} + + {* must have backticks as it contains a dot "." *} + {include file="`$module.contact`.tpl"} + + {* can use variable with dot syntax *} + {include file="`$module.$view`.tpl"} + + + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. + +See also [`escape`](#language.modifier.escape). diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md new file mode 100644 index 000000000..671ad8bb8 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md @@ -0,0 +1,111 @@ +Variables {#language.syntax.variables} +========= + +Template variables start with the \$dollar sign. They can contain +numbers, letters and underscores, much like a [PHP +variable](&url.php-manual;language.variables). You can reference arrays +by index numerically or non-numerically. Also reference object +properties and methods. + +[Config file variables](#language.config.variables) are an exception to +the \$dollar syntax and are instead referenced with surrounding +\#hashmarks\#, or via the +[`$smarty.config`](#language.variables.smarty.config) variable. + + + {$foo} <-- displaying a simple variable (non array/object) + {$foo[4]} <-- display the 5th element of a zero-indexed array + {$foo.bar} <-- display the "bar" key value of an array, similar to PHP $foo['bar'] + {$foo.$bar} <-- display variable key value of an array, similar to PHP $foo[$bar] + {$foo->bar} <-- display the object property "bar" + {$foo->bar()} <-- display the return value of object method "bar" + {#foo#} <-- display the config file variable "foo" + {$smarty.config.foo} <-- synonym for {#foo#} + {$foo[bar]} <-- syntax only valid in a section loop, see {section} + {assign var=foo value='baa'}{$foo} <-- displays "baa", see {assign} + + Many other combinations are allowed + + {$foo.bar.baz} + {$foo.$bar.$baz} + {$foo[4].baz} + {$foo[4].$baz} + {$foo.bar.baz[4]} + {$foo->bar($baz,2,$bar)} <-- passing parameters + {"foo"} <-- static values are allowed + + {* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*} + {$smarty.server.SERVER_NAME} + + Math and embedding tags: + + {$x+$y} // will output the sum of x and y. + {assign var=foo value=$x+$y} // in attributes + {$foo[$x+3]} // as array index + {$foo={counter}+3} // tags within tags + {$foo="this is message {counter}"} // tags within double quoted strings + + Defining Arrays: + + {assign var=foo value=[1,2,3]} + {assign var=foo value=['y'=>'yellow','b'=>'blue']} + {assign var=foo value=[1,[9,8],3]} // can be nested + + Short variable assignment: + + {$foo=$bar+2} + {$foo = strlen($bar)} // function in assignment + {$foo = myfunct( ($x+$y)*3 )} // as function parameter + {$foo.bar=1} // assign to specific array element + {$foo.bar.baz=1} + {$foo[]=1} // appending to an array + + Smarty "dot" syntax (note: embedded {} are used to address ambiguities): + + {$foo.a.b.c} => $foo['a']['b']['c'] + {$foo.a.$b.c} => $foo['a'][$b]['c'] // with variable index + {$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] // with expression as index + {$foo.a.{$b.c}} => $foo['a'][$b['c']] // with nested index + + PHP-like syntax, alternative to "dot" syntax: + + {$foo[1]} // normal access + {$foo['bar']} + {$foo['bar'][1]} + {$foo[$x+$x]} // index may contain any expression + {$foo[$bar[1]]} // nested index + {$foo[section_name]} // smarty {section} access, not array access! + + Variable variables: + + $foo // normal variable + $foo_{$bar} // variable name containing other variable + $foo_{$x+$y} // variable name containing expressions + $foo_{$bar}_buh_{$blar} // variable name with multiple segments + {$foo_{$x}} // will output the variable $foo_1 if $x has a value of 1. + + Object chaining: + + {$object->method1($x)->method2($y)} + + Direct PHP function access: + + {time()} + + + + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. + +Request variables such as `$_GET`, `$_SESSION`, etc are available via +the reserved [`$smarty`](#language.variables.smarty) variable. + +See also [`$smarty`](#language.variables.smarty), [config +variables](#language.config.variables) +[`{assign}`](#language.function.assign) and [`assign()`](#api.assign). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md new file mode 100644 index 000000000..6c0879d6c --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md @@ -0,0 +1,39 @@ +Built-in Functions {#language.builtin.functions} +================== + +## Table of contents +- [{$var=...}](./language-builtin-functions/language-function-shortform-assign.md) +- [{append}](./language-builtin-functions/language-function-append.md) +- [{assign}](./language-builtin-functions/language-function-assign.md) +- [{block}](./language-builtin-functions/language-function-block.md) +- [{call}](./language-builtin-functions/language-function-call.md) +- [{capture}](./language-builtin-functions/language-function-capture.md) +- [{config_load}](./language-builtin-functions/language-function-config.load) +- [{debug}](./language-builtin-functions/language-function-debug.md) +- [{extends}](./language-builtin-functions/language-function-extends.md) +- [{for}](./language-builtin-functions/language-function-for.md) +- [{foreach},{foreachelse}](./language-builtin-functions/language-function-foreach.md) +- [{function}](./language-builtin-functions/language-function-function.md) +- [{if},{elseif},{else}](./language-builtin-functions/language-function-if.md) +- [{include}](./language-builtin-functions/language-function-include.md) +- [{include_php}](./language-builtin-functions/language-function-include.php) +- [{insert}](./language-builtin-functions/language-function-insert.md) +- [{ldelim},{rdelim}](./language-builtin-functions/language-function-ldelim.md) +- [{literal}](./language-builtin-functions/language-function-literal.md) +- [{nocache}](./language-builtin-functions/language-function-nocache.md) +- [{section},{sectionelse}](./language-builtin-functions/language-function-section.md) +- [{setfilter}](./language-builtin-functions/language-function-setfilter.md) +- [{strip}](./language-builtin-functions/language-function-strip.md) +- [{while}](./language-builtin-functions/language-function-while.md) + +Smarty comes with several built-in functions. These built-in functions +are the integral part of the smarty template engine. They are compiled +into corresponding inline PHP code for maximum performance. + +You cannot create your own [custom +functions](./language-custom-functions.md) with the same name; and you +should not need to modify the built-in functions. + +A few of these functions have an `assign` attribute which collects the +result the function to a named template variable instead of being +output; much like the [`{assign}`](./language-builtin-functions/language-function-assign.md) function. diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md new file mode 100644 index 000000000..62f2c7e19 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md @@ -0,0 +1,49 @@ +{append} {#language.function.append} +======== + +`{append}` is used for creating or appending template variable arrays +**during the execution of a template**. + +> **Note** +> +> Assignment of variables in-template is essentially placing application +> logic into the presentation that may be better handled in PHP. Use at +> your own discretion. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ---------------------------------------------------------------------------------------------------- + var string Yes *n/a* The name of the variable being assigned + value string Yes *n/a* The value being assigned + index string No *n/a* The index for the new array element. If not specified the value is append to the end of the array. + scope string No *n/a* The scope of the assigned variable: \'parent\',\'root\' or \'global\' + +**Option Flags:** + + Name Description + --------- ----------------------------------------------------- + nocache Assigns the variable with the \'nocache\' attribute + + + {append var='name' value='Bob' index='first'} + {append var='name' value='Meyer' index='last'} + // or + {append 'name' 'Bob' index='first'} {* short-hand *} + {append 'name' 'Meyer' index='last'} {* short-hand *} + + The first name is {$name.first}.<br> + The last name is {$name.last}. + + + +The above example will output: + + + The first name is Bob. + The last name is Meyer. + + + +See also [`append()`](#api.append) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md new file mode 100644 index 000000000..3d3615bff --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md @@ -0,0 +1,149 @@ +{assign} {#language.function.assign} +======== + +`{assign}` is used for assigning template variables **during the +execution of a template**. + +> **Note** +> +> Assignment of variables in-template is essentially placing application +> logic into the presentation that may be better handled in PHP. Use at +> your own discretion. + +> **Note** +> +> See also the [`short-form`](#language.function.shortform.assign) +> method of assigning template vars. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ----------------------------------------------------------------------- + var string Yes *n/a* The name of the variable being assigned + value string Yes *n/a* The value being assigned + scope string No *n/a* The scope of the assigned variable: \'parent\',\'root\' or \'global\' + +**Option Flags:** + + Name Description + --------- ----------------------------------------------------- + nocache Assigns the variable with the \'nocache\' attribute + + + {assign var="name" value="Bob"} + {assign "name" "Bob"} {* short-hand *} + + The value of $name is {$name}. + + + +The above example will output: + + + The value of $name is Bob. + + + + + {assign var="name" value="Bob" nocache} + {assign "name" "Bob" nocache} {* short-hand *} + + The value of $name is {$name}. + + + +The above example will output: + + + The value of $name is Bob. + + + + + {assign var=running_total value=$running_total+$some_array[$row].some_value} + + + +Variables assigned in the included template will be seen in the +including template. + + + {include file="sub_template.tpl"} + ... + {* display variable assigned in sub_template *} + {$foo}<br> + ... + + + +The template above includes the example `sub_template.tpl` below + + + ... + {* foo will be known also in the including template *} + {assign var="foo" value="something" scope=parent} + {* bar is assigned only local in the including template *} + {assign var="bar" value="value"} + ... + +You can assign a variable to root of the current root tree. The variable +is seen by all templates using the same root tree. + + + {assign var=foo value="bar" scope="root"} + + + +A global variable is seen by all templates. + + + {assign var=foo value="bar" scope="global"} + {assign "foo" "bar" scope="global"} {* short-hand *} + + + +To access `{assign}` variables from a php script use +[`getTemplateVars()`](#api.get.template.vars). Here\'s the template that +creates the variable `$foo`. + + + {assign var="foo" value="Smarty"} + +The template variables are only available after/during template +execution as in the following script. + + + <?php + + // this will output nothing as the template has not been executed + echo $smarty->getTemplateVars('foo'); + + // fetch the template to a variable + $whole_page = $smarty->fetch('index.tpl'); + + // this will output 'smarty' as the template has been executed + echo $smarty->getTemplateVars('foo'); + + $smarty->assign('foo','Even smarter'); + + // this will output 'Even smarter' + echo $smarty->getTemplateVars('foo'); + + ?> + +The following functions can also *optionally* assign template variables. + +[`{capture}`](#language.function.capture), +[`{include}`](#language.function.include), +[`{include_php}`](#language.function.include.php), +[`{insert}`](#language.function.insert), +[`{counter}`](#language.function.counter), +[`{cycle}`](#language.function.cycle), +[`{eval}`](#language.function.eval), +[`{fetch}`](#language.function.fetch), +[`{math}`](#language.function.math), +[`{textformat}`](#language.function.textformat) + +See also [`{$var=...}`](#language.function.shortform.assign), +[`assign()`](#api.assign) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md new file mode 100644 index 000000000..941997a55 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md @@ -0,0 +1,191 @@ +{block} {#language.function.block} +======= + +`{block}` is used to define a named area of template source for template +inheritance. For details see section of [Template +Interitance](#advanced.features.template.inheritance). + +The `{block}` template source area of a child template will replace the +correponding areas in the parent template(s). + +Optionally `{block}` areas of child and parent templates can be merged +into each other. You can append or prepend the parent `{block}` content +by using the `append` or `prepend` option flag with the childs `{block}` +definition. With the {\$smarty.block.parent} the `{block}` content of +the parent template can be inserted at any location of the child +`{block}` content. {\$smarty.block.child} inserts the `{block}` content +of the child template at any location of the parent `{block}`. + +`{blocks}'s` can be nested. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- --------------------------------------- + name string Yes *n/a* The name of the template source block + +**Option Flags (in child templates only):** + + Name Description + --------- ------------------------------------------------------------------------------------------- + append The `{block}` content will be be appended to the content of the parent template `{block}` + prepend The `{block}` content will be prepended to the content of the parent template `{block}` + hide Ignore the block content if no child block of same name is existing. + nocache Disables caching of the `{block}` content + +parent.tpl + + + <html> + <head> + <title>{block name="title"}Default Title{/block}</title> + <title>{block "title"}Default Title{/block}</title> {* short-hand *} + </head> + </html> + + + +child.tpl + + + {extends file="parent.tpl"} + {block name="title"} + Page Title + {/block} + + + +The result would look like + + + <html> + <head> + <title>Page Title</title> + </head> + </html> + +parent.tpl + + + <html> + <head> + <title>{block name="title"}Title - {/block}</title> + </head> + </html> + + + +child.tpl + + + {extends file="parent.tpl"} + {block name="title" prepend} + Page Title + {/block} + + + +The result would look like + + + <html> + <head> + <title>Title - Page Title</title> + </head> + </html> + +parent.tpl + + + <html> + <head> + <title>{block name="title"} is my title{/block}</title> + </head> + </html> + + + +child.tpl + + + {extends file="parent.tpl"} + {block name="title" append} + Page Title + {/block} + + + +The result would look like + + + <html> + <head> + <title>Page title is my titel</title> + </head> + </html> + +parent.tpl + + + <html> + <head> + <title>{block name="title"}The {$smarty.block.child} was inserted here{/block}</title> + </head> + </html> + + + +child.tpl + + + {extends file="parent.tpl"} + {block name="title"} + Child Title + {/block} + + + +The result would look like + + + <html> + <head> + <title>The Child Title was inserted here</title> + </head> + </html> + +parent.tpl + + + <html> + <head> + <title>{block name="title"}Parent Title{/block}</title> + </head> + </html> + + + +child.tpl + + + {extends file="parent.tpl"} + {block name="title"} + You will see now - {$smarty.block.parent} - here + {/block} + + + +The result would look like + + + <html> + <head> + <title>You will see now - Parent Title - here</title> + </head> + </html> + +See also [Template +Inheritance](#advanced.features.template.inheritance), +[`$smarty.block.parent`](#language.variables.smarty.block.parent), +[`$smarty.block.child`](#language.variables.smarty.block.child), and +[`{extends}`](#language.function.extends) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md new file mode 100644 index 000000000..786f0c10c --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md @@ -0,0 +1,76 @@ +{call} {#language.function.call} +====== + +`{call}` is used to call a template function defined by the +[`{function}`](#language.function.function) tag just like a plugin +function. + +> **Note** +> +> Template functions are defined global. Since the Smarty compiler is a +> single-pass compiler, The [`{call}`](#language.function.call) tag must +> be used to call a template function defined externally from the given +> template. Otherwise you can directly use the function as +> `{funcname ...}` in the template. + +- The `{call}` tag must have the `name` attribute which contains the + the name of the template function. + +- Values for variables can be passed to the template function as + [attributes](#language.syntax.attributes). + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------------- ---------- --------- ------------------------------------------------------------------------------------------ + name string Yes *n/a* The name of the template function + assign string No *n/a* The name of the variable that the output of called template function will be assigned to + \[var \...\] \[var type\] No *n/a* variable to pass local to template function + +**Option Flags:** + + Name Description + --------- -------------------------------------------- + nocache Call the template function in nocache mode + + + {* define the function *} + {function name=menu level=0} + <ul class="level{$level}"> + {foreach $data as $entry} + {if is_array($entry)} + <li>{$entry@key}</li> + {call name=menu data=$entry level=$level+1} + {else} + <li>{$entry}</li> + {/if} + {/foreach} + </ul> + {/function} + + {* create an array to demonstrate *} + {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => + ['item3-3-1','item3-3-2']],'item4']} + + {* run the array through the function *} + {call name=menu data=$menu} + {call menu data=$menu} {* short-hand *} + + + +Will generate the following output + + + * item1 + * item2 + * item3 + o item3-1 + o item3-2 + o item3-3 + + item3-3-1 + + item3-3-2 + * item4 + + + +See also [`{function}`](#language.function.function) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md new file mode 100644 index 000000000..9121b2874 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md @@ -0,0 +1,82 @@ +{capture} {#language.function.capture} +========= + +`{capture}` is used to collect the output of the template between the +tags into a variable instead of displaying it. Any content between +`{capture name='foo'}` and `{/capture}` is collected into the variable +specified in the `name` attribute. + +The captured content can be used in the template from the variable +[`$smarty.capture.foo`](#language.variables.smarty.capture) where "foo" +is the value passed in the `name` attribute. If you do not supply the +`name` attribute, then "default" will be used as the name ie +`$smarty.capture.default`. + +`{capture}'s` can be nested. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ---------------------------------------------------------------------- + name string Yes *n/a* The name of the captured block + assign string No *n/a* The variable name where to assign the captured output to + append string No *n/a* The name of an array variable where to append the captured output to + +**Option Flags:** + + Name Description + --------- ----------------------------------------- + nocache Disables caching of this captured block + +> **Note** +> +> Be careful when capturing [`{insert}`](#language.function.insert) +> output. If you have [`$caching`](#caching) enabled and you have +> [`{insert}`](#language.function.insert) commands that you expect to +> run within cached content, do not capture this content. + + + {* we don't want to print a div tag unless content is displayed *} + {capture name="banner"} + {capture "banner"} {* short-hand *} + {include file="get_banner.tpl"} + {/capture} + + {if $smarty.capture.banner ne ""} + <div id="banner">{$smarty.capture.banner}</div> + {/if} + + + +This example demonstrates the capture function. + + + {capture name=some_content assign=popText} + {capture some_content assign=popText} {* short-hand *} + The server is {$my_server_name|upper} at {$my_server_addr}<br> + Your ip is {$my_ip}. + {/capture} + <a href="#">{$popText}</a> + + + +This example also demonstrates how multiple calls of capture can be used +to create an array with captured content. + + + {capture append="foo"}hello{/capture}I say just {capture append="foo"}world{/capture} + {foreach $foo as $text}{$text} {/foreach} + + + +The above example will output: + + + I say just hello world + + + +See also [`$smarty.capture`](#language.variables.smarty.capture), +[`{eval}`](#language.function.eval), +[`{fetch}`](#language.function.fetch), [`fetch()`](#api.fetch) and +[`{assign}`](#language.function.assign). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md new file mode 100644 index 000000000..750f337c4 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md @@ -0,0 +1,91 @@ +{config\_load} {#language.function.config.load} +============== + +`{config_load}` is used for loading config +[`#variables#`](#language.config.variables) from a [configuration +file](#config.files) into the template. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + file string Yes *n/a* The name of the config file to include + section string No *n/a* The name of the section to load + scope string no *local* How the scope of the loaded variables are treated, which must be one of local, parent or global. local means variables are loaded into the local template context. parent means variables are loaded into both the local context and the parent template that called it. global means variables are available to all templates. + +The `example.conf` file. + + + #this is config file comment + + # global variables + pageTitle = "Main Menu" + bodyBgColor = #000000 + tableBgColor = #000000 + rowBgColor = #00ff00 + + #customer variables section + [Customer] + pageTitle = "Customer Info" + + + +and the template + + + {config_load file="example.conf"} + {config_load "example.conf"} {* short-hand *} + + <html> + <title>{#pageTitle#|default:"No title"}</title> + <body bgcolor="{#bodyBgColor#}"> + <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"> + <tr bgcolor="{#rowBgColor#}"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> + </table> + </body> + </html> + + + +[Config Files](#config.files) may also contain sections. You can load +variables from within a section with the added attribute `section`. Note +that global config variables are always loaded along with section +variables, and same-named section variables overwrite the globals. + +> **Note** +> +> Config file *sections* and the built-in template function called +> [`{section}`](#language.function.section) have nothing to do with each +> other, they just happen to share a common naming convention. + + + {config_load file='example.conf' section='Customer'} + {config_load 'example.conf' 'Customer'} {* short-hand *} + + <html> + <title>{#pageTitle#}</title> + <body bgcolor="{#bodyBgColor#}"> + <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"> + <tr bgcolor="{#rowBgColor#}"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> + </table> + </body> + </html> + + + +See [`$config_overwrite`](#variable.config.overwrite) to create arrays +of config file variables. + +See also the [config files](#config.files) page, [config +variables](#language.config.variables) page, +[`$config_dir`](#variable.config.dir), +[`getConfigVars()`](#api.get.config.vars) and +[`configLoad()`](#api.config.load). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md new file mode 100644 index 000000000..fbaae1944 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md @@ -0,0 +1,18 @@ +{debug} {#language.function.debug} +======= + +`{debug}` dumps the debug console to the page. This works regardless of +the [debug](#chapter.debugging.console) settings in the php script. +Since this gets executed at runtime, this is only able to show the +[assigned](#api.assign) variables; not the templates that are in use. +However, you can see all the currently available variables within the +scope of a template. + +If caching is enabled and a page is loaded from cache `{debug}` does +show only the variables which assigned for the cached page. + +In order to see also the variables which have been locally assigned +within the template it does make sense to place the `{debug}` tag at the +end of the template. + +See also the [debugging console page](#chapter.debugging.console). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md new file mode 100644 index 000000000..9559e7c5e --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md @@ -0,0 +1,37 @@ +{extends} {#language.function.extends} +========= + +`{extends}` tags are used in child templates in template inheritance for +extending parent templates. For details see section of [Template +Interitance](#advanced.features.template.inheritance). + +- The `{extends}` tag must be on the first line of the template. + +- If a child template extends a parent template with the `{extends}` + tag it may contain only `{block}` tags. Any other template content + is ignored. + +- Use the syntax for [template resources](#resources) to extend files + outside of the [`$template_dir`](#variable.template.dir) directory. + +> **Note** +> +> When extending a variable parent like `{extends file=$parent_file}`, +> make sure you include `$parent_file` in the +> [`$compile_id`](#variable.compile.id). Otherwise Smarty cannot +> distinguish between different `$parent_file`s. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ------------------------------------------------- + file string Yes *n/a* The name of the template file which is extended + + + {extends file='parent.tpl'} + {extends 'parent.tpl'} {* short-hand *} + + + +See also [Template Interitance](#advanced.features.template.inheritance) +and [`{block}`](#language.function.block). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md new file mode 100644 index 000000000..0545c1729 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md @@ -0,0 +1,97 @@ +{for} {#language.function.for} +===== + +The `{for}{forelse}` tag is used to create simple loops. The following +different formarts are supported: + +- `{for $var=$start to $end}` simple loop with step size of 1. + +- `{for $var=$start to $end step $step}` loop with individual step + size. + +`{forelse}` is executed when the loop is not iterated. + +**Attributes:** + + Attribute Name Shorthand Type Required Default Description + ---------------- ----------- --------- ---------- --------- -------------------------------- + max n/a integer No *n/a* Limit the number of iterations + +**Option Flags:** + + Name Description + --------- -------------------------------------- + nocache Disables caching of the `{for}` loop + + + <ul> + {for $foo=1 to 3} + <li>{$foo}</li> + {/for} + </ul> + + + +The above example will output: + + + <ul> + <li>1</li> + <li>2</li> + <li>3</li> + </ul> + + + + + $smarty->assign('to',10); + + + + + <ul> + {for $foo=3 to $to max=3} + <li>{$foo}</li> + {/for} + </ul> + + + +The above example will output: + + + <ul> + <li>3</li> + <li>4</li> + <li>5</li> + </ul> + + + + + $smarty->assign('start',10); + $smarty->assign('to',5); + + + + + <ul> + {for $foo=$start to $to} + <li>{$foo}</li> + {forelse} + no iteration + {/for} + </ul> + + + +The above example will output: + + + no iteration + + + +See also [`{foreach}`](#language.function.foreach), +[`{section}`](#language.function.section) and +[`{while}`](#language.function.while) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md new file mode 100644 index 000000000..fdd740148 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md @@ -0,0 +1,407 @@ +{foreach},{foreachelse} {#language.function.foreach} +======================= + +`{foreach}` is used for looping over arrays of data. `{foreach}` has a +simpler and cleaner syntax than the +[`{section}`](#language.function.section) loop, and can also loop over +associative arrays. + +`{foreach $arrayvar as $itemvar}` + +`{foreach $arrayvar as $keyvar=>$itemvar}` + +> **Note** +> +> This foreach syntax does not accept any named attributes. This syntax +> is new to Smarty 3, however the Smarty 2.x syntax +> `{foreach from=$myarray key="mykey" item="myitem"}` is still +> supported. + +- `{foreach}` loops can be nested. + +- The `array` variable, usually an array of values, determines the + number of times `{foreach}` will loop. You can also pass an integer + for arbitrary loops. + +- `{foreachelse}` is executed when there are no values in the `array` + variable. + +- `{foreach}` properties are [`@index`](#foreach.property.index), + [`@iteration`](#foreach.property.iteration), + [`@first`](#foreach.property.first), + [`@last`](#foreach.property.last), + [`@show`](#foreach.property.show), + [`@total`](#foreach.property.total). + +- `{foreach}` constructs are [`{break}`](#foreach.construct.break), + [`{continue}`](#foreach.construct.continue). + +- Instead of specifying the `key` variable you can access the current + key of the loop item by `{$item@key}` (see examples below). + +> **Note** +> +> The `$var@property` syntax is new to Smarty 3, however when using the +> Smarty 2 `{foreach from=$myarray key="mykey" item="myitem"}` style +> syntax, the `$smarty.foreach.name.property` syntax is still supported. + +> **Note** +> +> Although you can retrieve the array key with the syntax +> `{foreach $myArray as $myKey => $myValue}`, the key is always +> available as `$myValue@key` within the foreach loop. + +**Option Flags:** + + Name Description + --------- ------------------------------------------ + nocache Disables caching of the `{foreach}` loop + + + <?php + $arr = array('red', 'green', 'blue'); + $smarty->assign('myColors', $arr); + ?> + + + +Template to output `$myColors` in an un-ordered list + + + <ul> + {foreach $myColors as $color} + <li>{$color}</li> + {/foreach} + </ul> + + + +The above example will output: + + + <ul> + <li>red</li> + <li>green</li> + <li>blue</li> + </ul> + + + + + <?php + $people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com'); + $smarty->assign('myPeople', $people); + ?> + + + +Template to output `$myArray` as key/value pairs. + + + <ul> + {foreach $myPeople as $value} + <li>{$value@key}: {$value}</li> + {/foreach} + </ul> + + + +The above example will output: + + + <ul> + <li>fname: John</li> + <li>lname: Doe</li> + <li>email: j.doe@example.com</li> + </ul> + + + +Assign an array to Smarty, the key contains the key for each looped +value. + + + <?php + $smarty->assign('contacts', array( + array('phone' => '555-555-1234', + 'fax' => '555-555-5678', + 'cell' => '555-555-0357'), + array('phone' => '800-555-4444', + 'fax' => '800-555-3333', + 'cell' => '800-555-2222') + )); + ?> + + + +The template to output `$contact`. + + + {* key always available as a property *} + {foreach $contacts as $contact} + {foreach $contact as $value} + {$value@key}: {$value} + {/foreach} + {/foreach} + + {* accessing key the PHP syntax alternate *} + {foreach $contacts as $contact} + {foreach $contact as $key => $value} + {$key}: {$value} + {/foreach} + {/foreach} + + + +Either of the above examples will output: + + + phone: 555-555-1234 + fax: 555-555-5678 + cell: 555-555-0357 + phone: 800-555-4444 + fax: 800-555-3333 + cell: 800-555-2222 + + + +A database (PDO) example of looping over search results. This example is +looping over a PHP iterator instead of an array(). + + + <?php + include('Smarty.class.php'); + + $smarty = new Smarty; + + $dsn = 'mysql:host=localhost;dbname=test'; + $login = 'test'; + $passwd = 'test'; + + // setting PDO to use buffered queries in mysql is + // important if you plan on using multiple result cursors + // in the template. + + $db = new PDO($dsn, $login, $passwd, array( + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); + + $res = $db->prepare("select * from users"); + $res->execute(); + $res->setFetchMode(PDO::FETCH_LAZY); + + // assign to smarty + $smarty->assign('res',$res); + + $smarty->display('index.tpl');?> + ?> + + + + + {foreach $res as $r} + {$r.id} + {$r.name} + {foreachelse} + .. no results .. + {/foreach} + + + +The above is assuming the results contain the columns named `id` and +`name`. + +What is the advantage of an iterator vs. looping over a plain old array? +With an array, all the results are accumulated into memory before being +looped. With an iterator, each result is loaded/released within the +loop. This saves processing time and memory, especially for very large +result sets. + +\@index {#foreach.property.index} +------- + +`index` contains the current array index, starting with zero. + + + {* output empty row on the 4th iteration (when index is 3) *} + <table> + {foreach $items as $i} + {if $i@index eq 3} + {* put empty table row *} + <tr><td>nbsp;</td></tr> + {/if} + <tr><td>{$i.label}</td></tr> + {/foreach} + </table> + + + +\@iteration {#foreach.property.iteration} +----------- + +`iteration` contains the current loop iteration and always starts at +one, unlike [`index`](#foreach.property.index). It is incremented by one +on each iteration. + +The *\"is div by\"* operator can be used to detect a specific iteration. +Here we bold-face the name every 4th iteration. + + + {foreach $myNames as $name} + {if $name@iteration is div by 4} + <b>{$name}</b> + {/if} + {$name} + {/foreach} + +The *\"is even by\"* and *\"is odd by\"* operators can be used to +alternate something every so many iterations. Choosing between even or +odd rotates which one starts. Here we switch the font color every 3rd +iteration. + + + {foreach $myNames as $name} + {if $name@iteration is even by 3} + <span style="color: #000">{$name}</span> + {else} + <span style="color: #eee">{$name}</span> + {/if} + {/foreach} + + + +This will output something similar to this: + + + <span style="color: #000">...</span> + <span style="color: #000">...</span> + <span style="color: #000">...</span> + <span style="color: #eee">...</span> + <span style="color: #eee">...</span> + <span style="color: #eee">...</span> + <span style="color: #000">...</span> + <span style="color: #000">...</span> + <span style="color: #000">...</span> + <span style="color: #eee">...</span> + <span style="color: #eee">...</span> + <span style="color: #eee">...</span> + ... + + + +\@first {#foreach.property.first} +------- + +`first` is TRUE if the current `{foreach}` iteration is the initial one. +Here we display a table header row on the first iteration. + + + {* show table header at first iteration *} + <table> + {foreach $items as $i} + {if $i@first} + <tr> + <th>key</td> + <th>name</td> + </tr> + {/if} + <tr> + <td>{$i@key}</td> + <td>{$i.name}</td> + </tr> + {/foreach} + </table> + + + +\@last {#foreach.property.last} +------ + +`last` is set to TRUE if the current `{foreach}` iteration is the final +one. Here we display a horizontal rule on the last iteration. + + + {* Add horizontal rule at end of list *} + {foreach $items as $item} + <a href="#{$item.id}">{$item.name}</a>{if $item@last}<hr>{else},{/if} + {foreachelse} + ... no items to loop ... + {/foreach} + + + +\@show {#foreach.property.show} +------ + +The show `show` property can be used after the execution of a +`{foreach}` loop to detect if data has been displayed or not. `show` is +a boolean value. + + + <ul> + {foreach $myArray as $name} + <li>{$name}</li> + {/foreach} + </ul> + {if $name@show} do something here if the array contained data {/if} + +\@total {#foreach.property.total} +------- + +`total` contains the number of iterations that this `{foreach}` will +loop. This can be used inside or after the `{foreach}`. + + + {* show number of rows at end *} + {foreach $items as $item} + {$item.name}<hr/> + {if $item@last} + <div id="total">{$item@total} items</div> + {/if} + {foreachelse} + ... no items to loop ... + {/foreach} + +See also [`{section}`](#language.function.section), +[`{for}`](#language.function.for) and +[`{while}`](#language.function.while) + +{break} {#foreach.construct.break} +------- + +`{break}` aborts the iteration of the array + + + {$data = [1,2,3,4,5]} + {foreach $data as $value} + {if $value == 3} + {* abort iterating the array *} + {break} + {/if} + {$value} + {/foreach} + {* + prints: 1 2 + *} + + + +{continue} {#foreach.construct.continue} +---------- + +`{continue}` leaves the current iteration and begins with the next +iteration. + + + {$data = [1,2,3,4,5]} + {foreach $data as $value} + {if $value == 3} + {* skip this iteration *} + {continue} + {/if} + {$value} + {/foreach} + {* + prints: 1 2 4 5 + *} + + diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md new file mode 100644 index 000000000..647e4bfc8 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md @@ -0,0 +1,88 @@ +{function} {#language.function.function} +========== + +`{function}` is used to create functions within a template and call them +just like a plugin function. Instead of writing a plugin that generates +presentational content, keeping it in the template is often a more +manageable choice. It also simplifies data traversal, such as deeply +nested menus. + +> **Note** +> +> Template functions are defined global. Since the Smarty compiler is a +> single-pass compiler, The [`{call}`](#language.function.call) tag must +> be used to call a template function defined externally from the given +> template. Otherwise you can directly use the function as +> `{funcname ...}` in the template. + +- The `{function}` tag must have the `name` attribute which contains + the the name of the template function. A tag with this name can be + used to call the template function. + +- Default values for variables can be passed to the template function + as [attributes](#language.syntax.attributes). Like in PHP function + declarations you can only use scalar values as default. The default + values can be overwritten when the template function is being + called. + +- You can use all variables from the calling template inside the + template function. Changes to variables or new created variables + inside the template function have local scope and are not visible + inside the calling template after the template function is executed. + +**Attributes:** + + Attribute Name Type Required Default Description + ---------------- -------------- ---------- --------- --------------------------------------------------------------- + name string Yes *n/a* The name of the template function + \[var \...\] \[var type\] No *n/a* default variable value to pass local to the template function + +> **Note** +> +> You can pass any number of parameter to the template function when it +> is called. The parameter variables must not be declared in the +> `{funcname ...}` tag unless you what to use default values. Default +> values must be scalar and can not be variable. Variables must be +> passed when the template is called. + + + {* define the function *} + {function name=menu level=0} + {function menu level=0} {* short-hand *} + <ul class="level{$level}"> + {foreach $data as $entry} + {if is_array($entry)} + <li>{$entry@key}</li> + {menu data=$entry level=$level+1} + {else} + <li>{$entry}</li> + {/if} + {/foreach} + </ul> + {/function} + + {* create an array to demonstrate *} + {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => + ['item3-3-1','item3-3-2']],'item4']} + + {* run the array through the function *} + {menu data=$menu} + + + +Will generate the following output + + + * item1 + * item2 + * item3 + o item3-1 + o item3-2 + o item3-3 + + item3-3-1 + + item3-3-2 + * item4 + + + +See also [`{call}`](#language.function.call) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md new file mode 100644 index 000000000..2c1d68eea --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md @@ -0,0 +1,121 @@ +{if},{elseif},{else} {#language.function.if} +==================== + +`{if}` statements in Smarty have much the same flexibility as PHP +[if](&url.php-manual;if) statements, with a few added features for the +template engine. Every `{if}` must be paired with a matching `{/if}`. +`{else}` and `{elseif}` are also permitted. All PHP conditionals and +functions are recognized, such as *\|\|*, *or*, *&&*, *and*, +*is\_array()*, etc. + +If securty is enabled, only PHP functions from `$php_functions` property +of the securty policy are allowed. See the +[Security](#advanced.features.security) section for details. + +The following is a list of recognized qualifiers, which must be +separated from surrounding elements by spaces. Note that items listed in +\[brackets\] are optional. PHP equivalents are shown where applicable. + + Qualifier Alternates Syntax Example Meaning PHP Equivalent + -------------------- ------------ ------------------------ -------------------------------- ---------------------- + == eq \$a eq \$b equals == + != ne, neq \$a neq \$b not equals != + \> gt \$a gt \$b greater than \> + \< lt \$a lt \$b less than \< + \>= gte, ge \$a ge \$b greater than or equal \>= + \<= lte, le \$a le \$b less than or equal \<= + === \$a === 0 check for identity === + ! not not \$a negation (unary) ! + \% mod \$a mod \$b modulous \% + is \[not\] div by \$a is not div by 4 divisible by \$a % \$b == 0 + is \[not\] even \$a is not even \[not\] an even number (unary) \$a % 2 == 0 + is \[not\] even by \$a is not even by \$b grouping level \[not\] even (\$a / \$b) % 2 == 0 + is \[not\] odd \$a is not odd \[not\] an odd number (unary) \$a % 2 != 0 + is \[not\] odd by \$a is not odd by \$b \[not\] an odd grouping (\$a / \$b) % 2 != 0 + + + {if $name eq 'Fred'} + Welcome Sir. + {elseif $name eq 'Wilma'} + Welcome Ma'am. + {else} + Welcome, whatever you are. + {/if} + + {* an example with "or" logic *} + {if $name eq 'Fred' or $name eq 'Wilma'} + ... + {/if} + + {* same as above *} + {if $name == 'Fred' || $name == 'Wilma'} + ... + {/if} + + + {* parenthesis are allowed *} + {if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#} + ... + {/if} + + + {* you can also embed php function calls *} + {if count($var) gt 0} + ... + {/if} + + {* check for array. *} + {if is_array($foo) } + ..... + {/if} + + {* check for not null. *} + {if isset($foo) } + ..... + {/if} + + + {* test if values are even or odd *} + {if $var is even} + ... + {/if} + {if $var is odd} + ... + {/if} + {if $var is not odd} + ... + {/if} + + + {* test if var is divisible by 4 *} + {if $var is div by 4} + ... + {/if} + + + {* + test if var is even, grouped by two. i.e., + 0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc. + *} + {if $var is even by 2} + ... + {/if} + + {* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *} + {if $var is even by 3} + ... + {/if} + + + + + {if isset($name) && $name == 'Blog'} + {* do something *} + {elseif $name == $foo} + {* do something *} + {/if} + + {if is_array($foo) && count($foo) > 0} + {* do a foreach loop *} + {/if} + diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include-php.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include-php.md new file mode 100644 index 000000000..8fc074a2b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include-php.md @@ -0,0 +1,74 @@ +{include\_php} {#language.function.include.php} +============== + +> **Note** +> +> `{include_php}` is deprecated from Smarty, use registered plugins to +> properly insulate presentation from the application code. As of Smarty +> 3.1 the `{include_php}` tags are only available from [SmartyBC](#bc). + + Attribute Name Type Required Default Description + ---------------- --------- ---------- --------- ---------------------------------------------------------------------------------- + file string Yes *n/a* The name of the php file to include as absolute path + once boolean No *TRUE* whether or not to include the php file more than once if included multiple times + assign string No *n/a* The name of the variable that the output of include\_php will be assigned to + +**Option Flags:** + + Name Description + --------- ---------------------------------------- + nocache Disables caching of inluded PHP script + +`{include_php}` tags are used to include a php script in your template. +The path of the attribute `file` can be either absolute, or relative to +[`$trusted_dir`](#variable.trusted.dir). If security is enabled, then +the script must be located in the `$trusted_dir` path of the securty +policy. See the [Security](#advanced.features.security) section for +details. + +By default, php files are only included once even if called multiple +times in the template. You can specify that it should be included every +time with the `once` attribute. Setting once to FALSE will include the +php script each time it is included in the template. + +You can optionally pass the `assign` attribute, which will specify a +template variable name that the output of `{include_php}` will be +assigned to instead of displayed. + +The smarty object is available as `$_smarty_tpl->smarty` within the PHP +script that you include. + +The `load_nav.php` file: + + + <?php + + // load in variables from a mysql db and assign them to the template + require_once('database.class.php'); + $db = new Db(); + $db->query('select url, name from navigation order by name'); + $this->assign('navigation', $db->getRows()); + + ?> + + + +where the template is: + + + {* absolute path, or relative to $trusted_dir *} + {include_php file='/path/to/load_nav.php'} + {include_php '/path/to/load_nav.php'} {* short-hand *} + + {foreach item='nav' from=$navigation} + <a href="{$nav.url}">{$nav.name}</a><br /> + {/foreach} + + + +See also [`{include}`](#language.function.include), +[`$trusted_dir`](#variable.trusted.dir), +[`{php}`](#language.function.php), +[`{capture}`](#language.function.capture), [template +resources](#resources) and [componentized +templates](#tips.componentized.templates) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md new file mode 100644 index 000000000..956d893e6 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md @@ -0,0 +1,194 @@ +{include} {#language.function.include} +========= + +`{include}` tags are used for including other templates in the current +template. Any variables available in the current template are also +available within the included template. + +- The `{include}` tag must have the `file` attribute which contains + the template resource path. + +- Setting the optional `assign` attribute specifies the template + variable that the output of `{include}` is assigned to, instead of + being displayed. Similar to [`{assign}`](#language.function.assign). + +- Variables can be passed to included templates as + [attributes](#language.syntax.attributes). Any variables explicitly + passed to an included template are only available within the scope + of the included file. Attribute variables override current template + variables, in the case when they are named the same. + +- You can use all variables from the including template inside the + included template. But changes to variables or new created variables + inside the included template have local scope and are not visible + inside the including template after the `{include}` statement. This + default behaviour can be changed for all variables assigned in the + included template by using the scope attribute at the `{include}` + statement or for individual variables by using the scope attribute + at the [`{assign}`](#language.function.assign) statement. The later + is useful to return values from the included template to the + including template. + +- Use the syntax for [template resources](#resources) to `{include}` + files outside of the [`$template_dir`](#variable.template.dir) + directory. + +**Attributes:** + + Attribute Name Type Required Default Description + ----------------- ---------------- ---------- --------- -------------------------------------------------------------------------------------------------- + file string Yes *n/a* The name of the template file to include + assign string No *n/a* The name of the variable that the output of include will be assigned to + cache\_lifetime integer No *n/a* Enable caching of this subtemplate with an individual cache lifetime + compile\_id string/integer No *n/a* Compile this subtemplate with an individual compile\_id + cache\_id string/integer No *n/a* Enable caching of this subtemplate with an individual cache\_id + scope string No *n/a* Define the scope of all in the subtemplate assigned variables: \'parent\',\'root\' or \'global\' + \[var \...\] \[var type\] No *n/a* variable to pass local to template + +**Option Flags:** + + Name Description + --------- ------------------------------------------------------------------------------------- + nocache Disables caching of this subtemplate + caching Enable caching of this subtemplate + inline If set merge the compile code of the subtemplate into the compiled calling template + + + <html> + <head> + <title>{$title}</title> + </head> + <body> + {include file='page_header.tpl'} + + {* body of template goes here, the $tpl_name variable + is replaced with a value eg 'contact.tpl' + *} + {include file="$tpl_name.tpl"} + + {* using shortform file attribute *} + {include 'page_footer.tpl'} + </body> + </html> + + + + + {include 'links.tpl' title='Newest links' links=$link_array} + {* body of template goes here *} + {include 'footer.tpl' foo='bar'} + + + +The template above includes the example `links.tpl` below + + + <div id="box"> + <h3>{$title}{/h3> + <ul> + {foreach from=$links item=l} + .. do stuff ... + </foreach} + </ul> + </div> + +Variables assigned in the included template will be seen in the +including template. + + + {include 'sub_template.tpl' scope=parent} + ... + {* display variables assigned in sub_template *} + {$foo}<br> + {$bar}<br> + ... + + + +The template above includes the example `sub_template.tpl` below + + + ... + {assign var=foo value='something'} + {assign var=bar value='value'} + ... + +The included template will not be cached. + + + {include 'sub_template.tpl' nocache} + ... + + + +In this example included template will be cached with an individual +cache lifetime of 500 seconds. + + + {include 'sub_template.tpl' cache_lifetime=500} + ... + + + +In this example included template will be cached independent of the +global cahing setting. + + + {include 'sub_template.tpl' caching} + ... + + + +This example assigns the contents of `nav.tpl` to the `$navbar` +variable, which is then output at both the top and bottom of the page. + + + <body> + {include 'nav.tpl' assign=navbar} + {include 'header.tpl' title='Smarty is cool'} + {$navbar} + {* body of template goes here *} + {$navbar} + {include 'footer.tpl'} + </body> + + + +This example includes another template relative to the directory of the +current template. + + + {include 'template-in-a-template_dir-directory.tpl'} + {include './template-in-same-directory.tpl'} + {include '../template-in-parent-directory.tpl'} + + + + + {* absolute filepath *} + {include file='/usr/local/include/templates/header.tpl'} + + {* absolute filepath (same thing) *} + {include file='file:/usr/local/include/templates/header.tpl'} + + {* windows absolute filepath (MUST use "file:" prefix) *} + {include file='file:C:/www/pub/templates/header.tpl'} + + {* include from template resource named "db" *} + {include file='db:header.tpl'} + + {* include a $variable template - eg $module = 'contacts' *} + {include file="$module.tpl"} + + {* wont work as its single quotes ie no variable substitution *} + {include file='$module.tpl'} + + {* include a multi $variable template - eg amber/links.view.tpl *} + {include file="$style_dir/$module.$view.tpl"} + + + +See also [`{include_php}`](#language.function.include.php), +[`{insert}`](#language.function.insert), +[`{php}`](#language.function.php), [template resources](#resources) and +[componentized templates](#tips.componentized.templates). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md new file mode 100644 index 000000000..e37c73890 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md @@ -0,0 +1,86 @@ +{insert} {#language.function.insert} +======== + +> **Note** +> +> `{insert}` tags are deprecated from Smarty, and should not be used. +> Put your PHP logic in PHP scripts or plugin functions instead. + +> **Note** +> +> As of Smarty 3.1 the `{insert}` tags are only available from +> [SmartyBC](#bc). + +`{insert}` tags work much like [`{include}`](#language.function.include) +tags, except that `{insert}` tags are NOT cached when template +[caching](#caching) is enabled. They will be executed on every +invocation of the template. + + Attribute Name Type Required Default Description + ---------------- -------------- ---------- --------- ---------------------------------------------------------------------------------- + name string Yes *n/a* The name of the insert function (insert\_`name`) or insert plugin + assign string No *n/a* The name of the template variable the output will be assigned to + script string No *n/a* The name of the php script that is included before the insert function is called + \[var \...\] \[var type\] No *n/a* variable to pass to insert function + +Let\'s say you have a template with a banner slot at the top of the +page. The banner can contain any mixture of HTML, images, flash, etc. so +we can\'t just use a static link here, and we don\'t want this contents +cached with the page. In comes the {insert} tag: the template knows +\#banner\_location\_id\# and \#site\_id\# values (gathered from a +[config file](#config.files)), and needs to call a function to get the +banner contents. + + {* example of fetching a banner *} + {insert name="getBanner" lid=#banner_location_id# sid=#site_id#} + {insert "getBanner" lid=#banner_location_id# sid=#site_id#} {* short-hand *} + +In this example, we are using the name "getBanner" and passing the +parameters \#banner\_location\_id\# and \#site\_id\#. Smarty will look +for a function named insert\_getBanner() in your PHP application, +passing the values of \#banner\_location\_id\# and \#site\_id\# as the +first argument in an associative array. All {insert} function names in +your application must be prepended with \"insert\_\" to remedy possible +function name-space conflicts. Your insert\_getBanner() function should +do something with the passed values and return the results. These +results are then displayed in the template in place of the {insert} tag. +In this example, Smarty would call this function: +insert\_getBanner(array(\"lid\" =\> \"12345\",\"sid\" =\> \"67890\")); +and display the returned results in place of the {insert} tag. + +- If you supply the `assign` attribute, the output of the `{insert}` + tag will be assigned to this template variable instead of being + output to the template. + + > **Note** + > + > Assigning the output to a template variable isn\'t too useful with + > [caching](#variable.caching) enabled. + +- If you supply the `script` attribute, this php script will be + included (only once) before the `{insert}` function is executed. + This is the case where the insert function may not exist yet, and a + php script must be included first to make it work. + + The path can be either absolute, or relative to + [`$trusted_dir`](#variable.trusted.dir). If security is enabled, + then the script must be located in the `$trusted_dir` path of the + securty policy. See the [Security](#advanced.features.security) + section for details. + +The Smarty object is passed as the second argument. This way you can +reference and modify information in the Smarty object from within the +`{insert}` function. + +If no PHP script can be found Smarty is looking for a corresponding +insert plugin. + +> **Note** +> +> It is possible to have portions of the template not cached. If you +> have [caching](#caching) turned on, `{insert}` tags will not be +> cached. They will run dynamically every time the page is created, even +> within cached pages. This works good for things like banners, polls, +> live weather, search results, user feedback areas, etc. + +See also [`{include}`](#language.function.include) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md new file mode 100644 index 000000000..2afda031a --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md @@ -0,0 +1,55 @@ +{ldelim},{rdelim} {#language.function.ldelim} +================= + +`{ldelim}` and `{rdelim}` are used for [escaping](#language.escaping) +template delimiters, by default **{** and **}**. You can also use +[`{literal}{/literal}`](#language.function.literal) to escape blocks of +text eg Javascript or CSS. See also the complementary +[`{$smarty.ldelim}`](#language.variables.smarty.ldelim). + + + {* this will print literal delimiters out of the template *} + + {ldelim}funcname{rdelim} is how functions look in Smarty! + + + +The above example will output: + + + {funcname} is how functions look in Smarty! + + + +Another example with some Javascript + + + <script language="JavaScript"> + function foo() {ldelim} + ... code ... + {rdelim} + </script> + + + +will output + + + <script language="JavaScript"> + function foo() { + .... code ... + } + </script> + + + + + <script language="JavaScript" type="text/javascript"> + function myJsFunction(){ldelim} + alert("The server name\n{$smarty.server.SERVER_NAME}\n{$smarty.server.SERVER_ADDR}"); + {rdelim} + </script> + <a href="javascript:myJsFunction()">Click here for Server Info</a> + +See also [`{literal}`](#language.function.literal) and [escaping Smarty +parsing](#language.escaping). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md new file mode 100644 index 000000000..27ebb3ff4 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md @@ -0,0 +1,36 @@ +{literal} {#language.function.literal} +========= + +`{literal}` tags allow a block of data to be taken literally. This is +typically used around Javascript or stylesheet blocks where {curly +braces} would interfere with the template +[delimiter](#variable.left.delimiter) syntax. Anything within +`{literal}{/literal}` tags is not interpreted, but displayed as-is. If +you need template tags embedded in a `{literal}` block, consider using +[`{ldelim}{rdelim}`](#language.function.ldelim) to escape the individual +delimiters instead. + +> **Note** +> +> `{literal}{/literal}` tags are normally not necessary, as Smarty +> ignores delimiters that are surrounded by whitespace. Be sure your +> javascript and CSS curly braces are surrounded by whitespace. This is +> new behavior to Smarty 3. + + + <script> + // the following braces are ignored by Smarty + // since they are surrounded by whitespace + function myFoo { + alert('Foo!'); + } + // this one will need literal escapement + {literal} + function myBar {alert('Bar!');} + {/literal} + </script> + + + +See also [`{ldelim} {rdelim}`](#language.function.ldelim) and the +[escaping Smarty parsing](#language.escaping) page. diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md new file mode 100644 index 000000000..a5922f838 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md @@ -0,0 +1,23 @@ +{nocache} {#language.function.nocache} +========= + +`{nocache}` is used to disable caching of a template section. Every +`{nocache}` must be paired with a matching `{/nocache}`. + +> **Note** +> +> Be sure any variables used within a non-cached section are also +> assigned from PHP when the page is loaded from the cache. + + + + Today's date is + {nocache} + {$smarty.now|date_format} + {/nocache} + + + +The above code will output the current date on a cached page. + +See also the [caching section](#caching). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md new file mode 100644 index 000000000..0bab5c715 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md @@ -0,0 +1,644 @@ +{section},{sectionelse} {#language.function.section} +======================= + +A `{section}` is for looping over **sequentially indexed arrays of +data**, unlike [`{foreach}`](#language.function.foreach) which is used +to loop over a **single associative array**. Every `{section}` tag must +be paired with a closing `{/section}` tag. + +> **Note** +> +> The [`{foreach}`](#language.function.foreach) loop can do everything a +> {section} loop can do, and has a simpler and easier syntax. It is +> usually preferred over the {section} loop. + +> **Note** +> +> {section} loops cannot loop over associative arrays, they must be +> numerically indexed, and sequential (0,1,2,\...). For associative +> arrays, use the [`{foreach}`](#language.function.foreach) loop. + + Attribute Name Type Required Default Description + ---------------- --------- ---------- --------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + name string Yes *n/a* The name of the section + loop mixed Yes *n/a* Value to determine the number of loop iterations + start integer No *0* The index position that the section will begin looping. If the value is negative, the start position is calculated from the end of the array. For example, if there are seven values in the loop array and start is -2, the start index is 5. Invalid values (values outside of the length of the loop array) are automatically truncated to the closest valid value. + step integer No *1* The step value that will be used to traverse the loop array. For example, step=2 will loop on index 0,2,4, etc. If step is negative, it will step through the array backwards. + max integer No *n/a* Sets the maximum number of times the section will loop. + show boolean No *TRUE* Determines whether or not to show this section + +**Option Flags:** + + Name Description + --------- ------------------------------------------ + nocache Disables caching of the `{section}` loop + +- Required attributes are `name` and `loop`. + +- The `name` of the `{section}` can be anything you like, made up of + letters, numbers and underscores, like [PHP + variables](&url.php-manual;language.variables). + +- {section}\'s can be nested, and the nested `{section}` names must be + unique from each other. + +- The `loop` attribute, usually an array of values, determines the + number of times the `{section}` will loop. You can also pass an + integer as the loop value. + +- When printing a variable within a `{section}`, the `{section}` + `name` must be given next to variable name within \[brackets\]. + +- `{sectionelse}` is executed when there are no values in the loop + variable. + +- A `{section}` also has its own variables that handle `{section}` + properties. These properties are accessible as: + [`{$smarty.section.name.property}`](#language.variables.smarty.loops) + where "name" is the attribute `name`. + +- `{section}` properties are [`index`](#section.property.index), + [`index_prev`](#section.property.index.prev), + [`index_next`](#section.property.index.next), + [`iteration`](#section.property.iteration), + [`first`](#section.property.first), + [`last`](#section.property.last), + [`rownum`](#section.property.rownum), + [`loop`](#section.property.loop), [`show`](#section.property.show), + [`total`](#section.property.total). + +[`assign()`](#api.assign) an array to Smarty + + + <?php + $data = array(1000,1001,1002); + $smarty->assign('custid',$data); + ?> + +The template that outputs the array + + + {* this example will print out all the values of the $custid array *} + {section name=customer loop=$custid} + {section customer $custid} {* short-hand *} + id: {$custid[customer]}<br /> + {/section} + <hr /> + {* print out all the values of the $custid array reversed *} + {section name=foo loop=$custid step=-1} + {section foo $custid step=-1} {* short-hand *} + {$custid[foo]}<br /> + {/section} + + + +The above example will output: + + + id: 1000<br /> + id: 1001<br /> + id: 1002<br /> + <hr /> + id: 1002<br /> + id: 1001<br /> + id: 1000<br /> + + + + + {section name=foo start=10 loop=20 step=2} + {$smarty.section.foo.index} + {/section} + <hr /> + {section name=bar loop=21 max=6 step=-2} + {$smarty.section.bar.index} + {/section} + +The above example will output: + + + 10 12 14 16 18 + <hr /> + 20 18 16 14 12 10 + + + +The `name` of the `{section}` can be anything you like, see [PHP +variables](&url.php-manual;language.variables). It is used to reference +the data within the `{section}`. + + + {section name=anything loop=$myArray} + {$myArray[anything].foo} + {$name[anything]} + {$address[anything].bar} + {/section} + + + +This is an example of printing an associative array of data with a +`{section}`. Following is the php script to assign the `$contacts` array +to Smarty. + + + <?php + $data = array( + array('name' => 'John Smith', 'home' => '555-555-5555', + 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), + array('name' => 'Jack Jones', 'home' => '777-555-5555', + 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), + array('name' => 'Jane Munson', 'home' => '000-555-5555', + 'cell' => '123456', 'email' => 'jane@myexample.com') + ); + $smarty->assign('contacts',$data); + ?> + + + +The template to output `$contacts` + + + {section name=customer loop=$contacts} + <p> + name: {$contacts[customer].name}<br /> + home: {$contacts[customer].home}<br /> + cell: {$contacts[customer].cell}<br /> + e-mail: {$contacts[customer].email} + </p> + {/section} + + + +The above example will output: + + + <p> + name: John Smith<br /> + home: 555-555-5555<br /> + cell: 666-555-5555<br /> + e-mail: john@myexample.com + </p> + <p> + name: Jack Jones<br /> + home phone: 777-555-5555<br /> + cell phone: 888-555-5555<br /> + e-mail: jack@myexample.com + </p> + <p> + name: Jane Munson<br /> + home phone: 000-555-5555<br /> + cell phone: 123456<br /> + e-mail: jane@myexample.com + </p> + + + +This example assumes that `$custid`, `$name` and `$address` are all +arrays containing the same number of values. First the php script that +assign\'s the arrays to Smarty. + + + <?php + + $id = array(1001,1002,1003); + $smarty->assign('custid',$id); + + $fullnames = array('John Smith','Jack Jones','Jane Munson'); + $smarty->assign('name',$fullnames); + + $addr = array('253 Abbey road', '417 Mulberry ln', '5605 apple st'); + $smarty->assign('address',$addr); + + ?> + +The `loop` variable only determines the number of times to loop. You can +access ANY variable from the template within the `{section}`. This is +useful for looping multiple arrays. You can pass an array which will +determine the loop count by the array size, or you can pass an integer +to specify the number of loops. + + + {section name=customer loop=$custid} + <p> + id: {$custid[customer]}<br /> + name: {$name[customer]}<br /> + address: {$address[customer]} + </p> + {/section} + + + +The above example will output: + + + <p> + id: 1000<br /> + name: John Smith<br /> + address: 253 Abbey road + </p> + <p> + id: 1001<br /> + name: Jack Jones<br /> + address: 417 Mulberry ln + </p> + <p> + id: 1002<br /> + name: Jane Munson<br /> + address: 5605 apple st + </p> + + + +{section}\'s can be nested as deep as you like. With nested +{section}\'s, you can access complex data structures, such as +multi-dimensional arrays. This is an example `.php` script thats +assign\'s the arrays. + + + <?php + + $id = array(1001,1002,1003); + $smarty->assign('custid',$id); + + $fullnames = array('John Smith','Jack Jones','Jane Munson'); + $smarty->assign('name',$fullnames); + + $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); + $smarty->assign('address',$addr); + + $types = array( + array( 'home phone', 'cell phone', 'e-mail'), + array( 'home phone', 'web'), + array( 'cell phone') + ); + $smarty->assign('contact_type', $types); + + $info = array( + array('555-555-5555', '666-555-5555', 'john@myexample.com'), + array( '123-456-4', 'www.example.com'), + array( '0457878') + ); + $smarty->assign('contact_info', $info); + + ?> + + +In this template, *\$contact\_type\[customer\]* is an array of contact +types for the current customer. + + + {section name=customer loop=$custid} + <hr> + id: {$custid[customer]}<br /> + name: {$name[customer]}<br /> + address: {$address[customer]}<br /> + {section name=contact loop=$contact_type[customer]} + {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br /> + {/section} + {/section} + + + +The above example will output: + + + <hr> + id: 1000<br /> + name: John Smith<br /> + address: 253 N 45th<br /> + home phone: 555-555-5555<br /> + cell phone: 666-555-5555<br /> + e-mail: john@myexample.com<br /> + <hr> + id: 1001<br /> + name: Jack Jones<br /> + address: 417 Mulberry ln<br /> + home phone: 123-456-4<br /> + web: www.example.com<br /> + <hr> + id: 1002<br /> + name: Jane Munson<br /> + address: 5605 apple st<br /> + cell phone: 0457878<br /> + + + +Results of a database search (eg ADODB or PEAR) are assigned to Smarty + + + <?php + $sql = 'select id, name, home, cell, email from contacts ' + ."where name like '$foo%' "; + $smarty->assign('contacts', $db->getAll($sql)); + ?> + +The template to output the database result in a HTML table + + + <table> + <tr><th> </th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr> + {section name=co loop=$contacts} + <tr> + <td><a href="view.php?id={$contacts[co].id}">view<a></td> + <td>{$contacts[co].name}</td> + <td>{$contacts[co].home}</td> + <td>{$contacts[co].cell}</td> + <td>{$contacts[co].email}</td> + <tr> + {sectionelse} + <tr><td colspan="5">No items found</td></tr> + {/section} + </table> + +.index {#section.property.index} +------ + +`index` contains the current array index, starting with zero or the +`start` attribute if given. It increments by one or by the `step` +attribute if given. + +> **Note** +> +> If the `step` and `start` properties are not modified, then this works +> the same as the [`iteration`](#section.property.iteration) property, +> except it starts at zero instead of one. + +> **Note** +> +> `$custid[customer.index]` and `$custid[customer]` are identical. + + + {section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}<br /> + {/section} + + + +The above example will output: + + + 0 id: 1000<br /> + 1 id: 1001<br /> + 2 id: 1002<br /> + + + +.index\_prev {#section.property.index.prev} +------------ + +`index_prev` is the previous loop index. On the first loop, this is set +to -1. + +.index\_next {#section.property.index.next} +------------ + +`index_next` is the next loop index. On the last loop, this is still one +more than the current index, respecting the setting of the `step` +attribute, if given. + + + <?php + $data = array(1001,1002,1003,1004,1005); + $smarty->assign('rows',$data); + ?> + +Template to output the above array in a table + + + {* $rows[row.index] and $rows[row] are identical in meaning *} + <table> + <tr> + <th>index</th><th>id</th> + <th>index_prev</th><th>prev_id</th> + <th>index_next</th><th>next_id</th> + </tr> + {section name=row loop=$rows} + <tr> + <td>{$smarty.section.row.index}</td><td>{$rows[row]}</td> + <td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td> + <td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td> + </tr> + {/section} + </table> + + + +The above example will output a table containing the following: + + + index id index_prev prev_id index_next next_id + 0 1001 -1 1 1002 + 1 1002 0 1001 2 1003 + 2 1003 1 1002 3 1004 + 3 1004 2 1003 4 1005 + 4 1005 3 1004 5 + + + +.iteration {#section.property.iteration} +---------- + +`iteration` contains the current loop iteration and starts at one. + +> **Note** +> +> This is not affected by the `{section}` properties `start`, `step` and +> `max`, unlike the [`index`](#section.property.index) property. +> `iteration` also starts with one instead of zero unlike `index`. +> [`rownum`](#section.property.rownum) is an alias to `iteration`, they +> are identical. + + + <?php + // array of 3000 to 3015 + $id = range(3000,3015); + $smarty->assign('arr',$id); + ?> + +Template to output every other element of the `$arr` array as `step=2` + + + {section name=cu loop=$arr start=5 step=2} + iteration={$smarty.section.cu.iteration} + index={$smarty.section.cu.index} + id={$custid[cu]}<br /> + {/section} + + + +The above example will output: + + + iteration=1 index=5 id=3005<br /> + iteration=2 index=7 id=3007<br /> + iteration=3 index=9 id=3009<br /> + iteration=4 index=11 id=3011<br /> + iteration=5 index=13 id=3013<br /> + iteration=6 index=15 id=3015<br /> + + + +Another example that uses the `iteration` property to output a table +header block every five rows. + + + <table> + {section name=co loop=$contacts} + {if $smarty.section.co.iteration is div by 5} + <tr><th> </th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr> + {/if} + <tr> + <td><a href="view.php?id={$contacts[co].id}">view<a></td> + <td>{$contacts[co].name}</td> + <td>{$contacts[co].home}</td> + <td>{$contacts[co].cell}</td> + <td>{$contacts[co].email}</td> + <tr> + {/section} + </table> + + + +An that uses the `iteration` property to alternate a text color every +third row. + + + <table> + {section name=co loop=$contacts} + {if $smarty.section.co.iteration is even by 3} + <span style="color: #ffffff">{$contacts[co].name}</span> + {else} + <span style="color: #dddddd">{$contacts[co].name}</span> + {/if} + {/section} + </table> + + + +> **Note** +> +> The *\"is div by\"* syntax is a simpler alternative to the PHP mod +> operator syntax. The mod operator is allowed: +> `{if $smarty.section.co.iteration % 5 == 1}` will work just the same. + +> **Note** +> +> You can also use *\"is odd by\"* to reverse the alternating. + +.first {#section.property.first} +------ + +`first` is set to TRUE if the current `{section}` iteration is the +initial one. + +.last {#section.property.last} +----- + +`last` is set to TRUE if the current section iteration is the final one. + +This example loops the `$customers` array, outputs a header block on the +first iteration and on the last outputs the footer block. Also uses the +[`total`](#section.property.total) property. + + + {section name=customer loop=$customers} + {if $smarty.section.customer.first} + <table> + <tr><th>id</th><th>customer</th></tr> + {/if} + + <tr> + <td>{$customers[customer].id}}</td> + <td>{$customers[customer].name}</td> + </tr> + + {if $smarty.section.customer.last} + <tr><td></td><td>{$smarty.section.customer.total} customers</td></tr> + </table> + {/if} + {/section} + + + +.rownum {#section.property.rownum} +------- + +`rownum` contains the current loop iteration, starting with one. It is +an alias to [`iteration`](#section.property.iteration), they work +identically. + +.loop {#section.property.loop} +----- + +`loop` contains the last index number that this {section} looped. This +can be used inside or after the `{section}`. + + + {section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}<br /> + {/section} + There are {$smarty.section.customer.loop} customers shown above. + + + +The above example will output: + + + 0 id: 1000<br /> + 1 id: 1001<br /> + 2 id: 1002<br /> + There are 3 customers shown above. + + + +.show {#section.property.show} +----- + +`show` is used as a parameter to section and is a boolean value. If +FALSE, the section will not be displayed. If there is a `{sectionelse}` +present, that will be alternately displayed. + +Boolean `$show_customer_info` has been passed from the PHP application, +to regulate whether or not this section shows. + + + {section name=customer loop=$customers show=$show_customer_info} + {$smarty.section.customer.rownum} id: {$customers[customer]}<br /> + {/section} + + {if $smarty.section.customer.show} + the section was shown. + {else} + the section was not shown. + {/if} + + + +The above example will output: + + + 1 id: 1000<br /> + 2 id: 1001<br /> + 3 id: 1002<br /> + + the section was shown. + + + +.total {#section.property.total} +------ + +`total` contains the number of iterations that this `{section}` will +loop. This can be used inside or after a `{section}`. + + + {section name=customer loop=$custid step=2} + {$smarty.section.customer.index} id: {$custid[customer]}<br /> + {/section} + There are {$smarty.section.customer.total} customers shown above. + + + +See also [`{foreach}`](#language.function.foreach), +[`{for}`](#language.function.for), [`{while}`](#language.function.while) +and [`$smarty.section`](#language.variables.smarty.loops). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md new file mode 100644 index 000000000..381c191a2 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md @@ -0,0 +1,42 @@ +{setfilter} {#language.function.setfilter} +=========== + +The `{setfilter}...{/setfilter}` block tag allows the definition of +template instance\'s variable filters. + +SYNTAX: {setfilter filter1\|filter2\|filter3\....}\...{/setfilter} + +The filter can be: + +- A variable filter plugin specified by it\'s name. + +- A modidier specified by it\'s name and optional additional + parameter. + +`{setfilter}...{/setfilter}` blocks can be nested. The filter definition +of inner blocks does replace the definition of the outer block. + +Template instance filters run in addition to other modifiers and +filters. They run in the following order: modifier, default\_modifier, +\$escape\_html, registered variable filters, autoloaded variable +filters, template instance\'s variable filters. Everything after +default\_modifier can be disabled with the `nofilter` flag. + + + <script> + {setfilter filter1} + {$foo} {* filter1 runs on output of $foo *} + {setfilter filter2|mod:true} + {$bar} {* filter2 and modifier mod runs on output of $bar *} + {/setfilter} + {$buh} {* filter1 runs on output of $buh *} + {/setfilter} + {$blar} {* no template instance filter runs on output of $blar} + </script> + + + +> **Note** +> +> The setting of template instance filters does not effect the output of +> included subtemplates. diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md new file mode 100644 index 000000000..d6a9e9798 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md @@ -0,0 +1,84 @@ +{\$var=\...} {#language.function.shortform.assign} +============ + +This is a short-hand version of the {assign} function. You can assign +values directly to the template, or assign values to array elements too. + +> **Note** +> +> Assignment of variables in-template is essentially placing application +> logic into the presentation that may be better handled in PHP. Use at +> your own discretion. + +The following attributes can be added to the tag: + +**Attributes:** + + Attribute Name Shorthand Type Required Default Description + ---------------- ----------- -------- ---------- --------- ----------------------------------------------------------------------- + scope n/a string No *n/a* The scope of the assigned variable: \'parent\',\'root\' or \'global\' + +**Option Flags:** + + Name Description + --------- ----------------------------------------------------- + nocache Assigns the variable with the \'nocache\' attribute + + + {$name='Bob'} + + The value of $name is {$name}. + + + +The above example will output: + + + The value of $name is Bob. + + + + + {$running_total=$running_total+$some_array[row].some_value} + + + + + {$user.name="Bob"} + + + + + {$user.name.first="Bob"} + + + + + {$users[]="Bob"} + + + +Variables assigned in the included template will be seen in the +including template. + + + {include file="sub_template.tpl"} + ... + {* display variable assigned in sub_template *} + {$foo}<br> + ... + + + +The template above includes the example `sub_template.tpl` below + + + ... + {* foo will be known also in the including template *} + {$foo="something" scope=parent} + {* bar is assigned only local in the including template *} + {$bar="value"} + ... + +See also [`{assign}`](#language.function.assign) and +[`{append}`](#language.function.append) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md new file mode 100644 index 000000000..d40646e5f --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md @@ -0,0 +1,48 @@ +{strip} {#language.function.strip} +======= + +Many times web designers run into the issue where white space and +carriage returns affect the output of the rendered HTML (browser +\"features\"), so you must run all your tags together in the template to +get the desired results. This usually ends up in unreadable or +unmanageable templates. + +Anything within `{strip}{/strip}` tags are stripped of the extra spaces +or carriage returns at the beginnings and ends of the lines before they +are displayed. This way you can keep your templates readable, and not +worry about extra white space causing problems. + +> **Note** +> +> `{strip}{/strip}` does not affect the contents of template variables, +> see the [strip modifier](#language.modifier.strip) instead. + + + {* the following will be all run into one line upon output *} + {strip} + <table border='0'> + <tr> + <td> + <a href="{$url}"> + <font color="red">This is a test</font> + </a> + </td> + </tr> + </table> + {/strip} + + + +The above example will output: + + + <table border='0'><tr><td><a href="http://. snipped...</a></td></tr></table> + + + +Notice that in the above example, all the lines begin and end with HTML +tags. Be aware that all the lines are run together. If you have plain +text at the beginning or end of any line, they will be run together, and +may not be desired results. + +See also the [`strip`](#language.modifier.strip) modifier. diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md new file mode 100644 index 000000000..755c091f6 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md @@ -0,0 +1,43 @@ +{while} {#language.function.while} +======= + +`{while}` loops in Smarty have much the same flexibility as PHP +[while](&url.php-manual;while) statements, with a few added features for +the template engine. Every `{while}` must be paired with a matching +`{/while}`. All PHP conditionals and functions are recognized, such as +*\|\|*, *or*, *&&*, *and*, *is\_array()*, etc. + +The following is a list of recognized qualifiers, which must be +separated from surrounding elements by spaces. Note that items listed in +\[brackets\] are optional. PHP equivalents are shown where applicable. + + Qualifier Alternates Syntax Example Meaning PHP Equivalent + -------------------- ------------ ------------------------ -------------------------------- ---------------------- + == eq \$a eq \$b equals == + != ne, neq \$a neq \$b not equals != + \> gt \$a gt \$b greater than \> + \< lt \$a lt \$b less than \< + \>= gte, ge \$a ge \$b greater than or equal \>= + \<= lte, le \$a le \$b less than or equal \<= + === \$a === 0 check for identity === + ! not not \$a negation (unary) ! + \% mod \$a mod \$b modulous \% + is \[not\] div by \$a is not div by 4 divisible by \$a % \$b == 0 + is \[not\] even \$a is not even \[not\] an even number (unary) \$a % 2 == 0 + is \[not\] even by \$a is not even by \$b grouping level \[not\] even (\$a / \$b) % 2 == 0 + is \[not\] odd \$a is not odd \[not\] an odd number (unary) \$a % 2 != 0 + is \[not\] odd by \$a is not odd by \$b \[not\] an odd grouping (\$a / \$b) % 2 != 0 + + + + {while $foo > 0} + {$foo--} + {/while} + + + +The above example will count down the value of \$foo until 1 is reached. + +See also [`{foreach}`](#language.function.foreach), +[`{for}`](#language.function.for) and +[`{section}`](#language.function.section). diff --git a/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md b/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md new file mode 100644 index 000000000..edf1a83ea --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md @@ -0,0 +1,35 @@ +Combining Modifiers {#language.combining.modifiers} +=================== + +You can apply any number of modifiers to a variable. They will be +applied in the order they are combined, from left to right. They must be +separated with a `|` (pipe) character. + + + <?php + + $smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.'); + + ?> + +where template is: + + + {$articleTitle} + {$articleTitle|upper|spacify} + {$articleTitle|lower|spacify|truncate} + {$articleTitle|lower|truncate:30|spacify} + {$articleTitle|lower|spacify|truncate:30:". . ."} + + + +The above example will output: + + + Smokers are Productive, but Death Cuts Efficiency. + S M O K E R S A R ....snip.... H C U T S E F F I C I E N C Y . + s m o k e r s a r ....snip.... b u t d e a t h c u t s... + s m o k e r s a r e p r o d u c t i v e , b u t . . . + s m o k e r s a r e p. . . + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions.md b/vendor/smarty/smarty/docs/designers/language-custom-functions.md new file mode 100644 index 000000000..20ad54e99 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions.md @@ -0,0 +1,21 @@ +Custom Functions {#language.custom.functions} +================ + +Smarty comes with several custom plugin functions that you can use in +the templates. + +## Table of contents +- [{counter}](./language-custom-functions/language-function-counter.md) +- [{cycle}](./language-custom-functions/language-function-cycle.md) +- [{eval}](./language-custom-functions/language-function-eval.md) +- [{fetch}](./language-custom-functions/language-function-fetch.md) +- [{html_checkboxes}](./language-custom-functions/language-function-html-checkboxes.md) +- [{html_image}](./language-custom-functions/language-function-html-image.md) +- [{html_options}](./language-custom-functions/language-function-html-options.md) +- [{html_radios}](./language-custom-functions/language-function-html-radios.md) +- [{html_select_date}](./language-custom-functions/language-function-html-select-date.md) +- [{html_select_time}](./language-custom-functions/language-function-html-select-time.md) +- [{html_table}](./language-custom-functions/language-function-html-table.md) +- [{mailto}](./language-custom-functions/language-function-mailto.md) +- [{math}](./language-custom-functions/language-function-math.md) +- [{textformat}](./language-custom-functions/language-function-textformat.md) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md new file mode 100644 index 000000000..cc1ac08f2 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md @@ -0,0 +1,41 @@ +{counter} {#language.function.counter} +========= + +`{counter}` is used to print out a count. `{counter}` will remember the +count on each iteration. You can adjust the number, the interval and the +direction of the count, as well as determine whether or not to print the +value. You can run multiple counters concurrently by supplying a unique +name for each one. If you do not supply a name, the name "default" will +be used. + +If you supply the `assign` attribute, the output of the `{counter}` +function will be assigned to this template variable instead of being +output to the template. + + Attribute Name Type Required Default Description + ---------------- --------- ---------- ----------- ------------------------------------------------------ + name string No *default* The name of the counter + start number No *1* The initial number to start counting from + skip number No *1* The interval to count by + direction string No *up* The direction to count (up/down) + print boolean No *TRUE* Whether or not to print the value + assign string No *n/a* the template variable the output will be assigned to + + + {* initialize the count *} + {counter start=0 skip=2}<br /> + {counter}<br /> + {counter}<br /> + {counter}<br /> + + + +this will output: + + + 0<br /> + 2<br /> + 4<br /> + 6<br /> + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md new file mode 100644 index 000000000..5986e6322 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md @@ -0,0 +1,57 @@ +{cycle} {#language.function.cycle} +======= + +`{cycle}` is used to alternate a set of values. This makes it easy to +for example, alternate between two or more colors in a table, or cycle +through an array of values. + + Attribute Name Type Required Default Description + ---------------- --------- ---------- ----------- ------------------------------------------------------------------------------------------------------------- + name string No *default* The name of the cycle + values mixed Yes *N/A* The values to cycle through, either a comma delimited list (see delimiter attribute), or an array of values + print boolean No *TRUE* Whether to print the value or not + advance boolean No *TRUE* Whether or not to advance to the next value + delimiter string No *,* The delimiter to use in the values attribute + assign string No *n/a* The template variable the output will be assigned to + reset boolean No *FALSE* The cycle will be set to the first value and not advanced + +- You can `{cycle}` through more than one set of values in a template + by supplying a `name` attribute. Give each `{cycle}` an unique + `name`. + +- You can force the current value not to print with the `print` + attribute set to FALSE. This would be useful for silently skipping a + value. + +- The `advance` attribute is used to repeat a value. When set to + FALSE, the next call to `{cycle}` will print the same value. + +- If you supply the `assign` attribute, the output of the `{cycle}` + function will be assigned to a template variable instead of being + output to the template. + +<!-- --> + + + {section name=rows loop=$data} + <tr class="{cycle values="odd,even"}"> + <td>{$data[rows]}</td> + </tr> + {/section} + + + +The above template would output: + + + <tr class="odd"> + <td>1</td> + </tr> + <tr class="even"> + <td>2</td> + </tr> + <tr class="odd"> + <td>3</td> + </tr> + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md new file mode 100644 index 000000000..79b3477c1 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md @@ -0,0 +1,15 @@ +{debug} {#language.function.debug} +======= + +`{debug}` dumps the debug console to the page. This works regardless of +the [debug](#chapter.debugging.console) settings in the php script. +Since this gets executed at runtime, this is only able to show the +[assigned](#api.assign) variables; not the templates that are in use. +However, you can see all the currently available variables within the +scope of a template. + + Attribute Name Type Required Default Description + ---------------- -------- ---------- -------------- --------------------------------- + output string No *javascript* output type, html or javascript + +See also the [debugging console page](#chapter.debugging.console). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md new file mode 100644 index 000000000..e11f57e3e --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md @@ -0,0 +1,84 @@ +{eval} {#language.function.eval} +====== + +`{eval}` is used to evaluate a variable as a template. This can be used +for things like embedding template tags/variables into variables or +tags/variables into config file variables. + +If you supply the `assign` attribute, the output of the `{eval}` +function will be assigned to this template variable instead of being +output to the template. + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ------------------------------------------------------ + var mixed Yes *n/a* Variable (or string) to evaluate + assign string No *n/a* The template variable the output will be assigned to + +> **Note** +> +> - Evaluated variables are treated the same as templates. They follow +> the same escapement and security features just as if they were +> templates. +> +> - Evaluated variables are compiled on every invocation, the compiled +> versions are not saved! However if you have [caching](#caching) +> enabled, the output will be cached with the rest of the template. +> +> - If the content to evaluate doesn\'t change often, or is used +> repeatedly, consider using +> `{include file="string:{$template_code}"}` instead. This may cache +> the compiled state and thus doesn\'t have to run the (comparably +> slow) compiler on every invocation. +> +The contents of the config file, `setup.conf`. + + + emphstart = <strong> + emphend = </strong> + title = Welcome to {$company}'s home page! + ErrorCity = You must supply a {#emphstart#}city{#emphend#}. + ErrorState = You must supply a {#emphstart#}state{#emphend#}. + + + +Where the template is: + + + {config_load file='setup.conf'} + + {eval var=$foo} + {eval var=#title#} + {eval var=#ErrorCity#} + {eval var=#ErrorState# assign='state_error'} + {$state_error} + + + +The above template will output: + + + This is the contents of foo. + Welcome to Foobar Pub & Grill's home page! + You must supply a <strong>city</strong>. + You must supply a <strong>state</strong>. + + + +This outputs the server name (in uppercase) and IP. The assigned +variable `$str` could be from a database query. + + + <?php + $str = 'The server name is {$smarty.server.SERVER_NAME|upper} ' + .'at {$smarty.server.SERVER_ADDR}'; + $smarty->assign('foo',$str); + ?> + + + +Where the template is: + + + {eval var=$foo} + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md new file mode 100644 index 000000000..2277f5056 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md @@ -0,0 +1,59 @@ +{fetch} {#language.function.fetch} +======= + +`{fetch}` is used to retrieve files from the local file system, http, or +ftp and display the contents. + +- If the file name begins with `http://`, the web site page will be + fetched and displayed. + + > **Note** + > + > This will not support http redirects, be sure to include a + > trailing slash on your web page fetches where necessary. + +- If the file name begins with `ftp://`, the file will be downloaded + from the ftp server and displayed. + +- For local files, either a full system file path must be given, or a + path relative to the executed php script. + + > **Note** + > + > If security is enabled and you are fetching a file from the local + > file system, `{fetch}` will only allow files from within the + > `$secure_dir` path of the securty policy. See the + > [Security](#advanced.features.security) section for details. + +- If the `assign` attribute is set, the output of the `{fetch}` + function will be assigned to this template variable instead of being + output to the template. + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ------------------------------------------------------ + file string Yes *n/a* The file, http or ftp site to fetch + assign string No *n/a* The template variable the output will be assigned to + + + {* include some javascript in your template *} + {fetch file='/export/httpd/www.example.com/docs/navbar.js'} + + {* embed some weather text in your template from another web site *} + {fetch file='http://www.myweather.com/68502/'} + + {* fetch a news headline file via ftp *} + {fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'} + {* as above but with variables *} + {fetch file="ftp://`$user`:`$password`@`$server`/`$path`"} + + {* assign the fetched contents to a template variable *} + {fetch file='http://www.myweather.com/68502/' assign='weather'} + {if $weather ne ''} + <div id="weather">{$weather}</div> + {/if} + + + +See also [`{capture}`](#language.function.capture), +[`{eval}`](#language.function.eval), +[`{assign}`](#language.function.assign) and [`fetch()`](#api.fetch). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md new file mode 100644 index 000000000..23af713b7 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md @@ -0,0 +1,113 @@ +{html\_checkboxes} {#language.function.html.checkboxes} +================== + +`{html_checkboxes}` is a [custom function](#language.custom.functions) +that creates an html checkbox group with provided data. It takes care of +which item(s) are selected by default as well. + + Attribute Name Type Required Default Description + ---------------- ------------------- ------------------------------------- ------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + name string No *checkbox* Name of checkbox list + values array Yes, unless using options attribute *n/a* An array of values for checkbox buttons + output array Yes, unless using options attribute *n/a* An array of output for checkbox buttons + selected string/array No *empty* The selected checkbox element(s) + options associative array Yes, unless using values and output *n/a* An associative array of values and output + separator string No *empty* String of text to separate each checkbox item + assign string No *empty* Assign checkbox tags to an array instead of output + labels boolean No *TRUE* Add \<label\>-tags to the output + label\_ids boolean No *FALSE* Add id-attributes to \<label\> and \<input\> to the output + escape boolean No *TRUE* Escape the output / content (values are always escaped) + strict boolean No *FALSE* Will make the \"extra\" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *\"disabled\"* and *\"readonly\"* respectively + +- Required attributes are `values` and `output`, unless you use + `options` instead. + +- All output is XHTML compliant. + +- All parameters that are not in the list above are printed as + name/value-pairs inside each of the created \<input\>-tags. + +<!-- --> + + + <?php + + $smarty->assign('cust_ids', array(1000,1001,1002,1003)); + $smarty->assign('cust_names', array( + 'Joe Schmoe', + 'Jack Smith', + 'Jane Johnson', + 'Charlie Brown') + ); + $smarty->assign('customer_id', 1001); + + ?> + + + +where template is + + + {html_checkboxes name='id' values=$cust_ids output=$cust_names + selected=$customer_id separator='<br />'} + + + +or where PHP code is: + + + <?php + + $smarty->assign('cust_checkboxes', array( + 1000 => 'Joe Schmoe', + 1001 => 'Jack Smith', + 1002 => 'Jane Johnson', + 1003 => 'Charlie Brown') + ); + $smarty->assign('customer_id', 1001); + + ?> + + + +and the template is + + + {html_checkboxes name='id' options=$cust_checkboxes + selected=$customer_id separator='<br />'} + + + +both examples will output: + + + <label><input type="checkbox" name="id[]" value="1000" />Joe Schmoe</label><br /> + <label><input type="checkbox" name="id[]" value="1001" checked="checked" />Jack Smith</label> + <br /> + <label><input type="checkbox" name="id[]" value="1002" />Jane Johnson</label><br /> + <label><input type="checkbox" name="id[]" value="1003" />Charlie Brown</label><br /> + + + + + <?php + + $sql = 'select type_id, types from contact_types order by type'; + $smarty->assign('contact_types',$db->getAssoc($sql)); + + $sql = 'select contact_id, contact_type_id, contact ' + .'from contacts where contact_id=12'; + $smarty->assign('contact',$db->getRow($sql)); + + ?> + + + +The results of the database queries above would be output with. + + + {html_checkboxes name='contact_type_id' options=$contact_types + selected=$contact.contact_type_id separator='<br />'} + +See also [`{html_radios}`](#language.function.html.radios) and +[`{html_options}`](#language.function.html.options) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md new file mode 100644 index 000000000..76740a1fe --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md @@ -0,0 +1,56 @@ +{html\_image} {#language.function.html.image} +============= + +`{html_image}` is a [custom function](#language.custom.functions) that +generates an HTML `<img>` tag. The `height` and `width` are +automatically calculated from the image file if they are not supplied. + + Attribute Name Type Required Default Description + ---------------- -------- ---------- ----------------------- --------------------------------------- + file string Yes *n/a* name/path to image + height string No *actual image height* Height to display image + width string No *actual image width* Width to display image + basedir string no *web server doc root* Directory to base relative paths from + alt string no *""* Alternative description of the image + href string no *n/a* href value to link the image to + path\_prefix string no *n/a* Prefix for output path + +- `basedir` is the base directory that relative image paths are based + from. If not given, the web server\'s document root + `$_ENV['DOCUMENT_ROOT']` is used as the base. If security is + enabled, then the image must be located in the `$secure_dir` path of + the securty policy. See the [Security](#advanced.features.security) + section for details. + +- `href` is the href value to link the image to. If link is supplied, + an `<a href="LINKVALUE"><a>` tag is placed around the image tag. + +- `path_prefix` is an optional prefix string you can give the output + path. This is useful if you want to supply a different server name + for the image. + +- All parameters that are not in the list above are printed as + name/value-pairs inside the created `<img>` tag. + +> **Note** +> +> `{html_image}` requires a hit to the disk to read the image and +> calculate the height and width. If you don\'t use template +> [caching](#caching), it is generally better to avoid `{html_image}` +> and leave image tags static for optimal performance. + + + {html_image file='pumpkin.jpg'} + {html_image file='/path/from/docroot/pumpkin.jpg'} + {html_image file='../path/relative/to/currdir/pumpkin.jpg'} + + + +Example output of the above template would be: + + + <img src="pumpkin.jpg" alt="" width="44" height="68" /> + <img src="/path/from/docroot/pumpkin.jpg" alt="" width="44" height="68" /> + <img src="../path/relative/to/currdir/pumpkin.jpg" alt="" width="44" height="68" /> + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md new file mode 100644 index 000000000..b7c04e940 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md @@ -0,0 +1,155 @@ +{html\_options} {#language.function.html.options} +=============== + +`{html_options}` is a [custom function](#language.custom.functions) that +creates the html `<select><option>` group with the assigned data. It +takes care of which item(s) are selected by default as well. + + Attribute Name Type Required Default Description + ---------------- ------------------- ------------------------------------- --------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + values array Yes, unless using options attribute *n/a* An array of values for dropdown + output array Yes, unless using options attribute *n/a* An array of output for dropdown + selected string/array No *empty* The selected option element(s) + options associative array Yes, unless using values and output *n/a* An associative array of values and output + name string No *empty* Name of select group + strict boolean No *FALSE* Will make the \"extra\" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *\"disabled\"* and *\"readonly\"* respectively + +- Required attributes are `values` and `output`, unless you use the + combined `options` instead. + +- If the optional `name` attribute is given, the `<select></select>` + tags are created, otherwise ONLY the `<option>` list is generated. + +- If a given value is an array, it will treat it as an html + `<optgroup>`, and display the groups. Recursion is supported with + `<optgroup>`. + +- All parameters that are not in the list above are printed as + name/value-pairs inside the `<select>` tag. They are ignored if the + optional `name` is not given. + +- All output is XHTML compliant. + +<!-- --> + + + <?php + $smarty->assign('myOptions', array( + 1800 => 'Joe Schmoe', + 9904 => 'Jack Smith', + 2003 => 'Charlie Brown') + ); + $smarty->assign('mySelect', 9904); + ?> + + + +The following template will generate a drop-down list. Note the presence +of the `name` attribute which creates the `<select>` tags. + + + {html_options name=foo options=$myOptions selected=$mySelect} + + + +Output of the above example would be: + + + <select name="foo"> + <option value="1800">Joe Schmoe</option> + <option value="9904" selected="selected">Jack Smith</option> + <option value="2003">Charlie Brown</option> + </select> + + + <?php + $smarty->assign('cust_ids', array(56,92,13)); + $smarty->assign('cust_names', array( + 'Joe Schmoe', + 'Jane Johnson', + 'Charlie Brown')); + $smarty->assign('customer_id', 92); + ?> + + + +The above arrays would be output with the following template (note the +use of the php [`count()`](&url.php-manual;function.count) function as a +modifier to set the select size). + + + <select name="customer_id" size="{$cust_names|@count}"> + {html_options values=$cust_ids output=$cust_names selected=$customer_id} + </select> + + + +The above example would output: + + + <select name="customer_id" size="3"> + <option value="56">Joe Schmoe</option> + <option value="92" selected="selected">Jane Johnson</option> + <option value="13">Charlie Brown</option> + </select> + + + + + + <?php + + $sql = 'select type_id, types from contact_types order by type'; + $smarty->assign('contact_types',$db->getAssoc($sql)); + + $sql = 'select contact_id, name, email, contact_type_id + from contacts where contact_id='.$contact_id; + $smarty->assign('contact',$db->getRow($sql)); + + ?> + +Where a template could be as follows. Note the use of the +[`truncate`](#language.modifier.truncate) modifier. + + + <select name="type_id"> + <option value='null'>-- none --</option> + {html_options options=$contact_types|truncate:20 selected=$contact.type_id} + </select> + + + + + <?php + $arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim'); + $arr['Rest'] = array(3 => 'Sauna',1 => 'Massage'); + $smarty->assign('lookups', $arr); + $smarty->assign('fav', 7); + ?> + + + +The script above and the following template + + + {html_options name=foo options=$lookups selected=$fav} + + + +would output: + + + <select name="foo"> + <optgroup label="Sport"> + <option value="6">Golf</option> + <option value="9">Cricket</option> + <option value="7" selected="selected">Swim</option> + </optgroup> + <optgroup label="Rest"> + <option value="3">Sauna</option> + <option value="1">Massage</option> + </optgroup> + </select> + +See also [`{html_checkboxes}`](#language.function.html.checkboxes) and +[`{html_radios}`](#language.function.html.radios) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md new file mode 100644 index 000000000..992adaeaf --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md @@ -0,0 +1,112 @@ +{html\_radios} {#language.function.html.radios} +============== + +`{html_radios}` is a [custom function](#language.custom.functions) that +creates a HTML radio button group. It also takes care of which item is +selected by default as well. + + Attribute Name Type Required Default Description + ---------------- ------------------- ------------------------------------- --------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + name string No *radio* Name of radio list + values array Yes, unless using options attribute *n/a* An array of values for radio buttons + output array Yes, unless using options attribute *n/a* An array of output for radio buttons + selected string No *empty* The selected radio element + options associative array Yes, unless using values and output *n/a* An associative array of values and output + separator string No *empty* String of text to separate each radio item + assign string No *empty* Assign radio tags to an array instead of output + labels boolean No *TRUE* Add \<label\>-tags to the output + label\_ids boolean No *FALSE* Add id-attributes to \<label\> and \<input\> to the output + escape boolean No *TRUE* Escape the output / content (values are always escaped) + strict boolean No *FALSE* Will make the \"extra\" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *\"disabled\"* and *\"readonly\"* respectively + +- Required attributes are `values` and `output`, unless you use + `options` instead. + +- All output is XHTML compliant. + +- All parameters that are not in the list above are output as + name/value-pairs inside each of the created `<input>`-tags. + +<!-- --> + + + <?php + + $smarty->assign('cust_ids', array(1000,1001,1002,1003)); + $smarty->assign('cust_names', array( + 'Joe Schmoe', + 'Jack Smith', + 'Jane Johnson', + 'Charlie Brown') + ); + $smarty->assign('customer_id', 1001); + + ?> + + + +Where template is: + + + {html_radios name='id' values=$cust_ids output=$cust_names + selected=$customer_id separator='<br />'} + + + + + <?php + + $smarty->assign('cust_radios', array( + 1000 => 'Joe Schmoe', + 1001 => 'Jack Smith', + 1002 => 'Jane Johnson', + 1003 => 'Charlie Brown')); + $smarty->assign('customer_id', 1001); + + ?> + + + +Where template is: + + + {html_radios name='id' options=$cust_radios + selected=$customer_id separator='<br />'} + + + +Both examples will output: + + + <label><input type="radio" name="id" value="1000" />Joe Schmoe</label><br /> + <label><input type="radio" name="id" value="1001" checked="checked" />Jack Smith</label><br /> + <label><input type="radio" name="id" value="1002" />Jane Johnson</label><br /> + <label><input type="radio" name="id" value="1003" />Charlie Brown</label><br /> + + + + + <?php + + $sql = 'select type_id, types from contact_types order by type'; + $smarty->assign('contact_types',$db->getAssoc($sql)); + + $sql = 'select contact_id, name, email, contact_type_id ' + .'from contacts where contact_id='.$contact_id; + $smarty->assign('contact',$db->getRow($sql)); + + ?> + + + +The variable assigned from the database above would be output with the +template: + + + {html_radios name='contact_type_id' options=$contact_types + selected=$contact.contact_type_id separator='<br />'} + + + +See also [`{html_checkboxes}`](#language.function.html.checkboxes) and +[`{html_options}`](#language.function.html.options) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md new file mode 100644 index 000000000..b46eb0419 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md @@ -0,0 +1,119 @@ +{html\_select\_date} {#language.function.html.select.date} +==================== + +`{html_select_date}` is a [custom function](#language.custom.functions) +that creates date dropdowns. It can display any or all of year, month, +and day. All parameters that are not in the list below are printed as +name/value-pairs inside the `<select>` tags of day, month and year. + + Attribute Name Type Required Default Description + ---------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ---------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + prefix string No Date\_ What to prefix the var name with + time [timestamp](&url.php-manual;function.time), [DateTime](&url.php-manual;class.DateTime), mysql timestamp or any string parsable by [`strtotime()`](&url.php-manual;strtotime), arrays as produced by this function if field\_array is set. No current [timestamp](&url.php-manual;function.time) What date/time to pre-select. If an array is given, the attributes field\_array and prefix are used to identify the array elements to extract year, month and day from. Omitting this parameter or supplying a falsy value will select the current date. To prevent date selection, pass in NULL + start\_year string No current year The first year in the dropdown, either year number, or relative to current year (+/- N) + end\_year string No same as start\_year The last year in the dropdown, either year number, or relative to current year (+/- N) + display\_days boolean No TRUE Whether to display days or not + display\_months boolean No TRUE Whether to display months or not + display\_years boolean No TRUE Whether to display years or not + month\_names array No null List of strings to display for months. array(1 =\> \'Jan\', ..., 12 =\> \'Dec\') + month\_format string No \%B What format the month should be in (strftime) + day\_format string No \%02d What format the day output should be in (sprintf) + day\_value\_format string No \%d What format the day value should be in (sprintf) + year\_as\_text boolean No FALSE Whether or not to display the year as text + reverse\_years boolean No FALSE Display years in reverse order + field\_array string No null If a name is given, the select boxes will be drawn such that the results will be returned to PHP in the form of name\[Day\], name\[Year\], name\[Month\]. + day\_size string No null Adds size attribute to select tag if given + month\_size string No null Adds size attribute to select tag if given + year\_size string No null Adds size attribute to select tag if given + all\_extra string No null Adds extra attributes to all select/input tags if given + day\_extra string No null Adds extra attributes to select/input tags if given + month\_extra string No null Adds extra attributes to select/input tags if given + year\_extra string No null Adds extra attributes to select/input tags if given + all\_id string No null Adds id-attribute to all select/input tags if given + day\_id string No null Adds id-attribute to select/input tags if given + month\_id string No null Adds id-attribute to select/input tags if given + year\_id string No null Adds id-attribute to select/input tags if given + field\_order string No MDY The order in which to display the fields + field\_separator string No \\n String printed between different fields + month\_value\_format string No \%m strftime() format of the month values, default is %m for month numbers. + all\_empty string No null If supplied then the first element of any select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-boxes read "Please select" for example. + year\_empty string No null If supplied then the first element of the year\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select a year" for example. Note that you can use values like "-MM-DD" as time-attribute to indicate an unselected year. + month\_empty string No null If supplied then the first element of the month\'s select-box has this value as it\'s label and "" as it\'s value. . Note that you can use values like "YYYY\--DD" as time-attribute to indicate an unselected month. + day\_empty string No null If supplied then the first element of the day\'s select-box has this value as it\'s label and "" as it\'s value. Note that you can use values like "YYYY-MM-" as time-attribute to indicate an unselected day. + +> **Note** +> +> There is an useful php function on the [date tips page](#tips.dates) +> for converting `{html_select_date}` form values to a timestamp. + +Template code + + + {html_select_date} + + + +This will output: + + + <select name="Date_Month"> + <option value="1">January</option> + <option value="2">February</option> + <option value="3">March</option> + ..... snipped ..... + <option value="10">October</option> + <option value="11">November</option> + <option value="12" selected="selected">December</option> + </select> + <select name="Date_Day"> + <option value="1">01</option> + <option value="2">02</option> + <option value="3">03</option> + ..... snipped ..... + <option value="11">11</option> + <option value="12">12</option> + <option value="13" selected="selected">13</option> + <option value="14">14</option> + <option value="15">15</option> + ..... snipped ..... + <option value="29">29</option> + <option value="30">30</option> + <option value="31">31</option> + </select> + <select name="Date_Year"> + <option value="2006" selected="selected">2006</option> + </select> + + + + + {* start and end year can be relative to current year *} + {html_select_date prefix='StartDate' time=$time start_year='-5' + end_year='+1' display_days=false} + + + +With 2000 as the current year the output: + + + <select name="StartDateMonth"> + <option value="1">January</option> + <option value="2">February</option> + .... snipped .... + <option value="11">November</option> + <option value="12" selected="selected">December</option> + </select> + <select name="StartDateYear"> + <option value="1995">1995</option> + .... snipped .... + <option value="1999">1999</option> + <option value="2000" selected="selected">2000</option> + <option value="2001">2001</option> + </select> + + + +See also [`{html_select_time}`](#language.function.html.select.time), +[`date_format`](#language.modifier.date.format), +[`$smarty.now`](#language.variables.smarty.now) and the [date tips +page](#tips.dates). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md new file mode 100644 index 000000000..6ccc59907 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md @@ -0,0 +1,98 @@ +{html\_select\_time} {#language.function.html.select.time} +==================== + +`{html_select_time}` is a [custom function](#language.custom.functions) +that creates time dropdowns for you. It can display any or all of hour, +minute, second and meridian. + +The `time` attribute can have different formats. It can be a unique +timestamp, a string of the format `YYYYMMDDHHMMSS` or a string that is +parseable by PHP\'s [`strtotime()`](&url.php-manual;strtotime). + + Attribute Name Type Required Default Description + ----------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ---------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + prefix string No Time\_ What to prefix the var name with + time [timestamp](&url.php-manual;function.time), [DateTime](&url.php-manual;class.DateTime), mysql timestamp or any string parsable by [`strtotime()`](&url.php-manual;strtotime), arrays as produced by this function if field\_array is set. No current [timestamp](&url.php-manual;function.time) What date/time to pre-select. If an array is given, the attributes field\_array and prefix are used to identify the array elements to extract hour, minute, second and meridian from. + display\_hours boolean No TRUE Whether or not to display hours + display\_minutes boolean No TRUE Whether or not to display minutes + display\_seconds boolean No TRUE Whether or not to display seconds + display\_meridian boolean No TRUE Whether or not to display meridian (am/pm) + use\_24\_hours boolean No TRUE Whether or not to use 24 hour clock + minute\_interval integer No 1 Number interval in minute dropdown + second\_interval integer No 1 Number interval in second dropdown + hour\_format string No \%02d What format the hour label should be in (sprintf) + hour\_value\_format string No \%20d What format the hour value should be in (sprintf) + minute\_format string No \%02d What format the minute label should be in (sprintf) + minute\_value\_format string No \%20d What format the minute value should be in (sprintf) + second\_format string No \%02d What format the second label should be in (sprintf) + second\_value\_format string No \%20d What format the second value should be in (sprintf) + field\_array string No n/a Outputs values to array of this name + all\_extra string No null Adds extra attributes to select/input tags if given + hour\_extra string No null Adds extra attributes to select/input tags if given + minute\_extra string No null Adds extra attributes to select/input tags if given + second\_extra string No null Adds extra attributes to select/input tags if given + meridian\_extra string No null Adds extra attributes to select/input tags if given + field\_separator string No \\n String printed between different fields + option\_separator string No \\n String printed between different options of a field + all\_id string No null Adds id-attribute to all select/input tags if given + hour\_id string No null Adds id-attribute to select/input tags if given + minute\_id string No null Adds id-attribute to select/input tags if given + second\_id string No null Adds id-attribute to select/input tags if given + meridian\_id string No null Adds id-attribute to select/input tags if given + all\_empty string No null If supplied then the first element of any select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-boxes read "Please select" for example. + hour\_empty string No null If supplied then the first element of the hour\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an hour" for example. + minute\_empty string No null If supplied then the first element of the minute\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an minute" for example. + second\_empty string No null If supplied then the first element of the second\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an second" for example. + meridian\_empty string No null If supplied then the first element of the meridian\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an meridian" for example. + + + {html_select_time use_24_hours=true} + + + +At 9:20 and 23 seconds in the morning the template above would output: + + + <select name="Time_Hour"> + <option value="00">00</option> + <option value="01">01</option> + ... snipped .... + <option value="08">08</option> + <option value="09" selected>09</option> + <option value="10">10</option> + ... snipped .... + <option value="22">22</option> + <option value="23">23</option> + </select> + <select name="Time_Minute"> + <option value="00">00</option> + <option value="01">01</option> + ... snipped .... + <option value="19">19</option> + <option value="20" selected>20</option> + <option value="21">21</option> + ... snipped .... + <option value="58">58</option> + <option value="59">59</option> + </select> + <select name="Time_Second"> + <option value="00">00</option> + <option value="01">01</option> + ... snipped .... + <option value="22">22</option> + <option value="23" selected>23</option> + <option value="24">24</option> + ... snipped .... + <option value="58">58</option> + <option value="59">59</option> + </select> + <select name="Time_Meridian"> + <option value="am" selected>AM</option> + <option value="pm">PM</option> + </select> + + + +See also [`$smarty.now`](#language.variables.smarty.now), +[`{html_select_date}`](#language.function.html.select.date) and the +[date tips page](#tips.dates). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md new file mode 100644 index 000000000..fed4ae4d7 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md @@ -0,0 +1,89 @@ +{html\_table} {#language.function.html.table} +============= + +`{html_table}` is a [custom function](#language.custom.functions) that +dumps an array of data into an HTML `<table>`. + + Attribute Name Type Required Default Description + ---------------- --------- ---------- ---------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + loop array Yes *n/a* Array of data to loop through + cols mixed No *3* Number of columns in the table or a comma-separated list of column heading names or an array of column heading names.if the cols-attribute is empty, but rows are given, then the number of cols is computed by the number of rows and the number of elements to display to be just enough cols to display all elements. If both, rows and cols, are omitted cols defaults to 3. if given as a list or array, the number of columns is computed from the number of elements in the list or array. + rows integer No *empty* Number of rows in the table. if the rows-attribute is empty, but cols are given, then the number of rows is computed by the number of cols and the number of elements to display to be just enough rows to display all elements. + inner string No *cols* Direction of consecutive elements in the loop-array to be rendered. *cols* means elements are displayed col-by-col. *rows* means elements are displayed row-by-row. + caption string No *empty* Text to be used for the `<caption>` element of the table + table\_attr string No *border=\"1\"* Attributes for `<table>` tag + th\_attr string No *empty* Attributes for `<th>` tag (arrays are cycled) + tr\_attr string No *empty* attributes for `<tr>` tag (arrays are cycled) + td\_attr string No *empty* Attributes for `<td>` tag (arrays are cycled) + trailpad string No * * Value to pad the trailing cells on last row with (if any) + hdir string No *right* Direction of each row to be rendered. possible values: *right* (left-to-right), and *left* (right-to-left) + vdir string No *down* Direction of each column to be rendered. possible values: *down* (top-to-bottom), *up* (bottom-to-top) + +- The `cols` attribute determines how many columns will be in the + table. + +- The `table_attr`, `tr_attr` and `td_attr` values determine the + attributes given to the `<table>`, `<tr>` and `<td>` tags. + +- If `tr_attr` or `td_attr` are arrays, they will be cycled through. + +- `trailpad` is the value put into the trailing cells on the last + table row if there are any present. + +<!-- --> + + + <?php + $smarty->assign( 'data', array(1,2,3,4,5,6,7,8,9) ); + $smarty->assign( 'tr', array('bgcolor="#eeeeee"','bgcolor="#dddddd"') ); + $smarty->display('index.tpl'); + ?> + + + +The variables assigned from php could be displayed as these three +examples demonstrate. Each example shows the template followed by +output. + + + {**** Example One ****} + {html_table loop=$data} + + <table border="1"> + <tbody> + <tr><td>1</td><td>2</td><td>3</td></tr> + <tr><td>4</td><td>5</td><td>6</td></tr> + <tr><td>7</td><td>8</td><td>9</td></tr> + </tbody> + </table> + + + {**** Example Two ****} + {html_table loop=$data cols=4 table_attr='border="0"'} + + <table border="0"> + <tbody> + <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr> + <tr><td>5</td><td>6</td><td>7</td><td>8</td></tr> + <tr><td>9</td><td> </td><td> </td><td> </td></tr> + </tbody> + </table> + + + {**** Example Three ****} + {html_table loop=$data cols="first,second,third,fourth" tr_attr=$tr} + + <table border="1"> + <thead> + <tr> + <th>first</th><th>second</th><th>third</th><th>fourth</th> + </tr> + </thead> + <tbody> + <tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr> + <tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr> + <tr bgcolor="#eeeeee"><td>9</td><td> </td><td> </td><td> </td></tr> + </tbody> + </table> + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md new file mode 100644 index 000000000..cc5bf6968 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md @@ -0,0 +1,56 @@ +{mailto} {#language.function.mailto} +======== + +`{mailto}` automates the creation of a `mailto:` anchor links and +optionally encodes them. Encoding emails makes it more difficult for web +spiders to lift email addresses off of a site. + +> **Note** +> +> Javascript is probably the most thorough form of encoding, although +> you can use hex encoding too. + + Attribute Name Type Required Default Description + ---------------- -------- ---------- --------- ----------------------------------------------------------------------------------------------- + address string Yes *n/a* The e-mail address + text string No *n/a* The text to display, default is the e-mail address + encode string No *none* How to encode the e-mail. Can be one of `none`, `hex`, `javascript` or `javascript_charcode`. + cc string No *n/a* Email addresses to carbon copy, separate entries by a comma. + bcc string No *n/a* Email addresses to blind carbon copy, separate entries by a comma + subject string No *n/a* Email subject + newsgroups string No *n/a* Newsgroups to post to, separate entries by a comma. + followupto string No *n/a* Addresses to follow up to, separate entries by a comma. + extra string No *n/a* Any extra information you want passed to the link, such as style sheet classes + + + {mailto address="me@example.com"} + <a href="mailto:me@example.com" >me@example.com</a> + + {mailto address="me@example.com" text="send me some mail"} + <a href="mailto:me@example.com" >send me some mail</a> + + {mailto address="me@example.com" encode="javascript"} + <script type="text/javascript" language="javascript"> + eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b')) + </script> + + {mailto address="me@example.com" encode="hex"} + <a href="mailto:%6d%65.. snipped..3%6f%6d">m&..snipped...#x6f;m</a> + + {mailto address="me@example.com" subject="Hello to you!"} + <a href="mailto:me@example.com?subject=Hello%20to%20you%21" >me@example.com</a> + + {mailto address="me@example.com" cc="you@example.com,they@example.com"} + <a href="mailto:me@example.com?cc=you@example.com,they@example.com" >me@example.com</a> + + {mailto address="me@example.com" extra='class="email"'} + <a href="mailto:me@example.com" class="email">me@example.com</a> + + {mailto address="me@example.com" encode="javascript_charcode"} + <script type="text/javascript" language="javascript"> + {document.write(String.fromCharCode(60,97, ... snipped ....60,47,97,62))} + </script> + +See also [`escape`](#language.modifier.escape), +[`{textformat}`](#language.function.textformat) and [obfuscating email +addresses](#tips.obfuscating.email). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md new file mode 100644 index 000000000..9adfd1c5a --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md @@ -0,0 +1,104 @@ +{math} {#language.function.math} +====== + +`{math}` allows the template designer to do math equations in the +template. + +- Any numeric template variables may be used in the equations, and the + result is printed in place of the tag. + +- The variables used in the equation are passed as parameters, which + can be template variables or static values. + +- +, -, /, \*, abs, ceil, cos, exp, floor, log, log10, max, min, pi, + pow, rand, round, sin, sqrt, srans and tan are all valid operators. + Check the PHP documentation for further information on these + [math](&url.php-manual;eval) functions. + +- If you supply the `assign` attribute, the output of the `{math}` + function will be assigned to this template variable instead of being + output to the template. + +> **Note** +> +> `{math}` is an expensive function in performance due to its use of the +> php [`eval()`](&url.php-manual;eval) function. Doing the math in PHP +> is much more efficient, so whenever possible do the math calculations +> in the script and [`assign()`](#api.assign) the results to the +> template. Definitely avoid repetitive `{math}` function calls, eg +> within [`{section}`](#language.function.section) loops. + + Attribute Name Type Required Default Description + ---------------- --------- ---------- --------- -------------------------------------------------- + equation string Yes *n/a* The equation to execute + format string No *n/a* The format of the result (sprintf) + var numeric Yes *n/a* Equation variable value + assign string No *n/a* Template variable the output will be assigned to + \[var \...\] numeric Yes *n/a* Equation variable value + +**Example a:** + + + {* $height=4, $width=5 *} + + {math equation="x + y" x=$height y=$width} + + + +The above example will output: + + + 9 + + + +**Example b:** + + + {* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *} + + {math equation="height * width / division" + height=$row_height + width=$row_width + division=#col_div#} + + + +The above example will output: + + + 100 + + + +**Example c:** + + + {* you can use parenthesis *} + + {math equation="(( x + y ) / z )" x=2 y=10 z=2} + + + +The above example will output: + + + 6 + + + +**Example d:** + + + {* you can supply a format parameter in sprintf format *} + + {math equation="x + y" x=4.4444 y=5.0000 format="%.2f"} + + + +The above example will output: + + + 9.44 + + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md new file mode 100644 index 000000000..d0cd4cfc8 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md @@ -0,0 +1,190 @@ +{textformat} {#language.function.textformat} +============ + +`{textformat}` is a [block function](#plugins.block.functions) used to +format text. It basically cleans up spaces and special characters, and +formats paragraphs by wrapping at a boundary and indenting lines. + +You can set the parameters explicitly, or use a preset style. Currently +"email" is the only available style. + + Attribute Name Type Required Default Description + ---------------- --------- ---------- ------------------ ---------------------------------------------------------------------------------------- + style string No *n/a* Preset style + indent number No *0* The number of chars to indent every line + indent\_first number No *0* The number of chars to indent the first line + indent\_char string No *(single space)* The character (or string of chars) to indent with + wrap number No *80* How many characters to wrap each line to + wrap\_char string No *\\n* The character (or string of chars) to break each line with + wrap\_cut boolean No *FALSE* If TRUE, wrap will break the line at the exact character instead of at a word boundary + assign string No *n/a* The template variable the output will be assigned to + + + {textformat wrap=40} + + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + + This is bar. + + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + + {/textformat} + + + + +The above example will output: + + + + This is foo. This is foo. This is foo. + This is foo. This is foo. This is foo. + + This is bar. + + bar foo bar foo foo. bar foo bar foo + foo. bar foo bar foo foo. bar foo bar + foo foo. bar foo bar foo foo. bar foo + bar foo foo. bar foo bar foo foo. + + + + + {textformat wrap=40 indent=4} + + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + + This is bar. + + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + + {/textformat} + + + + +The above example will output: + + + + This is foo. This is foo. This is + foo. This is foo. This is foo. This + is foo. + + This is bar. + + bar foo bar foo foo. bar foo bar foo + foo. bar foo bar foo foo. bar foo + bar foo foo. bar foo bar foo foo. + bar foo bar foo foo. bar foo bar + foo foo. + + + + + {textformat wrap=40 indent=4 indent_first=4} + + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + + This is bar. + + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + + {/textformat} + + + +The above example will output: + + + + This is foo. This is foo. This + is foo. This is foo. This is foo. + This is foo. + + This is bar. + + bar foo bar foo foo. bar foo bar + foo foo. bar foo bar foo foo. bar + foo bar foo foo. bar foo bar foo + foo. bar foo bar foo foo. bar foo + bar foo foo. + + + + + {textformat style="email"} + + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + This is foo. + + This is bar. + + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + bar foo bar foo foo. + + {/textformat} + + + + +The above example will output: + + + + This is foo. This is foo. This is foo. This is foo. This is foo. This is + foo. + + This is bar. + + bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo + bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo + foo. + + + + +See also [`{strip}`](#language.function.strip) and +[`wordwrap`](#language.modifier.wordwrap). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers.md b/vendor/smarty/smarty/docs/designers/language-modifiers.md new file mode 100644 index 000000000..4cb69cd1e --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers.md @@ -0,0 +1,123 @@ +Variable Modifiers {#language.modifiers} +================== + +## Table of contents +- [capitalize](./language-modifiers/language-modifier-capitalize.md) +- [cat](./language-modifiers/language-modifier-cat.md) +- [count_characters](./language-modifiers/language-modifier-count-characters.md) +- [count_paragraphs](./language-modifiers/language-modifier-count-paragraphs.md) +- [count_sentences](./language-modifiers/language-modifier-count-sentences.md) +- [count_words](./language-modifiers/language-modifier-count-words.md) +- [date_format](./language-modifiers/language-modifier-date-format.md) +- [default](./language-modifiers/language-modifier-default.md) +- [escape](./language-modifiers/language-modifier-escape.md) +- [from_charset](./language-modifiers/language-modifier-from-charset.md) +- [indent](./language-modifiers/language-modifier-indent.md) +- [lower](./language-modifiers/language-modifier-lower.md) +- [nl2br](./language-modifiers/language-modifier-nl2br.md) +- [regex_replace](./language-modifiers/language-modifier-regex-replace.md) +- [replace](./language-modifiers/language-modifier-replace.md) +- [spacify](./language-modifiers/language-modifier-spacify.md) +- [string_format](./language-modifiers/language-modifier-string-format.md) +- [strip](./language-modifiers/language-modifier-strip.md) +- [strip_tags](./language-modifiers/language-modifier-strip-tags.md) +- [to_charset](./language-modifiers/language-modifier-to-charset.md) +- [truncate](./language-modifiers/language-modifier-truncate.md) +- [unescape](./language-modifiers/language-modifier-unescape.md) +- [upper](./language-modifiers/language-modifier-upper.md) +- [wordwrap](./language-modifiers/language-modifier-wordwrap.md) + +Variable modifiers can be applied to +[variables](./language-variables.md), [custom +functions](./language-custom-functions.md) or strings. To apply a modifier, +specify the value followed by a `|` (pipe) and the modifier name. A +modifier may accept additional parameters that affect its behavior. +These parameters follow the modifier name and are separated by a `:` +(colon). Also, *all php-functions can be used as modifiers implicitly* +(more below) and modifiers can be +[combined](./language-combining-modifiers.md). + + + {* apply modifier to a variable *} + {$title|upper} + + {* modifier with parameters *} + {$title|truncate:40:"..."} + + {* apply modifier to a function parameter *} + {html_table loop=$myvar|upper} + + {* with parameters *} + {html_table loop=$myvar|truncate:40:"..."} + + {* apply modifier to literal string *} + {"foobar"|upper} + + {* using date_format to format the current date *} + {$smarty.now|date_format:"%Y/%m/%d"} + + {* apply modifier to a custom function *} + {mailto|upper address="smarty@example.com"} + + {* using php's str_repeat *} + {"="|str_repeat:80} + + {* php's count *} + {$myArray|@count} + + {* this will uppercase and truncate the whole array *} + <select name="name_id"> + {html_options output=$my_array|upper|truncate:20} + </select> + + + +- Modifiers can be applied to any type of variables, including arrays + and objects. + + > **Note** + > + > The default behavior was changed with Smarty 3. In Smarty 2.x, you + > had to use an \"`@`\" symbol to apply a modifier to an array, such + > as `{$articleTitle|@count}`. With Smarty 3, the \"`@`\" is no + > longer necessary, and is ignored. + > + > If you want a modifier to apply to each individual item of an + > array, you will either need to loop the array in the template, or + > provide for this functionality inside your modifier function. + + > **Note** + > + > Second, in Smarty 2.x, modifiers were applied to the result of + > math expressions like `{8+2}`, meaning that + > `{8+2|count_characters}` would give `2`, as 8+2=10 and 10 is two + > characters long. With Smarty 3, modifiers are applied to the + > variables or atomic expressions before executing the calculations, + > so since 2 is one character long, `{8+2|count_characters}` + > gives 9. To get the old result use parentheses like + > `{(8+2)|count_characters}`. + +- Modifiers are autoloaded from the + [`$plugins_dir`](../programmers/api-variables/variable-plugins-dir.md) or can be registered + explicitly with the [`registerPlugin()`](../programmers/api-functions/api-register-plugin.md) + function. The later is useful for sharing a function between php + scripts and smarty templates. + +- All php-functions can be used as modifiers implicitly, as + demonstrated in the example above. However, using php-functions as + modifiers has two little pitfalls: + + - First - sometimes the order of the function-parameters is not + the desirable one. Formatting `$foo` with + `{"%2.f"|sprintf:$foo}` actually works, but asks for the more + intuitive, like `{$foo|string_format:"%2.f"}` that is provided + by the Smarty distribution. + + - Secondly - if security is enabled, all php-functions that are to + be used as modifiers have to be declared trusted in the + `$modifiers` property of the securty policy. See the + [Security](../programmers/advanced-features/advanced-features-security.md) section for details. + +See also [`registerPlugin()`](../programmers/api-functions/api-register-plugin.md), [combining +modifiers](./language-combining-modifiers.md). and [extending smarty with +plugins](../programmers/plugins.md) diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md new file mode 100644 index 000000000..015bb3bc0 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md @@ -0,0 +1,41 @@ +capitalize {#language.modifier.capitalize} +========== + +This is used to capitalize the first letter of all words in a variable. +This is similar to the PHP [`ucwords()`](&url.php-manual;ucwords) +function. + + Parameter Position Type Required Default Description + -------------------- --------- ---------- --------- ----------------------------------------------------------------------------------------------------------- + 1 boolean No FALSE This determines whether or not words with digits will be uppercased + 2 boolean No FALSE This determines whether or not Capital letters within words should be lowercased, e.g. \"aAa\" to \"Aaa\" + + + <?php + + $smarty->assign('articleTitle', 'next x-men film, x3, delayed.'); + + ?> + + + +Where the template is: + + + {$articleTitle} + {$articleTitle|capitalize} + {$articleTitle|capitalize:true} + + + +Will output: + + + next x-men film, x3, delayed. + Next X-Men Film, x3, Delayed. + Next X-Men Film, X3, Delayed. + + + +See also [`lower`](#language.modifier.lower) and +[`upper`](#language.modifier.upper) diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md new file mode 100644 index 000000000..1f43ae177 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md @@ -0,0 +1,31 @@ +cat {#language.modifier.cat} +=== + +This value is concatenated to the given variable. + + Parameter Position Type Required Default Description + -------------------- -------- ---------- --------- ----------------------------------------------- + 1 string No *empty* This value to catenate to the given variable. + + + <?php + + $smarty->assign('articleTitle', "Psychics predict world didn't end"); + + ?> + + + +Where template is: + + + {$articleTitle|cat:' yesterday.'} + + + +Will output: + + + Psychics predict world didn't end yesterday. + + diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md new file mode 100644 index 000000000..23bc00d51 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md @@ -0,0 +1,39 @@ +count\_characters {#language.modifier.count.characters} +================= + +This is used to count the number of characters in a variable. + + Parameter Position Type Required Default Description + -------------------- --------- ---------- --------- ------------------------------------------------------------------------------- + 1 boolean No FALSE This determines whether or not to include whitespace characters in the count. + + + <?php + + $smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.'); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|count_characters} + {$articleTitle|count_characters:true} + + + +Will output: + + + Cold Wave Linked to Temperatures. + 29 + 33 + + + +See also [`count_words`](#language.modifier.count.words), +[`count_sentences`](#language.modifier.count.sentences) and +[`count_paragraphs`](#language.modifier.count.paragraphs). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md new file mode 100644 index 000000000..02c474e6b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md @@ -0,0 +1,38 @@ +count\_paragraphs {#language.modifier.count.paragraphs} +================= + +This is used to count the number of paragraphs in a variable. + + + <?php + + $smarty->assign('articleTitle', + "War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.\n\n + Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation." + ); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|count_paragraphs} + + + +Will output: + + + War Dims Hope for Peace. Child's Death Ruins Couple's Holiday. + + Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation. + 2 + + + +See also [`count_characters`](#language.modifier.count.characters), +[`count_sentences`](#language.modifier.count.sentences) and +[`count_words`](#language.modifier.count.words). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md new file mode 100644 index 000000000..0a77ab82a --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md @@ -0,0 +1,37 @@ +count\_sentences {#language.modifier.count.sentences} +================ + +This is used to count the number of sentences in a variable. A sentence +being delimited by a dot, question- or exclamation-mark (.?!). + + + <?php + + $smarty->assign('articleTitle', + 'Two Soviet Ships Collide - One Dies. + Enraged Cow Injures Farmer with Axe.' + ); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|count_sentences} + + + +Will output: + + + Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe. + 2 + + + +See also [`count_characters`](#language.modifier.count.characters), +[`count_paragraphs`](#language.modifier.count.paragraphs) and +[`count_words`](#language.modifier.count.words). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md new file mode 100644 index 000000000..d25fbd5b8 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md @@ -0,0 +1,33 @@ +count\_words {#language.modifier.count.words} +============ + +This is used to count the number of words in a variable. + + + <?php + + $smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.'); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|count_words} + + + +This will output: + + + Dealers Will Hear Car Talk at Noon. + 7 + + + +See also [`count_characters`](#language.modifier.count.characters), +[`count_paragraphs`](#language.modifier.count.paragraphs) and +[`count_sentences`](#language.modifier.count.sentences). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md new file mode 100644 index 000000000..edd81937b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md @@ -0,0 +1,175 @@ +date\_format {#language.modifier.date.format} +============ + +This formats a date and time into the given +[`strftime()`](&url.php-manual;strftime) format. Dates can be passed to +Smarty as unix [timestamps](&url.php-manual;function.time), [DateTime +objects](&url.php-manual;class.DateTime), mysql timestamps or any string +made up of month day year, parsable by php\'s +[`strtotime()`](&url.php-manual;strtotime). Designers can then use +`date_format` to have complete control of the formatting of the date. If +the date passed to `date_format` is empty and a second parameter is +passed, that will be used as the date to format. + + Parameter Position Type Required Default Description + -------------------- -------- ---------- ------------ ------------------------------------------------- + 1 string No \%b %e, %Y This is the format for the outputted date. + 2 string No n/a This is the default date if the input is empty. + +> **Note** +> +> Since Smarty-2.6.10 numeric values passed to `date_format` are +> *always* (except for mysql timestamps, see below) interpreted as a +> unix timestamp. +> +> Before Smarty-2.6.10 numeric strings that where also parsable by +> `strtotime()` in php (like `YYYYMMDD`) where sometimes (depending on +> the underlying implementation of `strtotime()`) interpreted as date +> strings and NOT as timestamps. +> +> The only exception are mysql timestamps: They are also numeric only +> and 14 characters long (`YYYYMMDDHHMMSS`), mysql timestamps have +> precedence over unix timestamps. + +> **Note** +> +> `date_format` is essentially a wrapper to PHP\'s +> [`strftime()`](&url.php-manual;strftime) function. You may have more +> or less conversion specifiers available depending on your system\'s +> [`strftime()`](&url.php-manual;strftime) function where PHP was +> compiled. Check your system\'s manpage for a full list of valid +> specifiers. However, a few of the specifiers are emulated on Windows. +> These are: %D, %e, %h, %l, %n, %r, %R, %t, %T. + + + <?php + + $config['date'] = '%I:%M %p'; + $config['time'] = '%H:%M:%S'; + $smarty->assign('config', $config); + $smarty->assign('yesterday', strtotime('-1 day')); + + ?> + + + +This template uses [`$smarty.now`](#language.variables.smarty.now) to +get the current time: + + + {$smarty.now|date_format} + {$smarty.now|date_format:"%D"} + {$smarty.now|date_format:$config.date} + {$yesterday|date_format} + {$yesterday|date_format:"%A, %B %e, %Y"} + {$yesterday|date_format:$config.time} + + + +This above will output: + + + Jan 1, 2022 + 01/01/22 + 02:33 pm + Dec 31, 2021 + Monday, December 1, 2021 + 14:33:00 + + + +`date_format` conversion specifiers: + +- \%a - abbreviated weekday name according to the current locale + +- \%A - full weekday name according to the current locale + +- \%b - abbreviated month name according to the current locale + +- \%B - full month name according to the current locale + +- \%c - preferred date and time representation for the current locale + +- \%C - century number (the year divided by 100 and truncated to an + integer, range 00 to 99) + +- \%d - day of the month as a decimal number (range 01 to 31) + +- \%D - same as %m/%d/%y + +- \%e - day of the month as a decimal number, a single digit is + preceded by a space (range 1 to 31) + +- \%g - Week-based year within century \[00,99\] + +- \%G - Week-based year, including the century \[0000,9999\] + +- \%h - same as %b + +- \%H - hour as a decimal number using a 24-hour clock (range 00 + to 23) + +- \%I - hour as a decimal number using a 12-hour clock (range 01 + to 12) + +- \%j - day of the year as a decimal number (range 001 to 366) + +- \%k - Hour (24-hour clock) single digits are preceded by a blank. + (range 0 to 23) + +- \%l - hour as a decimal number using a 12-hour clock, single digits + preceded by a space (range 1 to 12) + +- \%m - month as a decimal number (range 01 to 12) + +- \%M - minute as a decimal number + +- \%n - newline character + +- \%p - either \`am\' or \`pm\' according to the given time value, or + the corresponding strings for the current locale + +- \%r - time in a.m. and p.m. notation + +- \%R - time in 24 hour notation + +- \%S - second as a decimal number + +- \%t - tab character + +- \%T - current time, equal to %H:%M:%S + +- \%u - weekday as a decimal number \[1,7\], with 1 representing + Monday + +- \%U - week number of the current year as a decimal number, starting + with the first Sunday as the first day of the first week + +- \%V - The ISO 8601:1988 week number of the current year as a decimal + number, range 01 to 53, where week 1 is the first week that has at + least 4 days in the current year, and with Monday as the first day + of the week. + +- \%w - day of the week as a decimal, Sunday being 0 + +- \%W - week number of the current year as a decimal number, starting + with the first Monday as the first day of the first week + +- \%x - preferred date representation for the current locale without + the time + +- \%X - preferred time representation for the current locale without + the date + +- \%y - year as a decimal number without a century (range 00 to 99) + +- \%Y - year as a decimal number including the century + +- \%Z - time zone or name or abbreviation + +- \%% - a literal \`%\' character + +See also [`$smarty.now`](#language.variables.smarty.now), +[`strftime()`](&url.php-manual;strftime), +[`{html_select_date}`](#language.function.html.select.date) and the +[date tips](#tips.dates) page. diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md new file mode 100644 index 000000000..ce08e96ef --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md @@ -0,0 +1,41 @@ +default {#language.modifier.default} +======= + +This is used to set a default value for a variable. If the variable is +unset or an empty string, the given default value is printed instead. +Default takes the one argument. + + Parameter Position Type Required Default Description + -------------------- -------- ---------- --------- --------------------------------------------------------------- + 1 string No *empty* This is the default value to output if the variable is empty. + + + <?php + + $smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.'); + $smarty->assign('email', ''); + + ?> + + + +Where template is: + + + {$articleTitle|default:'no title'} + {$myTitle|default:'no title'} + {$email|default:'No email address available'} + + + +Will output: + + + Dealers Will Hear Car Talk at Noon. + no title + No email address available + + + +See also the [default variable handling](#tips.default.var.handling) and +the [blank variable handling](#tips.blank.var.handling) pages. diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md new file mode 100644 index 000000000..37c71dde9 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md @@ -0,0 +1,74 @@ +escape {#language.modifier.escape} +====== + +`escape` is used to encode or escape a variable to `html`, `url`, +`single quotes`, `hex`, `hexentity`, `javascript` and `mail`. By default +its `html`. + + Parameter Position Type Required Possible Values Default Description + -------------------- --------- ---------- ------------------------------------------------------------------------------------------------------------ --------- ------------------------------------------------------------------------------------- + 1 string No `html`, `htmlall`, `url`, `urlpathinfo`, `quotes`, `hex`, `hexentity`, `javascript`, `mail` `html` This is the escape format to use. + 2 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`htmlentities()`](&url.php-manual;htmlentities) `UTF-8` The character set encoding passed to htmlentities() et. al. + 3 boolean No FALSE TRUE Double encode entites from & to &amp; (applys to `html` and `htmlall` only) + + + <?php + + $smarty->assign('articleTitle', + "'Stiff Opposition Expected to Casketless Funeral Plan'" + ); + $smarty->assign('EmailAddress','smarty@example.com'); + + ?> + + + +These are example `escape` template lines followed by the output + + + {$articleTitle} + 'Stiff Opposition Expected to Casketless Funeral Plan' + + {$articleTitle|escape} + 'Stiff Opposition Expected to Casketless Funeral Plan' + + {$articleTitle|escape:'html'} {* escapes & " ' < > *} + 'Stiff Opposition Expected to Casketless Funeral Plan' + + {$articleTitle|escape:'htmlall'} {* escapes ALL html entities *} + 'Stiff Opposition Expected to Casketless Funeral Plan' + + <a href="?title={$articleTitle|escape:'url'}">click here</a> + <a + href="?title=%27Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan%27">click here</a> + + {$articleTitle|escape:'quotes'} + \'Stiff Opposition Expected to Casketless Funeral Plan\' + + <a href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a> + {$EmailAddress|escape:'mail'} {* this converts to email to text *} + <a href="mailto:%62%6f%..snip..%65%74">bob..snip..et</a> + + {'mail@example.com'|escape:'mail'} + smarty [AT] example [DOT] com + + + + + {* the "rewind" parameter registers the current location *} + <a href="$my_path?page=foo&rewind=$my_uri|urlencode}">click here</a> + + + +This snippet is useful for emails, but see also +[`{mailto}`](#language.function.mailto) + + + {* email address mangled *} + <a href="mailto:{$EmailAddress|escape:'hex'}">{$EmailAddress|escape:'mail'}</a> + + + +See also [escaping smarty parsing](#language.escaping), +[`{mailto}`](#language.function.mailto) and the [obfuscating email +addresses](#tips.obfuscating.email) page. diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md new file mode 100644 index 000000000..8b7fdd50f --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md @@ -0,0 +1,19 @@ +from\_charset {#language.modifier.from_charset} +============= + +`from_charset` is used to transcode a string from a given charset to the +internal charset. This is the exact opposite of the [to\_charset +modifier](#language.modifier.to_charset). + + Parameter Position Type Required Possible Values Default Description + -------------------- -------- ---------- -------------------------------------------------------------------------------------------------------------------------- -------------- --------------------------------------------------------------- + 1 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`mb_convert_encoding()`](&url.php-manual;mb_convert_encoding) `ISO-8859-1` The charset encoding the value is supposed to be decoded from + +> **Note** +> +> Charset encoding should be handled by the application itself. This +> modifier should only be used in cases where the application cannot +> anticipate that a certain string is required in another encoding. + +See also [Charset Enconding](#charset), [from\_charset +modifier](#language.modifier.from_charset). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md new file mode 100644 index 000000000..d0264dca3 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md @@ -0,0 +1,62 @@ +indent {#language.modifier.indent} +====== + +This indents a string on each line, default is 4. As an optional +parameter, you can specify the number of characters to indent. As an +optional second parameter, you can specify the character to use to +indent with eg use `"\t"` for a tab. + + Parameter Position Type Required Default Description + -------------------- --------- ---------- ------------- --------------------------------------------------- + 1 integer No 4 This determines how many characters to indent to. + 2 string No (one space) This is the character used to indent with. + + + <?php + + $smarty->assign('articleTitle', + 'NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25.' + ); + ?> + + + +Where template is: + + + {$articleTitle} + + {$articleTitle|indent} + + {$articleTitle|indent:10} + + {$articleTitle|indent:1:"\t"} + + + +Will output: + + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + + +See also [`strip`](#language.modifier.strip), +[`wordwrap`](#language.modifier.wordwrap) and +[`spacify`](#language.modifier.spacify). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md new file mode 100644 index 000000000..90122e9e4 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md @@ -0,0 +1,33 @@ +lower {#language.modifier.lower} +===== + +This is used to lowercase a variable. This is equivalent to the PHP +[`strtolower()`](&url.php-manual;strtolower) function. + + + <?php + + $smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.'); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|lower} + + + +This will output: + + + Two Convicts Evade Noose, Jury Hung. + two convicts evade noose, jury hung. + + + +See also [`upper`](#language.modifier.upper) and +[`capitalize`](#language.modifier.capitalize). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md new file mode 100644 index 000000000..541233c8b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md @@ -0,0 +1,35 @@ +nl2br {#language.modifier.nl2br} +===== + +All `"\n"` line breaks will be converted to html `<br />` tags in the +given variable. This is equivalent to the PHP\'s +[`nl2br()`](&url.php-manual;nl2br) function. + + + <?php + + $smarty->assign('articleTitle', + "Sun or rain expected\ntoday, dark tonight" + ); + + ?> + + + +Where the template is: + + + {$articleTitle|nl2br} + + + +Will output: + + + Sun or rain expected<br />today, dark tonight + + + +See also [`word_wrap`](#language.modifier.wordwrap), +[`count_paragraphs`](#language.modifier.count.paragraphs) and +[`count_sentences`](#language.modifier.count.sentences). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md new file mode 100644 index 000000000..6fcb33fad --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md @@ -0,0 +1,51 @@ +regex\_replace {#language.modifier.regex.replace} +============== + +A regular expression search and replace on a variable. Use the +[`preg_replace()`](&url.php-manual;preg_replace) syntax from the PHP +manual. + +> **Note** +> +> Although Smarty supplies this regex convenience modifier, it is +> usually better to apply regular expressions in PHP, either via custom +> functions or modifiers. Regular expressions are considered application +> code and are not part of presentation logic. + +Parameters + + Parameter Position Type Required Default Description + -------------------- -------- ---------- --------- ------------------------------------------------ + 1 string Yes *n/a* This is the regular expression to be replaced. + 2 string Yes *n/a* This is the string of text to replace with. + + + <?php + + $smarty->assign('articleTitle', "Infertility unlikely to\nbe passed on, experts say."); + + ?> + + + +Where template is: + + + {* replace each carriage return, tab and new line with a space *} + + {$articleTitle} + {$articleTitle|regex_replace:"/[\r\t\n]/":" "} + + + +Will output: + + + Infertility unlikely to + be passed on, experts say. + Infertility unlikely to be passed on, experts say. + + + +See also [`replace`](#language.modifier.replace) and +[`escape`](#language.modifier.escape). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md new file mode 100644 index 000000000..c7c2903ea --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md @@ -0,0 +1,40 @@ +replace {#language.modifier.replace} +======= + +A simple search and replace on a variable. This is equivalent to the +PHP\'s [`str_replace()`](&url.php-manual;str_replace) function. + + Parameter Position Type Required Default Description + -------------------- -------- ---------- --------- --------------------------------------------- + 1 string Yes *n/a* This is the string of text to be replaced. + 2 string Yes *n/a* This is the string of text to replace with. + + + <?php + + $smarty->assign('articleTitle', "Child's Stool Great for Use in Garden."); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|replace:'Garden':'Vineyard'} + {$articleTitle|replace:' ':' '} + + + +Will output: + + + Child's Stool Great for Use in Garden. + Child's Stool Great for Use in Vineyard. + Child's Stool Great for Use in Garden. + + + +See also [`regex_replace`](#language.modifier.regex.replace) and +[`escape`](#language.modifier.escape). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md new file mode 100644 index 000000000..8856dab43 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md @@ -0,0 +1,40 @@ +spacify {#language.modifier.spacify} +======= + +`spacify` is a way to insert a space between every character of a +variable. You can optionally pass a different character or string to +insert. + + Parameter Position Type Required Default Description + -------------------- -------- ---------- ------------- ----------------------------------------------------------------- + 1 string No *one space* This what gets inserted between each character of the variable. + + + <?php + + $smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.'); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|spacify} + {$articleTitle|spacify:"^^"} + + + +Will output: + + + Something Went Wrong in Jet Crash, Experts Say. + S o m e t h i n g W .... snip .... s h , E x p e r t s S a y . + S^^o^^m^^e^^t^^h^^i^^n^^g^^ .... snip .... ^^e^^r^^t^^s^^ ^^S^^a^^y^^. + + + +See also [`wordwrap`](#language.modifier.wordwrap) and +[`nl2br`](#language.modifier.nl2br). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md new file mode 100644 index 000000000..754014e2d --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md @@ -0,0 +1,39 @@ +string\_format {#language.modifier.string.format} +============== + +This is a way to format strings, such as decimal numbers and such. Use +the syntax for [`sprintf()`](&url.php-manual;sprintf) for the +formatting. + + Parameter Position Type Required Default Description + -------------------- -------- ---------- --------- --------------------------------------- + 1 string Yes *n/a* This is what format to use. (sprintf) + + + <?php + + $smarty->assign('number', 23.5787446); + + ?> + + + +Where template is: + + + {$number} + {$number|string_format:"%.2f"} + {$number|string_format:"%d"} + + + +Will output: + + + 23.5787446 + 23.58 + 23 + + + +See also [`date_format`](#language.modifier.date.format). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md new file mode 100644 index 000000000..4a019767b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md @@ -0,0 +1,41 @@ +strip\_tags {#language.modifier.strip.tags} +=========== + +This strips out markup tags, basically anything between `<` and `>`. + + Parameter Position Type Required Default Description + -------------------- ------ ---------- --------- ---------------------------------------------------------------- + 1 bool No TRUE This determines whether the tags are replaced by \' \' or \'\' + + + <?php + + $smarty->assign('articleTitle', + "Blind Woman Gets <font face=\"helvetica\">New + Kidney</font> from Dad she Hasn't Seen in <b>years</b>." + ); + + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|strip_tags} {* same as {$articleTitle|strip_tags:true} *} + {$articleTitle|strip_tags:false} + + + +Will output: + + + Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>. + Blind Woman Gets New Kidney from Dad she Hasn't Seen in years . + Blind Woman Gets New Kidney from Dad she Hasn't Seen in years. + + + +See also [`replace`](#language.modifier.replace) and +[`regex_replace`](#language.modifier.regex.replace). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md new file mode 100644 index 000000000..7027e0313 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md @@ -0,0 +1,40 @@ +strip {#language.modifier.strip} +===== + +This replaces all spaces, newlines and tabs with a single space, or with +the supplied string. + +> **Note** +> +> If you want to strip blocks of template text, use the built-in +> [`{strip}`](#language.function.strip) function. + + + <?php + $smarty->assign('articleTitle', "Grandmother of\neight makes\t hole in one."); + $smarty->display('index.tpl'); + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|strip} + {$articleTitle|strip:' '} + + + +Will output: + + + Grandmother of + eight makes hole in one. + Grandmother of eight makes hole in one. + Grandmother of eight makes hole in one. + + + +See also [`{strip}`](#language.function.strip) and +[`truncate`](#language.modifier.truncate). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md new file mode 100644 index 000000000..6c53232c2 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md @@ -0,0 +1,19 @@ +to\_charset {#language.modifier.to_charset} +=========== + +`to_charset` is used to transcode a string from the internal charset to +a given charset. This is the exact opposite of the [from\_charset +modifier](#language.modifier.from_charset). + + Parameter Position Type Required Possible Values Default Description + -------------------- -------- ---------- -------------------------------------------------------------------------------------------------------------------------- -------------- ------------------------------------------------------------- + 1 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`mb_convert_encoding()`](&url.php-manual;mb_convert_encoding) `ISO-8859-1` The charset encoding the value is supposed to be encoded to + +> **Note** +> +> Charset encoding should be handled by the application itself. This +> modifier should only be used in cases where the application cannot +> anticipate that a certain string is required in another encoding. + +See also [Charset Enconding](#charset), [from\_charset +modifier](#language.modifier.from_charset). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md new file mode 100644 index 000000000..2303a5432 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md @@ -0,0 +1,52 @@ +truncate {#language.modifier.truncate} +======== + +This truncates a variable to a character length, the default is 80. As +an optional second parameter, you can specify a string of text to +display at the end if the variable was truncated. The characters in the +string are included with the original truncation length. By default, +`truncate` will attempt to cut off at a word boundary. If you want to +cut off at the exact character length, pass the optional third parameter +of TRUE. + + Parameter Position Type Required Default Description + -------------------- --------- ---------- --------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 integer No 80 This determines how many characters to truncate to. + 2 string No \... This is a text string that replaces the truncated text. Its length is included in the truncation length setting. + 3 boolean No FALSE This determines whether or not to truncate at a word boundary with FALSE, or at the exact character with TRUE. + 4 boolean No FALSE This determines whether the truncation happens at the end of the string with FALSE, or in the middle of the string with TRUE. Note that if this setting is TRUE, then word boundaries are ignored. + + + <?php + $smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.'); + ?> + + + +where template is: + + + {$articleTitle} + {$articleTitle|truncate} + {$articleTitle|truncate:30} + {$articleTitle|truncate:30:""} + {$articleTitle|truncate:30:"---"} + {$articleTitle|truncate:30:"":true} + {$articleTitle|truncate:30:"...":true} + {$articleTitle|truncate:30:'..':true:true} + + + +This will output: + + + Two Sisters Reunite after Eighteen Years at Checkout Counter. + Two Sisters Reunite after Eighteen Years at Checkout Counter. + Two Sisters Reunite after... + Two Sisters Reunite after + Two Sisters Reunite after--- + Two Sisters Reunite after Eigh + Two Sisters Reunite after E... + Two Sisters Re..ckout Counter. + + diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md new file mode 100644 index 000000000..58d0b3f75 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md @@ -0,0 +1,39 @@ +unescape {#language.modifier.unescape} +======== + +`unescape` is used to decode `entity`, `html` and `htmlall`. It counters +the effects of the [escape modifier](#language.modifier.escape) for the +given types. + + Parameter Position Type Required Possible Values Default Description + -------------------- -------- ---------- ------------------------------------------------------------------------------------------------------------ --------- ------------------------------------------------------------------------------------------------------------------------------ + 1 string No `html`, `htmlall`, `entity`, `html` This is the escape format to use. + 2 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`htmlentities()`](&url.php-manual;htmlentities) `UTF-8` The character set encoding passed to html\_entity\_decode() or htmlspecialchars\_decode() or mb\_convert\_encoding() et. al. + + + <?php + + $smarty->assign('articleTitle', + "Germans use "Ümlauts" and pay in €uro" + ); + + ?> + + + +These are example `unescape` template lines followed by the output + + + {$articleTitle} + Germans use "Ümlauts" and pay in €uro + + {$articleTitle|unescape:"html"} + Germans use "Ümlauts" and pay in €uro + + {$articleTitle|unescape:"htmlall"} + Germans use "Ãœmlauts" and pay in €uro + + + +See also [escaping smarty parsing](#language.escaping), [escape +modifier](#language.modifier.escape). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md new file mode 100644 index 000000000..9240f42d6 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md @@ -0,0 +1,31 @@ +upper {#language.modifier.upper} +===== + +This is used to uppercase a variable. This is equivalent to the PHP +[`strtoupper()`](&url.php-manual;strtoupper) function. + + + <?php + $smarty->assign('articleTitle', "If Strike isn't Settled Quickly it may Last a While."); + ?> + + + +Where template is: + + + {$articleTitle} + {$articleTitle|upper} + + + +Will output: + + + If Strike isn't Settled Quickly it may Last a While. + IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE. + + + +See also [`lower`](#language.modifier.lower) and +[`capitalize`](#language.modifier.capitalize). diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md new file mode 100644 index 000000000..97cd774f7 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md @@ -0,0 +1,69 @@ +wordwrap {#language.modifier.wordwrap} +======== + +Wraps a string to a column width, the default is 80. As an optional +second parameter, you can specify a string of text to wrap the text to +the next line, the default is a carriage return `"\n"`. By default, +`wordwrap` will attempt to wrap at a word boundary. If you want to cut +off at the exact character length, pass the optional third parameter as +TRUE. This is equivalent to the PHP +[`wordwrap()`](&url.php-manual;wordwrap) function. + + Parameter Position Type Required Default Description + -------------------- --------- ---------- --------- ------------------------------------------------------------------------------------------------------ + 1 integer No 80 This determines how many columns to wrap to. + 2 string No \\n This is the string used to wrap words with. + 3 boolean No FALSE This determines whether or not to wrap at a word boundary (FALSE), or at the exact character (TRUE). + + + <?php + + $smarty->assign('articleTitle', + "Blind woman gets new kidney from dad she hasn't seen in years." + ); + + ?> + + + +Where template is + + + {$articleTitle} + + {$articleTitle|wordwrap:30} + + {$articleTitle|wordwrap:20} + + {$articleTitle|wordwrap:30:"<br />\n"} + + {$articleTitle|wordwrap:26:"\n":true} + + + +Will output: + + + Blind woman gets new kidney from dad she hasn't seen in years. + + Blind woman gets new kidney + from dad she hasn't seen in + years. + + Blind woman gets new + kidney from dad she + hasn't seen in + years. + + Blind woman gets new kidney<br /> + from dad she hasn't seen in<br /> + years. + + Blind woman gets new kidn + ey from dad she hasn't se + en in years. + + + +See also [`nl2br`](#language.modifier.nl2br) and +[`{textformat}`](#language.function.textformat). diff --git a/vendor/smarty/smarty/docs/designers/language-variables.md b/vendor/smarty/smarty/docs/designers/language-variables.md new file mode 100644 index 000000000..3950d0baf --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-variables.md @@ -0,0 +1,37 @@ +Variables +========= + +## Table of contents +- [Variables assigned from PHP](./language-variables/language-assigned-variables.md) +- [Variable scopes](./language-variables/language-variable-scopes.md) +- [Variables loaded from config files](./language-variables/language-config-variables.md) +- [{$smarty} reserved variable](./language-variables/language-variables-smarty.md) + + +Smarty has several different types of variables. The type of the +variable depends on what symbol it is prefixed or enclosed within. + +Variables in Smarty can be either displayed directly or used as +arguments for [functions](./language-basic-syntax/language-syntax-functions.md), +[attributes](./language-basic-syntax/language-syntax-attributes.md) and +[modifiers](./language-modifiers.md), inside conditional expressions, etc. +To print a variable, simply enclose it in the +[delimiters](../programmers/api-variables/variable-left-delimiter.md) so that it is the only thing +contained between them. + + + {$Name} + + {$product.part_no} <b>{$product.description}</b> + + {$Contacts[row].Phone} + + <body bgcolor="{#bgcolor#}"> + + + +> **Note** +> +> An easy way to examine assigned Smarty variables is with the +> [debugging console](./chapter-debugging-console.md). + diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md new file mode 100644 index 000000000..005dea4a9 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md @@ -0,0 +1,142 @@ +Variables assigned from PHP {#language.assigned.variables} +=========================== + +Assigned variables that are referenced by preceding them with a dollar +(`$`) sign. + +PHP code + + + <?php + + $smarty = new Smarty(); + + $smarty->assign('firstname', 'Doug'); + $smarty->assign('lastname', 'Evans'); + $smarty->assign('meetingPlace', 'New York'); + + $smarty->display('index.tpl'); + + ?> + +`index.tpl` source: + + + Hello {$firstname} {$lastname}, glad to see you can make it. + <br /> + {* this will not work as $variables are case sensitive *} + This weeks meeting is in {$meetingplace}. + {* this will work *} + This weeks meeting is in {$meetingPlace}. + + + +This above would output: + + + Hello Doug Evans, glad to see you can make it. + <br /> + This weeks meeting is in . + This weeks meeting is in New York. + + + +Associative arrays {#language.variables.assoc.arrays} +------------------ + +You can also reference associative array variables by specifying the key +after a dot \".\" symbol. + + + <?php + $smarty->assign('Contacts', + array('fax' => '555-222-9876', + 'email' => 'zaphod@slartibartfast.example.com', + 'phone' => array('home' => '555-444-3333', + 'cell' => '555-111-1234') + ) + ); + $smarty->display('index.tpl'); + ?> + + + +`index.tpl` source: + + + {$Contacts.fax}<br /> + {$Contacts.email}<br /> + {* you can print arrays of arrays as well *} + {$Contacts.phone.home}<br /> + {$Contacts.phone.cell}<br /> + + + +this will output: + + + 555-222-9876<br /> + zaphod@slartibartfast.example.com<br /> + 555-444-3333<br /> + 555-111-1234<br /> + + + +Array indexes {#language.variables.array.indexes} +------------- + +You can reference arrays by their index, much like native PHP syntax. + + + <?php + $smarty->assign('Contacts', array( + '555-222-9876', + 'zaphod@slartibartfast.example.com', + array('555-444-3333', + '555-111-1234') + )); + $smarty->display('index.tpl'); + ?> + + + +`index.tpl` source: + + + {$Contacts[0]}<br /> + {$Contacts[1]}<br /> + {* you can print arrays of arrays as well *} + {$Contacts[2][0]}<br /> + {$Contacts[2][1]}<br /> + + + +This will output: + + + 555-222-9876<br /> + zaphod@slartibartfast.example.com<br /> + 555-444-3333<br /> + 555-111-1234<br /> + + + +Objects {#language.variables.objects} +------- + +Properties of [objects](#advanced.features.objects) assigned from PHP +can be referenced by specifying the property name after the `->` symbol. + + + name: {$person->name}<br /> + email: {$person->email}<br /> + + + +this will output: + + + name: Zaphod Beeblebrox<br /> + email: zaphod@slartibartfast.example.com<br /> + + diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md b/vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md new file mode 100644 index 000000000..a3683d99b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md @@ -0,0 +1,83 @@ +Variables loaded from config files {#language.config.variables} +================================== + +Variables that are loaded from the [config files](#config.files) are +referenced by enclosing them within `#hash_marks#`, or with the smarty +variable [`$smarty.config`](#language.variables.smarty.config). The +later syntax is useful for embedding into quoted attribute values, or +accessing variable values such as \$smarty.config.\$foo. + +Example config file - `foo.conf`: + + + pageTitle = "This is mine" + bodyBgColor = '#eeeeee' + tableBorderSize = 3 + tableBgColor = "#bbbbbb" + rowBgColor = "#cccccc" + + + +A template demonstrating the `#hash#` method: + + + {config_load file='foo.conf'} + <html> + <title>{#pageTitle#}</title> + <body bgcolor="{#bodyBgColor#}"> + <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"> + <tr bgcolor="{#rowBgColor#}"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> + </table> + </body> + </html> + + + +A template demonstrating the +[`$smarty.config`](#language.variables.smarty.config) method: + + + {config_load file='foo.conf'} + <html> + <title>{$smarty.config.pageTitle}</title> + <body bgcolor="{$smarty.config.bodyBgColor}"> + <table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}"> + <tr bgcolor="{$smarty.config.rowBgColor}"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> + </table> + </body> + </html> + + + +Both examples would output: + + + <html> + <title>This is mine</title> + <body bgcolor="#eeeeee"> + <table border="3" bgcolor="#bbbbbb"> + <tr bgcolor="#cccccc"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> + </table> + </body> + </html> + + + +Config file variables cannot be used until after they are loaded in from +a config file. This procedure is explained later in this document under +[`{config_load}`](#language.function.config.load). + +See also [variables](#language.syntax.variables) and [\$smarty reserved +variables](#language.variables.smarty) diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md b/vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md new file mode 100644 index 000000000..2ba3f026b --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md @@ -0,0 +1,61 @@ +Variable scopes {#language.variable.scopes} +=============== + +You have the choice to assign variables to the scope of the main Smarty +object, data objects created with [`createData()`](#api.create.data), +and template objects created with +[`createTemplate()`](#api.create.template). These objects can be +chained. A template sees all the variables of its own object and all +variables assigned to the objects in its chain of parent objects. + +By default templates which are rendered by +[`$smarty->display(...)`](#api.display) or +[`$smarty->fetch(...)`](#api.fetch) calls are automatically linked to +the Smarty object variable scope. + +By assigning variables to individual data or template objects you have +full control which variables can be seen by a template. + + + + // assign variable to Smarty object scope + $smarty->assign('foo','smarty'); + + // assign variables to data object scope + $data = $smarty->createData(); + $data->assign('foo','data'); + $data->assign('bar','bar-data'); + + // assign variables to other data object scope + $data2 = $smarty->createData($data); + $data2->assign('bar','bar-data2'); + + // assign variable to template object scope + $tpl = $smarty->createTemplate('index.tpl'); + $tpl->assign('bar','bar-template'); + + // assign variable to template object scope with link to Smarty object + $tpl2 = $smarty->createTemplate('index.tpl',$smarty); + $tpl2->assign('bar','bar-template2'); + + // This display() does see $foo='smarty' from the $smarty object + $smarty->display('index.tpl'); + + // This display() does see $foo='data' and $bar='bar-data' from the data object $data + $smarty->display('index.tpl',$data); + + // This display() does see $foo='data' from the data object $data + // and $bar='bar-data2' from the data object $data2 + $smarty->display('index.tpl',$data2); + + // This display() does see $bar='bar-template' from the template object $tpl + $tpl->display(); // or $smarty->display($tpl); + + // This display() does see $bar='bar-template2' from the template object $tpl2 + // and $foo='smarty' form the Smarty object $foo + $tpl2->display(); // or $smarty->display($tpl2); + + + +See also [`assign()`](#api.assign), [`createData()`](#api.create.data) +and [`createTemplate()`](#api.create.template). diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md b/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md new file mode 100644 index 000000000..f9aa2330a --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md @@ -0,0 +1,176 @@ +{\$smarty} reserved variable {#language.variables.smarty} +============================ + +The PHP reserved `{$smarty}` variable can be used to access several +environment and request variables. The full list of them follows. + +Request variables {#language.variables.smarty.request} +----------------- + +The [request variables](&url.php-manual;reserved.variables) such as +`$_GET`, `$_POST`, `$_COOKIE`, `$_SERVER`, `$_ENV` and `$_SESSION` can +be accessed as demonstrated in the examples below: + + + {* display value of page from URL ($_GET) http://www.example.com/index.php?page=foo *} + {$smarty.get.page} + + {* display the variable "page" from a form ($_POST['page']) *} + {$smarty.post.page} + + {* display the value of the cookie "username" ($_COOKIE['username']) *} + {$smarty.cookies.username} + + {* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*} + {$smarty.server.SERVER_NAME} + + {* display the system environment variable "PATH" *} + {$smarty.env.PATH} + + {* display the php session variable "id" ($_SESSION['id']) *} + {$smarty.session.id} + + {* display the variable "username" from merged get/post/cookies/server/env *} + {$smarty.request.username} + + + +> **Note** +> +> For historical reasons `{$SCRIPT_NAME}` is short-hand for +> `{$smarty.server.SCRIPT_NAME}`. +> +> +> <a href="{$SCRIPT_NAME}?page=smarty">click me</a> +> <a href="{$smarty.server.SCRIPT_NAME}?page=smarty">click me</a> + +> **Note** +> +> Although Smarty provides direct access to PHP super globals for +> convenience, it should be used with caution. Directly accessing super +> globals mixes underlying application code structure with templates. A +> good practice is to assign specific needed values to template vars. + +{\$smarty.now} {#language.variables.smarty.now} +-------------- + +The current [timestamp](&url.php-manual;function.time) can be accessed +with `{$smarty.now}`. The value reflects the number of seconds passed +since the so-called Epoch on January 1, 1970, and can be passed directly +to the [`date_format`](#language.modifier.date.format) modifier for +display. Note that [`time()`](&url.php-manual;function.time) is called +on each invocation; eg a script that takes three seconds to execute with +a call to `$smarty.now` at start and end will show the three second +difference. + +::: {.informalexample} + + {* use the date_format modifier to show current date and time *} + {$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} + + +::: + +{\$smarty.const} {#language.variables.smarty.const} +---------------- + +You can access PHP constant values directly. See also [smarty +constants](#smarty.constants). + +::: {.informalexample} + + <?php + // the constant defined in php + define('MY_CONST_VAL','CHERRIES'); + ?> +::: + +Output the constant in a template with + +::: {.informalexample} + + {$smarty.const.MY_CONST_VAL} +::: + +> **Note** +> +> Although Smarty provides direct access to PHP constants for +> convenience, it is typically avoided as this is mixing underlying +> application code structure into the templates. A good practice is to +> assign specific needed values to template vars. + +{\$smarty.capture} {#language.variables.smarty.capture} +------------------ + +Template output captured via the built-in +[`{capture}..{/capture}`](#language.function.capture) function can be +accessed using the `{$smarty.capture}` variable. See the +[`{capture}`](#language.function.capture) page for more information. + +{\$smarty.config} {#language.variables.smarty.config} +----------------- + +`{$smarty.config}` variable can be used to refer to loaded [config +variables](#language.config.variables). `{$smarty.config.foo}` is a +synonym for `{#foo#}`. See the +[{config\_load}](#language.function.config.load) page for more info. + +{\$smarty.section} {#language.variables.smarty.loops} +------------------ + +The `{$smarty.section}` variables can be used to refer to +[`{section}`](#language.function.section) loop properties. These have +some very useful values such as `.first`, `.index`, etc. + +> **Note** +> +> The `{$smarty.foreach}` variable is no longer used with the new +> [`{foreach}`](#language.function.foreach) syntax, but is still +> supported with Smarty 2.x style foreach syntax. + +{\$smarty.template} {#language.variables.smarty.template} +------------------- + +Returns the name of the current template being processed (without the +directory). + +{\$smarty.template\_object} {#language.variables.smarty.template_object} +--------------------------- + +Returns the template object of the current template being processed. + +{\$smarty.current\_dir} {#language.variables.smarty.current_dir} +----------------------- + +Returns the name of the directory for the current template being +processed. + +{\$smarty.version} {#language.variables.smarty.version} +------------------ + +Returns the version of Smarty the template was compiled with. + + + <div id="footer">Powered by Smarty {$smarty.version}</div> + +{\$smarty.block.child} {#language.variables.smarty.block.child} +---------------------- + +Returns block text from child template. See [Template +interitance](#advanced.features.template.inheritance). + +{\$smarty.block.parent} {#language.variables.smarty.block.parent} +----------------------- + +Returns block text from parent template. See [Template +interitance](#advanced.features.template.inheritance) + +{\$smarty.ldelim}, {\$smarty.rdelim} {#language.variables.smarty.ldelim} +------------------------------------ + +These variables are used for printing the left-delimiter and +right-delimiter value literally, the same as +[`{ldelim},{rdelim}`](#language.function.ldelim). + +See also [assigned variables](#language.assigned.variables) and [config +variables](#language.config.variables) diff --git a/vendor/smarty/smarty/docs/features.md b/vendor/smarty/smarty/docs/features.md new file mode 100644 index 000000000..8405b46eb --- /dev/null +++ b/vendor/smarty/smarty/docs/features.md @@ -0,0 +1,152 @@ +Features +======= + +Some of Smarty's features: +- It is extremely fast. +- It is efficient since the PHP parser does the dirty work. +- No template parsing overhead, only compiles once. +- It is smart about [recompiling](#variable.compile.check) only the + template files that have changed. +- You can easily create your own custom + [functions](#language.custom.functions) and [variable + modifiers](#language.modifiers), so the template language is + extremely extensible. +- Configurable template [{delimiter}](#variable.left.delimiter) tag + syntax, so you can use `{$foo}`, `{{$foo}}`, `<!--{$foo}-->`, etc. +- The [`{if}..{elseif}..{else}..{/if}`](#language.function.if) + constructs are passed to the PHP parser, so the `{if...}` expression + syntax can be as simple or as complex an evaluation as you like. +- Allows unlimited nesting of + [`sections`](#language.function.section), `if's` etc. +- Built-in [caching](#caching) support +- Arbitrary [template](#resources) sources +- [Template Inheritance](#advanced.features.template.inheritance) for + easy management of template content. +- [Plugin](#plugins) architecture + +## Separation of presentation from application code +- This means templates can certainly contain logic under the condition + that it is for presentation only. Things such as + [including](./designers/language-builtin-functions/language-function-include.md) other templates, + [alternating](./designers/language-custom-functions/language-function-cycle.md) table row colors, + [upper-casing](./designers/language-modifiers/language-modifier-upper.md) a variable, + [looping](./designers/language-builtin-functions/language-function-foreach.md) over an array of data and + rendering it are examples of presentation logic. +- This does not mean however that Smarty forces a separation of + business and presentation logic. Smarty has no knowledge of which is + which, so placing business logic in the template is your own doing. +- Also, if you desire *no* logic in your templates you certainly can + do so by boiling the content down to text and variables only. + +## How does it work? + +Under the hood, Smarty "compiles" (basically copies and converts) the +templates into PHP scripts. This happens once when each template is +first invoked, and then the compiled versions are used from that point +forward. Smarty takes care of this for you, so the template designer +just edits the Smarty templates and never has to manage the compiled +versions. This approach keeps the templates easy to maintain, and yet +keeps execution times extremely fast since the compiled code is just +PHP. And of course, all PHP scripts take advantage of PHP op-code caches +such as APC. + +## Template Inheritance + +Template inheritance was introduced in Smarty 3. Before template +inheritance, we managed our templates in +pieces such as header and footer templates. This organization lends +itself to many problems that require some hoop-jumping, such as managing +content within the header/footer on a per-page basis. With template +inheritance, instead of including other templates we maintain our +templates as single pages. We can then manipulate blocks of content +within by inheriting them. This makes templates intuitive, efficient and +easy to manage. See +[Template Inheritance](./programmers/advanced-features/advanced-features-template-inheritance.md) +for more info. + +## Why not use XML/XSLT syntax? +There are a couple of good reasons. First, Smarty can be used for more +than just XML/HTML based templates, such as generating emails, +javascript, CSV, and PDF documents. Second, XML/XSLT syntax is even more +verbose and fragile than PHP code! It is perfect for computers, but +horrible for humans. Smarty is about being easy to read, understand and +maintain. + +## Template Security +Although Smarty insulates you from PHP, you still have the option to use +it in certain ways if you wish. Template security forces the restriction +of PHP (and select Smarty functions.) This is useful if you have third +parties editing templates, and you don't want to unleash the full power +of PHP or Smarty to them. + +## Integration +Sometimes Smarty gets compared to Model-View-Controller (MVC) +frameworks. Smarty is not an MVC, it is just the presentation layer, +much like the View (V) part of an MVC. As a matter of fact, Smarty can +easily be integrated as the view layer of an MVC. Many of the more +popular ones have integration instructions for Smarty, or you may find +some help here in the forums and documentation. + +## Other Template Engines +Smarty is not the only engine following the *"Separate Programming Code +from Presentation"* philosophy. For instance, Python has template +engines built around the same principles such as Django Templates and +CheetahTemplate. *Note: Languages such as Python do not mix with HTML +natively, which give them the advantage of proper programming code +separation from the outset. There are libraries available to mix Python +with HTML, but they are typically avoided.* + +## What Smarty is Not + +Smarty is not an application development framework. Smarty is not an +MVC. Smarty is not an alternative to Laravel, Symfony, CodeIgniter, +or any of the other application development frameworks for PHP. + +Smarty is a template engine, and works as the (V)iew component of your +application. Smarty can easily be coupled to any of the engines listed +above as the view component. No different than any other software, +Smarty has a learning curve. Smarty does not guarantee good application +design or proper separation of presentation, this still needs to be +addressed by a competent developer and web designer. + +## Is Smarty Right for Me? + +Smarty is not meant to be a tool for every job. The important thing is +to identify if Smarty fits your needs. There are some important +questions to ask yourself: + +### Template Syntax +Are you content with PHP tags mixed with HTML? Are your +web designers comfortable with PHP? Would your web designers prefer a +tag-based syntax designed for presentation? Some experience working with +both Smarty and PHP helps answer these questions. + +### The Business Case +Is there a requirement to insulate the templates from +PHP? Do you have untrusted parties editing templates that you do not +wish to unleash the power of PHP to? Do you need to programmatically +control what is and is not available within the templates? Smarty +supplies these capabilities by design. + +## Feature set +Does Smarty's features such as caching, template +inheritance and plugin architecture save development cycles writing code +that would be needed otherwise? Does the codebase or framework you plan +on using have the features you need for the presentation component? + +## Sites using Smarty +Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki +CMS/Groupware and X-Cart to name a few. + +## Summary +Whether you are using Smarty for a small website or massive enterprise +solution, it can accommodate your needs. There are numerous features +that make Smarty a great choice: + +- separation of PHP from HTML/CSS just makes sense +- readability for organization and management +- security for 3rd party template access +- feature completeness, and easily extendable to your own needs +- massive user base, Smarty is here to stay +- LGPL license for commercial use +- 100% free to use, open source project diff --git a/vendor/smarty/smarty/docs/getting-started.md b/vendor/smarty/smarty/docs/getting-started.md new file mode 100644 index 000000000..de55ffe8e --- /dev/null +++ b/vendor/smarty/smarty/docs/getting-started.md @@ -0,0 +1,169 @@ +What is Smarty? +============== + +## Requirements +Smarty can be run with PHP 7.1 to PHP 8.1. + +## Installation +Smarty versions 3.1.11 or later can be installed with [Composer](https://getcomposer.org/). + +To get the latest stable version of Smarty use: +```bash +composer require smarty/smarty +```` + +To get the latest, unreleased version, use: +```bash +composer require smarty/smarty:dev-master +```` + +To get the previous stable version of Smarty, Smarty 3, use: +```bash +composer require smarty/smarty:^3 +```` + +Here's how you create an instance of Smarty in your PHP scripts: +```php +<?php + +require 'vendor/autoload.php'; +$smarty = new Smarty(); +``` + +Now that the library files are in place, it's time to setup the Smarty +directories for your application. + +Smarty requires four directories which are by default named + [`templates`](./programmers/api-variables/variable-template-dir.md), + [`configs`](./programmers/api-variables/variable-config-dir.md), + [`templates_c`](./programmers/api-variables/variable-compile-dir.md) + and + [`cache`](./programmers/api-variables/variable-cache-dir.md) + relative to the current working directory. + +The defaults can be changed as follows: +```php +$smarty = new Smarty(); +$smarty->setTemplateDir('/some/template/dir'); +$smarty->setConfigDir('/some/config/dir'); +$smarty->setCompileDir('/some/compile/dir'); +$smarty->setCacheDir('/some/cache/dir'); +``` + +The compile dir and cache dir need to be writable for the user running the PHP script. + +> **Note** +> +> This is usually user "nobody" and group "nobody". For OS X users, the +> default is user "www" and group "www". If you are using Apache, you +> can look in your `httpd.conf` file to see what user and group are +> being used. + +```bash +chown nobody:nobody /web/www.example.com/guestbook/templates_c/ +chmod 770 /web/www.example.com/guestbook/templates_c/ + +chown nobody:nobody /web/www.example.com/guestbook/cache/ +chmod 770 /web/www.example.com/guestbook/cache/ +``` + +You can verify if your system has the correct access rights for + these directories with [`testInstall()`](./programmers/api-functions/api-test-install.md): + +```php +$smarty = new Smarty(); +$smarty->setTemplateDir('/some/template/dir'); +$smarty->setConfigDir('/some/config/dir'); +$smarty->setCompileDir('/some/compile/dir'); +$smarty->setCacheDir('/some/cache/dir'); +$smarty->testInstall(); +``` + +Now, let's create the `index.tpl` file that Smarty will display. This +needs to be located in the [`$template_dir`](./programmers/api-variables/variable-template-dir.md). + +```html +{* Smarty *} +Hello {$name}, welcome to Smarty! +``` + +> **Note** +> +> `{* Smarty *}` is a template [comment](./designers/language-basic-syntax/language-syntax-comments.md). It +> is not required, but it is good practice to start all your template +> files with this comment. It makes the file easy to recognize +> regardless of the file extension. For example, text editors could +> recognize the file and turn on special syntax highlighting. + +Now lets edit our php file. We'll create an instance of Smarty, +[`assign()`](./programmers/api-functions/api-assign.md) a template variable and +[`display()`](./programmers/api-functions/api-display.md) the `index.tpl` file. + +```php +<?php + +require 'vendor/autoload.php'; + +$smarty = new Smarty(); + +$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/'); +$smarty->setCompileDir('/web/www.example.com/guestbook/templates_c/'); +$smarty->setConfigDir('/web/www.example.com/guestbook/configs/'); +$smarty->setCacheDir('/web/www.example.com/guestbook/cache/'); + +$smarty->assign('name', 'Ned'); +$smarty->display('index.tpl'); + +``` + +> **Note** +> +> In our example, we are setting absolute paths to all of the Smarty +> directories. If `/web/www.example.com/guestbook/` is within your PHP +> include\_path, then these settings are not necessary. However, it is +> more efficient and (from experience) less error-prone to set them to +> absolute paths. This ensures that Smarty is getting files from the +> directories you intended. + +Now, run your PHP file. You should see *\"Hello Ned, welcome to Smarty!\"* + +You have completed the basic setup for Smarty! + +## Extended Setup {#installing.smarty.extended} +============== + +This is a continuation of the [basic +installation](#installing.smarty.basic), please read that first! + +A slightly more flexible way to setup Smarty is to extend the Smarty +class and initialize your Smarty +environment. So instead of repeatedly setting directory paths, assigning +the same vars, etc., we can do that in one place. + +```php +<?php + +class Smarty_GuestBook extends Smarty { + + public function __construct() + { + parent::__construct(); + + $this->setTemplateDir('/web/www.example.com/guestbook/templates/'); + $this->setCompileDir('/web/www.example.com/guestbook/templates_c/'); + $this->setConfigDir('/web/www.example.com/guestbook/configs/'); + $this->setCacheDir('/web/www.example.com/guestbook/cache/'); + + $this->caching = Smarty::CACHING_LIFETIME_CURRENT; + $this->assign('app_name', 'Guest Book'); + } + +} +``` + +Now, we can use `Smarty_GuestBook` instead of `Smarty` in our scripts: +```php +$smarty = new Smarty_GuestBook(); +$smarty->assign('name','Ned'); +$smarty->display('index.tpl'); +``` diff --git a/vendor/smarty/smarty/docs/index.md b/vendor/smarty/smarty/docs/index.md new file mode 100644 index 000000000..cf2b2ddcd --- /dev/null +++ b/vendor/smarty/smarty/docs/index.md @@ -0,0 +1,50 @@ +# Smarty 4 Documentation +Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic. + +It allows you to write **templates**, using **variables**, **modifiers**, **functions** and **comments**, like this: +```html +<h1>{$title|escape}</h1> + +<p> + The number of pixels is: {math equation="x * y" x=$height y=$width}. +</p> +``` + +When this template is rendered, with the value "Hello world" for the variable $title, 640 for $width, +and 480 for $height, the result is: +```html +<h1>Hello world</h1> + +<p> + The number of pixels is: 307200. +</p> +``` + +## Introduction +- [Philosophy](./philosophy.md) - or "Why do I need a template engine?" +- [Features](./features.md) - or "Why do I want Smarty?" +- [Getting Started](./getting-started.md) + +## Smarty for template designers +- [Basic Syntax](./designers/language-basic-syntax.md) +- [Variables](./designers/language-variables.md) +- [Variable Modifiers](./designers/language-modifiers.md) +- [Combining Modifiers](./designers/language-combining-modifiers.md) +- [Built-in Functions](./designers/language-builtin-functions.md) +- [Custom Functions](./designers/language-custom-functions.md) +- [Config Files](./designers/config-files.md) +- [Debugging Console](./designers/chapter-debugging-console.md) + +## Smarty for php developers +- [Charset Encoding](./programmers/charset.md) +- [Constants](./programmers/smarty-constants.md) +- [Smarty Class Variables](./programmers/api-variables.md) +- [Smarty Class Methods](./programmers/api-functions.md) +- [Caching](./programmers/caching.md) +- [Resources](./programmers/resources.md) +- [Advanced Features](./programmers/advanced-features.md) +- [Extending Smarty With Plugins](./programmers/plugins.md) + +## Other +- [Some random tips & tricks](./appendixes/tips.md) +- [Troubleshooting](./appendixes/troubleshooting.md) diff --git a/vendor/smarty/smarty/docs/philosophy.md b/vendor/smarty/smarty/docs/philosophy.md new file mode 100644 index 000000000..86f6c46ed --- /dev/null +++ b/vendor/smarty/smarty/docs/philosophy.md @@ -0,0 +1,108 @@ +Philosophy +======= + +## What is Smarty? + +Smarty is a template engine for PHP. More specifically, it facilitates a +manageable way to separate application logic and content from its +presentation. This is best described in a situation where the +application programmer and the template designer play different roles, +or in most cases are not the same person. + +For example, let\'s say you are creating a web page that is displaying a +newspaper article. + +- The article `$headline`, `$tagline`, `$author` and `$body` are + content elements, they contain no information about how they will be + presented. They are [passed](#api.assign) into Smarty by the + application. + +- Then the template designer edits the templates and uses a + combination of HTML tags and [template tags](#language.basic.syntax) + to format the presentation of these + [variables](#language.syntax.variables) with elements such as + tables, div\'s, background colors, font sizes, style sheets, svg + etc. + +- One day the programmer needs to change the way the article content + is retrieved, ie a change in application logic. This change does not + affect the template designer, the content will still arrive in the + template exactly the same. + +- Likewise, if the template designer wants to completely redesign the + templates, this would require no change to the application logic. + +- Therefore, the programmer can make changes to the application logic + without the need to restructure templates, and the template designer + can make changes to templates without breaking application logic. + +## Goals + +The Smarty design was largely driven by these goals: +- clean separation of presentation from application code +- PHP backend, Smarty template frontend +- complement PHP, not replace it +- fast development/deployment for programmers and designers +- quick and easy to maintain +- syntax easy to understand, no PHP knowledge necessary +- flexibility for custom development +- security: insulation from PHP +- free, open source + + + +## Two camps of thought + +When it comes to templating in PHP, there are basically two camps of +thought. The first camp exclaims that \"PHP is a template engine\". This +approach simply mixes PHP code with HTML. Although this approach is +fastest from a pure script-execution point of view, many would argue +that the PHP syntax is messy and complicated when mixed with tagged +markup such as HTML. + +The second camp exclaims that presentation should be void of all +programming code, and instead use simple tags to indicate where +application content is revealed. This approach is common with other +template engines (even in other programming languages), and is also the +approach that Smarty takes. The idea is to keep the templates focused +squarely on presentation, void of application code, and with as little +overhead as possible. + +## Why is separating PHP from templates important? + +Two major benefits: + +- SYNTAX: Templates typically consist of semantic markup such as HTML. + PHP syntax works well for application code, but quickly degenerates + when mixed with HTML. Smarty\'s simple {tag} syntax is designed + specifically to express presentation. Smarty focuses your templates + on presentation and less on \"code\". This lends to quicker template + deployment and easier maintenance. Smarty syntax requires no working + knowledge of PHP, and is intuitive for programmers and + non-programmers alike. + +- INSULATION: When PHP is mixed with templates, there are no + restrictions on what type of logic can be injected into a template. + Smarty insulates the templates from PHP, creating a controlled + separation of presentation from business logic. Smarty also has + security features that can further enforce restrictions on + templates. + +## Web designers and PHP + +A common question: "Web designers have to learn a syntax anyway, why +not PHP?" Of course web designers can learn PHP, and they may already +be familiar with it. The issue isn't their ability to learn PHP, it is +about the consequences of mixing PHP with HTML. If designers use PHP, it +is too easy to add code into templates that doesn't belong there (you +just handed them a swiss-army knife when they just needed a knife.) You +can teach them the rules of application design, but this is probably +something they don't really need to learn (now they are developers!) +The PHP manual is also an overwhelming pile of information to sift +through. It is like handing the owner of a car the factory assembly +manual when all they need is the owners manual. Smarty gives web +designers exactly the tools they need, and gives developers fine-grained +control over those tools. The simplicity of the tag-based syntax is also +a huge welcome for designers, it helps them streamline the organization +and management of templates. + diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features.md b/vendor/smarty/smarty/docs/programmers/advanced-features.md new file mode 100644 index 000000000..60d4416b5 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features.md @@ -0,0 +1,14 @@ +Advanced Features {#advanced.features} +================= + +## Table of contents + +- [Security](./advanced-features/advanced-features-security.md) +- [Changing settings by template](./advanced-features/advanced-features-template-settings.md) +- [Template Inheritance](./advanced-features/advanced-features-template-inheritance.md) +- [Streams](./advanced-features/advanced-features-streams.md) +- [Objects](./advanced-features/advanced-features-objects.md) +- [Static Classes](./advanced-features/advanced-features-static-classes.md) +- [Prefilters](./advanced-features/advanced-features-prefilters.md) +- [Postfilters](./advanced-features/advanced-features-postfilters.md) +- [Output Filters](./advanced-features/advanced-features-outputfilters.md) diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md new file mode 100644 index 000000000..6b4870b51 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md @@ -0,0 +1,99 @@ +Objects {#advanced.features.objects} +======= + +Smarty allows access to PHP [objects](&url.php-manual;object) through +the templates. + +> **Note** +> +> When you assign/register objects to templates, be sure that all +> properties and methods accessed from the template are for presentation +> purposes only. It is very easy to inject application logic through +> objects, and this leads to poor designs that are difficult to manage. +> See the Best Practices section of the Smarty website. + +There are two ways to access them. + +- One way is to [register objects](#api.register.object) to the + template, then use access them via syntax similar to [custom + functions](#language.custom.functions). + +- The other way is to [`assign()`](#api.assign) objects to the + templates and access them much like any other assigned variable. + +The first method has a much nicer template syntax. It is also more +secure, as a registered object can be restricted to certain methods or +properties. However, **a registered object cannot be looped over or +assigned in arrays of objects**, etc. The method you choose will be +determined by your needs, but use the first method whenever possible to +keep template syntax to a minimum. + +If security is enabled, no private methods or functions can be accessed +(beginningwith \'\_\'). If a method and property of the same name exist, +the method will be used. + +You can restrict the methods and properties that can be accessed by +listing them in an array as the third registration parameter. + +By default, parameters passed to objects through the templates are +passed the same way [custom functions](#language.custom.functions) get +them. An associative array is passed as the first parameter, and the +smarty object as the second. If you want the parameters passed one at a +time for each argument like traditional object parameter passing, set +the fourth registration parameter to FALSE. + +The optional fifth parameter has only effect with `format` being TRUE +and contains a list of methods that should be treated as blocks. That +means these methods have a closing tag in the template +(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods +have the same synopsis as the parameters for +[`block-function-plugins`](#plugins.block.functions): They get the four +parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also +behave like block-function-plugins. + + + <?php + // the object + + class My_Object { + function meth1($params, $smarty_obj) { + return 'this is my meth1'; + } + } + + $myobj = new My_Object; + + // registering the object (will be by reference) + $smarty->registerObject('foobar',$myobj); + + // if we want to restrict access to certain methods or properties, list them + $smarty->registerObject('foobar',$myobj,array('meth1','meth2','prop1')); + + // if you want to use the traditional object parameter format, pass a boolean of false + $smarty->registerObject('foobar',$myobj,null,false); + + // We can also assign objects. assign_by_ref when possible. + $smarty->assign_by_ref('myobj', $myobj); + + $smarty->display('index.tpl'); + ?> + + + +And here\'s how to access your objects in `index.tpl`: + + + {* access our registered object *} + {foobar->meth1 p1='foo' p2=$bar} + + {* you can also assign the output *} + {foobar->meth1 p1='foo' p2=$bar assign='output'} + the output was {$output} + + {* access our assigned object *} + {$myobj->meth1('foo',$bar)} + + + +See also [`registerObject()`](#api.register.object) and +[`assign()`](#api.assign). diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md new file mode 100644 index 000000000..393d7da23 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md @@ -0,0 +1,43 @@ +Output Filters {#advanced.features.outputfilters} +============== + +When the template is invoked via [`display()`](#api.display) or +[`fetch()`](#api.fetch), its output can be sent through one or more +output filters. This differs from +[`postfilters`](#advanced.features.postfilters) because postfilters +operate on compiled templates before they are saved to the disk, whereas +output filters operate on the template output when it is executed. + +Output filters can be either [registered](#api.register.filter) or +loaded from the [plugins directory](#variable.plugins.dir) by using the +[`loadFilter()`](#api.load.filter) method or by setting the +[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will +pass the template output as the first argument, and expect the function +to return the result of the processing. + + + <?php + // put this in your application + function protect_email($tpl_output, Smarty_Internal_Template $template) + { + $tpl_output = + preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', + '$1%40$2', $tpl_output); + return $tpl_output; + } + + // register the outputfilter + $smarty->registerFilter("output","protect_email"); + $smarty->display("index.tpl'); + + // now any occurrence of an email address in the template output will have + // a simple protection against spambots + ?> + + + +See also [`registerFilter()`](#api.register.filter), +[`loadFilter()`](#api.load.filter), +[`$autoload_filters`](#variable.autoload.filters), +[postfilters](#advanced.features.postfilters) and +[`$plugins_dir`](#variable.plugins.dir). diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md new file mode 100644 index 000000000..d3bad546a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md @@ -0,0 +1,40 @@ +Postfilters {#advanced.features.postfilters} +=========== + +Template postfilters are PHP functions that your templates are ran +through *after they are compiled*. Postfilters can be either +[registered](#api.register.filter) or loaded from the [plugins +directory](#variable.plugins.dir) by using the +[`loadFilter()`](#api.load.filter) function or by setting the +[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will +pass the compiled template code as the first argument, and expect the +function to return the result of the processing. + + + <?php + // put this in your application + function add_header_comment($tpl_source, Smarty_Internal_Template $template) + { + return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source; + } + + // register the postfilter + $smarty->registerFilter('post','add_header_comment'); + $smarty->display('index.tpl'); + ?> + + + +The postfilter above will make the compiled Smarty template `index.tpl` +look like: + + + <!-- Created by Smarty! --> + {* rest of template content... *} + + + +See also [`registerFilter()`](#api.register.filter), +[prefilters](#advanced.features.prefilters), +[outputfilters](#advanced.features.outputfilters), and +[`loadFilter()`](#api.load.filter). diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md new file mode 100644 index 000000000..76229e633 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md @@ -0,0 +1,36 @@ +Prefilters {#advanced.features.prefilters} +========== + +Template prefilters are PHP functions that your templates are ran +through *before they are compiled*. This is good for preprocessing your +templates to remove unwanted comments, keeping an eye on what people are +putting in their templates, etc. + +Prefilters can be either [registered](#api.register.filter) or loaded +from the [plugins directory](#variable.plugins.dir) by using +[`loadFilter()`](#api.load.filter) function or by setting the +[`$autoload_filters`](#variable.autoload.filters) variable. + +Smarty will pass the template source code as the first argument, and +expect the function to return the resulting template source code. + +This will remove all the html comments in the template source. + + + <?php + // put this in your application + function remove_dw_comments($tpl_source, Smarty_Internal_Template $template) + { + return preg_replace("/<!--#.*-->/U",'',$tpl_source); + } + + // register the prefilter + $smarty->registerFilter('pre','remove_dw_comments'); + $smarty->display('index.tpl'); + ?> + + + +See also [`registerFilter()`](#api.register.filter), +[postfilters](#advanced.features.postfilters) and +[`loadFilter()`](#api.load.filter). diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md new file mode 100644 index 000000000..98817a433 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md @@ -0,0 +1,168 @@ +Security {#advanced.features.security} +======== + +Security is good for situations when you have untrusted parties editing +the templates eg via ftp, and you want to reduce the risk of system +security compromises through the template language. + +The settings of the security policy are defined by properties of an +instance of the Smarty\_Security class. These are the possible settings: + +- `$php_handling` determines how Smarty to handle PHP code embedded in + templates. Possible values are: + + - Smarty::PHP\_PASSTHRU -\> echo PHP tags as they are + + - Smarty::PHP\_QUOTE -\> escape tags as entities + + - Smarty::PHP\_REMOVE -\> remove php tags + + - Smarty::PHP\_ALLOW -\> execute php tags + + The default value is Smarty::PHP\_PASSTHRU. + + If security is enabled the [`$php_handling`](#variable.php.handling) + setting of the Smarty object is not checked for security. + +- `$secure_dir` is an array of template directories that are + considered secure. [`$template_dir`](#variable.template.dir) + concidered secure implicitly. The default is an empty array. + +- `$trusted_dir` is an array of all directories that are considered + trusted. Trusted directories are where you keep php scripts that are + executed directly from the templates with + [`{include_php}`](#language.function.include.php). The default is an + empty array. + +- `$trusted_uri` is an array of regular expressions matching URIs that + are considered trusted. This security directive used by + [`{fetch}`](#language.function.fetch) and + [`{html_image}`](#language.function.html.image). URIs passed to + these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow + simple regular expressions (without having to deal with edge cases + like authentication-tokens). + + The expression `'#https?://.*smarty.net$#i'` would allow accessing + the follwing URIs: + + - `http://smarty.net/foo` + + - `http://smarty.net/foo` + + - `http://www.smarty.net/foo` + + - `http://smarty.net/foo` + + - `https://foo.bar.www.smarty.net/foo/bla?blubb=1` + + but deny access to these URIs: + + - `http://smarty.com/foo` (not matching top-level domain \"com\") + + - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\") + + - `http://www.smarty.net.otherdomain.com/foo` (not matching end of + domain \"smarty.net\") + +- `$static_classes` is an array of classes that are considered + trusted. The default is an empty array which allows access to all + static classes. To disable access to all static classes set + \$static\_classes = null. + +- `$php_functions` is an array of PHP functions that are considered + trusted and can be used from within template. To disable access to + all PHP functions set \$php\_functions = null. An empty array ( + \$php\_functions = array() ) will allow all PHP functions. The + default is array(\'isset\', \'empty\', \'count\', \'sizeof\', + \'in\_array\', \'is\_array\',\'time\',\'nl2br\'). + +- `$php_modifiers` is an array of PHP functions that are considered + trusted and can be used from within template as modifier. To disable + access to all PHP modifier set \$php\_modifier = null. An empty + array ( \$php\_modifier = array() ) will allow all PHP functions. + The default is array(\'escape\',\'count\'). + +- `$streams` is an array of streams that are considered trusted and + can be used from within template. To disable access to all streams + set \$streams = null. An empty array ( \$streams = array() ) will + allow all streams. The default is array(\'file\'). + +- `$allowed_modifiers` is an array of (registered / autoloaded) + modifiers that should be accessible to the template. If this array + is non-empty, only the herein listed modifiers may be used. This is + a whitelist. + +- `$disabled_modifiers` is an array of (registered / autoloaded) + modifiers that may not be accessible to the template. + +- `$allowed_tags` is a boolean flag which controls if constants can + function-, block and filter plugins that should be accessible to the + template. If this array is non-empty, only the herein listed + modifiers may be used. This is a whitelist. + +- `$disabled_tags` is an array of (registered / autoloaded) function-, + block and filter plugins that may not be accessible to the template. + +- `$allow_constants` is a boolean flag which controls if constants can + be accessed by the template. The default is \"true\". + +- `$allow_super_globals` is a boolean flag which controls if the PHP + super globals can be accessed by the template. The default is + \"true\". + +- `$allow_php_tag` is a boolean flag which controls if {php} and + {include\_php} tags can be used by the template. The default is + \"false\". + +If security is enabled, no private methods, functions or properties of +static classes or assigned objects can be accessed (beginningwith +\'\_\') by the template. + +To customize the security policy settings you can extend the +Smarty\_Security class or create an instance of it. + + + <?php + require 'Smarty.class.php'; + + class My_Security_Policy extends Smarty_Security { + // disable all PHP functions + public $php_functions = null; + // remove PHP tags + public $php_handling = Smarty::PHP_REMOVE; + // allow everthing as modifier + public $php_modifiers = array(); + } + $smarty = new Smarty(); + // enable security + $smarty->enableSecurity('My_Security_Policy'); + ?> + + + <?php + require 'Smarty.class.php'; + $smarty = new Smarty(); + $my_security_policy = new Smarty_Security($smarty); + // disable all PHP functions + $my_security_policy->php_functions = null; + // remove PHP tags + $my_security_policy->php_handling = Smarty::PHP_REMOVE; + // allow everthing as modifier + $my_security_policy->php_modifiers = array(); + // enable security + $smarty->enableSecurity($my_security_policy); + ?> + + + <?php + require 'Smarty.class.php'; + $smarty = new Smarty(); + // enable default security + $smarty->enableSecurity(); + ?> + +> **Note** +> +> Most security policy settings are only checked when the template gets +> compiled. For that reasion you should delete all cached and compiled +> template files when you change your security settings. diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md new file mode 100644 index 000000000..8ef79113c --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md @@ -0,0 +1,27 @@ +Static Classes {#advanced.features.static.classes} +============== + +You can directly access static classes. The syntax is the same as in +PHP. + +> **Note** +> +> Direct access to PHP classes is not recommended. This ties the +> underlying application code structure directly to the presentation, +> and also complicates template syntax. It is recommended to register +> plugins which insulate templates from PHP classes/objects. Use at your +> own discretion. See the Best Practices section of the Smarty website. + + + {assign var=foo value=myclass::BAR} <--- class constant BAR + + {assign var=foo value=myclass::method()} <--- method result + + {assign var=foo value=myclass::method1()->method2} <--- method chaining + + {assign var=foo value=myclass::$bar} <--- property bar of class myclass + + {assign var=foo value=$bar::method} <--- using Smarty variable bar as class name + + + diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md new file mode 100644 index 000000000..d6f7a0de5 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md @@ -0,0 +1,15 @@ +Streams {#advanced.features.streams} +======= + +You can also use streams to call variables. *{\$foo:bar}* will use the +*foo://bar* stream to get the template variable. + +Using a PHP stream for a template variable resource from within a +template. + + + {$foo:bar} + + + +See also [`Template Resources`](#resources) diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md new file mode 100644 index 000000000..25295c38d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md @@ -0,0 +1,128 @@ +Template Inheritance {#advanced.features.template.inheritance} +==================== + +Inheritance brings the concept of Object Oriented Programming to +templates, allowing you to define one (or more) base templates that can +be extended by child templates. Extending means that the child template +can override all or some of the parent named block areas. + +- The inheritance tree can be as deep as you want, meaning you can + extend a file that extends another one that extends another one and + so on. + +- The child templates can not define any content besides what\'s + inside [`{block}`](#language.function.block) tags they override. + Anything outside of [`{block}`](#language.function.block) tags will + be removed. + +- The content of [`{block}`](#language.function.block) tags from child + and parent templates can be merged by the `append` or `prepend` + [`{block}`](#language.function.block) tag option flags and + `{$smarty.block.parent}` or `{$smarty.block.child}` placeholders. + +- Template inheritance is a compile time process which creates a + single compiled template file. Compared to corresponding solutions + based on subtemplates included with the + [`{include}`](#language.function.include) tag it does have much + better performance when rendering. + +- The child template extends its parent defined with the + [`{extends}`](#language.function.extends) tag, which must be the + first line in the child template. Instead of using the + [`{extends}`](#language.function.extends) tags in the template files + you can define the whole template inheritance tree in the PHP script + when you are calling [`fetch()`](#api.fetch) or + [`display()`](#api.display) with the `extends:` template resource + type. The later provides even more flexibillity. + +> **Note** +> +> When `$compile_check` is enabled, all files in the inheritance tree +> are checked for modifications upon each invocation. You may want to +> disable `$compile_check` on production servers for this reason. + +> **Note** +> +> If you have a subtemplate which is included with +> [`{include}`](#language.function.include) and it contains +> [`{block}`](#language.function.block) areas it works only if the +> [`{include}`](#language.function.include) itself is called from within +> a surrounding [`{block}`](#language.function.block). In the final +> parent template you may need a dummy +> [`{block}`](#language.function.block) for it. + +layout.tpl (parent) + + + <html> + <head> + <title>{block name=title}Default Page Title{/block}</title> + {block name=head}{/block} + </head> + <body> + {block name=body}{/block} + </body> + </html> + + + +myproject.tpl (child) + + + {extends file='layout.tpl'} + {block name=head} + <link href="/css/mypage.css" rel="stylesheet" type="text/css"/> + <script src="/js/mypage.js"></script> + {/block} + + + + +mypage.tpl (grandchild) + + + {extends file='myproject.tpl'} + {block name=title}My Page Title{/block} + {block name=head} + <link href="/css/mypage.css" rel="stylesheet" type="text/css"/> + <script src="/js/mypage.js"></script> + {/block} + {block name=body}My HTML Page Body goes here{/block} + + + +To render the above use + + + $smarty->display('mypage.tpl'); + +The resulting output is + + + <html> + <head> + <title>My Page Title</title> + <link href="/css/mypage.css" rel="stylesheet" type="text/css"/> + <script src="/js/mypage.js"></script> + </head> + <body> + My HTML Page Body goes here + </body> + </html> + +Instead of using [`{extends}`](#language.function.extends) tags in the +template files you can define the inheritance tree in your PHP script by +using the [`extends:` resource](#resources.extends) type. + +The code below will return same result as the example above. + + + <?php + $smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl'); + ?> + + + +See also [`{block}`](#language.function.block), +[`{extends}`](#language.function.extends) and [`extends:` +resource](#resources.extends) diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md new file mode 100644 index 000000000..df1f86a8c --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md @@ -0,0 +1,32 @@ +Changing settings by template {#advanced.features.template.settings} +============================= + +Normally you configure the Smarty settings by modifying the +[`Smarty class variables`](#api.variables). Furthermore you can register +plugins, filters etc. with [`Smarty functions`](#api.functions). +Modifications done to the Smarty object will be global for all +templates. + +However the Smarty class variables and functions can be accessed or +called by induvidual template objects. Modification done to a template +object will apply only for that template and its included subtemplates. + + + <?php + $tpl = $smarty->createTemplate('index.tpl); + $tpl->cache_lifetime = 600; + //or + $tpl->setCacheLifetime(600); + $smarty->display($tpl); + ?> + + + + + <?php + $tpl = $smarty->createTemplate('index.tpl); + $tpl->registerPlugin('modifier','mymodifier'); + $smarty->display($tpl); + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-functions.md b/vendor/smarty/smarty/docs/programmers/api-functions.md new file mode 100644 index 000000000..6f120fa9a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions.md @@ -0,0 +1,64 @@ +Smarty Class Methods {#api.functions} +==================== + +## Table of contents + +- [addConfigDir()](./api-functions/api-add-config-dir.md) — add a directory to the list of directories where config files are stored +- [addPluginsDir()](./api-functions/api-add-plugins-dir.md) — add a directory to the list of directories where plugins are stored +- [addTemplateDir()](./api-functions/api-add-template-dir.md) — add a directory to the list of directories where templates are stored +- [append()](./api-functions/api-append.md) — append an element to an assigned array +- [appendByRef()](./api-functions/api-append-by-ref.md) — append values by reference +- [assign()](./api-functions/api-assign.md) — assign variables/objects to the templates +- [assignByRef()](./api-functions/api-assign-by-ref.md) — assign values by reference +- [clearAllAssign()](./api-functions/api-clear-all-assign.md) — clears the values of all assigned variables +- [clearAllCache()](./api-functions/api-clear-all-cache.md) — clears the entire template cache +- [clearAssign()](./api-functions/api-clear-assign.md) — clears the value of an assigned variable +- [clearCache()](./api-functions/api-clear-cache.md) — clears the cache for a specific template +- [clearCompiledTemplate()](./api-functions/api-clear-compiled-tpl.md) — clears the compiled version of the specified template resource +- [clearConfig()](./api-functions/api-clear-config.md) — clears assigned config variables +- [compileAllConfig()](./api-functions/api-compile-all-config.md) — compiles all known config files +- [compileAllTemplates()](./api-functions/api-compile-all-templates.md) — compiles all known templates +- [configLoad()](./api-functions/api-config-load.md) — loads config file data and assigns it to the template +- [createData()](./api-functions/api-create-data.md) — creates a data object +- [createTemplate()](./api-functions/api-create-template.md) — returns a template object +- [disableSecurity()](./api-functions/api-disable-security.md) — disables template security +- [display()](./api-functions/api-display.md) — displays the template +- [enableSecurity()](./api-functions/api-enable-security.md) — enables template security +- [fetch()](./api-functions/api-fetch.md) — returns the template output +- [getCacheDir()](./api-functions/api-get-cache-dir.md) — return the directory where the rendered template's output is stored +- [getCompileDir()](./api-functions/api-get-compile-dir.md) — returns the directory where compiled templates are stored +- [getConfigDir()](./api-functions/api-get-config-dir.md) — return the directory where config files are stored +- [getConfigVars()](./api-functions/api-get-config-vars.md) — returns the given loaded config variable value +- [getPluginsDir()](./api-functions/api-get-plugins-dir.md) — return the directory where plugins are stored +- [getRegisteredObject()](./api-functions/api-get-registered-object.md) — returns a reference to a registered object +- [getTags()](./api-functions/api-get-tags.md) — return tags used by template +- [getTemplateDir()](./api-functions/api-get-template-dir.md) — return the directory where templates are stored +- [getTemplateVars()](./api-functions/api-get-template-vars.md) — returns assigned variable value(s) +- [isCached()](./api-functions/api-is-cached.md) — returns true if there is a valid cache for this template +- [loadFilter()](./api-functions/api-load-filter.md) — load a filter plugin +- [muteExpectedErrors()](./api-functions/api-mute-expected-errors.md) — mutes expected warnings and notices deliberately generated by Smarty +- [registerCacheResource()](./api-functions/api-register-cacheresource.md) — dynamically register CacheResources +- [registerClass()](./api-functions/api-register-class.md) — register a class for use in the templates +- [registerDefaultPluginHandler()](./api-functions/api-register-default-plugin-handler.md) — register a function which gets called on undefined tags +- [registerFilter()](./api-functions/api-register-filter.md) — dynamically register filters +- [registerPlugin()](./api-functions/api-register-plugin.md) — dynamically register plugins +- [registerObject()](./api-functions/api-register-object.md) — register an object for use in the templates +- [registerResource()](./api-functions/api-register-resource.md) — dynamically register resources +- [setCacheDir()](./api-functions/api-set-cache-dir.md) — set the directory where the rendered template's output is stored +- [setCompileDir()](./api-functions/api-set-compile-dir.md) — set the directory where compiled templates are stored +- [setConfigDir()](./api-functions/api-set-config-dir.md) — set the directories where config files are stored +- [setPluginsDir()](./api-functions/api-set-plugins-dir.md) — set the directories where plugins are stored +- [setTemplateDir()](./api-functions/api-set-template-dir.md) — set the directories where templates are stored +- [templateExists()](./api-functions/api-template-exists.md) — checks whether the specified template exists +- [unregisterCacheResource()](./api-functions/api-unregister-cacheresource.md) — dynamically unregister a CacheResource plugin +- [unregisterFilter()](./api-functions/api-unregister-filter.md) — dynamically unregister a filter +- [unregisterPlugin()](./api-functions/api-unregister-plugin.md) — dynamically unregister plugins +- [unregisterObject()](./api-functions/api-unregister-object.md) — dynamically unregister an object +- [unregisterResource()](./api-functions/api-unregister-resource.md) — dynamically unregister a resource plugin +- [testInstall()](./api-functions/api-test-install.md) — checks Smarty installation + +> **Note** +> +> See +> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md) +> section for how to use the functions for individual templates. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md new file mode 100644 index 000000000..6c8b54e41 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md @@ -0,0 +1,49 @@ +addConfigDir() + +add a directory to the list of directories where config files are stored + +Description +=========== + +Smarty + +addConfigDir + +string\|array + +config\_dir + +string + +key + + + <?php + + // add directory where config files are stored + $smarty->addConigDir('./config_1'); + + // add directory where config files are stored and specify array-key + $smarty->addConfigDir('./config_1', 'one'); + + // add multiple directories where config files are stored and specify array-keys + $smarty->addTemplateDir(array( + 'two' => './config_2', + 'three' => './config_3', + )); + + // view the template dir chain + var_dump($smarty->getConfigDir()); + + // chaining of method calls + $smarty->setConfigDir('./config') + ->addConfigDir('./config_1', 'one') + ->addConfigDir('./config_2', 'two'); + + ?> + + + +See also [`getConfigDir()`](#api.get.config.dir), +[`setConfigDir()`](#api.set.config.dir) and +[`$config_dir`](#variable.config.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md new file mode 100644 index 000000000..ec9741b6e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md @@ -0,0 +1,42 @@ +addPluginsDir() + +add a directory to the list of directories where plugins are stored + +Description +=========== + +Smarty + +addPluginsDir + +string\|array + +plugins\_dir + + + <?php + + // add directory where plugins are stored + $smarty->addPluginsDir('./plugins_1'); + + // add multiple directories where plugins are stored + $smarty->setPluginsDir(array( + './plugins_2', + './plugins_3', + )); + + // view the plugins dir chain + var_dump($smarty->getPluginsDir()); + + // chaining of method calls + $smarty->setPluginsDir('./plugins') + ->addPluginsDir('./plugins_1') + ->addPluginsDir('./plugins_2'); + + ?> + + + +See also [`getPluginsDir()`](#api.get.plugins.dir), +[`setPluginsDir()`](#api.set.plugins.dir) and +[`$plugins_dir`](#variable.plugins.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md new file mode 100644 index 000000000..e0d24564c --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md @@ -0,0 +1,49 @@ +addTemplateDir() + +add a directory to the list of directories where templates are stored + +Description +=========== + +Smarty + +addTemplateDir + +string\|array + +template\_dir + +string + +key + + + <?php + + // add directory where templates are stored + $smarty->addTemplateDir('./templates_1'); + + // add directory where templates are stored and specify array-key + $smarty->addTemplateDir('./templates_1', 'one'); + + // add multiple directories where templates are stored and specify array-keys + $smarty->addTemplateDir(array( + 'two' => './templates_2', + 'three' => './templates_3', + )); + + // view the template dir chain + var_dump($smarty->getTemplateDir()); + + // chaining of method calls + $smarty->setTemplateDir('./templates') + ->addTemplateDir('./templates_1', 'one') + ->addTemplateDir('./templates_2', 'two'); + + ?> + + + +See also [`getTemplateDir()`](#api.get.template.dir), +[`setTemplateDir()`](#api.set.template.dir) and +[`$template_dir`](#variable.template.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md new file mode 100644 index 000000000..cd396d9cc --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md @@ -0,0 +1,46 @@ +appendByRef() + +append values by reference + +Description +=========== + +void + +appendByRef + +string + +varname + +mixed + +var + +bool + +merge + +This is used to [`append()`](#api.append) values to the templates by +reference. + +> **Note** +> +> With the introduction of PHP5, `appendByRef()` is not necessary for +> most intents and purposes. `appendByRef()` is useful if you want a PHP +> array index value to be affected by its reassignment from a template. +> Assigned object properties behave this way by default. + +NOTE.PARAMETER.MERGE + + + <?php + // appending name/value pairs + $smarty->appendByRef('Name', $myname); + $smarty->appendByRef('Address', $address); + ?> + + + +See also [`append()`](#api.append), [`assign()`](#api.assign) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md new file mode 100644 index 000000000..b94586417 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md @@ -0,0 +1,61 @@ +append() + +append an element to an assigned array + +Description +=========== + +void + +append + +mixed + +var + +void + +append + +string + +varname + +mixed + +var + +bool + +merge + +If you append to a string value, it is converted to an array value and +then appended to. You can explicitly pass name/value pairs, or +associative arrays containing the name/value pairs. If you pass the +optional third parameter of TRUE, the value will be merged with the +current array instead of appended. + +NOTE.PARAMETER.MERGE + + + <?php + // This is effectively the same as assign() + $smarty->append('foo', 'Fred'); + // After this line, foo will now be seen as an array in the template + $smarty->append('foo', 'Albert'); + + $array = array(1 => 'one', 2 => 'two'); + $smarty->append('X', $array); + $array2 = array(3 => 'three', 4 => 'four'); + // The following line will add a second element to the X array + $smarty->append('X', $array2); + + // passing an associative array + $smarty->append(array('city' => 'Lincoln', 'state' => 'Nebraska')); + ?> + + + +See also [`appendByRef()`](#api.append.by.ref), +[`assign()`](#api.assign) and +[`getTemplateVars()`](#api.get.template.vars) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md new file mode 100644 index 000000000..7c42b4836 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md @@ -0,0 +1,42 @@ +assignByRef() + +assign values by reference + +Description +=========== + +void + +assignByRef + +string + +varname + +mixed + +var + +This is used to [`assign()`](#api.assign) values to the templates by +reference. + +> **Note** +> +> With the introduction of PHP5, `assignByRef()` is not necessary for +> most intents and purposes. `assignByRef()` is useful if you want a PHP +> array index value to be affected by its reassignment from a template. +> Assigned object properties behave this way by default. + + + <?php + // passing name/value pairs + $smarty->assignByRef('Name', $myname); + $smarty->assignByRef('Address', $address); + ?> + + + +See also [`assign()`](#api.assign), +[`clearAllAssign()`](#api.clear.all.assign), [`append()`](#api.append), +[`{assign}`](#language.function.assign) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md new file mode 100644 index 000000000..c3b9985d4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md @@ -0,0 +1,84 @@ +assign() + +assign variables/objects to the templates + +Description +=========== + +void + +assign + +mixed + +var + +void + +assign + +string + +varname + +mixed + +var + +bool + +nocache + +You can explicitly pass name/value pairs, or associative arrays +containing the name/value pairs. + +If you pass the optional third `nocache` parameter of TRUE, the variable +is assigned as nocache variable. See +[`Cacheability of Variables`](#cacheability.variables) for details. + +> **Note** +> +> When you assign/register objects to templates, be sure that all +> properties and methods accessed from the template are for presentation +> purposes only. It is very easy to inject application logic through +> objects, and this leads to poor designs that are difficult to manage. +> See the Best Practices section of the Smarty website. + + + <?php + // passing name/value pairs + $smarty->assign('Name', 'Fred'); + $smarty->assign('Address', $address); + + // passing an associative array + $smarty->assign(array('city' => 'Lincoln', 'state' => 'Nebraska')); + + // passing an array + $myArray = array('no' => 10, 'label' => 'Peanuts'); + $smarty->assign('foo',$myArray); + + // passing a row from a database (eg adodb) + $sql = 'select id, name, email from contacts where contact ='.$id; + $smarty->assign('contact', $db->getRow($sql)); + ?> + +These are accessed in the template with + + + {* note the vars are case sensitive like php *} + {$Name} + {$Address} + {$city} + {$state} + + {$foo.no}, {$foo.label} + {$contact.id}, {$contact.name},{$contact.email} + +To access more complex array assignments see +[`{foreach}`](#language.function.foreach) and +[`{section}`](#language.function.section) + +See also [`assignByRef()`](#api.assign.by.ref), +[`getTemplateVars()`](#api.get.template.vars), +[`clearAssign()`](#api.clear.assign), [`append()`](#api.append) and +[`{assign}`](#language.function.assign) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md new file mode 100644 index 000000000..cc75fad0f --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md @@ -0,0 +1,34 @@ +clearAllAssign() + +clears the values of all assigned variables + +Description +=========== + +void + +clearAllAssign + + + <?php + // passing name/value pairs + $smarty->assign('Name', 'Fred'); + $smarty->assign('Address', $address); + + // will output above + print_r( $smarty->getTemplateVars() ); + + // clear all assigned variables + $smarty->clearAllAssign(); + + // will output nothing + print_r( $smarty->getTemplateVars() ); + + ?> + + + +See also [`clearAssign()`](#api.clear.assign), +[`clearConfig()`](#api.clear.config), +[`getTemplateVars()`](#api.get.template.vars), [`assign()`](#api.assign) +and [`append()`](#api.append) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md new file mode 100644 index 000000000..55cbe5795 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md @@ -0,0 +1,37 @@ +clearAllCache() + +clears the entire template cache + +Description +=========== + +void + +clearAllCache + +int + +expire\_time + +As an optional parameter, you can supply a minimum age in seconds the +cache files must be before they will get cleared. + +> **Note** +> +> Since Smarty version 3.1.14 it is possible to delete cache files by +> their individual expiration time at creation by passing constant +> SMARTY::CLEAR\_EXPIRED as `expire_time` parameter. + + + <?php + // clear the entire cache + $smarty->clearAllCache(); + + // clears all files over one hour old + $smarty->clearAllCache(3600); + ?> + + + +See also [`clearCache()`](#api.clear.cache), +[`isCached()`](#api.is.cached) and the [caching](#caching) page. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md new file mode 100644 index 000000000..ac0731e86 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md @@ -0,0 +1,32 @@ +clearAssign() + +clears the value of an assigned variable + +Description +=========== + +void + +clearAssign + +mixed + +var + +This can be a single value, or an array of values. + + + <?php + // clear a single variable + $smarty->clearAssign('Name'); + + // clears multiple variables + $smarty->clearAssign(array('Name', 'Address', 'Zip')); + ?> + + + +See also [`clearAllAssign()`](#api.clear.all.assign), +[`clearConfig()`](#api.clear.config), +[`getTemplateVars()`](#api.get.template.vars), [`assign()`](#api.assign) +and [`append()`](#api.append) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md new file mode 100644 index 000000000..3e17d80c8 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md @@ -0,0 +1,60 @@ +clearCache() + +clears the cache for a specific template + +Description +=========== + +void + +clearCache + +string + +template + +string + +cache\_id + +string + +compile\_id + +int + +expire\_time + +- If you have [multiple caches](#caching.multiple.caches) for a + template, you can clear a specific cache by supplying the `cache_id` + as the second parameter. + +- You can also pass a [`$compile_id`](#variable.compile.id) as a third + parameter. You can [group templates together](#caching.groups) so + they can be removed as a group, see the [caching section](#caching) + for more information. + +- As an optional fourth parameter, you can supply a minimum age in + seconds the cache file must be before it will get cleared. + + > **Note** + > + > Since Smarty version 3.1.14 it is possible to delete cache files + > by their individual expiration time at creation by passing + > constant SMARTY::CLEAR\_EXPIRED as fourth parameter. + +<!-- --> + + + <?php + // clear the cache for a template + $smarty->clearCache('index.tpl'); + + // clear the cache for a particular cache id in an multiple-cache template + $smarty->clearCache('index.tpl', 'MY_CACHE_ID'); + ?> + + + +See also [`clearAllCache()`](#api.clear.all.cache) and +[`caching`](#caching) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md new file mode 100644 index 000000000..dfa688eb6 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md @@ -0,0 +1,44 @@ +clearCompiledTemplate() + +clears the compiled version of the specified template resource + +Description +=========== + +void + +clearCompiledTemplate + +string + +tpl\_file + +string + +compile\_id + +int + +exp\_time + +This clears the compiled version of the specified template resource, or +all compiled template files if one is not specified. If you pass a +[`$compile_id`](#variable.compile.id) only the compiled template for +this specific [`$compile_id`](#variable.compile.id) is cleared. If you +pass an exp\_time, then only compiled templates older than `exp_time` +seconds are cleared, by default all compiled templates are cleared +regardless of their age. This function is for advanced use only, not +normally needed. + + + <?php + // clear a specific template resource + $smarty->clearCompiledTemplate('index.tpl'); + + // clear entire compile directory + $smarty->clearCompiledTemplate(); + ?> + + + +See also [`clearCache()`](#api.clear.cache). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md new file mode 100644 index 000000000..43e86be17 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md @@ -0,0 +1,35 @@ +clearConfig() + +clears assigned config variables + +Description +=========== + +void + +clearConfig + +string + +var + +This clears all assigned [config variables](#language.config.variables). +If a variable name is supplied, only that variable is cleared. + + + <?php + // clear all assigned config variables. + $smarty->clearConfig(); + + // clear one variable + $smarty->clearConfig('foobar'); + ?> + + + +See also [`getConfigVars()`](#api.get.config.vars), +[`config variables`](#language.config.variables), +[`config files`](#config.files), +[`{config_load}`](#language.function.config.load), +[`configLoad()`](#api.config.load) and +[`clearAssign()`](#api.clear.assign). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md new file mode 100644 index 000000000..a102fc97e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md @@ -0,0 +1,61 @@ +compileAllConfig() + +compiles all known config files + +Description +=========== + +string + +compileAllConfig + +string + +extension + +boolean + +force + +integer + +timelimit + +integer + +maxerror + +This function compiles config files found in the +[`$config_dir`](#variable.config.dir) folder. It uses the following +parameters: + +- `extension` is an optional string which defines the file extension + for the config files. The default is \".conf\". + +- `force` is an optional boolean which controls if only modified + (false) or all (true) config files shall be compiled. The default is + \"false\". + +- `timelimit` is an optional integer to set a runtime limit in seconds + for the compilation process. The default is no limit. + +- `maxerror` is an optional integer to set an error limit. If more + config files failed to compile the function will be aborted. The + default is no limit. + +> **Note** +> +> This function may not create desired results in all configurations. +> Use is on own risk. + + + <?php + include('Smarty.class.php'); + $smarty = new Smarty; + + // force compilation of all config files + $smarty->compileAllConfig('.config',true); + + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md new file mode 100644 index 000000000..53a021da8 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md @@ -0,0 +1,71 @@ +compileAllTemplates() + +compiles all known templates + +Description +=========== + +string + +compileAllTemplates + +string + +extension + +boolean + +force + +integer + +timelimit + +integer + +maxerror + +This function compiles template files found in the +[`$template_dir`](#variable.template.dir) folder. It uses the following +parameters: + +- `extension` is an optional string which defines the file extension + for the template files. The default is \".tpl\". + +- `force` is an optional boolean which controls if only modified + (false) or all (true) templates shall be compiled. The default is + \"false\". + +- `timelimit` is an optional integer to set a runtime limit in seconds + for the compilation process. The default is no limit. + +- `maxerror` is an optional integer to set an error limit. If more + templates failed to compile the function will be aborted. The + default is no limit. + +> **Note** +> +> This function may not create desired results in all configurations. +> Use is on own risk. + +> **Note** +> +> If any template requires registered plugins, filters or objects you +> must register all of them before running this function. + +> **Note** +> +> If you are using template inheritance this function will create +> compiled files of parent templates which will never be used. + + + <?php + include('Smarty.class.php'); + $smarty = new Smarty; + + // force compilation of all template files + $smarty->compileAllTemplates('.tpl',true); + + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md new file mode 100644 index 000000000..bf6001fa4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md @@ -0,0 +1,47 @@ +configLoad() + +loads config file data and assigns it to the template + +Description +=========== + +void + +configLoad + +string + +file + +string + +section + +This loads [config file](#config.files) data and assigns it to the +template. This works identically to the template +[`{config_load}`](#language.function.config.load) function. + +> **Note** +> +> As of Smarty 2.4.0, assigned template variables are kept across +> invocations of [`fetch()`](#api.fetch) and +> [`display()`](#api.display). Config vars loaded from `configLoad()` +> are always global in scope. Config files are also compiled for faster +> execution, and respect the [`$force_compile`](#variable.force.compile) +> and [`$compile_check`](#variable.compile.check) settings. + + + <?php + // load config variables and assign them + $smarty->configLoad('my.conf'); + + // load a section + $smarty->configLoad('my.conf', 'foobar'); + ?> + + + +See also [`{config_load}`](#language.function.config.load), +[`getConfigVars()`](#api.get.config.vars), +[`clearConfig()`](#api.clear.config), and +[`config variables`](#language.config.variables) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md new file mode 100644 index 000000000..2d9f281b3 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md @@ -0,0 +1,52 @@ +createData() + +creates a data object + +Description +=========== + +string + +createData + +object + +parent + +string + +createData + +This creates a data object which will hold assigned variables. It uses +the following parameters: + +- `parent` is an optional parameter. It is an uplink to the main + Smarty object, a another user-created data object or to user-created + template object. These objects can be chained. Templates can access + variables assigned to any of the objects in it\'s parent chain. + +Data objects are used to create scopes for assigned variables. They can +be used to have controll which variables are seen by which templates. + + + <?php + include('Smarty.class.php'); + $smarty = new Smarty; + + // create data object with its private variable scope + $data = $smarty->createData(); + + // assign variable to data scope + $data->assign('foo','bar'); + + // create template object which will use variables from data object + $tpl = $smarty->createTemplate('index.tpl',$data); + + // display the template + $tpl->display(); + ?> + + + +See also [`display()`](#api.display), and +[`createTemplate()`](#api.create.template), diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md new file mode 100644 index 000000000..5129406d4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md @@ -0,0 +1,99 @@ +createTemplate() + +returns a template object + +Description +=========== + +Smarty\_Internal\_Template + +createTemplate + +string + +template + +object + +parent + +Smarty\_Internal\_Template + +createTemplate + +string + +template + +array + +data + +Smarty\_Internal\_Template + +createTemplate + +string + +template + +string + +cache\_id + +string + +compile\_id + +object + +parent + +Smarty\_Internal\_Template + +createTemplate + +string + +template + +string + +cache\_id + +string + +compile\_id + +array + +data + +This creates a template object which later can be rendered by the +[display](#api.display) or [fetch](#api.fetch) method. It uses the +following parameters: + +- `template` must be a valid [template resource](#resources) type and + path. + +<!-- --> + + + <?php + include('Smarty.class.php'); + $smarty = new Smarty; + + // create template object with its private variable scope + $tpl = $smarty->createTemplate('index.tpl'); + + // assign variable to template scope + $tpl->assign('foo','bar'); + + // display the template + $tpl->display(); + ?> + + + +See also [`display()`](#api.display), and +[`templateExists()`](#api.template.exists). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md new file mode 100644 index 000000000..efbaa3559 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md @@ -0,0 +1,15 @@ +disableSecurity() + +disables template security + +Description +=========== + +string + +disableSecurity + +This disables securty checking on templates. + +See also [`enableSecurity()`](#api.enable.security), and +[Security](#advanced.features.security). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md new file mode 100644 index 000000000..59726195e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md @@ -0,0 +1,82 @@ +display() + +displays the template + +Description +=========== + +void + +display + +string + +template + +string + +cache\_id + +string + +compile\_id + +This displays the contents of a template. To return the contents of a +template into a variable, use [`fetch()`](#api.fetch). Supply a valid +[template resource](#resources) type and path. As an optional second +parameter, you can pass a `$cache_id`, see the [caching +section](#caching) for more information. + +PARAMETER.COMPILEID + + + <?php + include(SMARTY_DIR.'Smarty.class.php'); + $smarty = new Smarty(); + $smarty->setCaching(true); + + // only do db calls if cache doesn't exist + if(!$smarty->isCached('index.tpl')) { + + // dummy up some data + $address = '245 N 50th'; + $db_data = array( + 'City' => 'Lincoln', + 'State' => 'Nebraska', + 'Zip' => '68502' + ); + + $smarty->assign('Name', 'Fred'); + $smarty->assign('Address', $address); + $smarty->assign('data', $db_data); + + } + + // display the output + $smarty->display('index.tpl'); + ?> + + + +Use the syntax for [template resources](#resources) to display files +outside of the [`$template_dir`](#variable.template.dir) directory. + + + <?php + // absolute filepath + $smarty->display('/usr/local/include/templates/header.tpl'); + + // absolute filepath (same thing) + $smarty->display('file:/usr/local/include/templates/header.tpl'); + + // windows absolute filepath (MUST use "file:" prefix) + $smarty->display('file:C:/www/pub/templates/header.tpl'); + + // include from template resource named "db" + $smarty->display('db:header.tpl'); + ?> + + + +See also [`fetch()`](#api.fetch) and +[`templateExists()`](#api.template.exists). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md new file mode 100644 index 000000000..3326900d5 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md @@ -0,0 +1,41 @@ +enableSecurity() + +enables template security + +Description +=========== + +string + +enableSecurity + +string + +securityclass + +string + +enableSecurity + +object + +securityobject + +string + +enableSecurity + +This enables securty checking on templates. It uses the following +parameters: + +- `securityclass` is an optional parameter. It\'s the name of the + class with defines the security policy parameters. + +- `securityobject` is an optional parameter. It\'s the object with + defines the security policy parameters. + +For the details how to setup a security policy see the +[Security](#advanced.features.security) section. + +See also [`disableSecurity()`](#api.disable.security), and +[Security](#advanced.features.security). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md new file mode 100644 index 000000000..a0c1676aa --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md @@ -0,0 +1,91 @@ +fetch() + +returns the template output + +Description +=========== + +string + +fetch + +string + +template + +string + +cache\_id + +string + +compile\_id + +This returns the template output instead of [displaying](#api.display) +it. Supply a valid [template resource](#resources) type and path. As an +optional second parameter, you can pass a `$cache id`, see the [caching +section](#caching) for more information. + +PARAMETER.COMPILEID + + + <?php + include('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(true); + + // set a separate cache_id for each unique URL + $cache_id = md5($_SERVER['REQUEST_URI']); + + // capture the output + $output = $smarty->fetch('index.tpl', $cache_id); + + // do something with $output here + echo $output; + ?> + + + +The `email_body.tpl` template + + + Dear {$contact_info.name}, + + Welcome and thank you for signing up as a member of our user group. + + Click on the link below to login with your user name + of '{$contact_info.username}' so you can post in our forums. + + {$login_url} + + List master + + {textformat wrap=40} + This is some long-winded disclaimer text that would automatically get wrapped + at 40 characters. This helps make the text easier to read in mail programs that + do not wrap sentences for you. + {/textformat} + + + +The php script using the PHP [`mail()`](&url.php-manual;function.mail) +function + + + <?php + + // get $contact_info from db or other resource here + + $smarty->assign('contact_info',$contact_info); + $smarty->assign('login_url',"http://{$_SERVER['SERVER_NAME']}/login"); + + mail($contact_info['email'], 'Thank You', $smarty->fetch('email_body.tpl')); + + ?> + + + +See also [`{fetch}`](#language.function.fetch) +[`display()`](#api.display), [`{eval}`](#language.function.eval), and +[`templateExists()`](#api.template.exists). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md new file mode 100644 index 000000000..9e55d8d0b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md @@ -0,0 +1,23 @@ +getCacheDir() + +return the directory where the rendered template\'s output is stored + +Description +=========== + +string + +getCacheDir + + + <?php + + // get directory where compiled templates are stored + $cacheDir = $smarty->getCacheDir(); + + ?> + + + +See also [`setCacheDir()`](#api.set.cache.dir) and +[`$cache_dir`](#variable.cache.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md new file mode 100644 index 000000000..3bfae7306 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md @@ -0,0 +1,23 @@ +getCompileDir() + +returns the directory where compiled templates are stored + +Description +=========== + +string + +getCompileDir + + + <?php + + // get directory where compiled templates are stored + $compileDir = $smarty->getCompileDir(); + + ?> + + + +See also [`setCompileDir()`](#api.set.compile.dir) and +[`$compile_dir`](#variable.compile.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md new file mode 100644 index 000000000..f41472ca4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md @@ -0,0 +1,40 @@ +getConfigDir() + +return the directory where config files are stored + +Description +=========== + +string\|array + +getConfigDir + +string + +key + + + <?php + + // set some config directories + $smarty->setConfigDir(array( + 'one' => './config', + 'two' => './config_2', + 'three' => './config_3', + )); + + // get all directories where config files are stored + $config_dir = $smarty->getConfigDir(); + var_dump($config_dir); // array + + // get directory identified by key + $config_dir = $smarty->getConfigDir('one'); + var_dump($config_dir); // string + + ?> + + + +See also [`setConfigDir()`](#api.set.config.dir), +[`addConfigDir()`](#api.add.config.dir) and +[`$config_dir`](#variable.config.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md new file mode 100644 index 000000000..f252e8674 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md @@ -0,0 +1,37 @@ +getConfigVars() + +returns the given loaded config variable value + +Description +=========== + +array + +getConfigVars + +string + +varname + +If no parameter is given, an array of all loaded [config +variables](#language.config.variables) is returned. + + + <?php + + // get loaded config template var #foo# + $myVar = $smarty->getConfigVars('foo'); + + // get all loaded config template vars + $all_config_vars = $smarty->getConfigVars(); + + // take a look at them + print_r($all_config_vars); + ?> + + + +See also [`clearConfig()`](#api.clear.config), +[`{config_load}`](#language.function.config.load), +[`configLoad()`](#api.config.load) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md new file mode 100644 index 000000000..aa6035549 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md @@ -0,0 +1,31 @@ +getPluginsDir() + +return the directory where plugins are stored + +Description +=========== + +array + +getPluginsDir + + + <?php + + // set some plugins directories + $smarty->setPluginsDir(array( + './plugins', + './plugins_2', + )); + + // get all directories where plugins are stored + $config_dir = $smarty->getPluginsDir(); + var_dump($config_dir); // array + + ?> + + + +See also [`setPluginsDir()`](#api.set.plugins.dir), +[`addPluginsDir()`](#api.add.plugins.dir) and +[`$plugins_dir`](#variable.plugins.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md new file mode 100644 index 000000000..a7c920e14 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md @@ -0,0 +1,36 @@ +getRegisteredObject() + +returns a reference to a registered object + +Description +=========== + +array + +getRegisteredObject + +string + +object\_name + +This is useful from within a custom function when you need direct access +to a [registered object](#api.register.object). See the +[objects](#advanced.features.objects) page for more info. + + + <?php + function smarty_block_foo($params, $smarty) + { + if (isset($params['object'])) { + // get reference to registered object + $obj_ref = $smarty->getRegisteredObject($params['object']); + // use $obj_ref is now a reference to the object + } + } + ?> + + + +See also [`registerObject()`](#api.register.object), +[`unregisterObject()`](#api.unregister.object) and [objects +page](#advanced.features.objects) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md new file mode 100644 index 000000000..7729b468b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md @@ -0,0 +1,40 @@ +getTags() + +return tags used by template + +Description +=========== + +string + +getTags + +object + +template + +This function returns an array of tagname/attribute pairs for all tags +used by the template. It uses the following parameters: + +- `template` is the template object. + +> **Note** +> +> This function is experimental. + + + <?php + include('Smarty.class.php'); + $smarty = new Smarty; + + // create template object + $tpl = $smarty->createTemplate('index.tpl'); + + // get tags + $tags = $smarty->getTags($tpl); + + print_r($tags); + + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md new file mode 100644 index 000000000..42c75908b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md @@ -0,0 +1,40 @@ +getTemplateDir() + +return the directory where templates are stored + +Description +=========== + +string\|array + +getTemplateDir + +string + +key + + + <?php + + // set some template directories + $smarty->setTemplateDir(array( + 'one' => './templates', + 'two' => './templates_2', + 'three' => './templates_3', + )); + + // get all directories where templates are stored + $template_dir = $smarty->getTemplateDir(); + var_dump($template_dir); // array + + // get directory identified by key + $template_dir = $smarty->getTemplateDir('one'); + var_dump($template_dir); // string + + ?> + + + +See also [`setTemplateDir()`](#api.set.template.dir), +[`addTemplateDir()`](#api.add.template.dir) and +[`$template_dir`](#variable.template.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md new file mode 100644 index 000000000..27882eef4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md @@ -0,0 +1,37 @@ +getTemplateVars() + +returns assigned variable value(s) + +Description +=========== + +array + +getTemplateVars + +string + +varname + +If no parameter is given, an array of all [assigned](#api.assign) +variables are returned. + + + <?php + // get assigned template var 'foo' + $myVar = $smarty->getTemplateVars('foo'); + + // get all assigned template vars + $all_tpl_vars = $smarty->getTemplateVars(); + + // take a look at them + print_r($all_tpl_vars); + ?> + + + +See also [`assign()`](#api.assign), +[`{assign}`](#language.function.assign), [`append()`](#api.append), +[`clearAssign()`](#api.clear.assign), +[`clearAllAssign()`](#api.clear.all.assign) and +[`getConfigVars()`](#api.get.config.vars) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md new file mode 100644 index 000000000..0c41bf04a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md @@ -0,0 +1,81 @@ +isCached() + +returns true if there is a valid cache for this template + +Description +=========== + +bool + +isCached + +string + +template + +string + +cache\_id + +string + +compile\_id + +- This only works if [`$caching`](#variable.caching) is set to one of + `Smarty::CACHING_LIFETIME_CURRENT` or + `Smarty::CACHING_LIFETIME_SAVED` to enable caching. See the [caching + section](#caching) for more info. + +- You can also pass a `$cache_id` as an optional second parameter in + case you want [multiple caches](#caching.multiple.caches) for the + given template. + +- You can supply a [`$compile id`](#variable.compile.id) as an + optional third parameter. If you omit that parameter the persistent + [`$compile_id`](#variable.compile.id) is used if its set. + +- If you do not want to pass a `$cache_id` but want to pass a + [`$compile_id`](#variable.compile.id) you have to pass NULL as a + `$cache_id`. + +> **Note** +> +> If `isCached()` returns TRUE it actually loads the cached output and +> stores it internally. Any subsequent call to +> [`display()`](#api.display) or [`fetch()`](#api.fetch) will return +> this internally stored output and does not try to reload the cache +> file. This prevents a race condition that may occur when a second +> process clears the cache between the calls to `isCached()` and to +> [`display()`](#api.display) in the example above. This also means +> calls to [`clearCache()`](#api.clear.cache) and other changes of the +> cache-settings may have no effect after `isCached()` returned TRUE. + + + <?php + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + if(!$smarty->isCached('index.tpl')) { + // do database calls, assign vars here + } + + $smarty->display('index.tpl'); + ?> + + + + + <?php + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + if(!$smarty->isCached('index.tpl', 'FrontPage')) { + // do database calls, assign vars here + } + + $smarty->display('index.tpl', 'FrontPage'); + ?> + + + +See also [`clearCache()`](#api.clear.cache), +[`clearAllCache()`](#api.clear.all.cache), and [caching +section](#caching). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md new file mode 100644 index 000000000..19286ee33 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md @@ -0,0 +1,42 @@ +loadFilter() + +load a filter plugin + +Description +=========== + +void + +loadFilter + +string + +type + +string + +name + +The first argument specifies the type of the filter to load and can be +one of the following: `pre`, `post` or `output`. The second argument +specifies the `name` of the filter plugin. + + + <?php + + // load prefilter named 'trim' + $smarty->loadFilter('pre', 'trim'); + + // load another prefilter named 'datefooter' + $smarty->loadFilter('pre', 'datefooter'); + + // load output filter named 'compress' + $smarty->loadFilter('output', 'compress'); + + ?> + + + +See also [`registerFilter()`](#api.register.filter), +[`$autoload_filters`](#variable.autoload.filters) and [advanced +features](#advanced.features). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md new file mode 100644 index 000000000..1ce45d493 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md @@ -0,0 +1,21 @@ +Smarty::muteExpectedErrors() + +mutes expected warnings and notices deliberately generated by Smarty + +Description +=========== + +string + +muteExpectedErrors + +muteExpectedErrors() registers a custom error handler using +[set\_error\_handler()](&url.php-manual;set_error_handler). The error +handler merely inspects `$errno` and `$errfile` to determine if the +given error was produced deliberately and must be ignored, or should be +passed on to the next error handler. + +`Smarty::unmuteExpectedErrors()` removes the current error handler. +Please note, that if you\'ve registerd any custom error handlers after +the muteExpectedErrors() call, the unmute will not remove Smarty\'s +muting error handler, but the one registered last. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md new file mode 100644 index 000000000..60ae60308 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md @@ -0,0 +1,40 @@ +registerCacheResource() + +dynamically register CacheResources + +Description +=========== + +void + +registerCacheResource + +string + +name + +Smarty\_CacheResource + +resource\_handler + +Use this to dynamically register a [CacheResource +plugin](#caching.custom) with Smarty. Pass in the `name` of the +CacheResource and the object extending Smarty\_CacheResource. See +[Custom Cache Implementation](#caching.custom) for more information on +how to create custom CacheResources. + +> **Note** +> +> In Smarty2 this used to be a callback function called +> `$cache_handler_func`. Smarty3 replaced this callback by the +> `Smarty_CacheResource` module. + + + <?php + $smarty->registerCacheResource('mysql', new Smarty_CacheResource_Mysql()); + ?> + + + +See also [`unregisterCacheResource()`](#api.unregister.cacheresource) +and the [Custom CacheResource Implementation](#caching.custom) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md new file mode 100644 index 000000000..ee339cadb --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md @@ -0,0 +1,65 @@ +registerClass() + +register a class for use in the templates + +Description +=========== + +void + +registerClass + +string + +class\_name + +string + +class\_impl + +Smarty allows you to access static classes from templates as long as the +[Security Policy](#advanced.features.security) does not tell it +otherwise. If security is enabled, classes registered with +`registerClass()` are accessible to templates. + + + <?php + + class Bar { + $property = "hello world"; + } + + $smarty = new Smarty(); + $smarty->registerClass("Foo", "Bar"); + + + + + {* Smarty will access this class as long as it's not prohibited by security *} + {Bar::$property} + {* Foo translates to the real class Bar *} + {Foo::$property} + + + + + <?php + namespace my\php\application { + class Bar { + $property = "hello world"; + } + } + + $smarty = new Smarty(); + $smarty->registerClass("Foo", "\my\php\application\Bar"); + + + + + {* Foo translates to the real class \my\php\application\Bar *} + {Foo::$property} + + + +See also [`registerObject()`](#api.register.object), and +[Security](#advanced.features.security). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md new file mode 100644 index 000000000..9447d9620 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md @@ -0,0 +1,93 @@ +registerDefaultPluginHandler() + +register a function which gets called on undefined tags + +Description +=========== + +void + +registerDefaultPluginHandler + +mixed + +callback + +Register a default plugin handler which gets called if the compiler can +not find a definition for a tag otherwise. It uses the following +parameters: + +If during compilation Smarty encounters tag which is not defined +internal, registered or loacted in the plugins folder it tries to +resolve it by calling the registered default plugin handler. The handler +may be called several times for same undefined tag looping over valid +plugin types. + + + <?php + + $smarty = new Smarty(); + $smarty->registerDefaultPluginHandler('my_plugin_handler'); + + /** + * Default Plugin Handler + * + * called when Smarty encounters an undefined tag during compilation + * + * @param string $name name of the undefined tag + * @param string $type tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK, + Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER) + * @param Smarty_Internal_Template $template template object + * @param string &$callback returned function name + * @param string &$script optional returned script filepath if function is external + * @param bool &$cacheable true by default, set to false if plugin is not cachable (Smarty >= 3.1.8) + * @return bool true if successfull + */ + function my_plugin_handler ($name, $type, $template, &$callback, &$script, &$cacheable) + { + switch ($type) { + case Smarty::PLUGIN_FUNCTION: + switch ($name) { + case 'scriptfunction': + $script = './scripts/script_function_tag.php'; + $callback = 'default_script_function_tag'; + return true; + case 'localfunction': + $callback = 'default_local_function_tag'; + return true; + default: + return false; + } + case Smarty::PLUGIN_COMPILER: + switch ($name) { + case 'scriptcompilerfunction': + $script = './scripts/script_compiler_function_tag.php'; + $callback = 'default_script_compiler_function_tag'; + return true; + default: + return false; + } + case Smarty::PLUGIN_BLOCK: + switch ($name) { + case 'scriptblock': + $script = './scripts/script_block_tag.php'; + $callback = 'default_script_block_tag'; + return true; + default: + return false; + } + default: + return false; + } + } + + ?> + + + +> **Note** +> +> The return callback must be static; a function name or an array of +> class and method name. +> +> Dynamic callbacks like objects methods are not supported. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md new file mode 100644 index 000000000..fd91d2661 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md @@ -0,0 +1,45 @@ +registerFilter() + +dynamically register filters + +Description +=========== + +void + +registerFilter + +string + +type + +mixed + +callback + +Use this to dynamically register filters to operate on a templates. It +uses the following parameters: + +NOTE.PARAMETER.FUNCTION + +A [prefilter](#plugins.prefilters.postfilters) runs through the template +source before it gets compiled. See [template +prefilters](#advanced.features.prefilters) for more information on how +to setup a prefiltering function. + +A [postfilter](#plugins.prefilters.postfilters) runs through the +template code after it was compiled to PHP. See [template +postfilters](#advanced.features.postfilters) for more information on how +to setup a postfiltering function. + +A [outputfilter](#plugins.outputfilters) operates on a template\'s +output before it is [displayed](#api.display). See [template output +filters](#advanced.features.outputfilters) for more information on how +to set up an output filter function. + +See also [`unregisterFilter()`](#api.unregister.filter), +[`loadFilter()`](#api.load.filter), +[`$autoload_filters`](#variable.autoload.filters), [template pre +filters](#advanced.features.prefilters) [template post +filters](#advanced.features.postfilters) [template output +filters](#advanced.features.outputfilters) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md new file mode 100644 index 000000000..c310e8c2a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md @@ -0,0 +1,44 @@ +registerObject() + +register an object for use in the templates + +Description +=========== + +void + +registerObject + +string + +object\_name + +object + +object + +array + +allowed\_methods\_properties + +boolean + +format + +array + +block\_methods + +> **Note** +> +> When you register/assign objects to templates, be sure that all +> properties and methods accessed from the template are for presentation +> purposes only. It is very easy to inject application logic through +> objects, and this leads to poor designs that are difficult to manage. +> See the Best Practices section of the Smarty website. + +See the [objects section](#advanced.features.objects) for more +information. + +See also [`getRegisteredObject()`](#api.get.registered.object), and +[`unregisterObject()`](#api.unregister.object). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md new file mode 100644 index 000000000..6eb433810 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md @@ -0,0 +1,110 @@ +registerPlugin() + +dynamically register plugins + +Description +=========== + +void + +registerPlugin + +string + +type + +string + +name + +mixed + +callback + +bool + +cacheable + +mixed + +cache\_attrs + +This method registers functions or methods defined in your script as +plugin. It uses the following parameters: + +- `cacheable` and `cache_attrs` can be omitted in most cases. See + [controlling cacheability of plugins output](#caching.cacheable) on + how to use them properly. + +<!-- --> + + + <?php + $smarty->registerPlugin("function","date_now", "print_current_date"); + + function print_current_date($params, $smarty) + { + if(empty($params["format"])) { + $format = "%b %e, %Y"; + } else { + $format = $params["format"]; + } + return strftime($format,time()); + } + ?> + + + +And in the template + + + {date_now} + + {* or to format differently *} + {date_now format="%Y/%m/%d"} + + + <?php + // function declaration + function do_translation ($params, $content, $smarty, &$repeat, $template) + { + if (isset($content)) { + $lang = $params["lang"]; + // do some translation with $content + return $translation; + } + } + + // register with smarty + $smarty->registerPlugin("block","translate", "do_translation"); + ?> + + + +Where the template is: + + + {translate lang="br"}Hello, world!{/translate} + + + + + <?php + + // let's map PHP's stripslashes function to a Smarty modifier. + $smarty->registerPlugin("modifier","ss", "stripslashes"); + + ?> + +In the template, use `ss` to strip slashes. + + + <?php + {$var|ss} + ?> + +See also [`unregisterPlugin()`](#api.unregister.plugin), [plugin +functions](#plugins.functions), [plugin block +functions](#plugins.block.functions), [plugin compiler +functions](#plugins.compiler.functions), and the [creating plugin +modifiers](#plugins.modifiers) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md new file mode 100644 index 000000000..ca4005460 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md @@ -0,0 +1,46 @@ +registerResource() + +dynamically register resources + +Description +=========== + +void + +registerResource + +string + +name + +Smarty\_resource + +resource\_handler + +Use this to dynamically register a [Resource plugin](#resources) with +Smarty. Pass in the `name` of the Resource and the object extending +Smarty\_Resource. See [template resources](#resources) for more +information on how to setup a function for fetching templates. + +> **Note** +> +> A resource name must be at least two characters in length. One +> character resource names will be ignored and used as part of the file +> path, such as `$smarty->display('c:/path/to/index.tpl');` + +> **Note** +> +> Prior to Smarty 3.1 `registerResource()` accepted an array of callback +> functions. While this is still possible for backward compatibility +> reasons, it is strongly discouraged as callback functions have been +> deprecated as of Smarty 3.1. + + + <?php + $smarty->registerResource('mysql', new Smarty_Resource_Mysql()); + ?> + + + +See also [`unregisterResource()`](#api.unregister.resource) and the +[template resources](#resources) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md new file mode 100644 index 000000000..7f7c4b60d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md @@ -0,0 +1,32 @@ +setCacheDir() + +set the directory where the rendered template\'s output is stored + +Description +=========== + +Smarty + +setCacheDir + +string + +cache\_dir + + + <?php + + // set directory where rendered template's output is stored + $smarty->setCacheDir('./cache'); + + // chaining of method calls + $smarty->setTemplateDir('./templates') + ->setCompileDir('./templates_c') + ->setCacheDir('./cache'); + + ?> + + + +See also [`getCacheDir()`](#api.get.cache.dir) and +[`$cache_dir`](#variable.cache.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md new file mode 100644 index 000000000..bfeb55a53 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md @@ -0,0 +1,32 @@ +setCompileDir() + +set the directory where compiled templates are stored + +Description +=========== + +Smarty + +setCompileDir + +string + +compile\_dir + + + <?php + + // set directory where compiled templates are stored + $smarty->setCompileDir('./templates_c'); + + // chaining of method calls + $smarty->setTemplateDir('./templates') + ->setCompileDir('./templates_c') + ->setCacheDir('./cache'); + + ?> + + + +See also [`getCompileDir()`](#api.get.compile.dir) and +[`$compile_dir`](#variable.compile.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md new file mode 100644 index 000000000..97a6ae977 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md @@ -0,0 +1,47 @@ +setConfigDir() + +set the directories where config files are stored + +Description +=========== + +Smarty + +setConfigDir + +string\|array + +config\_dir + + + <?php + + // set a single directory where the config files are stored + $smarty->setConfigDir('./config'); + + // view the config dir chain + var_dump($smarty->getConfigDir()); + + // set multiple directorÃes where config files are stored + $smarty->setConfigDir(array( + 'one' => './config', + 'two' => './config_2', + 'three' => './config_3', + )); + + // view the config dir chain + var_dump($smarty->getConfigDir()); + + // chaining of method calls + $smarty->setTemplateDir('./templates') + ->setConfigDir('./config') + ->setCompileDir('./templates_c') + ->setCacheDir('./cache'); + + ?> + + + +See also [`getConfigDir()`](#api.get.config.dir), +[`addConfigDir()`](#api.add.config.dir) and +[`$config_dir`](#variable.config.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md new file mode 100644 index 000000000..25b0567b1 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md @@ -0,0 +1,46 @@ +setPluginsDir() + +set the directories where plugins are stored + +Description +=========== + +Smarty + +setPluginsDir + +string\|array + +plugins\_dir + + + <?php + + // set a single directory where the plugins are stored + $smarty->setPluginsDir('./plugins'); + + // view the plugins dir chain + var_dump($smarty->getPluginsDir()); + + // set multiple directorÃes where plugins are stored + $smarty->setPluginsDir(array( + './plugins', + './plugins_2', + )); + + // view the plugins dir chain + var_dump($smarty->getPluginsDir()); + + // chaining of method calls + $smarty->setTemplateDir('./templates') + ->setPluginsDir('./plugins') + ->setCompileDir('./templates_c') + ->setCacheDir('./cache'); + + ?> + + + +See also [`getPluginsDir()`](#api.get.plugins.dir), +[`addPluginsDir()`](#api.add.plugins.dir) and +[`$plugins_dir`](#variable.plugins.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md new file mode 100644 index 000000000..2de23309b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md @@ -0,0 +1,46 @@ +setTemplateDir() + +set the directories where templates are stored + +Description +=========== + +Smarty + +setTemplateDir + +string\|array + +template\_dir + + + <?php + + // set a single directory where the templates are stored + $smarty->setTemplateDir('./cache'); + + // view the template dir chain + var_dump($smarty->getTemplateDir()); + + // set multiple directorÃes where templates are stored + $smarty->setTemplateDir(array( + 'one' => './templates', + 'two' => './templates_2', + 'three' => './templates_3', + )); + + // view the template dir chain + var_dump($smarty->getTemplateDir()); + + // chaining of method calls + $smarty->setTemplateDir('./templates') + ->setCompileDir('./templates_c') + ->setCacheDir('./cache'); + + ?> + + + +See also [`getTemplateDir()`](#api.get.template.dir), +[`addTemplateDir()`](#api.add.template.dir) and +[`$template_dir`](#variable.template.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md new file mode 100644 index 000000000..07f61b12e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md @@ -0,0 +1,59 @@ +templateExists() + +checks whether the specified template exists + +Description +=========== + +bool + +templateExists + +string + +template + +It can accept either a path to the template on the filesystem or a +resource string specifying the template. + +This example uses `$_GET['page']` to +[`{include}`](#language.function.include) a content template. If the +template does not exist then an error page is displayed instead. First +the `page_container.tpl` + + + <html> + <head><title>{$title}</title></head> + <body> + {include file='page_top.tpl'} + + {* include middle content page *} + {include file=$content_template} + + {include file='page_footer.tpl'} + </body> + + + +And the php script + + + <?php + + // set the filename eg index.inc.tpl + $mid_template = $_GET['page'].'.inc.tpl'; + + if( !$smarty->templateExists($mid_template) ){ + $mid_template = 'page_not_found.tpl'; + } + $smarty->assign('content_template', $mid_template); + + $smarty->display('page_container.tpl'); + + ?> + + + +See also [`display()`](#api.display), [`fetch()`](#api.fetch), +[`{include}`](#language.function.include) and +[`{insert}`](#language.function.insert) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md new file mode 100644 index 000000000..3afe5ec1d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md @@ -0,0 +1,22 @@ +testInstall() + +checks Smarty installation + +Description +=========== + +void + +testInstall + +This function verifies that all required working folders of the Smarty +installation can be accessed. It does output a corresponding protocoll. + + + <?php + require_once('Smarty.class.php'); + $smarty = new Smarty(); + $smarty->testInstall(); + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md new file mode 100644 index 000000000..d097519db --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md @@ -0,0 +1,28 @@ +unregisterCacheResource() + +dynamically unregister a CacheResource plugin + +Description +=========== + +void + +unregisterCacheResource + +string + +name + +Pass in the `name` of the CacheResource. + + + <?php + + $smarty->unregisterCacheResource('mysql'); + + ?> + + + +See also [`registerCacheResource()`](#api.register.cacheresource) and +the [Custom CacheResource Implementation](#caching.custom) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md new file mode 100644 index 000000000..44020eb40 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md @@ -0,0 +1,23 @@ +unregisterFilter() + +dynamically unregister a filter + +Description +=========== + +void + +unregisterFilter + +string + +type + +string\|array + +callback + +Use this to dynamically unregister filters. It uses the following +parameters: + +See also [`registerFilter()`](#api.register.filter). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md new file mode 100644 index 000000000..c012581f9 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md @@ -0,0 +1,17 @@ +unregisterObject() + +dynamically unregister an object + +Description +=========== + +void + +unregisterObject + +string + +object\_name + +See also [`registerObject()`](#api.register.object) and [objects +section](#advanced.features.objects) diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md new file mode 100644 index 000000000..c692ac60f --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md @@ -0,0 +1,36 @@ +unregisterPlugin + +dynamically unregister plugins + +Description +=========== + +void + +unregisterPlugin + +string + +type + +string + +name + +This method unregisters plugins which previously have been registered by +[registerPlugin()](#api.register.plugin), It uses the following +parameters: + +<!-- --> + + + <?php + + // we don't want template designers to have access to function plugin "date_now" + $smarty->unregisterPlugin("function","date_now"); + + ?> + + + +See also [`registerPlugin()`](#api.register.plugin). diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md new file mode 100644 index 000000000..1a6067bd2 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md @@ -0,0 +1,28 @@ +unregisterResource() + +dynamically unregister a resource plugin + +Description +=========== + +void + +unregisterResource + +string + +name + +Pass in the `name` of the resource. + + + <?php + + $smarty->unregisterResource('db'); + + ?> + + + +See also [`registerResource()`](#api.register.resource) and [template +resources](#resources) diff --git a/vendor/smarty/smarty/docs/programmers/api-variables.md b/vendor/smarty/smarty/docs/programmers/api-variables.md new file mode 100644 index 000000000..2fcf6e217 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables.md @@ -0,0 +1,64 @@ +Smarty Class Variables {#api.variables} +====================== + +These are all of the available Smarty class variables. You can access +them directly, or use the corresponding setter/getter methods. + +- [$allow_php_templates](./api-variables/variable-allow-php-templates.md) +- [$auto_literal](./api-variables/variable-auto-literal.md) +- [$autoload_filters](./api-variables/variable-autoload-filters.md) +- [$cache_dir](./api-variables/variable-cache-dir.md) +- [$cache_id](./api-variables/variable-cache-id.md) +- [$cache_lifetime](./api-variables/variable-cache-lifetime.md) +- [$cache_locking](./api-variables/variable-cache-locking.md) +- [$cache_modified_check](./api-variables/variable-cache-modified-check.md) +- [$caching](./api-variables/variable-caching.md) +- [$caching_type](./api-variables/variable-caching-type.md) +- [$compile_check](./api-variables/variable-compile-check.md) +- [$compile_dir](./api-variables/variable-compile-dir.md) +- [$compile_id](./api-variables/variable-compile-id.md) +- [$compile_locking](./api-variables/variable-compile-locking.md) +- [$compiler_class](./api-variables/variable-compiler-class.md) +- [$config_booleanize](./api-variables/variable-config-booleanize.md) +- [$config_dir](./api-variables/variable-config-dir.md) +- [$config_overwrite](./api-variables/variable-config-overwrite.md) +- [$config_read_hidden](./api-variables/variable-config-read-hidden.md) +- [$debug_tpl](./api-variables/variable-debug-template.md) +- [$debugging](./api-variables/variable-debugging.md) +- [$debugging_ctrl](./api-variables/variable-debugging-ctrl.md) +- [$default_config_type](./api-variables/variable-default-config-type.md) +- [$default_modifiers](./api-variables/variable-default-modifiers.md) +- [$default_resource_type](./api-variables/variable-default-resource-type.md) +- [$default_config_handler_func](./api-variables/variable-default-config-handler-func.md) +- [$default_template_handler_func](./api-variables/variable-default-template-handler-func.md) +- [$direct_access_security](./api-variables/variable-direct-access-security.md) +- [$error_reporting](./api-variables/variable-error-reporting.md) +- [$escape_html](./api-variables/variable-escape-html.md) +- [$force_cache](./api-variables/variable-force-cache.md) +- [$force_compile](./api-variables/variable-force-compile.md) +- [$left_delimiter](./api-variables/variable-left-delimiter.md) +- [$locking_timeout](./api-variables/variable-locking-timeout.md) +- [$merge_compiled_includes](./api-variables/variable-merge-compiled-includes.md) +- [$php_handling](./api-variables/variable-php-handling.md) +- [$plugins_dir](./api-variables/variable-plugins-dir.md) +- [$right_delimiter](./api-variables/variable-right-delimiter.md) +- [$smarty_debug_id](./api-variables/variable-smarty-debug-id.md) +- [$template_dir](./api-variables/variable-template-dir.md) +- [$trusted_dir](./api-variables/variable-trusted-dir.md) +- [$use_include_path](./api-variables/variable-use-include-path.md) +- [$use_sub_dirs](./api-variables/variable-use-sub-dirs.md) + +> **Note** +> +> All class variables have magic setter/getter methods available. +> setter/getter methods are camelCaseFormat, unlike the variable itself. +> So for example, you can set and get the \$smarty-\>template\_dir +> variable with \$smarty-\>setTemplateDir(\$dir) and \$dir = +> \$smarty-\>getTemplateDir() respectively. + +> **Note** +> +> See +> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md) +> section for how to change Smarty class variables for individual +> templates. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md new file mode 100644 index 000000000..e15520e2d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md @@ -0,0 +1,18 @@ +\$allow\_php\_templates {#variable.allow.php.templates} +======================= + +By default the PHP template file resource is disabled. Setting +`$allow_php_templates` to TRUE will enable PHP template files. + +::: {.informalexample} + + <?php + $smarty->allow_php_templates = true; + ?> + + +::: + +> **Note** +> +> The PHP template file resource is an undocumented deprecated feature. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md new file mode 100644 index 000000000..e5ddb34fc --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md @@ -0,0 +1,17 @@ +\$auto\_literal {#variable.auto.literal} +=============== + +The Smarty delimiter tags { and } will be ignored so long as they are +surrounded by white space. This behavior can be disabled by setting +auto\_literal to false. + +::: {.informalexample} + + <?php + $smarty->auto_literal = false; + ?> + + +::: + +See also [Escaping Smarty Parsing](#language.escaping), diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md new file mode 100644 index 000000000..8a300b065 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md @@ -0,0 +1,21 @@ +\$autoload\_filters {#variable.autoload.filters} +=================== + +If there are some filters that you wish to load on every template +invocation, you can specify them using this variable and Smarty will +automatically load them for you. The variable is an associative array +where keys are filter types and values are arrays of the filter names. +For example: + +::: {.informalexample} + + <?php + $smarty->autoload_filters = array('pre' => array('trim', 'stamp'), + 'output' => array('convert')); + ?> + + +::: + +See also [`registerFilter()`](#api.register.filter) and +[`loadFilter()`](#api.load.filter) diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md new file mode 100644 index 000000000..6cb2b5559 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md @@ -0,0 +1,35 @@ +\$cache\_dir {#variable.cache.dir} +============ + +This is the name of the directory where template caches are stored. By +default this is `./cache`, meaning that Smarty will look for the +`cache/` directory in the same directory as the executing php script. +**This directory must be writeable by the web server**, [see +install](#installing.smarty.basic) for more info. + +You can also use your own [custom cache implementation](#caching.custom) +to control cache files, which will ignore this setting. See also +[`$use_sub_dirs`](#variable.use.sub.dirs). + +> **Note** +> +> This setting must be either a relative or absolute path. include\_path +> is not used for writing files. + +> **Note** +> +> It is not recommended to put this directory under the web server +> document root. + +> **Note** +> +> As of Smarty 3.1 the attribute \$cache\_dir is no longer accessible +> directly. Use [`getCacheDir()`](#api.get.cache.dir) and +> [`setCacheDir()`](#api.set.cache.dir) instead. + +See also [`getCacheDir()`](#api.get.cache.dir), +[`setCacheDir()`](#api.set.cache.dir), [`$caching`](#variable.caching), +[`$use_sub_dirs`](#variable.use.sub.dirs), +[`$cache_lifetime`](#variable.cache.lifetime), +[`$cache_modified_check`](#variable.cache.modified.check) and the +[caching section](#caching). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md new file mode 100644 index 000000000..c27fae921 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md @@ -0,0 +1,11 @@ +\$cache\_id {#variable.cache.id} +=========== + +Persistent cache\_id identifier. As an alternative to passing the same +`$cache_id` to each and every function call, you can set this +`$cache_id` and it will be used implicitly thereafter. + +With a `$cache_id` you can have multiple cache files for a single call +to [`display()`](#api.display) or [`fetch()`](#api.fetch) depending for +example from different content of the same template. See the [caching +section](#caching) for more information. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md new file mode 100644 index 000000000..c9624b556 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md @@ -0,0 +1,30 @@ +\$cache\_lifetime {#variable.cache.lifetime} +================= + +This is the length of time in seconds that a template cache is valid. +Once this time has expired, the cache will be regenerated. + +- `$caching` must be turned on (either + Smarty::CACHING\_LIFETIME\_CURRENT or + Smarty::CACHING\_LIFETIME\_SAVED) for `$cache_lifetime` to have any + purpose. + +- A `$cache_lifetime` value of -1 will force the cache to never + expire. + +- A value of 0 will cause the cache to always regenerate (good for + testing only, to disable caching a more efficient method is to set + [`$caching`](#variable.caching) = Smarty::CACHING\_OFF). + +- If you want to give certain templates their own cache lifetime, you + could do this by setting [`$caching`](#variable.caching) = + Smarty::CACHING\_LIFETIME\_SAVED, then set `$cache_lifetime` to a + unique value just before calling [`display()`](#api.display) or + [`fetch()`](#api.fetch). + +If [`$force_compile`](#variable.force.compile) is enabled, the cache +files will be regenerated every time, effectively disabling caching. You +can clear all the cache files with the +[`clear_all_cache()`](#api.clear.all.cache) function, or individual +cache files (or groups) with the [`clear_cache()`](#api.clear.cache) +function. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md new file mode 100644 index 000000000..6dca30c7b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md @@ -0,0 +1,11 @@ +\$cache\_locking {#variable.cache.locking} +================ + +Cache locking avoids concurrent cache generation. This means resource +intensive pages can be generated only once, even if they\'ve been +requested multiple times in the same moment. + +Cache locking is disabled by default. To enable it set `$cache_locking` +to TRUE. + +See also [`$locking_timeout`](#variable.locking.timeout) diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md new file mode 100644 index 000000000..05e00bb91 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md @@ -0,0 +1,12 @@ +\$cache\_modified\_check {#variable.cache.modified.check} +======================== + +If set to TRUE, Smarty will respect the If-Modified-Since header sent +from the client. If the cached file timestamp has not changed since the +last visit, then a `'304: Not Modified'` header will be sent instead of +the content. This works only on cached content without +[`{insert}`](#language.function.insert) tags. + +See also [`$caching`](#variable.caching), +[`$cache_lifetime`](#variable.cache.lifetime), and the [caching +section](#caching). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md new file mode 100644 index 000000000..22b88cf6a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md @@ -0,0 +1,9 @@ +\$caching\_type {#variable.caching.type} +=============== + +This property specifies the name of the caching handler to use. It +defaults to `file`, enabling the internal filesystem based cache +handler. + +See [Custom Cache Implementation](#caching.custom) for pointers on +setting up your own cache handler. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md new file mode 100644 index 000000000..9377e3b6d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md @@ -0,0 +1,38 @@ +\$caching {#variable.caching} +========= + +This tells Smarty whether or not to cache the output of the templates to +the [`$cache_dir`](#variable.cache.dir). By default this is set to the +constant Smarty::CACHING\_OFF. If your templates consistently generate +the same content, it is advisable to turn on `$caching`, as this may +result in significant performance gains. + +You can also have [multiple](#caching.multiple.caches) caches for the +same template. + +- A constant value of Smarty::CACHING\_LIFETIME\_CURRENT or + Smarty::CACHING\_LIFETIME\_SAVED enables caching. + +- A value of Smarty::CACHING\_LIFETIME\_CURRENT tells Smarty to use + the current [`$cache_lifetime`](#variable.cache.lifetime) variable + to determine if the cache has expired. + +- A value of Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the + [`$cache_lifetime`](#variable.cache.lifetime) value at the time the + cache was generated. This way you can set the + [`$cache_lifetime`](#variable.cache.lifetime) just before + [fetching](#api.fetch) the template to have granular control over + when that particular cache expires. See also + [`isCached()`](#api.is.cached). + +- If [`$compile_check`](#variable.compile.check) is enabled, the + cached content will be regenerated if any of the templates or config + files that are part of this cache are changed. + +- If [`$force_compile`](#variable.force.compile) is enabled, the + cached content will always be regenerated. + +See also [`$cache_dir`](#variable.cache.dir), +[`$cache_lifetime`](#variable.cache.lifetime), +[`$cache_modified_check`](#variable.cache.modified.check), +[`is_cached()`](#api.is.cached) and the [caching section](#caching). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md new file mode 100644 index 000000000..c0582d4d4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md @@ -0,0 +1,27 @@ +\$compile\_check {#variable.compile.check} +================ + +Upon each invocation of the PHP application, Smarty tests to see if the +current template has changed (different timestamp) since the last time +it was compiled. If it has changed, it recompiles that template. If the +template has yet not been compiled at all, it will compile regardless of +this setting. By default this variable is set to TRUE. + +Once an application is put into production (ie the templates won\'t be +changing), the compile check step is no longer needed. Be sure to set +`$compile_check` to FALSE for maximum performance. Note that if you +change this to FALSE and a template file is changed, you will \*not\* +see the change since the template will not get recompiled. + +If [`$caching`](#variable.caching) is enabled and `$compile_check` is +enabled, then the cache files will get regenerated if an involved +template file or config file was updated. + +As of Smarty 3.1 `$compile_check` can be set to the value +`Smarty::COMPILECHECK_CACHEMISS`. This enables Smarty to revalidate the +compiled template, once a cache file is regenerated. So if there was a +cached template, but it\'s expired, Smarty will run a single +compile\_check before regenerating the cache. + +See [`$force_compile`](#variable.force.compile) and +[`clearCompiledTemplate()`](#api.clear.compiled.tpl). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md new file mode 100644 index 000000000..c18c9acba --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md @@ -0,0 +1,29 @@ +\$compile\_dir {#variable.compile.dir} +============== + +This is the name of the directory where compiled templates are located. +By default this is `./templates_c`, meaning that Smarty will look for +the `templates_c/` directory in the same directory as the executing php +script. **This directory must be writeable by the web server**, [see +install](#installing.smarty.basic) for more info. + +> **Note** +> +> This setting must be either a relative or absolute path. include\_path +> is not used for writing files. + +> **Note** +> +> It is not recommended to put this directory under the web server +> document root. + +> **Note** +> +> As of Smarty 3.1 the attribute \$compile\_dir is no longer accessible +> directly. Use [`getCompileDir()`](#api.get.compile.dir) and +> [`setCompileDir()`](#api.set.compile.dir) instead. + +See also [`getCompileDir()`](#api.get.compile.dir), +[`setCompileDir()`](#api.set.compile.dir), +[`$compile_id`](#variable.compile.id) and +[`$use_sub_dirs`](#variable.use.sub.dirs). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md new file mode 100644 index 000000000..c63f75ab9 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md @@ -0,0 +1,44 @@ +\$compile\_id {#variable.compile.id} +============= + +Persistant compile identifier. As an alternative to passing the same +`$compile_id` to each and every function call, you can set this +`$compile_id` and it will be used implicitly thereafter. + +If you use the same template with different [pre- and/or +post-filters](#plugins.prefilters.postfilters) you must use a unique +`$compile_id` to keep the compiled template files separated. + +For example a [prefilter](#plugins.prefilters.postfilters) that +localizes your templates (that is: translates language dependend parts) +at compile time, then you could use the current language as +`$compile_id` and you will get a set of compiled templates for each +language you use. + + + <?php + $smarty->compile_id = 'en'; + ?> + + + +Another application would be to use the same compile directory across +multiple domains / multiple virtual hosts. + + + <?php + + $smarty->compile_id = $_SERVER['SERVER_NAME']; + $smarty->compile_dir = '/path/to/shared_compile_dir'; + + ?> + + + +> **Note** +> +> In Smarty 3 a `$compile_id` is no longer required to keep templates +> with same name in different [`$template_dir` +> folders](#variable.template.dir) separated. The [`$template_dir` file +> path](#variable.template.dir) is encoded in the file name of compiled +> and cached template files. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md new file mode 100644 index 000000000..ff7a66f3a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md @@ -0,0 +1,7 @@ +\$compile\_locking {#variable.compile.locking} +================== + +Compile locking avoids concurrent compilation of the same template. + +Compile locking is enabled by default. To disable it set +`$compile_locking` to FALSE. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md new file mode 100644 index 000000000..32ea982d6 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md @@ -0,0 +1,6 @@ +\$compiler\_class {#variable.compiler.class} +================= + +Specifies the name of the compiler class that Smarty will use to compile +the templates. The default is \'Smarty\_Compiler\'. For advanced users +only. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md new file mode 100644 index 000000000..4ba555f84 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md @@ -0,0 +1,8 @@ +\$config\_booleanize {#variable.config.booleanize} +==================== + +If set to TRUE, [config files](#config.files) values of `on/true/yes` +and `off/false/no` get converted to boolean values automatically. This +way you can use the values in the template like so: +`{if #foobar#}...{/if}`. If foobar was `on`, `true` or `yes`, the `{if}` +statement will execute. Defaults to TRUE. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md new file mode 100644 index 000000000..d73f3274f --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md @@ -0,0 +1,23 @@ +\$config\_dir {#variable.config.dir} +============= + +This is the directory used to store [config files](#config.files) used +in the templates. Default is `./configs`, meaning that Smarty will look +for the `configs/` directory in the same directory as the executing php +script. + +> **Note** +> +> It is not recommended to put this directory under the web server +> document root. + +> **Note** +> +> As of Smarty 3.1 the attribute \$config\_dir is no longer accessible +> directly. Use [`getConfigDir()`](#api.get.config.dir), +> [`setConfigDir()`](#api.set.config.dir) and +> [`addConfigDir()`](#api.add.config.dir) instead. + +See also [`getConfigDir()`](#api.get.config.dir), +[`setConfigDir()`](#api.set.config.dir) and +[`addConfigDir()`](#api.add.config.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md new file mode 100644 index 000000000..0b8968374 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md @@ -0,0 +1,40 @@ +\$config\_overwrite {#variable.config.overwrite} +=================== + +If set to TRUE, the default then variables read in from [config +files](#config.files) will overwrite each other. Otherwise, the +variables will be pushed onto an array. This is helpful if you want to +store arrays of data in config files, just list each element multiple +times. + +This examples uses [`{cycle}`](#language.function.cycle) to output a +table with alternating red/green/blue row colors with +`$config_overwrite` = FALSE. + +The config file. + + + # row colors + rowColors = #FF0000 + rowColors = #00FF00 + rowColors = #0000FF + + + +The template with a [`{section}`](#language.function.section) loop. + + + <table> + {section name=r loop=$rows} + <tr bgcolor="{cycle values=#rowColors#}"> + <td> ....etc.... </td> + </tr> + {/section} + </table> + + + +See also [`{config_load}`](#language.function.config.load), +[`getConfigVars()`](#api.get.config.vars), +[`clearConfig()`](#api.clear.config), [`configLoad()`](#api.config.load) +and the [config files section](#config.files). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md new file mode 100644 index 000000000..19cde68bd --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md @@ -0,0 +1,8 @@ +\$config\_read\_hidden {#variable.config.read.hidden} +====================== + +If set to TRUE, hidden sections ie section names beginning with a +period(.) in [config files](#config.files) can be read from templates. +Typically you would leave this FALSE, that way you can store sensitive +data in the config files such as database parameters and not worry about +the template loading them. FALSE by default. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md new file mode 100644 index 000000000..faec0e171 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md @@ -0,0 +1,9 @@ +\$debug\_tpl {#variable.debug_template} +============ + +This is the name of the template file used for the debugging console. By +default, it is named `debug.tpl` and is located in the +[`SMARTY_DIR`](#constant.smarty.dir). + +See also [`$debugging`](#variable.debugging) and the [debugging +console](#chapter.debugging.console) section. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md new file mode 100644 index 000000000..a9355c0a2 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md @@ -0,0 +1,20 @@ +\$debugging\_ctrl {#variable.debugging.ctrl} +================= + +This allows alternate ways to enable debugging. `NONE` means no +alternate methods are allowed. `URL` means when the keyword +`SMARTY_DEBUG` is found in the `QUERY_STRING`, debugging is enabled for +that invocation of the script. If [`$debugging`](#variable.debugging) is +TRUE, this value is ignored. + + + <?php + // shows debug console only on localhost ie + // http://localhost/script.php?foo=bar&SMARTY_DEBUG + $smarty->debugging = false; // the default + $smarty->debugging_ctrl = ($_SERVER['SERVER_NAME'] == 'localhost') ? 'URL' : 'NONE'; + ?> + +See also [debugging console](#chapter.debugging.console) section, +[`$debugging`](#variable.debugging) and +[`$smarty_debug_id`](#variable.smarty.debug.id). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md new file mode 100644 index 000000000..4473e0c8d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md @@ -0,0 +1,17 @@ +\$debugging {#variable.debugging} +=========== + +This enables the [debugging console](#chapter.debugging.console). The +console is a javascript popup window that informs you of the +[included](#language.function.include) templates, variables +[assigned](#api.assign) from php and [config file +variables](#language.config.variables) for the current script. It does +not show variables assigned within a template with the +[`{assign}`](#language.function.assign) function. + +The console can also be enabled from the url with +[`$debugging_ctrl`](#variable.debugging.ctrl). + +See also [`{debug}`](#language.function.debug), +[`$debug_tpl`](#variable.debug_template), and +[`$debugging_ctrl`](#variable.debugging.ctrl). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md new file mode 100644 index 000000000..0d6ec5e0d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md @@ -0,0 +1,50 @@ +\$default\_config\_handler\_func {#variable.default.config.handler.func} +================================ + +This function is called when a config file cannot be obtained from its +resource. + +> **Note** +> +> The default handler is currently only invoked for file resources. It +> is not triggered when the resource itself cannot be found, in which +> case a SmartyException is thrown. + + + <?php + + $smarty = new Smarty(); + $smarty->default_config_handler_func = 'my_default_config_handler_func'; + + /** + * Default Config 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 config's content + * @param integer &$modified config'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 config + * could be loaded + */ + function my_default_config_handler_func($type, $name, &$content, &$modified, Smarty $smarty) { + if (false) { + // return corrected filepath + return "/tmp/some/foobar.tpl"; + } elseif (false) { + // return a config directly + $content = 'someVar = "the config source"'; + $modified = time(); + return true; + } else { + // tell smarty that we failed + return false; + } + } + + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md new file mode 100644 index 000000000..60bf9f1ea --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md @@ -0,0 +1,7 @@ +\$default\_config\_type {#variable.default.config.type} +======================= + +This tells smarty what resource type to use for config files. The +default value is `file`, meaning that `$smarty->configLoad('test.conf')` +and `$smarty->configLoad('file:test.conf')` are identical in meaning. +See the [resource](#resources) chapter for more details. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md new file mode 100644 index 000000000..c6b73eb12 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md @@ -0,0 +1,8 @@ +\$default\_modifiers {#variable.default.modifiers} +==================== + +This is an array of modifiers to implicitly apply to every variable in a +template. For example, to HTML-escape every variable by default, use +`array('escape:"htmlall"')`. To make a variable exempt from default +modifiers, add the \'nofilter\' attribute to the output tag such as +`{$var nofilter}`. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md new file mode 100644 index 000000000..e8a803178 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md @@ -0,0 +1,7 @@ +\$default\_resource\_type {#variable.default.resource.type} +========================= + +This tells smarty what resource type to use implicitly. The default +value is `file`, meaning that `$smarty->display('index.tpl')` and +`$smarty->display('file:index.tpl')` are identical in meaning. See the +[resource](#resources) chapter for more details. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md new file mode 100644 index 000000000..d8fcbb1ad --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md @@ -0,0 +1,50 @@ +\$default\_template\_handler\_func {#variable.default.template.handler.func} +================================== + +This function is called when a template cannot be obtained from its +resource. + +> **Note** +> +> The default handler is currently only invoked for file resources. It +> is not triggered when the resource itself cannot be found, in which +> case a SmartyException is thrown. + + + <?php + + $smarty = new Smarty(); + $smarty->default_template_handler_func = 'my_default_template_handler_func'; + + /** + * 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 my_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; + } + } + + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md new file mode 100644 index 000000000..f471f5de0 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md @@ -0,0 +1,13 @@ +\$direct\_access\_security {#variable.direct.access.security} +========================== + +Direct access security inhibits direct browser access to compiled or +cached template files. + +Direct access security is enabled by default. To disable it set +`$direct_access_security` to FALSE. + +> **Note** +> +> This is a compile time option. If you change the setting you must make +> sure that the templates get recompiled. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md new file mode 100644 index 000000000..eec7894da --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md @@ -0,0 +1,17 @@ +\$error\_reporting {#variable.error.reporting} +================== + +When this value is set to a non-null-value it\'s value is used as php\'s +[`error_reporting`](&url.php-manual;error_reporting) level inside of +[`display()`](#api.display) and [`fetch()`](#api.fetch). + +Smarty 3.1.2 introduced the +[`muteExpectedErrors()`](#api.mute.expected.errors) function. Calling +`Smarty::muteExpectedErrors();` after setting up custom error handling +will ensure that warnings and notices (deliberately) produced by Smarty +will not be passed to other custom error handlers. If your error logs +are filling up with warnings regarding `filemtime()` or `unlink()` +calls, please enable Smarty\'s error muting. + +See also [debugging](#chapter.debugging.console) and +[troubleshooting](#troubleshooting). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md new file mode 100644 index 000000000..39ff28027 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md @@ -0,0 +1,21 @@ +\$escape\_html {#variable.escape.html} +============== + +Setting `$escape_html` to TRUE will escape all template variable output +by wrapping it in +`htmlspecialchars({$output}, ENT_QUOTES, SMARTY_RESOURCE_CHAR_SET);`, +which is the same as `{$variable|escape:"html"}`. + +Template designers can choose to selectively disable this feature by +adding the `nofilter` flag: `{$variable nofilter}`. + +Modifiers and Filters are run in the following order: modifier, +default\_modifier, \$escape\_html, registered variable filters, +autoloaded variable filters, template instance\'s variable filters. +Everything except the individual modifier can be disabled with the +`nofilter` flag. + +> **Note** +> +> This is a compile time option. If you change the setting you must make +> sure that the templates get recompiled. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md new file mode 100644 index 000000000..de0c0c15a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md @@ -0,0 +1,6 @@ +\$force\_cache {#variable.force.cache} +============== + +This forces Smarty to (re)cache templates on every invocation. It does +not override the [`$caching`](#variable.caching) level, but merely +pretends the template has never been cached before. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md new file mode 100644 index 000000000..73f1e792d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md @@ -0,0 +1,9 @@ +\$force\_compile {#variable.force.compile} +================ + +This forces Smarty to (re)compile templates on every invocation. This +setting overrides [`$compile_check`](#variable.compile.check). By +default this is FALSE. This is handy for development and +[debugging](#chapter.debugging.console). It should never be used in a +production environment. If [`$caching`](#variable.caching) is enabled, +the cache file(s) will be regenerated every time. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md new file mode 100644 index 000000000..bcc13f0e5 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md @@ -0,0 +1,8 @@ +\$left\_delimiter {#variable.left.delimiter} +================= + +This is the left delimiter used by the template language. Default is +`{`. + +See also [`$right_delimiter`](#variable.right.delimiter) and [escaping +smarty parsing](#language.escaping) . diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md new file mode 100644 index 000000000..fdfdc087e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md @@ -0,0 +1,7 @@ +\$locking\_timeout {#variable.locking.timeout} +================== + +This is maximum time in seconds a cache lock is valid to avoid dead +locks. The deafult value is 10 seconds. + +See also [`$cache_locking`](#variable.cache.locking) diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md new file mode 100644 index 000000000..8220c442b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md @@ -0,0 +1,27 @@ +\$merge\_compiled\_includes {#variable.merge.compiled.includes} +=========================== + +By setting `$merge_compiled_includes` to TRUE Smarty will merge the +compiled template code of subtemplates into the compiled code of the +main template. This increases rendering speed of templates using a many +different sub-templates. + +Individual sub-templates can be merged by setting the `inline` option +flag within the `{include}` tag. `$merge_compiled_includes` does not +have to be enabled for the `inline` merge. + +::: {.informalexample} + + <?php + $smarty->merge_compiled_includes = true; + ?> + + +::: + +> **Note** +> +> This is a compile time option. If you change the setting you must make +> sure that the templates get recompiled. + +See also [`{include}`](#language.function.include) tag diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-php-handling.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-php-handling.md new file mode 100644 index 000000000..574ea6d55 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-php-handling.md @@ -0,0 +1,21 @@ +\$php\_handling {#variable.php.handling} +=============== + +This tells Smarty how to handle PHP code embedded in the templates. +There are four possible settings, the default being +`Smarty::PHP_PASSTHRU`. Note that this does NOT affect php code within +[`{php}{/php}`](#language.function.php) tags in the template. + +- `Smarty::PHP_PASSTHRU` - Smarty echos tags as-is. + +- `Smarty::PHP_QUOTE` - Smarty quotes the tags as html entities. + +- `Smarty::PHP_REMOVE` - Smarty removes the tags from the templates. + +- `Smarty::PHP_ALLOW` - Smarty will execute the tags as PHP code. + +> **Note** +> +> Embedding PHP code into templates is highly discouraged. Use [custom +> functions](#plugins.functions) or [modifiers](#plugins.modifiers) +> instead. diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md new file mode 100644 index 000000000..8a7cfcdb2 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md @@ -0,0 +1,28 @@ +\$plugins\_dir {#variable.plugins.dir} +============== + +This is the directory or directories where Smarty will look for the +plugins that it needs. Default is `plugins/` under the +[`SMARTY_DIR`](#constant.smarty.dir). If you supply a relative path, +Smarty will first look under the [`SMARTY_DIR`](#constant.smarty.dir), +then relative to the current working directory, then relative to the PHP +include\_path. If `$plugins_dir` is an array of directories, Smarty will +search for your plugin in each plugin directory **in the order they are +given**. + +> **Note** +> +> For best performance, do not setup your `$plugins_dir` to have to use +> the PHP include path. Use an absolute pathname, or a path relative to +> `SMARTY_DIR` or the current working directory. + +> **Note** +> +> As of Smarty 3.1 the attribute \$plugins\_dir is no longer accessible +> directly. Use [`getPluginsDir()`](#api.get.plugins.dir), +> [`setPluginsDir()`](#api.set.plugins.dir) and +> [`addPluginsDir()`](#api.add.plugins.dir) instead. + +See also [`getPluginsDir()`](#api.get.plugins.dir), +[`setPluginsDir()`](#api.set.plugins.dir) and +[`addPluginsDir()`](#api.add.plugins.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md new file mode 100644 index 000000000..14a9b568e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md @@ -0,0 +1,8 @@ +\$right\_delimiter {#variable.right.delimiter} +================== + +This is the right delimiter used by the template language. Default is +`}`. + +See also [`$left_delimiter`](#variable.left.delimiter) and [escaping +smarty parsing](#language.escaping). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md new file mode 100644 index 000000000..0733ed518 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md @@ -0,0 +1,9 @@ +\$smarty\_debug\_id {#variable.smarty.debug.id} +=================== + +The value of `$smarty_debug_id` defines the URL keyword to enable +debugging at browser level. The default value is `SMARTY_DEBUG`. + +See also [debugging console](#chapter.debugging.console) section, +[`$debugging`](#variable.debugging) and +[`$debugging_ctrl`](#variable.debugging.ctrl). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md new file mode 100644 index 000000000..e49578b1b --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md @@ -0,0 +1,36 @@ +\$template\_dir {#variable.template.dir} +=============== + +This is the name of the default template directory. If you do not supply +a resource type when including files, they will be found here. By +default this is `./templates`, meaning that Smarty will look for the +`templates/` directory in the same directory as the executing php +script. \$template\_dir can also be an array of directory paths: Smarty +will traverse the directories and stop on the first matching template +found. + +> **Note** +> +> It is not recommended to put this directory under the web server +> document root. + +> **Note** +> +> If the directories known to `$template_dir` are relative to +> directories known to the +> [include\_path](&url.php-manual;ini.core.php#ini.include-path) you +> need to activate the [`$use_include_path`](#variable.use.include.path) +> option. + +> **Note** +> +> As of Smarty 3.1 the attribute \$template\_dir is no longer accessible +> directly. Use [`getTemplateDir()`](#api.get.template.dir), +> [`setTemplateDir()`](#api.set.template.dir) and +> [`addTemplateDir()`](#api.add.template.dir) instead. + +See also [`Template Resources`](#resources), +[`$use_include_path`](#variable.use.include.path), +[`getTemplateDir()`](#api.get.template.dir), +[`setTemplateDir()`](#api.set.template.dir) and +[`addTemplateDir()`](#api.add.template.dir). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md new file mode 100644 index 000000000..3d1a308fa --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md @@ -0,0 +1,8 @@ +\$trusted\_dir {#variable.trusted.dir} +============== + +`$trusted_dir` is only for use when security is enabled. This is an +array of all directories that are considered trusted. Trusted +directories are where you keep php scripts that are executed directly +from the templates with +[`{include_php}`](#language.function.include.php). diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md new file mode 100644 index 000000000..103a9767d --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md @@ -0,0 +1,49 @@ +\$use\_include\_path {#variable.use.include.path} +==================== + +This tells smarty to respect the +[include\_path](&url.php-manual;ini.core.php#ini.include-path) within +the [`File Template Resource`](#resources.file) handler and the plugin +loader to resolve the directories known to +[`$template_dir`](#variable.template.dir). The flag also makes the +plugin loader check the include\_path for +[`$plugins_dir`](#variable.plugins.dir). + +> **Note** +> +> You should not design your applications to rely on the include\_path, +> as this may - depending on your implementation - slow down your system +> (and Smarty) considerably. + +If use\_include\_path is enabled, file discovery for +[`$template_dir`](#variable.template.dir) and +[`$plugins_dir`](#variable.plugins.dir) work as follows. + +- For each element `$directory` in array (\$template\_dir or + \$plugins\_dir) do + +- Test if requested file is in `$directory` relative to the [current + working directory](&url.php-manual;function.getcwd.php). If file + found, return it. + +- For each `$path` in include\_path do + +- Test if requested file is in `$directory` relative to the `$path` + (possibly relative to the [current working + directory](&url.php-manual;function.getcwd.php)). If file found, + return it. + +- Try default\_handler or fail. + +This means that whenever a directory/file relative to the current +working directory is encountered, it is preferred over anything +potentially accessible through the include\_path. + +> **Note** +> +> Smarty does not filter elements of the include\_path. That means a +> \".:\" within your include path will trigger the current working +> directory lookup twice. + +See also [`Template Resources`](#resources) and +[`$template_dir`](#variable.template.dir) diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md new file mode 100644 index 000000000..a95ac4159 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md @@ -0,0 +1,31 @@ +\$use\_sub\_dirs {#variable.use.sub.dirs} +================ + +Smarty will create subdirectories under the [compiled +templates](#variable.compile.dir) and [cache](#variable.cache.dir) +directories if `$use_sub_dirs` is set to TRUE, default is FALSE. In an +environment where there are potentially tens of thousands of files +created, this may help the filesystem speed. On the other hand, some +environments do not allow PHP processes to create directories, so this +must be disabled which is the default. + +Sub directories are more efficient, so use them if you can. +Theoretically you get much better perfomance on a filesystem with 10 +directories each having 100 files, than with 1 directory having 1000 +files. This was certainly the case with Solaris 7 (UFS)\... with newer +filesystems such as ext3 and especially reiserfs, the difference is +almost nothing. + +> **Note** +> +> - `$use_sub_dirs=true` doesn\'t work with +> [safe\_mode=On](&url.php-manual;features.safe-mode), that\'s why +> it\'s switchable and why it\'s off by default. +> +> - `$use_sub_dirs=true` on Windows can cause problems. +> +> - Safe\_mode is being deprecated in PHP6. +> +See also [`$compile_id`](#variable.compile.id), +[`$cache_dir`](#variable.cache.dir), and +[`$compile_dir`](#variable.compile.dir). diff --git a/vendor/smarty/smarty/docs/programmers/caching.md b/vendor/smarty/smarty/docs/programmers/caching.md new file mode 100644 index 000000000..5656b71b5 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/caching.md @@ -0,0 +1,24 @@ +Caching +======= + +Caching is used to speed up a call to [`display()`](./api-functions/api-display.md) or +[`fetch()`](./api-functions/api-fetch.md) by saving its output to a file. If a cached +version of the call is available, that is displayed instead of +regenerating the output. Caching can speed things up tremendously, +especially templates with longer computation times. Since the output of +[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) is cached, one +cache file could conceivably be made up of several template files, +config files, etc. + +Since templates are dynamic, it is important to be careful what you are +caching and for how long. For instance, if you are displaying the front +page of your website that does not change its content very often, it +might work well to cache this page for an hour or more. On the other +hand, if you are displaying a page with a timetable containing new +information by the minute, it would not make sense to cache this page. + +## Table of contents +- [Setting Up Caching](./caching/caching-setting-up.md) +- [Multiple Caches Per Page](./caching/caching-multiple-caches.md) +- [Controlling Cacheability of Output](./caching/caching-groups.md) +- [Custom Cache Implementation](./caching/caching-custom.md) diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md b/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md new file mode 100644 index 000000000..ee9b60090 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md @@ -0,0 +1,176 @@ +Controlling Cacheability of Output {#caching.cacheable} +================================== + +If caching is enabled normally the whole final output of the page gets +cached. However Smarty3 offers several options how to exclude sections +of your output from caching. + +> **Note** +> +> Be sure any variables used within a non-cached section are also +> assigned from PHP when the page is loaded from the cache. + +Cacheability of Template Section {#cacheability.sections} +-------------------------------- + +A larger section of your template can easily excluded from caching by +using the [`{nocache}`](#language.function.nocache) and +[`{/nocache}`](#language.function.nocache) tags. + + + + Today's date is + {nocache} + {$smarty.now|date_format} + {/nocache} + + + +The above code will output the current date on a cached page. + +Cacheability of Tags {#cacheability.tags} +-------------------- + +Caching for an individual tag can be disabled by adding the \"nocache\" +option flag to the tag. + + + Today's date is + {$smarty.now|date_format nocache} + + + +Cacheability of Variables {#cacheability.variables} +------------------------- + +You can [`assign()`](#api.assign) variables as not cachable. Any tag +which uses such variable will be automatically executed in nocache mode. + +> **Note** +> +> If a tag is executed in nocache mode you must make sure that all other +> variables used by that tag are also assigned from PHP when the page is +> loaded from the cache. + +> **Note** +> +> The nocache status of an assigned variable will effect the compiled +> template code. If you change the status you must manually delete +> existing compiled and cached template files to force a recompile. + + + // assign $foo as nocahe variable + $smarty->assign('foo',time(),true); + + + Dynamic time value is {$foo} + + + +Cacheability of Plugins {#cacheability.plugins} +----------------------- + +The cacheability of plugins can be declared when registering them. The +third parameter to [`registerPlugin()`](#api.register.plugin) is called +`$cacheable` and defaults to TRUE. + +When registering a plugin with `$cacheable=false` the plugin is called +everytime the page is displayed, even if the page comes from the cache. +The plugin function behaves a little like an +[`{insert}`](#plugins.inserts) function. + +> **Note** +> +> The `$cacheable` status will effect the compiled template code. If you +> change the status you must manually delete existing compiled and +> cached template files to force a recompile. + +In contrast to [`{insert}`](#plugins.inserts) the attributes to the +plugins are not cached by default. They can be declared to be cached +with the fourth parameter `$cache_attrs`. `$cache_attrs` is an array of +attribute-names that should be cached, so the plugin-function get value +as it was the time the page was written to cache everytime it is fetched +from the cache. + + + <?php + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + function remaining_seconds($params, $smarty) { + $remain = $params['endtime'] - time(); + if($remain >= 0){ + return $remain . ' second(s)'; + }else{ + return 'done'; + } + } + + $smarty->registerPlugin('function','remaining', 'remaining_seconds', false, array('endtime')); + + if (!$smarty->isCached('index.tpl')) { + // fetch $obj from db and assign... + $smarty->assignByRef('obj', $obj); + } + + $smarty->display('index.tpl'); + ?> + + + +where `index.tpl` is: + + + Time Remaining: {remaining endtime=$obj->endtime} + + + +The number of seconds till the endtime of `$obj` is reached changes on +each display of the page, even if the page is cached. Since the endtime +attribute is cached the object only has to be pulled from the database +when page is written to the cache but not on subsequent requests of the +page. + + + index.php: + + <?php + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + function smarty_block_dynamic($param, $content, $smarty) { + return $content; + } + $smarty->registerPlugin('block','dynamic', 'smarty_block_dynamic', false); + + $smarty->display('index.tpl'); + ?> + + + +where `index.tpl` is: + + + Page created: {'0'|date_format:'%D %H:%M:%S'} + + {dynamic} + + Now is: {'0'|date_format:'%D %H:%M:%S'} + + ... do other stuff ... + + {/dynamic} + + + +When reloading the page you will notice that both dates differ. One is +"dynamic" one is "static". You can do everything between +`{dynamic}...{/dynamic}` and be sure it will not be cached like the rest +of the page. + +> **Note** +> +> The above example shall just demonstrate how a dynamic block plugins +> works. See +> [`Cacheability of Template Section`](#cacheability.sections) on how to +> disable caching of a template section by the built-in +> [`{nocache}`](#language.function.nocache) and +> [`{/nocache}`](#language.function.nocache) tags. diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md b/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md new file mode 100644 index 000000000..77d2ce7b3 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md @@ -0,0 +1,296 @@ +Custom Cache Implementation {#caching.custom} +=========================== + +As an alternative to using the default file-based caching mechanism, you +can specify a custom cache implementation that will be used to read, +write and clear cached files. + +> **Note** +> +> In Smarty2 this used to be a callback function called +> `$cache_handler_func`. Smarty3 replaced this callback by the +> `Smarty_CacheResource` module. + +With a custom cache implementation you\'re likely trying to achieve at +least one of the following goals: replace the slow filesystem by a +faster storage engine, centralize the cache to be accessible to multiple +servers. + +Smarty allows CacheResource implementations to use one of the APIs +`Smarty_CacheResource_Custom` or `Smarty_CacheResource_KeyValueStore`. +`Smarty_CacheResource_Custom` is a simple API directing all read, write, +clear calls to your implementation. This API allows you to store +wherever and however you deem fit. The +`Smarty_CacheResource_KeyValueStore` API allows you to turn any \"dumb\" +KeyValue-Store (like APC, Memcache, ...) into a full-featured +CacheResource implementation. That is, everything around deep +cache-groups like \"a\|b\|c\" is being handled for you in way that +allows clearing the cache-group \"a\" and all nested groups are cleared +as well - even though KeyValue-Stores don\'t allow this kind of +hierarchy by nature. + +Custom CacheResources may be put in a file `cacheresource.foobarxyz.php` +within your [`$plugins_dir`](#variable.plugins.dir), or registered on +runtime with [`registerCacheResource()`](#api.register.cacheresource). +In either case you need to set [`$caching_type`](#variable.caching.type) +to invoke your custom CacheResource implementation. + + + <?php + + require_once 'libs/Smarty.class.php'; + $smarty = new Smarty(); + $smarty->caching_type = 'mysql'; + + /** + * MySQL CacheResource + * + * CacheResource Implementation based on the Custom API to use + * MySQL as the storage resource for Smarty's output caching. + * + * Table definition: + * <pre>CREATE TABLE IF NOT EXISTS `output_cache` ( + * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash', + * `name` VARCHAR(250) NOT NULL, + * `cache_id` VARCHAR(250) NULL DEFAULT NULL, + * `compile_id` VARCHAR(250) NULL DEFAULT NULL, + * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + * `content` LONGTEXT NOT NULL, + * PRIMARY KEY (`id`), + * INDEX(`name`), + * INDEX(`cache_id`), + * INDEX(`compile_id`), + * INDEX(`modified`) + * ) ENGINE = InnoDB;</pre> + * + * @package CacheResource-examples + * @author Rodney Rehm + */ + class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom { + // PDO instance + protected $db; + protected $fetch; + protected $fetchTimestamp; + protected $save; + + public function __construct() { + try { + $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty"); + } catch (PDOException $e) { + throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); + } + $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id'); + $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id'); + $this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content) + VALUES (:id, :name, :cache_id, :compile_id, :content)'); + } + + /** + * fetch cached content and its modification time from data source + * + * @param string $id unique cache content identifier + * @param string $name template name + * @param string $cache_id cache id + * @param string $compile_id compile id + * @param string $content cached content + * @param integer $mtime cache modification timestamp (epoch) + * @return void + */ + protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime) + { + $this->fetch->execute(array('id' => $id)); + $row = $this->fetch->fetch(); + $this->fetch->closeCursor(); + if ($row) { + $content = $row['content']; + $mtime = strtotime($row['modified']); + } else { + $content = null; + $mtime = null; + } + } + + /** + * Fetch cached content's modification timestamp from data source + * + * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the complete cached content. + * @param string $id unique cache content identifier + * @param string $name template name + * @param string $cache_id cache id + * @param string $compile_id compile id + * @return integer|boolean timestamp (epoch) the template was modified, or false if not found + */ + protected function fetchTimestamp($id, $name, $cache_id, $compile_id) + { + $this->fetchTimestamp->execute(array('id' => $id)); + $mtime = strtotime($this->fetchTimestamp->fetchColumn()); + $this->fetchTimestamp->closeCursor(); + return $mtime; + } + + /** + * Save content to cache + * + * @param string $id unique cache content identifier + * @param string $name template name + * @param string $cache_id cache id + * @param string $compile_id compile id + * @param integer|null $exp_time seconds till expiration time in seconds or null + * @param string $content content to cache + * @return boolean success + */ + protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content) + { + $this->save->execute(array( + 'id' => $id, + 'name' => $name, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id, + 'content' => $content, + )); + return !!$this->save->rowCount(); + } + + /** + * Delete content from cache + * + * @param string $name template name + * @param string $cache_id cache id + * @param string $compile_id compile id + * @param integer|null $exp_time seconds till expiration or null + * @return integer number of deleted caches + */ + protected function delete($name, $cache_id, $compile_id, $exp_time) + { + // delete the whole cache + if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) { + // returning the number of deleted caches would require a second query to count them + $query = $this->db->query('TRUNCATE TABLE output_cache'); + return -1; + } + // build the filter + $where = array(); + // equal test name + if ($name !== null) { + $where[] = 'name = ' . $this->db->quote($name); + } + // equal test compile_id + if ($compile_id !== null) { + $where[] = 'compile_id = ' . $this->db->quote($compile_id); + } + // range test expiration time + if ($exp_time !== null) { + $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)'; + } + // equal test cache_id and match sub-groups + if ($cache_id !== null) { + $where[] = '(cache_id = '. $this->db->quote($cache_id) + . ' OR cache_id LIKE '. $this->db->quote($cache_id .'|%') .')'; + } + // run delete query + $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where)); + return $query->rowCount(); + } + } + + + + + <?php + + require_once 'libs/Smarty.class.php'; + $smarty = new Smarty(); + $smarty->caching_type = 'memcache'; + + /** + * Memcache CacheResource + * + * CacheResource Implementation based on the KeyValueStore API to use + * memcache as the storage resource for Smarty's output caching. + * + * Note that memcache has a limitation of 256 characters per cache-key. + * To avoid complications all cache-keys are translated to a sha1 hash. + * + * @package CacheResource-examples + * @author Rodney Rehm + */ + class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore { + /** + * memcache instance + * @var Memcache + */ + protected $memcache = null; + + public function __construct() + { + $this->memcache = new Memcache(); + $this->memcache->addServer( '127.0.0.1', 11211 ); + } + + /** + * Read values for a set of keys from cache + * + * @param array $keys list of keys to fetch + * @return array list of values with the given keys used as indexes + * @return boolean true on success, false on failure + */ + protected function read(array $keys) + { + $_keys = $lookup = array(); + foreach ($keys as $k) { + $_k = sha1($k); + $_keys[] = $_k; + $lookup[$_k] = $k; + } + $_res = array(); + $res = $this->memcache->get($_keys); + foreach ($res as $k => $v) { + $_res[$lookup[$k]] = $v; + } + return $_res; + } + + /** + * Save values for a set of keys to cache + * + * @param array $keys list of values to save + * @param int $expire expiration time + * @return boolean true on success, false on failure + */ + protected function write(array $keys, $expire=null) + { + foreach ($keys as $k => $v) { + $k = sha1($k); + $this->memcache->set($k, $v, 0, $expire); + } + return true; + } + + /** + * Remove values from cache + * + * @param array $keys list of keys to delete + * @return boolean true on success, false on failure + */ + protected function delete(array $keys) + { + foreach ($keys as $k) { + $k = sha1($k); + $this->memcache->delete($k); + } + return true; + } + + /** + * Remove *all* values from cache + * + * @return boolean true on success, false on failure + */ + protected function purge() + { + return $this->memcache->flush(); + } + } + + + diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md b/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md new file mode 100644 index 000000000..98e5d45c1 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md @@ -0,0 +1,60 @@ +Cache Groups {#caching.groups} +============ + +You can do more elaborate grouping by setting up `$cache_id` groups. +This is accomplished by separating each sub-group with a vertical bar +`|` in the `$cache_id` value. You can have as many sub-groups as you +like. + +- You can think of cache groups like a directory hierarchy. For + instance, a cache group of `'a|b|c'` could be thought of as the + directory structure `'/a/b/c/'`. + +- `clearCache(null,'a|b|c')` would be like removing the files + `'/a/b/c/*'`. `clearCache(null,'a|b')` would be like removing the + files `'/a/b/*'`. + +- If you specify a [`$compile_id`](#variable.compile.id) such as + `clearCache(null,'a|b','foo')` it is treated as an appended cache + group `'/a/b/c/foo/'`. + +- If you specify a template name such as + `clearCache('foo.tpl','a|b|c')` then Smarty will attempt to remove + `'/a/b/c/foo.tpl'`. + +- You CANNOT remove a specified template name under multiple cache + groups such as `'/a/b/*/foo.tpl'`, the cache grouping works + left-to-right ONLY. You will need to group your templates under a + single cache group heirarchy to be able to clear them as a group. + +Cache grouping should not be confused with your template directory +heirarchy, the cache grouping has no knowledge of how your templates are +structured. So for example, if you have a template structure like +`themes/blue/index.tpl` and you want to be able to clear all the cache +files for the "blue" theme, you will need to create a cache group +structure that mimics your template file structure, such as +`display('themes/blue/index.tpl','themes|blue')`, then clear them with +`clearCache(null,'themes|blue')`. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + // clear all caches with 'sports|basketball' as the first two cache_id groups + $smarty->clearCache(null,'sports|basketball'); + + // clear all caches with "sports" as the first cache_id group. This would + // include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..." + $smarty->clearCache(null,'sports'); + + // clear the foo.tpl cache file with "sports|basketball" as the cache_id + $smarty->clearCache('foo.tpl','sports|basketball'); + + + $smarty->display('index.tpl','sports|basketball'); + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md b/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md new file mode 100644 index 000000000..40fffc3d7 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md @@ -0,0 +1,87 @@ +Multiple Caches Per Page {#caching.multiple.caches} +======================== + +You can have multiple cache files for a single call to +[`display()`](#api.display) or [`fetch()`](#api.fetch). Let\'s say that +a call to `display('index.tpl')` may have several different output +contents depending on some condition, and you want separate caches for +each one. You can do this by passing a `$cache_id` as the second +parameter to the function call. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + $my_cache_id = $_GET['article_id']; + + $smarty->display('index.tpl', $my_cache_id); + ?> + + + +Above, we are passing the variable `$my_cache_id` to +[`display()`](#api.display) as the `$cache_id`. For each unique value of +`$my_cache_id`, a separate cache will be generated for `index.tpl`. In +this example, `article_id` was passed in the URL and is used as the +`$cache_id`. + +> **Note** +> +> Be very cautious when passing values from a client (web browser) into +> Smarty or any PHP application. Although the above example of using the +> article\_id from the URL looks handy, it could have bad consequences. +> The `$cache_id` is used to create a directory on the file system, so +> if the user decided to pass an extremely large value for article\_id, +> or write a script that sends random article\_id\'s at a rapid pace, +> this could possibly cause problems at the server level. Be sure to +> sanitize any data passed in before using it. In this instance, maybe +> you know the article\_id has a length of ten characters and is made up +> of alpha-numerics only, and must be a valid article\_id in the +> database. Check for this! + +Be sure to pass the same `$cache_id` as the second parameter to +[`isCached()`](#api.is.cached) and [`clearCache()`](#api.clear.cache). + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + $my_cache_id = $_GET['article_id']; + + if(!$smarty->isCached('index.tpl',$my_cache_id)) { + // No cache available, do variable assignments here. + $contents = get_database_contents(); + $smarty->assign($contents); + } + + $smarty->display('index.tpl',$my_cache_id); + ?> + + + +You can clear all caches for a particular `$cache_id` by passing NULL as +the first parameter to [`clearCache()`](#api.clear.cache). + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + // clear all caches with "sports" as the $cache_id + $smarty->clearCache(null,'sports'); + + $smarty->display('index.tpl','sports'); + ?> + + + +In this manner, you can "group" your caches together by giving them the +same `$cache_id`. diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md b/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md new file mode 100644 index 000000000..bc9d2ad9e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md @@ -0,0 +1,153 @@ +Setting Up Caching {#caching.setting.up} +================== + +The first thing to do is enable caching by setting +[`$caching`](#variable.caching) to one of +`Smarty::CACHING_LIFETIME_CURRENT` or `Smarty::CACHING_LIFETIME_SAVED`. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + // uses the value of $smarty->cacheLifetime() to determine + // the number of seconds a cache is good for + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + $smarty->display('index.tpl'); + ?> + + + +With caching enabled, the function call to `display('index.tpl')` will +render the template as usual, but also saves a copy of its output to a +file (a cached copy) in the [`$cache_dir`](#variable.cache.dir). On the +next call to `display('index.tpl')`, the cached copy will be used +instead of rendering the template again. + +> **Note** +> +> The files in the [`$cache_dir`](#variable.cache.dir) are named similar +> to the template name. Although they end in the `.php` extension, they +> are not intended to be directly executable. Do not edit these files! + +Each cached page has a limited lifetime determined by +[`$cache_lifetime`](#variable.cache.lifetime). The default value is 3600 +seconds, or one hour. After that time expires, the cache is regenerated. +It is possible to give individual caches their own expiration time by +setting [`$caching`](#variable.caching) to +`Smarty::CACHING_LIFETIME_SAVED`. See +[`$cache_lifetime`](#variable.cache.lifetime) for more details. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + // retain current cache lifetime for each specific display call + $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED); + + // set the cache_lifetime for index.tpl to 5 minutes + $smarty->setCacheLifetime(300); + $smarty->display('index.tpl'); + + // set the cache_lifetime for home.tpl to 1 hour + $smarty->setCacheLifetime(3600); + $smarty->display('home.tpl'); + + // NOTE: the following $cache_lifetime setting will not work when $caching + // is set to Smarty::CACHING_LIFETIME_SAVED. + // The cache lifetime for home.tpl has already been set + // to 1 hour, and will no longer respect the value of $cache_lifetime. + // The home.tpl cache will still expire after 1 hour. + $smarty->setCacheLifetime(30); // 30 seconds + $smarty->display('home.tpl'); + ?> + + + +If [`$compile_check`](#variable.compile.check) is enabled (default), +every template file and config file that is involved with the cache file +is checked for modification. If any of the files have been modified +since the cache was generated, the cache is immediately regenerated. +This is a computational overhead, so for optimum performance set +[`$compile_check`](#variable.compile.check) to FALSE. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + $smarty->setCompileCheck(false); + + $smarty->display('index.tpl'); + ?> + + + +If [`$force_compile`](#variable.force.compile) is enabled, the cache +files will always be regenerated. This effectively disables caching, +however this also seriously degrades performance. +[`$force_compile`](#variable.force.compile) is meant to be used for +[debugging](#chapter.debugging.console) purposes. The appropriate way to +disable caching is to set [`$caching`](#variable.caching) to +Smarty::CACHING\_OFF. + +The [`isCached()`](#api.is.cached) function can be used to test if a +template has a valid cache or not. If you have a cached template that +requires something like a database fetch, you can use this to skip that +process. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + if(!$smarty->isCached('index.tpl')) { + // No cache available, do variable assignments here. + $contents = get_database_contents(); + $smarty->assign($contents); + } + + $smarty->display('index.tpl'); + ?> + + + +You can keep parts of a page dynamic (disable caching) with the +[`{nocache}{/nocache}`](#language.function.nocache) block function, the +[`{insert}`](#language.function.insert) function, or by using the +`nocache` parameter for most template functions. + +Let\'s say the whole page can be cached except for a banner that is +displayed down the side of the page. By using the +[`{insert}`](#language.function.insert) function for the banner, you can +keep this element dynamic within the cached content. See the +documentation on [`{insert}`](#language.function.insert) for more +details and examples. + +You can clear all the cache files with the +[`clearAllCache()`](#api.clear.all.cache) function, or individual cache +files [and groups](#caching.groups) with the +[`clearCache()`](#api.clear.cache) function. + + + <?php + require('Smarty.class.php'); + $smarty = new Smarty; + + $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); + + // clear only cache for index.tpl + $smarty->clearCache('index.tpl'); + + // clear out all cache files + $smarty->clearAllCache(); + + $smarty->display('index.tpl'); + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/charset.md b/vendor/smarty/smarty/docs/programmers/charset.md new file mode 100644 index 000000000..72842b3f7 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/charset.md @@ -0,0 +1,43 @@ +Charset Encoding {#charset} +================ + +Charset Encoding {#charset.encoding} +================ + +There are a variety of encodings for textual data, ISO-8859-1 (Latin1) +and UTF-8 being the most popular. Unless specified otherwise with the +`SMARTY_RESOURCE_CHAR_SET` constant, Smarty recognizes `UTF-8` as the +internal charset if [Multibyte String](https://www.php.net/mbstring) is +available, `ISO-8859-1` if not. + +> **Note** +> +> `ISO-8859-1` has been PHP\'s default internal charset since the +> beginning. Unicode has been evolving since 1991. Since then it has +> become the one charset to conquer them all, as it is capable of +> encoding most of the known characters even accross different character +> systems (latin, cyrillic, japanese, ...). `UTF-8` is unicode\'s most +> used encoding, as it allows referencing the thousands of character +> with the smallest size overhead possible. +> +> Since unicode and UTF-8 are very wide spread nowadays, their use is +> strongly encouraged. + +> **Note** +> +> Smarty\'s internals and core plugins are truly UTF-8 compatible since +> Smarty 3.1. To achieve unicode compatibility, the [Multibyte +> String](https://www.php.net/mbstring) PECL is required. Unless your PHP +> environment offers this package, Smarty will not be able to offer +> full-scale UTF-8 compatibility. + + + // use japanese character encoding + if (function_exists('mb_internal_charset')) { + mb_internal_charset('EUC-JP'); + } + define('SMARTY_RESOURCE_CHAR_SET', 'EUC-JP'); + require_once 'libs/Smarty.class.php'; + $smarty = new Smarty(); + + diff --git a/vendor/smarty/smarty/docs/programmers/plugins.md b/vendor/smarty/smarty/docs/programmers/plugins.md new file mode 100644 index 000000000..41a7ea0c4 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins.md @@ -0,0 +1,44 @@ +Extending Smarty With Plugins {#plugins} +============================= + +## Table of contents + +- [How Plugins Work](./plugins/plugins-howto.md) +- [Naming Conventions](./plugins/plugins-naming-conventions.md) +- [Writing Plugins](./plugins/plugins-writing.md) +- [Template Functions](./plugins/plugins-functions.md) +- [Modifiers](./plugins/plugins-modifiers.md) +- [Block Functions](./plugins/plugins-block-functions.md) +- [Compiler Functions](./plugins/plugins-compiler-functions.md) +- [Prefilters/Postfilters](./plugins/plugins-prefilters-postfilters.md) +- [Output Filters](./plugins/plugins-outputfilters.md) +- [Resources](./plugins/plugins-resources.md) +- [Inserts](./plugins/plugins-inserts.md) + +Version 2.0 introduced the plugin architecture that is used for almost +all the customizable functionality of Smarty. This includes: + +- functions + +- modifiers + +- block functions + +- compiler functions + +- prefilters + +- postfilters + +- outputfilters + +- resources + +- inserts + +With the exception of resources, backwards compatibility with the old +way of registering handler functions via register\_\* API is preserved. +If you did not use the API but instead modified the class variables +`$custom_funcs`, `$custom_mods`, and other ones directly, then you will +need to adjust your scripts to either use the API or convert your custom +functionality into plugins. diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md new file mode 100644 index 000000000..47281fef5 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md @@ -0,0 +1,95 @@ +Block Functions {#plugins.block.functions} +=============== + +void + +smarty\_block\_ + +name + +array + +\$params + +mixed + +\$content + +object + +\$template + +boolean + +&\$repeat + +Block functions are functions of the form: `{func} .. {/func}`. In other +words, they enclose a template block and operate on the contents of this +block. Block functions take precedence over [custom +functions](#language.custom.functions) of the same name, that is, you +cannot have both custom function `{func}` and block function +`{func}..{/func}`. + +- By default your function implementation is called twice by Smarty: + once for the opening tag, and once for the closing tag. (See + `$repeat` below on how to change this.) + +- Starting with Smarty 3.1 the returned value of the opening tag call + is displayed as well. + +- Only the opening tag of the block function may have + [attributes](#language.syntax.attributes). All attributes passed to + template functions from the template are contained in the `$params` + variable as an associative array. The opening tag attributes are + also accessible to your function when processing the closing tag. + +- The value of the `$content` variable depends on whether your + function is called for the opening or closing tag. In case of the + opening tag, it will be NULL, and in case of the closing tag it will + be the contents of the template block. Note that the template block + will have already been processed by Smarty, so all you will receive + is the template output, not the template source. + +- The parameter `$repeat` is passed by reference to the function + implementation and provides a possibility for it to control how many + times the block is displayed. By default `$repeat` is TRUE at the + first call of the block-function (the opening tag) and FALSE on all + subsequent calls to the block function (the block\'s closing tag). + Each time the function implementation returns with `$repeat` being + TRUE, the contents between `{func}...{/func}` are evaluated and the + function implementation is called again with the new block contents + in the parameter `$content`. + +If you have nested block functions, it\'s possible to find out what the +parent block function is by accessing `$smarty->_tag_stack` variable. +Just do a [`var_dump()`](&url.php-manual;var_dump) on it and the +structure should be apparent. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: block.translate.php + * Type: block + * Name: translate + * Purpose: translate a block of text + * ------------------------------------------------------------- + */ + function smarty_block_translate($params, $content, Smarty_Internal_Template $template, &$repeat) + { + // only output on the closing tag + if(!$repeat){ + if (isset($content)) { + $lang = $params['lang']; + // do some intelligent translation thing here with $content + return $translation; + } + } + } + ?> + + + +See also: [`registerPlugin()`](#api.register.plugin), +[`unregisterPlugin()`](#api.unregister.plugin). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md new file mode 100644 index 000000000..ef2454e8a --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md @@ -0,0 +1,66 @@ +Compiler Functions {#plugins.compiler.functions} +================== + +Compiler functions are called only during compilation of the template. +They are useful for injecting PHP code or time-sensitive static content +into the template. If there is both a compiler function and a [custom +function](#language.custom.functions) registered under the same name, +the compiler function has precedence. + +mixed + +smarty\_compiler\_ + +name + +array + +\$params + +object + +\$smarty + +The compiler function is passed two parameters: the params array which +contains precompiled strings for the attribute values and the Smarty +object. It\'s supposed to return the code to be injected into the +compiled template including the surrounding PHP tags. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: compiler.tplheader.php + * Type: compiler + * Name: tplheader + * Purpose: Output header containing the source file name and + * the time it was compiled. + * ------------------------------------------------------------- + */ + function smarty_compiler_tplheader($params, Smarty $smarty) + { + return "<?php\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';\n?>"; + } + ?> + +This function can be called from the template as: + + + {* this function gets executed at compile time only *} + {tplheader} + + + +The resulting PHP code in the compiled template would be something like +this: + + + <?php + echo 'index.tpl compiled at 2002-02-20 20:02'; + ?> + + + +See also [`registerPlugin()`](#api.register.plugin), +[`unregisterPlugin()`](#api.unregister.plugin). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md new file mode 100644 index 000000000..067b93826 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md @@ -0,0 +1,94 @@ +Template Functions {#plugins.functions} +================== + +void + +smarty\_function\_ + +name + +array + +\$params + +object + +\$template + +All [attributes](#language.syntax.attributes) passed to template +functions from the template are contained in the `$params` as an +associative array. + +The output (return value) of the function will be substituted in place +of the function tag in the template, eg the +[`{fetch}`](#language.function.fetch) function. Alternatively, the +function can simply perform some other task without any output, eg the +[`{assign}`](#language.function.assign) function. + +If the function needs to assign some variables to the template or use +some other Smarty-provided functionality, it can use the supplied +`$template` object to do so eg `$template->foo()`. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: function.eightball.php + * Type: function + * Name: eightball + * Purpose: outputs a random magic answer + * ------------------------------------------------------------- + */ + function smarty_function_eightball($params, Smarty_Internal_Template $template) + { + $answers = array('Yes', + 'No', + 'No way', + 'Outlook not so good', + 'Ask again soon', + 'Maybe in your reality'); + + $result = array_rand($answers); + return $answers[$result]; + } + ?> + +which can be used in the template as: + + Question: Will we ever have time travel? + Answer: {eightball}. + + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: function.assign.php + * Type: function + * Name: assign + * Purpose: assign a value to a template variable + * ------------------------------------------------------------- + */ + function smarty_function_assign($params, Smarty_Internal_Template $template) + { + if (empty($params['var'])) { + trigger_error("assign: missing 'var' parameter"); + return; + } + + if (!in_array('value', array_keys($params))) { + trigger_error("assign: missing 'value' parameter"); + return; + } + + $template->assign($params['var'], $params['value']); + + } + ?> + + + +See also: [`registerPlugin()`](#api.register.plugin), +[`unregisterPlugin()`](#api.unregister.plugin). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md new file mode 100644 index 000000000..5738c3fcb --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md @@ -0,0 +1,18 @@ +How Plugins Work {#plugins.howto} +================ + +Plugins are always loaded on demand. Only the specific modifiers, +functions, resources, etc invoked in the templates scripts will be +loaded. Moreover, each plugin is loaded only once, even if you have +several different instances of Smarty running within the same request. + +Pre/postfilters and output filters are a bit of a special case. Since +they are not mentioned in the templates, they must be registered or +loaded explicitly via API functions before the template is processed. +The order in which multiple filters of the same type are executed +depends on the order in which they are registered or loaded. + +The [plugins directory](#variable.plugins.dir) can be a string +containing a path or an array containing multiple paths. To install a +plugin, simply place it in one of the directories and Smarty will use it +automatically. diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md new file mode 100644 index 000000000..370a97bd0 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md @@ -0,0 +1,48 @@ +Inserts {#plugins.inserts} +======= + +Insert plugins are used to implement functions that are invoked by +[`{insert}`](#language.function.insert) tags in the template. + +string + +smarty\_insert\_ + +name + +array + +\$params + +object + +\$template + +The first parameter to the function is an associative array of +attributes passed to the insert. + +The insert function is supposed to return the result which will be +substituted in place of the `{insert}` tag in the template. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: insert.time.php + * Type: time + * Name: time + * Purpose: Inserts current date/time according to format + * ------------------------------------------------------------- + */ + function smarty_insert_time($params, Smarty_Internal_Template $template) + { + if (empty($params['format'])) { + trigger_error("insert time: missing 'format' parameter"); + return; + } + return strftime($params['format']); + } + ?> + + diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md new file mode 100644 index 000000000..b089821a6 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md @@ -0,0 +1,86 @@ +Modifiers {#plugins.modifiers} +========= + +[Modifiers](#language.modifiers) are little functions that are applied +to a variable in the template before it is displayed or used in some +other context. Modifiers can be chained together. + +mixed + +smarty\_modifier\_ + +name + +mixed + +\$value + +\[mixed + +\$param1 + +, \...\] + +The first parameter to the modifier plugin is the value on which the +modifier is to operate. The rest of the parameters are optional, +depending on what kind of operation is to be performed. + +The modifier has to [return](&url.php-manual;return) the result of its +processing. + +This plugin basically aliases one of the built-in PHP functions. It does +not have any additional parameters. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: modifier.capitalize.php + * Type: modifier + * Name: capitalize + * Purpose: capitalize words in the string + * ------------------------------------------------------------- + */ + function smarty_modifier_capitalize($string) + { + return ucwords($string); + } + ?> + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: modifier.truncate.php + * Type: modifier + * Name: truncate + * Purpose: Truncate a string to a certain length if necessary, + * optionally splitting in the middle of a word, and + * appending the $etc string. + * ------------------------------------------------------------- + */ + function smarty_modifier_truncate($string, $length = 80, $etc = '...', + $break_words = false) + { + if ($length == 0) + return ''; + + if (strlen($string) > $length) { + $length -= strlen($etc); + $fragment = substr($string, 0, $length+1); + if ($break_words) + $fragment = substr($fragment, 0, -1); + else + $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment); + return $fragment.$etc; + } else + return $string; + } + ?> + + + +See also [`registerPlugin()`](#api.register.plugin), +[`unregisterPlugin()`](#api.unregister.plugin). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md new file mode 100644 index 000000000..28bbcfde8 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md @@ -0,0 +1,51 @@ +Naming Conventions {#plugins.naming.conventions} +================== + +Plugin files and functions must follow a very specific naming convention +in order to be located by Smarty. + +**plugin files** must be named as follows: + +> ` +> type.name.php +> ` + +- Where `type` is one of these plugin types: + + - function + + - modifier + + - block + + - compiler + + - prefilter + + - postfilter + + - outputfilter + + - resource + + - insert + +- And `name` should be a valid identifier; letters, numbers, and + underscores only, see [php + variables](&url.php-manual;language.variables). + +- Some examples: `function.html_select_date.php`, `resource.db.php`, + `modifier.spacify.php`. + +**plugin functions** inside the PHP files must be named as follows: + +> `smarty_type_name` + +- The meanings of `type` and `name` are the same as above. + +- An example modifier name `foo` would be + `function smarty_modifier_foo()`. + +Smarty will output appropriate error messages if the plugin file it +needs is not found, or if the file or the plugin function are named +improperly. diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md new file mode 100644 index 000000000..4e34ab7eb --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md @@ -0,0 +1,48 @@ +Output Filters {#plugins.outputfilters} +============== + +Output filter plugins operate on a template\'s output, after the +template is loaded and executed, but before the output is displayed. + +string + +smarty\_outputfilter\_ + +name + +string + +\$template\_output + +object + +\$template + +The first parameter to the output filter function is the template output +that needs to be processed, and the second parameter is the instance of +Smarty invoking the plugin. The plugin is supposed to do the processing +and return the results. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: outputfilter.protect_email.php + * Type: outputfilter + * Name: protect_email + * Purpose: Converts @ sign in email addresses to %40 as + * a simple protection against spambots + * ------------------------------------------------------------- + */ + function smarty_outputfilter_protect_email($output, Smarty_Internal_Template $template) + { + return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', + '$1%40$2', $output); + } + ?> + + + +See also [`registerFilter()`](#api.register.filter), +[`unregisterFilter()`](#api.unregister.filter). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md new file mode 100644 index 000000000..39467cbcb --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md @@ -0,0 +1,89 @@ +Prefilters/Postfilters {#plugins.prefilters.postfilters} +====================== + +Prefilter and postfilter plugins are very similar in concept; where they +differ is in the execution \-- more precisely the time of their +execution. + +string + +smarty\_prefilter\_ + +name + +string + +\$source + +object + +\$template + +Prefilters are used to process the source of the template immediately +before compilation. The first parameter to the prefilter function is the +template source, possibly modified by some other prefilters. The plugin +is supposed to return the modified source. Note that this source is not +saved anywhere, it is only used for compilation. + +string + +smarty\_postfilter\_ + +name + +string + +\$compiled + +object + +\$template + +Postfilters are used to process the compiled output of the template (the +PHP code) immediately after the compilation is done but before the +compiled template is saved to the filesystem. The first parameter to the +postfilter function is the compiled template code, possibly modified by +other postfilters. The plugin is supposed to return the modified version +of this code. + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: prefilter.pre01.php + * Type: prefilter + * Name: pre01 + * Purpose: Convert html tags to be lowercase. + * ------------------------------------------------------------- + */ + function smarty_prefilter_pre01($source, Smarty_Internal_Template $template) + { + return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source); + } + ?> + + + + + <?php + /* + * Smarty plugin + * ------------------------------------------------------------- + * File: postfilter.post01.php + * Type: postfilter + * Name: post01 + * Purpose: Output code that lists all current template vars. + * ------------------------------------------------------------- + */ + function smarty_postfilter_post01($compiled, Smarty_Internal_Template $template) + { + $compiled = "<pre>\n<?php print_r(\$template->getTemplateVars()); ?>\n</pre>" . $compiled; + return $compiled; + } + ?> + + + +See also [`registerFilter()`](#api.register.filter) and +[`unregisterFilter()`](#api.unregister.filter). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md new file mode 100644 index 000000000..1b1fdf0ab --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md @@ -0,0 +1,128 @@ +Resources {#plugins.resources} +========= + +Resource plugins are meant as a generic way of providing template +sources or PHP script components to Smarty. Some examples of resources: +databases, LDAP, shared memory, sockets, and so on. + +Custom Resources may be put in a file `resource.foobarxyz.php` within +your [`$plugins_dir`](#variable.plugins.dir), or registered on runtime +with [`registerResource()`](#api.register.resource). In either case you +will be able to access that resource by prepending its name to the +template you\'re addressing: `foobarxyz:yourtemplate.tpl`. + +If a Resource\'s templates should not be run through the Smarty +compiler, the Custom Resource may extend `Smarty_Resource_Uncompiled`. +The Resource Handler must then implement the function +`renderUncompiled(Smarty_Internal_Template $_template)`. `$_template` is +a reference to the current template and contains all assigned variables +which the implementor can access via +`$_template->smarty->getTemplateVars()`. These Resources simply echo +their rendered content to the output stream. The rendered output will be +output-cached if the Smarty instance was configured accordingly. See +`libs/sysplugins/smarty_internal_resource_php.php` for an example. + +If the Resource\'s compiled templates should not be cached on disk, the +Custom Resource may extend `Smarty_Resource_Recompiled`. These Resources +are compiled every time they are accessed. This may be an expensive +overhead. See `libs/sysplugins/smarty_internal_resource_eval.php` for an +example. + + + <?php + + /** + * MySQL Resource + * + * Resource Implementation based on the Custom API to use + * MySQL as the storage resource for Smarty's templates and configs. + * + * Table definition: + * <pre>CREATE TABLE IF NOT EXISTS `templates` ( + * `name` varchar(100) NOT NULL, + * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + * `source` text, + * PRIMARY KEY (`name`) + * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> + * + * Demo data: + * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> + * + * @package Resource-examples + * @author Rodney Rehm + */ + class Smarty_Resource_Mysql extends Smarty_Resource_Custom { + // PDO instance + protected $db; + // prepared fetch() statement + protected $fetch; + // prepared fetchTimestamp() statement + protected $mtime; + + public function __construct() { + try { + $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty"); + } catch (PDOException $e) { + throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); + } + $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); + $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); + } + + /** + * Fetch a template and its modification time from database + * + * @param string $name template name + * @param string $source template source + * @param integer $mtime template modification timestamp (epoch) + * @return void + */ + protected function fetch($name, &$source, &$mtime) + { + $this->fetch->execute(array('name' => $name)); + $row = $this->fetch->fetch(); + $this->fetch->closeCursor(); + if ($row) { + $source = $row['source']; + $mtime = strtotime($row['modified']); + } else { + $source = null; + $mtime = null; + } + } + + /** + * Fetch a template's modification time from database + * + * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source. + * @param string $name template name + * @return integer timestamp (epoch) the template was modified + */ + protected function fetchTimestamp($name) { + $this->mtime->execute(array('name' => $name)); + $mtime = $this->mtime->fetchColumn(); + $this->mtime->closeCursor(); + return strtotime($mtime); + } + } + + + require_once 'libs/Smarty.class.php'; + $smarty = new Smarty(); + $smarty->registerResource('mysql', new Smarty_Resource_Mysql()); + + // using resource from php script + $smarty->display("mysql:index.tpl"); + ?> + + + +And from within Smarty template: + + + {include file='mysql:extras/navigation.tpl'} + + + +See also [`registerResource()`](#api.register.resource), +[`unregisterResource()`](#api.unregister.resource). diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md new file mode 100644 index 000000000..972911d97 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md @@ -0,0 +1,36 @@ +Writing Plugins {#plugins.writing} +=============== + +Plugins can be either loaded by Smarty automatically from the filesystem +or they can be registered at runtime via one of the register\_\* API +functions. They can also be unregistered by using unregister\_\* API +functions. + +For the plugins that are registered at runtime, the name of the plugin +function(s) does not have to follow the naming convention. + +If a plugin depends on some functionality provided by another plugin (as +is the case with some plugins bundled with Smarty), then the proper way +to load the needed plugin is this: + + + <?php + function smarty_function_yourPlugin(array $params, Smarty_Internal_Template $template) + { + // load plugin depended upon + $template->smarty->loadPlugin('smarty_shared_make_timestamp'); + // plugin code + } + ?> + + + +As a general rule, the currently evaluated template\'s +Smarty\_Internal\_Template object is always passed to the plugins as the +last parameter with two exceptions: + +- modifiers do not get passed the Smarty\_Internal\_Template object at + all + +- blocks get passed `$repeat` after the Smarty\_Internal\_Template + object to keep backwards compatibility to older versions of Smarty. diff --git a/vendor/smarty/smarty/docs/programmers/resources.md b/vendor/smarty/smarty/docs/programmers/resources.md new file mode 100644 index 000000000..239690061 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources.md @@ -0,0 +1,19 @@ +Resources +========= + +The templates may come from a variety of sources. When you +[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) a template, or +when you include a template from within another template, you supply a +resource type, followed by the appropriate path and template name. If a +resource is not explicitly given, the value of +[`$default_resource_type`](./api-variables/variable-default-resource-type.md) (default: +\"file\") is assumed. + +## Table of contents + +- [File Template Resources](./resources/resources-file.md) +- [String Template Resources](./resources/resources-string.md) +- [Stream Template Resources](./resources/resources-streams.md) +- [Extends Template Resources](./resources/resources-extends.md) +- [Custom Template Resources](./resources/resources-custom.md) + diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md b/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md new file mode 100644 index 000000000..d679afcb1 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md @@ -0,0 +1,111 @@ +Custom Template Resources {#resources.custom} +========================= + +You can retrieve templates using whatever possible source you can access +with PHP: databases, sockets, files, etc. You do this by writing +resource plugin functions and registering them with Smarty. + +See [resource plugins](#plugins.resources) section for more information +on the functions you are supposed to provide. + +> **Note** +> +> Note that you cannot override the built-in `file:` resource, but you +> can provide a resource that fetches templates from the file system in +> some other way by registering under another resource name. + + + <?php + + /** + * MySQL Resource + * + * Resource Implementation based on the Custom API to use + * MySQL as the storage resource for Smarty's templates and configs. + * + * Table definition: + * <pre>CREATE TABLE IF NOT EXISTS `templates` ( + * `name` varchar(100) NOT NULL, + * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + * `source` text, + * PRIMARY KEY (`name`) + * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> + * + * Demo data: + * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> + * + * @package Resource-examples + * @author Rodney Rehm + */ + class Smarty_Resource_Mysql extends Smarty_Resource_Custom { + // PDO instance + protected $db; + // prepared fetch() statement + protected $fetch; + // prepared fetchTimestamp() statement + protected $mtime; + + public function __construct() { + try { + $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty"); + } catch (PDOException $e) { + throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); + } + $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); + $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); + } + + /** + * Fetch a template and its modification time from database + * + * @param string $name template name + * @param string $source template source + * @param integer $mtime template modification timestamp (epoch) + * @return void + */ + protected function fetch($name, &$source, &$mtime) + { + $this->fetch->execute(array('name' => $name)); + $row = $this->fetch->fetch(); + $this->fetch->closeCursor(); + if ($row) { + $source = $row['source']; + $mtime = strtotime($row['modified']); + } else { + $source = null; + $mtime = null; + } + } + + /** + * Fetch a template's modification time from database + * + * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source. + * @param string $name template name + * @return integer timestamp (epoch) the template was modified + */ + protected function fetchTimestamp($name) { + $this->mtime->execute(array('name' => $name)); + $mtime = $this->mtime->fetchColumn(); + $this->mtime->closeCursor(); + return strtotime($mtime); + } + } + + + require_once 'libs/Smarty.class.php'; + $smarty = new Smarty(); + $smarty->registerResource('mysql', new Smarty_Resource_Mysql()); + + // using resource from php script + $smarty->display("mysql:index.tpl"); + ?> + + + +And from within Smarty template: + + + {include file='mysql:extras/navigation.tpl'} + + diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md b/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md new file mode 100644 index 000000000..ad2e8f5d8 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md @@ -0,0 +1,36 @@ +Extends Template Resources {#resources.extends} +========================== + +The `extends:` resource is used to define child/parent relationships for +template inheritance from the PHP script. For details see section of +[Template Interitance](#advanced.features.template.inheritance). + +As of Smarty 3.1 the `extends:` resource may use any available [template +resource](#resources), including `string:` and `eval:`. When [templates +from strings](#resources.string) are used, make sure they are properly +(url or base64) encoded. Is an `eval:` resource found within an +inheritance chain, its \"don\'t save a compile file\" property is +superseeded by the `extends:` resource. The templates within an +inheritance chain are not compiled separately, though. Only a single +compiled template will be generated. + +> **Note** +> +> Use this when inheritance is required programatically. When inheriting +> within PHP, it is not obvious from the child template what inheritance +> took place. If you have a choice, it is normally more flexible and +> intuitive to handle inheritance chains from within the templates. + + + <?php + $smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); + + // inheritance from multiple template sources + $smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}'); + ?> + + + +See also [Template Inheritance](#advanced.features.template.inheritance) +[`{block}`](#language.function.block) and +[`{extends}`](#language.function.extends). diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-file.md b/vendor/smarty/smarty/docs/programmers/resources/resources-file.md new file mode 100644 index 000000000..986cfffca --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources/resources-file.md @@ -0,0 +1,160 @@ +File Template Resources {#resources.file} +======================= + +Smarty ships with a built-in template resource for the filesystem. The +`file:` is the default resource. The resource key `file:` must only be +specified, if the +[`$default_resource_type`](#variable.default.resource.type) has been +changed. + +If the file resource cannot find the requested template, the +[`$default_template_handler_func`](#variable.default.template.handler.func) +is invoked. + +> **Note** +> +> As of Smarty 3.1 the file resource no longer walks through the +> [include\_path](&url.php-manual;ini.core.php#ini.include-path) unless +> [`$use_include_path` is activated](#variable.use.include.path) + +Templates from \$template\_dir {#templates.from.template.dir} +------------------------------ + +The file resource pulls templates source files from the directories +specified in [`$template_dir`](#variable.template.dir). The list of +directories is traversed in the order they appear in the array. The +first template found is the one to process. + + + <?php + $smarty->display('index.tpl'); + $smarty->display('file:index.tpl'); // same as above + ?> + + + +From within a Smarty template + + + {include file='index.tpl'} + {include file='file:index.tpl'} {* same as above *} + + + +Templates from a specific \$template\_dir {#templates.from.specified.template.dir} +----------------------------------------- + +Smarty 3.1 introduced the bracket-syntax for specifying an element from +[`$template_dir`](#variable.template.dir). This allows websites +employing multiple sets of templates better control over which template +to acces. + +The bracket-syntax can be used from anywhere you can specify the `file:` +resource type. + + + <?php + + // setup template directories + $smarty->setTemplateDir(array( + './templates', // element: 0, index: 0 + './templates_2', // element: 1, index: 1 + '10' => 'templates_10', // element: 2, index: '10' + 'foo' => 'templates_foo', // element: 3, index: 'foo' + )); + + /* + assume the template structure + ./templates/foo.tpl + ./templates_2/foo.tpl + ./templates_2/bar.tpl + ./templates_10/foo.tpl + ./templates_10/bar.tpl + ./templates_foo/foo.tpl + */ + + // regular access + $smarty->display('file:foo.tpl'); + // will load ./templates/foo.tpl + + // using numeric index + $smarty->display('file:[1]foo.tpl'); + // will load ./templates_2/foo.tpl + + // using numeric string index + $smarty->display('file:[10]foo.tpl'); + // will load ./templates_10/foo.tpl + + // using string index + $smarty->display('file:[foo]foo.tpl'); + // will load ./templates_foo/foo.tpl + + // using "unknown" numeric index (using element number) + $smarty->display('file:[2]foo.tpl'); + // will load ./templates_10/foo.tpl + + ?> + + + +From within a Smarty template + + + {include file="file:foo.tpl"} + {* will load ./templates/foo.tpl *} + + {include file="file:[1]foo.tpl"} + {* will load ./templates_2/foo.tpl *} + + {include file="file:[foo]foo.tpl"} + {* will load ./templates_foo/foo.tpl *} + + + +Templates from any directory {#templates.from.any.dir} +---------------------------- + +Templates outside of the [`$template_dir`](#variable.template.dir) +require the `file:` template resource type, followed by the absolute +path to the template (with leading slash.) + +> **Note** +> +> With [`Security`](#advanced.features.security) enabled, access to +> templates outside of the [`$template_dir`](#variable.template.dir) is +> not allowed unless you list those directories in `$secure_dir`. + + + <?php + $smarty->display('file:/export/templates/index.tpl'); + $smarty->display('file:/path/to/my/templates/menu.tpl'); + ?> + + + +And from within a Smarty template: + + + {include file='file:/usr/local/share/templates/navigation.tpl'} + + + +Windows Filepaths {#templates.windows.filepath} +----------------- + +If you are using a Windows machine, filepaths usually include a drive +letter (C:) at the beginning of the pathname. Be sure to use `file:` in +the path to avoid namespace conflicts and get the desired results. + + + <?php + $smarty->display('file:C:/export/templates/index.tpl'); + $smarty->display('file:F:/path/to/my/templates/menu.tpl'); + ?> + + + +And from within Smarty template: + + + {include file='file:D:/usr/local/share/templates/navigation.tpl'} diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md b/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md new file mode 100644 index 000000000..e0596f591 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md @@ -0,0 +1,27 @@ +Stream Template Resources {#resources.streams} +========================= + +Streams allow you to use PHP streams as a template resource. The syntax +is much the same a traditional template resource names. + +Smarty will first look for a registered template resource. If nothing is +found, it will check if a PHP stream is available. If a stream is +available, Smarty will use it to fetch the template. + +> **Note** +> +> You can further define allowed streams with security enabled. + +Using a PHP stream for a template resource from the display() function. + + + $smarty->display('foo:bar.tpl'); + + + +Using a PHP stream for a template resource from within a template. + + + {include file="foo:bar.tpl"} + + diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-string.md b/vendor/smarty/smarty/docs/programmers/resources/resources-string.md new file mode 100644 index 000000000..4b19d8e32 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources/resources-string.md @@ -0,0 +1,73 @@ +String Template Resources {#resources.string} +========================= + +Smarty can render templates from a string by using the `string:` or +`eval:` resource. + +- The `string:` resource behaves much the same as a template file. The + template source is compiled from a string and stores the compiled + template code for later reuse. Each unique template string will + create a new compiled template file. If your template strings are + accessed frequently, this is a good choice. If you have frequently + changing template strings (or strings with low reuse value), the + `eval:` resource may be a better choice, as it doesn\'t save + compiled templates to disk. + +- The `eval:` resource evaluates the template source every time a page + is rendered. This is a good choice for strings with low reuse value. + If the same string is accessed frequently, the `string:` resource + may be a better choice. + +> **Note** +> +> With a `string:` resource type, each unique string generates a +> compiled file. Smarty cannot detect a string that has changed, and +> therefore will generate a new compiled file for each unique string. It +> is important to choose the correct resource so that you do not fill +> your disk space with wasted compiled strings. + + + <?php + $smarty->assign('foo','value'); + $template_string = 'display {$foo} here'; + $smarty->display('string:'.$template_string); // compiles for later reuse + $smarty->display('eval:'.$template_string); // compiles every time + ?> + + + +From within a Smarty template + + + {include file="string:$template_string"} {* compiles for later reuse *} + {include file="eval:$template_string"} {* compiles every time *} + + + + +Both `string:` and `eval:` resources may be encoded with +[`urlencode()`](&url.php-manual;urlencode) or +[`base64_encode()`](&url.php-manual;urlencode). This is not necessary +for the usual use of `string:` and `eval:`, but is required when using +either of them in conjunction with +[`Extends Template Resource`](#resources.extends) + + + <?php + $smarty->assign('foo','value'); + $template_string_urlencode = urlencode('display {$foo} here'); + $template_string_base64 = base64_encode('display {$foo} here'); + $smarty->display('eval:urlencode:'.$template_string_urlencode); // will decode string using urldecode() + $smarty->display('eval:base64:'.$template_string_base64); // will decode string using base64_decode() + ?> + + + +From within a Smarty template + + + {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *} + {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *} + + + diff --git a/vendor/smarty/smarty/docs/programmers/resources/template-resources.md b/vendor/smarty/smarty/docs/programmers/resources/template-resources.md new file mode 100644 index 000000000..7bb5d752e --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/resources/template-resources.md @@ -0,0 +1,130 @@ +Resources {#resasdources} +========= + +The templates may come from a variety of sources. When you +[`display()`](#api.display) or [`fetch()`](#api.fetch) a template, or +when you include a template from within another template, you supply a +resource type, followed by the appropriate path and template name. If a +resource is not explicitly given, the value of +[`$default_resource_type`](#variable.default.resource.type) is assumed. + +Templates from other sources {#templates.from.elsewhere} +---------------------------- + +You can retrieve templates using whatever possible source you can access +with PHP: databases, sockets, files, etc. You do this by writing +resource plugin functions and registering them with Smarty. + +See [resource plugins](#plugins.resources) section for more information +on the functions you are supposed to provide. + +> **Note** +> +> Note that you cannot override the built-in `file:` resource, but you +> can provide a resource that fetches templates from the file system in +> some other way by registering under another resource name. + + + <?php + + /** + * MySQL Resource + * + * Resource Implementation based on the Custom API to use + * MySQL as the storage resource for Smarty's templates and configs. + * + * Table definition: + * <pre>CREATE TABLE IF NOT EXISTS `templates` ( + * `name` varchar(100) NOT NULL, + * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + * `source` text, + * PRIMARY KEY (`name`) + * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> + * + * Demo data: + * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> + * + * @package Resource-examples + * @author Rodney Rehm + */ + class Smarty_Resource_Mysql extends Smarty_Resource_Custom { + // PDO instance + protected $db; + // prepared fetch() statement + protected $fetch; + // prepared fetchTimestamp() statement + protected $mtime; + + public function __construct() { + try { + $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty"); + } catch (PDOException $e) { + throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); + } + $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); + $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); + } + + /** + * Fetch a template and its modification time from database + * + * @param string $name template name + * @param string $source template source + * @param integer $mtime template modification timestamp (epoch) + * @return void + */ + protected function fetch($name, &$source, &$mtime) + { + $this->fetch->execute(array('name' => $name)); + $row = $this->fetch->fetch(); + $this->fetch->closeCursor(); + if ($row) { + $source = $row['source']; + $mtime = strtotime($row['modified']); + } else { + $source = null; + $mtime = null; + } + } + + /** + * Fetch a template's modification time from database + * + * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source. + * @param string $name template name + * @return integer timestamp (epoch) the template was modified + */ + protected function fetchTimestamp($name) { + $this->mtime->execute(array('name' => $name)); + $mtime = $this->mtime->fetchColumn(); + $this->mtime->closeCursor(); + return strtotime($mtime); + } + } + + + require_once 'libs/Smarty.class.php'; + $smarty = new Smarty(); + $smarty->registerResource('mysql', new Smarty_Resource_Mysql()); + + // using resource from php script + $smarty->display("mysql:index.tpl"); + ?> + + + +And from within Smarty template: + + + {include file='mysql:extras/navigation.tpl'} + + + +Default template handler function {#default.template.handler.function} +--------------------------------- + +You can specify a function that is used to retrieve template contents in +the event the template cannot be retrieved from its resource. One use of +this is to create templates that do not exist on-the-fly. + +See also [`Streams`](#advanced.features.streams) diff --git a/vendor/smarty/smarty/docs/programmers/smarty-constants.md b/vendor/smarty/smarty/docs/programmers/smarty-constants.md new file mode 100644 index 000000000..042ea5e38 --- /dev/null +++ b/vendor/smarty/smarty/docs/programmers/smarty-constants.md @@ -0,0 +1,27 @@ +Constants {#smarty.constants} +========= + +SMARTY\_DIR {#constant.smarty.dir} +=========== + +This is the **full system path** to the location of the Smarty class +files. If this is not defined in your script, then Smarty will attempt +to determine the appropriate value automatically. If defined, the path +**must end with a trailing slash/**. + + + <?php + // set path to Smarty directory *nix style + define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/'); + + // path to Smarty windows style + define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/'); + + // include the smarty class, note 'S' is upper case + require_once(SMARTY_DIR . 'Smarty.class.php'); + ?> + + + +See also [`$smarty.const`](../designers/language-variables/language-variables-smarty.md) and +[`$php_handling constants`](./api-variables/variable-php-handling.md) diff --git a/vendor/smarty/smarty/expectException b/vendor/smarty/smarty/expectException deleted file mode 100644 index e69de29bb..000000000 --- a/vendor/smarty/smarty/expectException +++ /dev/null diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex b/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex index ac1250255..67c840d74 100644 --- a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex +++ b/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex @@ -289,8 +289,6 @@ class Smarty_Internal_Templatelexer textdoublequoted = ~([^"\\]*?)((?:\\.[^"\\]*?)*?)(?=((SMARTYldel)SMARTYal|\$|`\$|"SMARTYliteral))~ namespace = ~([0-9]*[a-zA-Z_]\w*)?(\\[0-9]*[a-zA-Z_]\w*)+~ emptyjava = ~[{][}]~ - phptag = ~(SMARTYldel)SMARTYalphp([ ].*?)?SMARTYrdel|(SMARTYldel)SMARTYal[/]phpSMARTYrdel~ - phpstart = ~[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["']?\s*php\s*["']?\s*[>]|[?][>]|[%][>]~ slash = ~[/]~ ldel = ~(SMARTYldel)SMARTYal~ rdel = ~\s*SMARTYrdel~ @@ -362,9 +360,6 @@ class Smarty_Internal_Templatelexer $this->value = substr($this->data,$this->counter,$to-$this->counter); return false; } - phptag { - $this->compiler->getTagCompiler('private_php')->parsePhp($this); - } userliteral { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } @@ -380,12 +375,9 @@ class Smarty_Internal_Templatelexer $this->yypushstate(self::TAG); return true; } - phpstart { - $this->compiler->getTagCompiler('private_php')->parsePhp($this); - } char { if (!isset($this->yy_global_text)) { - $this->yy_global_text = $this->replace('/(SMARTYldel)SMARTYal|[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*[>]|[?][>]|[%][>]SMARTYliteral/isS'); + $this->yy_global_text = $this->replace('/(SMARTYldel)SMARTYal/isS'); } $to = $this->dataLength; preg_match($this->yy_global_text, $this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y b/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y index c6890642f..620498765 100644 --- a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y +++ b/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y @@ -23,7 +23,6 @@ class Smarty_Internal_Templateparser { 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 @@ -237,16 +236,6 @@ start(res) ::= template. { res = $this->root_buffer->to_smarty_php($this); } - - // php tags -template ::= template PHP(B). { - $code = $this->compiler->compileTag('private_php',array(array('code' => B), 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->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp.$code,true))); - } -} - // template text template ::= template TEXT(B). { $text = $this->yystack[ $this->yyidx + 0 ]->minor; @@ -758,6 +747,9 @@ value(res) ::= doublequoted_with_quotes(s). { value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). { + if ($this->security && $this->security->static_classes !== array()) { + $this->compiler->trigger_template_error('dynamic static class not allowed by security setting'); + } $prefixVar = $this->compiler->getNewPrefixVariable(); if (vi['var'] === '\'smarty\'') { $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>'); diff --git a/vendor/smarty/smarty/libs/Autoloader.php b/vendor/smarty/smarty/libs/Autoloader.php index c09361b66..1673ce2ff 100644 --- a/vendor/smarty/smarty/libs/Autoloader.php +++ b/vendor/smarty/smarty/libs/Autoloader.php @@ -39,7 +39,7 @@ class Smarty_Autoloader * * @var array */ - public static $rootClasses = array('smarty' => 'Smarty.class.php', 'smartybc' => 'SmartyBC.class.php',); + public static $rootClasses = array('smarty' => 'Smarty.class.php'); /** * Registers Smarty_Autoloader backward compatible to older installations. @@ -76,11 +76,7 @@ class Smarty_Autoloader self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR; self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR; - if (version_compare(PHP_VERSION, '5.3.0', '>=')) { - spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); - } else { - spl_autoload_register(array(__CLASS__, 'autoload')); - } + spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); } /** diff --git a/vendor/smarty/smarty/libs/Smarty.class.php b/vendor/smarty/smarty/libs/Smarty.class.php index 375bab133..0abbe6a7d 100644 --- a/vendor/smarty/smarty/libs/Smarty.class.php +++ b/vendor/smarty/smarty/libs/Smarty.class.php @@ -20,7 +20,7 @@ * Smarty mailing list. Send a blank e-mail to * smarty-discussion-subscribe@googlegroups.com * - * @link http://www.smarty.net/ + * @link https://www.smarty.net/ * @copyright 2018 New Digital Group, Inc. * @copyright 2018 Uwe Tews * @author Monte Ohrt <monte at ohrt dot com> @@ -60,19 +60,6 @@ if (!defined('SMARTY_MBSTRING')) { */ define('SMARTY_MBSTRING', function_exists('mb_get_info')); } -if (!defined('SMARTY_RESOURCE_CHAR_SET')) { - // UTF-8 can only be done properly when mbstring is available! - /** - * @deprecated in favor of Smarty::$_CHARSET - */ - define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'); -} -if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { - /** - * @deprecated in favor of Smarty::$_DATE_FORMAT - */ - define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); -} /** * Load Smarty_Autoloader */ @@ -111,7 +98,7 @@ class Smarty extends Smarty_Internal_TemplateBase /** * smarty version */ - const SMARTY_VERSION = '3.1.39'; + const SMARTY_VERSION = '4.1.0'; /** * define variable scopes */ @@ -143,13 +130,7 @@ class Smarty extends Smarty_Internal_TemplateBase const DEBUG_OFF = 0; const DEBUG_ON = 1; const DEBUG_INDIVIDUAL = 2; - /** - * modes for handling of "<?php ... ?>" tags in templates. - */ - const PHP_PASSTHRU = 0; //-> print tags as plain text - const PHP_QUOTE = 1; //-> escape tags as entities - const PHP_REMOVE = 2; //-> escape tags as entities - const PHP_ALLOW = 3; //-> escape tags as entities + /** * filter types */ @@ -179,13 +160,13 @@ class Smarty extends Smarty_Internal_TemplateBase /** * The character set to adhere to (e.g. "UTF-8") */ - public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET; + public static $_CHARSET = SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'; /** * The date format to be used internally * (accepts date() and strftime()) */ - public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT; + public static $_DATE_FORMAT = '%b %e, %Y'; /** * Flag denoting if PCRE should run in UTF-8 mode @@ -370,13 +351,6 @@ class Smarty extends Smarty_Internal_TemplateBase public $security_policy = null; /** - * controls handling of PHP-blocks - * - * @var integer - */ - public $php_handling = self::PHP_PASSTHRU; - - /** * controls if the php template file resource is allowed * * @var bool @@ -667,6 +641,12 @@ class Smarty extends Smarty_Internal_TemplateBase ); /** + * PHP7 Compatibility mode + * @var bool + */ + private $isMutingUndefinedOrNullWarnings = false; + + /** * Initialize new Smarty object */ public function __construct() @@ -689,27 +669,6 @@ class Smarty extends Smarty_Internal_TemplateBase } /** - * Enable error handler to mute expected messages - * - * @return boolean - * @deprecated - */ - public static function muteExpectedErrors() - { - return Smarty_Internal_ErrorHandler::muteExpectedErrors(); - } - - /** - * Disable error handler muting expected messages - * - * @deprecated - */ - public static function unmuteExpectedErrors() - { - restore_error_handler(); - } - - /** * Check if a template resource exists * * @param string $resource_name template name @@ -1387,11 +1346,6 @@ class Smarty extends Smarty_Internal_TemplateBase private function _normalizeDir($dirName, $dir) { $this->{$dirName} = $this->_realpath(rtrim($dir, "/\\") . DIRECTORY_SEPARATOR, true); - if (class_exists('Smarty_Internal_ErrorHandler', false)) { - if (!isset(Smarty_Internal_ErrorHandler::$mutedDirectories[ $this->{$dirName} ])) { - Smarty_Internal_ErrorHandler::$mutedDirectories[ $this->{$dirName} ] = null; - } - } } /** @@ -1421,4 +1375,23 @@ class Smarty extends Smarty_Internal_TemplateBase $isConfig ? $this->_joined_config_dir = join('#', $this->config_dir) : $this->_joined_template_dir = join('#', $this->template_dir); } + + /** + * Activates PHP7 compatibility mode: + * - converts E_WARNINGS for "undefined array key" and "trying to read property of null" errors to E_NOTICE + * + * @void + */ + public function muteUndefinedOrNullWarnings(): void { + $this->isMutingUndefinedOrNullWarnings = true; + } + + /** + * Indicates if PHP7 compatibility mode is set. + * @bool + */ + public function isMutingUndefinedOrNullWarnings(): bool { + return $this->isMutingUndefinedOrNullWarnings; + } + } diff --git a/vendor/smarty/smarty/libs/SmartyBC.class.php b/vendor/smarty/smarty/libs/SmartyBC.class.php deleted file mode 100644 index 0550e46dc..000000000 --- a/vendor/smarty/smarty/libs/SmartyBC.class.php +++ /dev/null @@ -1,477 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: SmartyBC.class.php - * SVN: $Id: $ - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * For questions, help, comments, discussion, etc., please join the - * Smarty mailing list. Send a blank e-mail to - * smarty-discussion-subscribe@googlegroups.com - * - * @link http://www.smarty.net/ - * @copyright 2008 New Digital Group, Inc. - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - */ -/** - * @ignore - */ -require_once dirname(__FILE__) . '/Smarty.class.php'; - -/** - * Smarty Backward Compatibility Wrapper Class - * - * @package Smarty - */ -class SmartyBC extends Smarty -{ - /** - * Smarty 2 BC - * - * @var string - */ - public $_version = self::SMARTY_VERSION; - - /** - * This is an array of directories where trusted php scripts reside. - * - * @var array - */ - public $trusted_dir = array(); - - /** - * Initialize new SmartyBC object - */ - public function __construct() - { - parent::__construct(); - } - - /** - * wrapper for assign_by_ref - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to assign - */ - public function assign_by_ref($tpl_var, &$value) - { - $this->assignByRef($tpl_var, $value); - } - - /** - * wrapper for append_by_ref - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to append - * @param boolean $merge flag if array elements shall be merged - */ - public function append_by_ref($tpl_var, &$value, $merge = false) - { - $this->appendByRef($tpl_var, $value, $merge); - } - - /** - * clear the given assigned template variable. - * - * @param string $tpl_var the template variable to clear - */ - public function clear_assign($tpl_var) - { - $this->clearAssign($tpl_var); - } - - /** - * Registers custom function to be used in templates - * - * @param string $function the name of the template function - * @param string $function_impl the name of the PHP function to register - * @param bool $cacheable - * @param mixed $cache_attrs - * - * @throws \SmartyException - */ - public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null) - { - $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); - } - - /** - * Unregister custom function - * - * @param string $function name of template function - */ - public function unregister_function($function) - { - $this->unregisterPlugin('function', $function); - } - - /** - * Registers object to be used in templates - * - * @param string $object name of template object - * @param object $object_impl the referenced PHP object to register - * @param array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param array $block_methods list of methods that are block format - * - * @throws SmartyException - * @internal param array $block_functs list of methods that are block format - */ - public function register_object( - $object, - $object_impl, - $allowed = array(), - $smarty_args = true, - $block_methods = array() - ) { - settype($allowed, 'array'); - settype($smarty_args, 'boolean'); - $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods); - } - - /** - * Unregister object - * - * @param string $object name of template object - */ - public function unregister_object($object) - { - $this->unregisterObject($object); - } - - /** - * Registers block function to be used in templates - * - * @param string $block name of template block - * @param string $block_impl PHP function to register - * @param bool $cacheable - * @param mixed $cache_attrs - * - * @throws \SmartyException - */ - public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null) - { - $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); - } - - /** - * Unregister block function - * - * @param string $block name of template function - */ - public function unregister_block($block) - { - $this->unregisterPlugin('block', $block); - } - - /** - * Registers compiler function - * - * @param string $function name of template function - * @param string $function_impl name of PHP function to register - * @param bool $cacheable - * - * @throws \SmartyException - */ - public function register_compiler_function($function, $function_impl, $cacheable = true) - { - $this->registerPlugin('compiler', $function, $function_impl, $cacheable); - } - - /** - * Unregister compiler function - * - * @param string $function name of template function - */ - public function unregister_compiler_function($function) - { - $this->unregisterPlugin('compiler', $function); - } - - /** - * Registers modifier to be used in templates - * - * @param string $modifier name of template modifier - * @param string $modifier_impl name of PHP function to register - * - * @throws \SmartyException - */ - public function register_modifier($modifier, $modifier_impl) - { - $this->registerPlugin('modifier', $modifier, $modifier_impl); - } - - /** - * Unregister modifier - * - * @param string $modifier name of template modifier - */ - public function unregister_modifier($modifier) - { - $this->unregisterPlugin('modifier', $modifier); - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource - * @param array $functions array of functions to handle resource - */ - public function register_resource($type, $functions) - { - $this->registerResource($type, $functions); - } - - /** - * Unregister a resource - * - * @param string $type name of resource - */ - public function unregister_resource($type) - { - $this->unregisterResource($type); - } - - /** - * Registers a prefilter function to apply - * to a template before compiling - * - * @param callable $function - * - * @throws \SmartyException - */ - public function register_prefilter($function) - { - $this->registerFilter('pre', $function); - } - - /** - * Unregister a prefilter function - * - * @param callable $function - */ - public function unregister_prefilter($function) - { - $this->unregisterFilter('pre', $function); - } - - /** - * Registers a postfilter function to apply - * to a compiled template after compilation - * - * @param callable $function - * - * @throws \SmartyException - */ - public function register_postfilter($function) - { - $this->registerFilter('post', $function); - } - - /** - * Unregister a postfilter function - * - * @param callable $function - */ - public function unregister_postfilter($function) - { - $this->unregisterFilter('post', $function); - } - - /** - * Registers an output filter function to apply - * to a template output - * - * @param callable $function - * - * @throws \SmartyException - */ - public function register_outputfilter($function) - { - $this->registerFilter('output', $function); - } - - /** - * Unregister an outputfilter function - * - * @param callable $function - */ - public function unregister_outputfilter($function) - { - $this->unregisterFilter('output', $function); - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - * - * @throws \SmartyException - */ - public function load_filter($type, $name) - { - $this->loadFilter($type, $name); - } - - /** - * clear cached content for the given template and cache id - * - * @param string $tpl_file name of template file - * @param string $cache_id name of cache_id - * @param string $compile_id name of compile_id - * @param string $exp_time expiration time - * - * @return boolean - */ - public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) - { - return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time); - } - - /** - * clear the entire contents of cache (all templates) - * - * @param string $exp_time expire time - * - * @return boolean - */ - public function clear_all_cache($exp_time = null) - { - return $this->clearCache(null, null, null, $exp_time); - } - - /** - * test to see if valid cache exists for this template - * - * @param string $tpl_file name of template file - * @param string $cache_id - * @param string $compile_id - * - * @return bool - * @throws \Exception - * @throws \SmartyException - */ - public function is_cached($tpl_file, $cache_id = null, $compile_id = null) - { - return $this->isCached($tpl_file, $cache_id, $compile_id); - } - - /** - * clear all the assigned template variables. - */ - public function clear_all_assign() - { - $this->clearAllAssign(); - } - - /** - * clears compiled version of specified template resource, - * or all compiled template files if one is not specified. - * This function is for advanced use only, not normally needed. - * - * @param string $tpl_file - * @param string $compile_id - * @param string $exp_time - * - * @return boolean results of {@link smarty_core_rm_auto()} - */ - public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) - { - return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time); - } - - /** - * Checks whether requested template exists. - * - * @param string $tpl_file - * - * @return bool - * @throws \SmartyException - */ - public function template_exists($tpl_file) - { - return $this->templateExists($tpl_file); - } - - /** - * Returns an array containing template variables - * - * @param string $name - * - * @return array - */ - public function get_template_vars($name = null) - { - return $this->getTemplateVars($name); - } - - /** - * Returns an array containing config variables - * - * @param string $name - * - * @return array - */ - public function get_config_vars($name = null) - { - return $this->getConfigVars($name); - } - - /** - * load configuration values - * - * @param string $file - * @param string $section - * @param string $scope - */ - public function config_load($file, $section = null, $scope = 'global') - { - $this->ConfigLoad($file, $section, $scope); - } - - /** - * return a reference to a registered object - * - * @param string $name - * - * @return object - */ - public function get_registered_object($name) - { - return $this->getRegisteredObject($name); - } - - /** - * clear configuration values - * - * @param string $var - */ - public function clear_config($var = null) - { - $this->clearConfig($var); - } - - /** - * trigger Smarty error - * - * @param string $error_msg - * @param integer $error_type - */ - public function trigger_error($error_msg, $error_type = E_USER_WARNING) - { - trigger_error("Smarty error: $error_msg", $error_type); - } -} diff --git a/vendor/smarty/smarty/libs/plugins/block.textformat.php b/vendor/smarty/smarty/libs/plugins/block.textformat.php index 5e494637e..fed090e4d 100644 --- a/vendor/smarty/smarty/libs/plugins/block.textformat.php +++ b/vendor/smarty/smarty/libs/plugins/block.textformat.php @@ -20,7 +20,7 @@ * - indent_char - string (" ") * - wrap_boundary - boolean (true) * - * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} + * @link https://www.smarty.net/manual/en/language.function.textformat.php {textformat} * (Smarty online manual) * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/function.counter.php b/vendor/smarty/smarty/libs/plugins/function.counter.php index a4129e77c..54795459c 100644 --- a/vendor/smarty/smarty/libs/plugins/function.counter.php +++ b/vendor/smarty/smarty/libs/plugins/function.counter.php @@ -12,7 +12,7 @@ * 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} + * @link https://www.smarty.net/manual/en/language.function.counter.php {counter} * (Smarty online manual) * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/function.cycle.php b/vendor/smarty/smarty/libs/plugins/function.cycle.php index 07ffcc5e2..793569991 100644 --- a/vendor/smarty/smarty/libs/plugins/function.cycle.php +++ b/vendor/smarty/smarty/libs/plugins/function.cycle.php @@ -28,7 +28,7 @@ * {cycle name=row values="one,two,three" reset=true} * {cycle name=row} * - * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} + * @link https://www.smarty.net/manual/en/language.function.cycle.php {cycle} * (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * @author credit to Mark Priatel <mpriatel@rogers.com> diff --git a/vendor/smarty/smarty/libs/plugins/function.fetch.php b/vendor/smarty/smarty/libs/plugins/function.fetch.php index 768761b23..4a3e88196 100644 --- a/vendor/smarty/smarty/libs/plugins/function.fetch.php +++ b/vendor/smarty/smarty/libs/plugins/function.fetch.php @@ -11,7 +11,7 @@ * Name: fetch * Purpose: fetch file, web or ftp data and display results * - * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} + * @link https://www.smarty.net/manual/en/language.function.fetch.php {fetch} * (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * diff --git a/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php index 302358edd..a8e7a07d8 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php @@ -29,7 +29,7 @@ * - assign (optional) - assign the output as an array to this variable * - escape (optional) - escape the content (not value), defaults to true * - * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * @link https://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} * (Smarty online manual) * @author Christopher Kvarme <christopher.kvarme@flashjab.com> * @author credits to Monte Ohrt <monte at ohrt dot com> diff --git a/vendor/smarty/smarty/libs/plugins/function.html_image.php b/vendor/smarty/smarty/libs/plugins/function.html_image.php index ad468e4f1..71bc63864 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_image.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_image.php @@ -21,7 +21,7 @@ * - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT * - path_prefix - prefix for path output (optional, default empty) * - * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image} + * @link https://www.smarty.net/manual/en/language.function.html.image.php {html_image} * (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * @author credits to Duda <duda@big.hu> diff --git a/vendor/smarty/smarty/libs/plugins/function.html_options.php b/vendor/smarty/smarty/libs/plugins/function.html_options.php index 6907e8ee1..3e4335340 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_options.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_options.php @@ -21,7 +21,7 @@ * - id (optional) - string default not set * - class (optional) - string default not set * - * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image} + * @link https://www.smarty.net/manual/en/language.function.html.options.php {html_image} * (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de> diff --git a/vendor/smarty/smarty/libs/plugins/function.html_radios.php b/vendor/smarty/smarty/libs/plugins/function.html_radios.php index 5e834587c..2223ff7ee 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_radios.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_radios.php @@ -29,7 +29,7 @@ * {html_radios values=$ids name='box' separator='<br>' output=$names} * {html_radios values=$ids checked=$checked separator='<br>' output=$names} * - * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} + * @link https://www.smarty.net/manual/en/language.function.html.radios.php {html_radios} * (Smarty online manual) * @author Christopher Kvarme <christopher.kvarme@flashjab.com> * @author credits to Monte Ohrt <monte at ohrt dot com> diff --git a/vendor/smarty/smarty/libs/plugins/function.html_select_date.php b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php index 86403e3dc..763fc60f9 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_select_date.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php @@ -28,7 +28,7 @@ * - 2.0 complete rewrite for performance, * added attributes month_names, *_id * - * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date} + * @link https://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date} * (Smarty online manual) * @version 2.0 * @author Andrei Zmievski diff --git a/vendor/smarty/smarty/libs/plugins/function.html_select_time.php b/vendor/smarty/smarty/libs/plugins/function.html_select_time.php index cb047bc0a..256b56b1c 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_select_time.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_select_time.php @@ -11,7 +11,7 @@ * Name: html_select_time * Purpose: Prints the dropdowns for time selection * - * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time} + * @link https://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time} * (Smarty online manual) * @author Roberto Berto <roberto@berto.net> * @author Monte Ohrt <monte AT ohrt DOT com> diff --git a/vendor/smarty/smarty/libs/plugins/function.html_table.php b/vendor/smarty/smarty/libs/plugins/function.html_table.php index ae61e83dc..17b0586e2 100644 --- a/vendor/smarty/smarty/libs/plugins/function.html_table.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_table.php @@ -38,7 +38,7 @@ * @author credit to Messju Mohr <messju at lammfellpuschen dot de> * @author credit to boots <boots dot smarty at yahoo dot com> * @version 1.1 - * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table} + * @link https://www.smarty.net/manual/en/language.function.html.table.php {html_table} * (Smarty online manual) * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/function.mailto.php b/vendor/smarty/smarty/libs/plugins/function.mailto.php index 27351df82..834d0535a 100644 --- a/vendor/smarty/smarty/libs/plugins/function.mailto.php +++ b/vendor/smarty/smarty/libs/plugins/function.mailto.php @@ -36,7 +36,7 @@ * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"} * {mailto address="me@domain.com" extra='class="mailto"'} * - * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto} + * @link https://www.smarty.net/manual/en/language.function.mailto.php {mailto} * (Smarty online manual) * @version 1.2 * @author Monte Ohrt <monte at ohrt dot com> @@ -94,22 +94,19 @@ function smarty_function_mailto($params) ); return; } - // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed! if ($encode === 'javascript') { - $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; + $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; $js_encode = ''; for ($x = 0, $_length = strlen($string); $x < $_length; $x++) { $js_encode .= '%' . bin2hex($string[ $x ]); } - return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>'; + return '<script type="text/javascript">document.write(unescape(\'' . $js_encode . '\'))</script>'; } elseif ($encode === 'javascript_charcode') { $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; - for ($x = 0, $y = strlen($string); $x < $y; $x++) { + for ($x = 0, $_length = strlen($string); $x < $_length; $x++) { $ord[] = ord($string[ $x ]); } - $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n" . "{document.write(String.fromCharCode(" . - implode(',', $ord) . "))" . "}\n" . "</script>\n"; - return $_ret; + return '<script type="text/javascript">document.write(String.fromCharCode(' . implode(',', $ord) . '))</script>'; } elseif ($encode === 'hex') { preg_match('!^(.*)(\?.*)$!', $address, $match); if (!empty($match[ 2 ])) { diff --git a/vendor/smarty/smarty/libs/plugins/function.math.php b/vendor/smarty/smarty/libs/plugins/function.math.php index 7348d9649..fd5b3d166 100644 --- a/vendor/smarty/smarty/libs/plugins/function.math.php +++ b/vendor/smarty/smarty/libs/plugins/function.math.php @@ -12,7 +12,7 @@ * Name: math * Purpose: handle math computations in template * - * @link http://www.smarty.net/manual/en/language.function.math.php {math} + * @link https://www.smarty.net/manual/en/language.function.math.php {math} * (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * @@ -28,7 +28,12 @@ function smarty_function_math($params, $template) 'int' => true, 'abs' => true, 'ceil' => true, + 'acos' => true, + 'acosh' => true, 'cos' => true, + 'cosh' => true, + 'deg2rad' => true, + 'rad2deg' => true, 'exp' => true, 'floor' => true, 'log' => true, @@ -39,27 +44,51 @@ function smarty_function_math($params, $template) 'pow' => true, 'rand' => true, 'round' => true, + 'asin' => true, + 'asinh' => true, 'sin' => true, + 'sinh' => true, 'sqrt' => true, 'srand' => true, - 'tan' => true + 'atan' => true, + 'atanh' => true, + 'tan' => true, + 'tanh' => true ); + // be sure equation parameter is present if (empty($params[ 'equation' ])) { trigger_error("math: missing equation parameter", E_USER_WARNING); return; } $equation = $params[ 'equation' ]; + + // Remove whitespaces + $equation = preg_replace('/\s+/', '', $equation); + + // Adapted from https://www.php.net/manual/en/function.eval.php#107377 + $number = '(?:\d+(?:[,.]\d+)?|pi|Ï€)'; // What is a number + $functionsOrVars = '((?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))'; + $operators = '[+\/*\^%-]'; // Allowed math operators + $regexp = '/^(('.$number.'|'.$functionsOrVars.'|('.$functionsOrVars.'\s*\((?1)+\)|\((?1)+\)))(?:'.$operators.'(?1))?)+$/'; + + if (!preg_match($regexp, $equation)) { + trigger_error("math: illegal characters", E_USER_WARNING); + return; + } + // make sure parenthesis are balanced if (substr_count($equation, '(') !== substr_count($equation, ')')) { trigger_error("math: unbalanced parenthesis", E_USER_WARNING); return; } + // disallow backticks if (strpos($equation, '`') !== false) { trigger_error("math: backtick character not allowed in equation", E_USER_WARNING); return; } + // also disallow dollar signs if (strpos($equation, '$') !== false) { trigger_error("math: dollar signs not allowed in equation", E_USER_WARNING); @@ -96,6 +125,7 @@ function smarty_function_math($params, $template) } $smarty_math_result = null; eval("\$smarty_math_result = " . $equation . ";"); + if (empty($params[ 'format' ])) { if (empty($params[ 'assign' ])) { return $smarty_math_result; diff --git a/vendor/smarty/smarty/libs/plugins/modifier.date_format.php b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php index c8e88c5c9..8e7e0b6e1 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.date_format.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php @@ -15,7 +15,7 @@ * - format: strftime format for output * - default_date: default date if $string is empty * - * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * * @param string $string input date string diff --git a/vendor/smarty/smarty/libs/plugins/modifier.escape.php b/vendor/smarty/smarty/libs/plugins/modifier.escape.php index 150901c7c..47489aa98 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.escape.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.escape.php @@ -11,7 +11,7 @@ * Name: escape * Purpose: escape string for output * - * @link http://www.smarty.net/docs/en/language.modifier.escape + * @link https://www.smarty.net/docs/en/language.modifier.escape * @author Monte Ohrt <monte at ohrt dot com> * * @param string $string input string @@ -23,12 +23,9 @@ */ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true) { - static $_double_encode = null; + static $_double_encode = true; static $is_loaded_1 = false; static $is_loaded_2 = false; - if ($_double_encode === null) { - $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); - } if (!$char_set) { $char_set = Smarty::$_CHARSET; } @@ -184,7 +181,11 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ '"' => '\\"', "\r" => '\\r', "\n" => '\\n', - '</' => '<\/' + '</' => '<\/', + // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements + '<!--' => '<\!--', + '<s' => '<\s', + '<S' => '<\S' ) ); case 'mail': @@ -250,6 +251,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $ } return $return; default: + trigger_error("escape: unsupported type: $esc_type - returning unmodified string", E_USER_NOTICE); return $string; } } diff --git a/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php b/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php index 1cd625b64..7c7bd875f 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php @@ -11,7 +11,7 @@ * Name: mb_wordwrap * Purpose: Wrap a string to a given number of characters * - * @link http://php.net/manual/en/function.wordwrap.php for similarity + * @link https://php.net/manual/en/function.wordwrap.php for similarity * * @param string $str the string to wrap * @param int $width the width of the output diff --git a/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php b/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php index 7eb550695..cd57cdf33 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php @@ -11,7 +11,7 @@ * Name: regex_replace * Purpose: regular expression search/replace * - * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php + * @link https://www.smarty.net/manual/en/language.modifier.regex.replace.php * regex_replace (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * diff --git a/vendor/smarty/smarty/libs/plugins/modifier.replace.php b/vendor/smarty/smarty/libs/plugins/modifier.replace.php index a98f5a4a6..71a7c632a 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.replace.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.replace.php @@ -11,7 +11,7 @@ * Name: replace * Purpose: simple search/replace * - * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.replace.php replace (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * @author Uwe Tews * diff --git a/vendor/smarty/smarty/libs/plugins/modifier.spacify.php b/vendor/smarty/smarty/libs/plugins/modifier.spacify.php index 98efd4b30..251dbe71b 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.spacify.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.spacify.php @@ -11,7 +11,7 @@ * Name: spacify * Purpose: add spaces between characters in a string * - * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * * @param string $string input string diff --git a/vendor/smarty/smarty/libs/plugins/modifier.truncate.php b/vendor/smarty/smarty/libs/plugins/modifier.truncate.php index bb881bf6e..33e7e53aa 100644 --- a/vendor/smarty/smarty/libs/plugins/modifier.truncate.php +++ b/vendor/smarty/smarty/libs/plugins/modifier.truncate.php @@ -13,7 +13,7 @@ * optionally splitting in the middle of a word, and * appending the $etc string or inserting $etc into the middle. * - * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * * @param string $string input string diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php index 21d0e6624..2c3a8b2a4 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php @@ -14,7 +14,7 @@ * Input: string to catenate * Example: {$var|cat:"foo"} * - * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat + * @link https://www.smarty.net/manual/en/language.modifier.cat.php cat * (Smarty online manual) * @author Uwe Tews * diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php index 6c44278af..b5d97e276 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php @@ -11,7 +11,7 @@ * Name: count_characters * Purpose: count the number of characters in a text * - * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online + * @link https://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online * manual) * @author Uwe Tews * diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php index e214a56f0..332402968 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php @@ -11,7 +11,7 @@ * Name: count_paragraphs * Purpose: count the number of paragraphs in a text * - * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php + * @link https://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * count_paragraphs (Smarty online manual) * @author Uwe Tews * diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php index 027745635..30e36e5f0 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php @@ -11,7 +11,7 @@ * Name: count_sentences * Purpose: count the number of sentences in a text * - * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php + * @link https://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * count_sentences (Smarty online manual) * @author Uwe Tews * diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php index 6d889da5c..cf2e50222 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php @@ -11,7 +11,7 @@ * Name: count_words * Purpose: count the number of words in a text * - * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php index ae886c4b2..dffa7a986 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php @@ -11,7 +11,7 @@ * Name: default * Purpose: designate default value for empty variables * - * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) * @author Uwe Tews * * @param array $params parameters @@ -26,7 +26,7 @@ function smarty_modifiercompiler_default($params) } array_shift($params); foreach ($params as $param) { - $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)'; + $output = '(($tmp = ' . $output . ' ?? null)===null||$tmp===\'\' ? ' . $param . ' ?? null : $tmp)'; } return $output; } diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php index e0763adce..70b95cc9d 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php @@ -11,7 +11,7 @@ * Name: escape * Purpose: escape string for output * - * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) + * @link https://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) * @author Rodney Rehm * * @param array $params parameters @@ -22,7 +22,7 @@ */ function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompilerBase $compiler) { - static $_double_encode = null; + static $_double_encode = true; static $is_loaded = false; $compiler->template->_checkPlugins( array( @@ -32,9 +32,6 @@ function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompile ) ) ); - if ($_double_encode === null) { - $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); - } try { $esc_type = smarty_literal_compiler_param($params, 1, 'html'); $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET); @@ -89,9 +86,10 @@ function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompile return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[ 0 ] . ')'; case 'javascript': // escape quotes and backslashes, newlines, etc. + // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements return 'strtr(' . $params[ 0 ] . - ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))'; + ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/", "<!--" => "<\!--", "<s" => "<\s", "<S" => "<\S" ))'; } } catch (SmartyException $e) { // pass through to regular plugin fallback diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php index 2088ad6a8..636f0edf1 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php @@ -11,7 +11,7 @@ * Name: indent * Purpose: indent lines of text * - * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php index 0d899a002..ac9cc39d7 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php @@ -11,7 +11,7 @@ * Name: lower * Purpose: convert string to lowercase * - * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> * @author Uwe Tews * diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php index 663094311..8df5632c5 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php @@ -11,7 +11,7 @@ * Name: string_format * Purpose: format strings via sprintf * - * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php index 04ea332c5..51944bde6 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php @@ -14,7 +14,7 @@ * Example: {$var|strip} {$var|strip:" "} * Date: September 25th, 2002 * - * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php index 1bca1a28e..6ee3df9a5 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php @@ -11,7 +11,7 @@ * Name: strip_tags * Purpose: strip html tags from text * - * @link http://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual) + * @link https://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php index ea4e95b7a..e12ae6769 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php @@ -11,7 +11,7 @@ * Name: lower * Purpose: convert string to uppercase * - * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.upper.php lower (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php index 8565f140e..49cb40b0f 100644 --- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php +++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php @@ -11,7 +11,7 @@ * Name: wordwrap * Purpose: wrap a string of text at a given length * - * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual) + * @link https://www.smarty.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual) * @author Uwe Tews * * @param array $params parameters diff --git a/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php b/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php index 7e4503a1c..2f747ad5a 100644 --- a/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php +++ b/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php @@ -41,7 +41,7 @@ function smarty_outputfilter_trimwhitespace($source) } } // Strip all HTML-Comments - // yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124 + // yes, even the ones in <script> - see https://stackoverflow.com/a/808850/515124 $source = preg_replace('#<!--.*?-->#ms', '', $source); // capture html elements not to be messed with $_offset = 0; diff --git a/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php b/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php index 6b18d3eec..a204b092c 100644 --- a/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php +++ b/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php @@ -20,13 +20,7 @@ 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); - } + $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); } return $string; } diff --git a/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php b/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php index 206cf9ea6..226d9035d 100644 --- a/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php +++ b/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php @@ -44,7 +44,7 @@ if (!function_exists('smarty_mb_str_replace')) { } } } else { - $parts = mb_split(preg_quote($search), $subject); + $parts = mb_split(preg_quote($search), $subject) ?: array(); $count = count($parts) - 1; $subject = implode($replace, $parts); } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php index 61618449d..c77ae9e17 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php @@ -196,12 +196,8 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource */ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { - if (version_compare(PHP_VERSION, '5.3.0', '>=')) { - clearstatcache(true, $cached->lock_id); - } else { - clearstatcache(); - } - if (is_file($cached->lock_id)) { + clearstatcache(true, $cached->lock_id ?? ''); + if (null !== $cached->lock_id && is_file($cached->lock_id)) { $t = filemtime($cached->lock_id); return $t && (time() - $t < $smarty->locking_timeout); } else { diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php index 3f113e56d..969e22c1a 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php @@ -18,7 +18,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase { /** * Compiles code for the {for} tag - * Smarty 3 does implement two different syntax's: + * Smarty supports two different syntax's: * - {for $var in $array} * For looping over arrays or iterators * - {for $x=0; $x<$y; $x++} diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php index a68da5409..edfe358be 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php @@ -219,9 +219,9 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo if (isset($itemAttr[ 'index' ])) { $output .= "{$itemVar}->index = -1;\n"; } - $output .= "{$itemVar}->do_else = true;\n"; + $output .= "{$itemVar}->do_else = true;\n"; $output .= "if (\$_from !== null) foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n"; - $output .= "{$itemVar}->do_else = false;\n"; + $output .= "{$itemVar}->do_else = false;\n"; if (isset($attributes[ 'key' ]) && isset($itemAttr[ 'key' ])) { $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n"; } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php index d0f2b0f4a..84e9584d9 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php @@ -157,7 +157,7 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase $output = "<?php echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php "; $output .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->restoreTemplateVariables(\\\$_smarty_tpl, '{$_name}');?>\n"; $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";\n?>"; - $output .= "<?php echo str_replace('{$compiler->template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash, ob_get_clean());\n"; + $output .= "<?php echo str_replace('{$compiler->template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash ?? '', ob_get_clean());\n"; $output .= "}\n}\n"; $output .= "/*/ {$_funcName}_nocache */\n\n"; $output .= "?>\n"; diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php deleted file mode 100644 index 1b0fdaad3..000000000 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include_php.php +++ /dev/null @@ -1,110 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Include PHP - * Compiles the {include_php} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('once', 'assign'); - - /** - * Compiles code for the {include_php} tag - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * - * @return string - * @throws \SmartyCompilerException - * @throws \SmartyException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - if (!($compiler->smarty instanceof SmartyBC)) { - throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable"); - } - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - /** - * - * - * @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - $_filepath = false; - $_file = null; - eval('$_file = @' . $_attr[ 'file' ] . ';'); - if (!isset($compiler->smarty->security_policy) && file_exists($_file)) { - $_filepath = $compiler->smarty->_realpath($_file, true); - } else { - if (isset($compiler->smarty->security_policy)) { - $_dir = $compiler->smarty->security_policy->trusted_dir; - } else { - $_dir = $compiler->smarty->trusted_dir; - } - if (!empty($_dir)) { - foreach ((array)$_dir as $_script_dir) { - $_path = $compiler->smarty->_realpath($_script_dir . DIRECTORY_SEPARATOR . $_file, true); - if (file_exists($_path)) { - $_filepath = $_path; - break; - } - } - } - } - if ($_filepath === false) { - $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true); - } - if (isset($compiler->smarty->security_policy)) { - $compiler->smarty->security_policy->isTrustedPHPDir($_filepath); - } - if (isset($_attr[ 'assign' ])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr[ 'assign' ]; - } - $_once = '_once'; - if (isset($_attr[ 'once' ])) { - if ($_attr[ 'once' ] === 'false') { - $_once = ''; - } - } - if (isset($_assign)) { - return "<?php ob_start();\ninclude{$_once} ('{$_filepath}');\n\$_smarty_tpl->assign({$_assign},ob_get_clean());\n?>"; - } else { - return "<?php include{$_once} ('{$_filepath}');?>\n"; - } - } -} diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php index 4bdc3952e..c91ff62cb 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php @@ -89,7 +89,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase if (isset($compiler->smarty->security_policy)) { $_dir = $compiler->smarty->security_policy->trusted_dir; } else { - $_dir = $compiler->smarty instanceof SmartyBC ? $compiler->smarty->trusted_dir : null; + $_dir = null; } if (!empty($_dir)) { foreach ((array)$_dir as $_script_dir) { diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php deleted file mode 100644 index ff48c6fbc..000000000 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_php.php +++ /dev/null @@ -1,253 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile PHP Expression - * Compiles any tag which will output an expression or variable - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile PHP Expression Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('code', 'type'); - - /** - * Compiles code for generating output from any expression - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string - * @throws \SmartyException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $compiler->has_code = false; - if ($_attr[ 'type' ] === 'xml') { - $compiler->tag_nocache = true; - $output = addcslashes($_attr[ 'code' ], "'\\"); - $compiler->parser->current_buffer->append_subtree( - $compiler->parser, - new Smarty_Internal_ParseTree_Tag( - $compiler->parser, - $compiler->processNocacheCode( - "<?php echo '{$output}';?>\n", - true - ) - ) - ); - return ''; - } - if ($_attr[ 'type' ] !== 'tag') { - if ($compiler->php_handling === Smarty::PHP_REMOVE) { - return ''; - } elseif ($compiler->php_handling === Smarty::PHP_QUOTE) { - $output = - preg_replace_callback( - '#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', - array($this, 'quote'), - $_attr[ 'code' ] - ); - $compiler->parser->current_buffer->append_subtree( - $compiler->parser, - new Smarty_Internal_ParseTree_Text($output) - ); - return ''; - } elseif ($compiler->php_handling === Smarty::PHP_PASSTHRU || $_attr[ 'type' ] === 'unmatched') { - $compiler->tag_nocache = true; - $output = addcslashes($_attr[ 'code' ], "'\\"); - $compiler->parser->current_buffer->append_subtree( - $compiler->parser, - new Smarty_Internal_ParseTree_Tag( - $compiler->parser, - $compiler->processNocacheCode( - "<?php echo '{$output}';?>\n", - 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->has_code = true; - return $_attr[ 'code' ]; - } else { - $compiler->trigger_template_error('Illegal $smarty->php_handling value', null, true); - } - } else { - $compiler->has_code = true; - if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error( - '{php}{/php} tags not allowed. Use SmartyBC to enable them', - null, - true - ); - } - $ldel = preg_quote($compiler->smarty->left_delimiter, '#'); - $rdel = preg_quote($compiler->smarty->right_delimiter, '#'); - preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr[ 'code' ], $match); - if (!empty($match[ 2 ])) { - if ('nocache' === trim($match[ 2 ])) { - $compiler->tag_nocache = true; - } else { - $compiler->trigger_template_error("illegal value of option flag '{$match[2]}'", null, true); - } - } - return preg_replace( - array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), - array('<?php ', '?>'), - $_attr[ 'code' ] - ); - } - } - - /** - * Lexer code for PHP tags - * - * This code has been moved from lexer here fo easier debugging and maintenance - * - * @param Smarty_Internal_Templatelexer $lex - * - * @throws \SmartyCompilerException - */ - public function parsePhp(Smarty_Internal_Templatelexer $lex) - { - $lex->token = Smarty_Internal_Templateparser::TP_PHP; - $close = 0; - $lex->taglineno = $lex->line; - $closeTag = '?>'; - if (strpos($lex->value, '<?xml') === 0) { - $lex->is_xml = true; - $lex->phpType = 'xml'; - return; - } elseif (strpos($lex->value, '<?') === 0) { - $lex->phpType = 'php'; - } elseif (strpos($lex->value, '<%') === 0) { - $lex->phpType = 'asp'; - $closeTag = '%>'; - } elseif (strpos($lex->value, '%>') === 0) { - $lex->phpType = 'unmatched'; - } elseif (strpos($lex->value, '?>') === 0) { - if ($lex->is_xml) { - $lex->is_xml = false; - $lex->phpType = 'xml'; - return; - } - $lex->phpType = 'unmatched'; - } elseif (strpos($lex->value, '<s') === 0) { - $lex->phpType = 'script'; - $closeTag = '</script>'; - } elseif (strpos($lex->value, $lex->smarty->left_delimiter) === 0) { - if ($lex->isAutoLiteral()) { - $lex->token = Smarty_Internal_Templateparser::TP_TEXT; - return; - } - $closeTag = "{$lex->smarty->left_delimiter}/php{$lex->smarty->right_delimiter}"; - if ($lex->value === $closeTag) { - $lex->compiler->trigger_template_error("unexpected closing tag '{$closeTag}'"); - } - $lex->phpType = 'tag'; - } - if ($lex->phpType === 'unmatched') { - return; - } - if (($lex->phpType === 'php' || $lex->phpType === 'asp') - && - ($lex->compiler->php_handling === Smarty::PHP_PASSTHRU || - $lex->compiler->php_handling === Smarty::PHP_QUOTE) - ) { - return; - } - $start = $lex->counter + strlen($lex->value); - $body = true; - if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { - $close = $match[ 0 ][ 1 ]; - } else { - $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); - } - while ($body) { - if (preg_match( - '~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~', - $lex->data, - $match, - PREG_OFFSET_CAPTURE, - $start - ) - ) { - $value = $match[ 0 ][ 0 ]; - $from = $pos = $match[ 0 ][ 1 ]; - if ($pos > $close) { - $body = false; - } else { - $start = $pos + strlen($value); - $phpCommentStart = $value === '/*'; - if ($phpCommentStart) { - $phpCommentEnd = preg_match('~([*][/])~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start); - if ($phpCommentEnd) { - $pos2 = $match[ 0 ][ 1 ]; - $start = $pos2 + strlen($match[ 0 ][ 0 ]); - } - } - while ($close > $pos && $close < $start) { - if (preg_match( - '~' . preg_quote($closeTag, '~') . '~i', - $lex->data, - $match, - PREG_OFFSET_CAPTURE, - $from - ) - ) { - $close = $match[ 0 ][ 1 ]; - $from = $close + strlen($match[ 0 ][ 0 ]); - } else { - $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); - } - } - if ($phpCommentStart && (!$phpCommentEnd || $pos2 > $close)) { - $lex->taglineno = $lex->line + substr_count(substr($lex->data, $lex->counter, $start), "\n"); - $lex->compiler->trigger_template_error("missing PHP comment closing tag '*/'"); - } - } - } else { - $body = false; - } - } - $lex->value = substr($lex->data, $lex->counter, $close + strlen($closeTag) - $lex->counter); - } - - /* - * Call back function for $php_handling = PHP_QUOTE - * - */ - /** - * @param $match - * - * @return string - */ - private function quote($match) - { - return htmlspecialchars($match[ 0 ], ENT_QUOTES); - } -} diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php index 90c5dcefa..a9b940e5a 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php @@ -158,7 +158,7 @@ class Smarty_Internal_Config_File_Compiler } // template header code $template_header = - "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . + "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . date("Y-m-d H:i:s") . "\n"; $template_header .= " compiled from '{$this->template->source->filepath}' */ ?>\n"; $code = '<?php $_smarty_tpl->smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' . diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php index 98e3e57b3..1b64185b8 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php @@ -121,7 +121,7 @@ abstract class Smarty_Internal_Data * appends values to template variables * * @api Smarty::append() - * @link http://www.smarty.net/docs/en/api.append.tpl + * @link https://www.smarty.net/docs/en/api.append.tpl * * @param array|string $tpl_var the template variable name(s) * @param mixed $value the value to append @@ -182,7 +182,7 @@ abstract class Smarty_Internal_Data * Returns a single or all template variables * * @api Smarty::getTemplateVars() - * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl + * @link https://www.smarty.net/docs/en/api.get.template.vars.tpl * * @param string $varName variable name or null * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object @@ -196,26 +196,6 @@ abstract 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 - * - * @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 - ) { - return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable); - } - - /** * Follow the parent chain an merge template and config variables * * @param \Smarty_Internal_Data|null $data diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php index 56dca18fa..c2b653ef4 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php @@ -1,61 +1,60 @@ <?php /** - * Smarty error handler + * Smarty error handler to fix new error levels in PHP8 for backwards compatibility * * @package Smarty * @subpackage PluginsInternal - * @author Uwe Tews + * @author Simon Wisselink * - * @deprecated -Smarty does no longer use @filemtime() */ class Smarty_Internal_ErrorHandler { + /** - * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors() + * Allows {$foo} where foo is unset. + * @var bool */ - public static $mutedDirectories = array(); + public $allowUndefinedVars = true; /** - * error handler returned by set_error_handler() in self::muteExpectedErrors() + * Allows {$foo.bar} where bar is unset and {$foo.bar1.bar2} where either bar1 or bar2 is unset. + * @var bool */ - private static $previousErrorHandler = null; + public $allowUndefinedArrayKeys = true; + + private $previousErrorHandler = null; /** - * Enable error handler to mute expected messages - * + * Enable error handler to intercept errors */ - public static function muteExpectedErrors() - { + public function activate() { /* - error muting is done because some people implemented custom error_handlers using - http://php.net/set_error_handler and for some reason did not understand the following paragraph: + Error muting is done because some people implemented custom error_handlers using + https://php.net/set_error_handler and for some reason did not understand the following paragraph: - It is important to remember that the standard PHP error handler is completely bypassed for the - error types specified by error_types unless the callback function returns FALSE. - error_reporting() settings will have no effect and your error handler will be called regardless - - however you are still able to read the current value of error_reporting and act appropriately. - Of particular note is that this value will be 0 if the statement that caused the error was - prepended by the @ error-control operator. - - Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include - - @filemtime() is almost twice as fast as using an additional file_exists() - - between file_exists() and filemtime() a possible race condition is opened, - which does not exist using the simple @filemtime() approach. + It is important to remember that the standard PHP error handler is completely bypassed for the + error types specified by error_types unless the callback function returns FALSE. + error_reporting() settings will have no effect and your error handler will be called regardless - + however you are still able to read the current value of error_reporting and act appropriately. + Of particular note is that this value will be 0 if the statement that caused the error was + prepended by the @ error-control operator. */ - $error_handler = array('Smarty_Internal_ErrorHandler', 'mutingErrorHandler'); - $previous = set_error_handler($error_handler); - // avoid dead loops - if ($previous !== $error_handler) { - self::$previousErrorHandler = $previous; - } + $this->previousErrorHandler = set_error_handler([$this, 'handleError']); + } + + /** + * Disable error handler + */ + public function deactivate() { + restore_error_handler(); + $this->previousErrorHandler = null; } /** * Error Handler to mute expected messages * - * @link http://php.net/set_error_handler + * @link https://php.net/set_error_handler * * @param integer $errno Error level * @param $errstr @@ -65,49 +64,21 @@ class Smarty_Internal_ErrorHandler * * @return bool */ - public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext = array()) + public function handleError($errno, $errstr, $errfile, $errline, $errcontext = []) { - $_is_muted_directory = false; - // add the SMARTY_DIR to the list of muted directories - if (!isset(self::$mutedDirectories[ SMARTY_DIR ])) { - $smarty_dir = realpath(SMARTY_DIR); - if ($smarty_dir !== false) { - self::$mutedDirectories[ SMARTY_DIR ] = - array('file' => $smarty_dir, 'length' => strlen($smarty_dir),); - } + if ($this->allowUndefinedVars && $errstr == 'Attempt to read property "value" on null') { + return; // suppresses this error } - // walk the muted directories and test against $errfile - foreach (self::$mutedDirectories as $key => &$dir) { - if (!$dir) { - // resolve directory and length for speedy comparisons - $file = realpath($key); - if ($file === false) { - // this directory does not exist, remove and skip it - unset(self::$mutedDirectories[ $key ]); - continue; - } - $dir = array('file' => $file, 'length' => strlen($file),); - } - 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())) { - if (self::$previousErrorHandler) { - return call_user_func( - self::$previousErrorHandler, - $errno, - $errstr, - $errfile, - $errline, - $errcontext - ); - } else { - return false; - } + + if ($this->allowUndefinedArrayKeys && preg_match( + '/^(Undefined array key|Trying to access array offset on value of type null)/', + $errstr + )) { + return; // suppresses this error } + + // pass all other errors through to the previous error handler or to the default PHP error handler + return $this->previousErrorHandler ? + call_user_func($this->previousErrorHandler, $errno, $errstr, $errfile, $errline, $errcontext) : false; } } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php index 881375efe..e207734e8 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_Append * appends values to template variables * * @api Smarty::append() - * @link http://www.smarty.net/docs/en/api.append.tpl + * @link https://www.smarty.net/docs/en/api.append.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param array|string $tpl_var the template variable name(s) diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php index c95904460..b5be69b54 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php @@ -15,7 +15,7 @@ class Smarty_Internal_Method_AppendByRef * appends values to template variables by reference * * @api Smarty::appendByRef() - * @link http://www.smarty.net/docs/en/api.append.by.ref.tpl + * @link https://www.smarty.net/docs/en/api.append.by.ref.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string $tpl_var the template variable name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php index 29ff2ffb0..6fb0c8f3d 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ClearAllAssign * clear all the assigned template variables. * * @api Smarty::clearAllAssign() - * @link http://www.smarty.net/docs/en/api.clear.all.assign.tpl + * @link https://www.smarty.net/docs/en/api.clear.all.assign.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php index 30d55f7d2..b74d30580 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ClearAllCache * Empty cache folder * * @api Smarty::clearAllCache() - * @link http://www.smarty.net/docs/en/api.clear.all.cache.tpl + * @link https://www.smarty.net/docs/en/api.clear.all.cache.tpl * * @param \Smarty $smarty * @param integer $exp_time expiration time diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php index 22bfa2d31..12b755c06 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ClearAssign * clear the given assigned template variable(s). * * @api Smarty::clearAssign() - * @link http://www.smarty.net/docs/en/api.clear.assign.tpl + * @link https://www.smarty.net/docs/en/api.clear.assign.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string|array $tpl_var the template variable(s) to clear diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php index a5dd4e26e..df766eee8 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ClearCache * Empty cache for a specific template * * @api Smarty::clearCache() - * @link http://www.smarty.net/docs/en/api.clear.cache.tpl + * @link https://www.smarty.net/docs/en/api.clear.cache.tpl * * @param \Smarty $smarty * @param string $template_name template name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php index bf4929807..db0a49b00 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ClearCompiledTemplate * Delete compiled template file * * @api Smarty::clearCompiledTemplate() - * @link http://www.smarty.net/docs/en/api.clear.compiled.template.tpl + * @link https://www.smarty.net/docs/en/api.clear.compiled.template.tpl * * @param \Smarty $smarty * @param string $resource_name template name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php index 15bf492a1..d1b730322 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ClearConfig * clear a single or all config variables * * @api Smarty::clearConfig() - * @link http://www.smarty.net/docs/en/api.clear.config.tpl + * @link https://www.smarty.net/docs/en/api.clear.config.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string|null $name variable name or null diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php index 2e6254880..c3174d2d0 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_ConfigLoad * load a config file, optionally load just selected sections * * @api Smarty::configLoad() - * @link http://www.smarty.net/docs/en/api.config.load.tpl + * @link https://www.smarty.net/docs/en/api.config.load.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string $config_file filename @@ -42,7 +42,7 @@ class Smarty_Internal_Method_ConfigLoad * load a config file, optionally load just selected sections * * @api Smarty::configLoad() - * @link http://www.smarty.net/docs/en/api.config.load.tpl + * @link https://www.smarty.net/docs/en/api.config.load.tpl * * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data * @param string $config_file filename diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php index f95097519..c684c0870 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_CreateData * creates a data object * * @api Smarty::createData() - * @link http://www.smarty.net/docs/en/api.create.data.tpl + * @link https://www.smarty.net/docs/en/api.create.data.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param \Smarty_Internal_Template|\Smarty_Internal_Data|\Smarty_Data|\Smarty $parent next higher level of Smarty diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php index 1d11e44c1..763bdf989 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_GetConfigVars * Returns a single or all config variables * * @api Smarty::getConfigVars() - * @link http://www.smarty.net/docs/en/api.get.config.vars.tpl + * @link https://www.smarty.net/docs/en/api.get.config.vars.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string $varname variable name or null diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php index df6ede130..0b3a071d3 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_GetRegisteredObject * return a reference to a registered object * * @api Smarty::getRegisteredObject() - * @link http://www.smarty.net/docs/en/api.get.registered.object.tpl + * @link https://www.smarty.net/docs/en/api.get.registered.object.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $object_name object name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php index c07ae07ec..0d1335a8d 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_GetTags * Return array of tag/attributes of all tags used by an template * * @api Smarty::getTags() - * @link http://www.smarty.net/docs/en/api.get.tags.tpl + * @link https://www.smarty.net/docs/en/api.get.tags.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param null|string|Smarty_Internal_Template $template diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php index 9ef7d46bb..0470785b1 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_GetTemplateVars * Returns a single or all template variables * * @api Smarty::getTemplateVars() - * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl + * @link https://www.smarty.net/docs/en/api.get.template.vars.tpl * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string $varName variable name or null diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php index 66d80d474..af788a24e 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php @@ -30,7 +30,7 @@ class Smarty_Internal_Method_LoadFilter * * @api Smarty::loadFilter() * - * @link http://www.smarty.net/docs/en/api.load.filter.tpl + * @link https://www.smarty.net/docs/en/api.load.filter.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type filter type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php index 648365619..5608b3fd0 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_RegisterCacheResource * Registers a resource to fetch a template * * @api Smarty::registerCacheResource() - * @link http://www.smarty.net/docs/en/api.register.cacheresource.tpl + * @link https://www.smarty.net/docs/en/api.register.cacheresource.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $name name of resource type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php index 8d18547e2..76a69c6e5 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_RegisterClass * Registers static classes to be used in templates * * @api Smarty::registerClass() - * @link http://www.smarty.net/docs/en/api.register.class.tpl + * @link https://www.smarty.net/docs/en/api.register.class.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $class_name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php index a9fb78dc6..4cda5b056 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_RegisterDefaultPluginHandler * Registers a default plugin handler * * @api Smarty::registerDefaultPluginHandler() - * @link http://www.smarty.net/docs/en/api.register.default.plugin.handler.tpl + * @link https://www.smarty.net/docs/en/api.register.default.plugin.handler.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param callable $callback class/method name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php index c0f9fff10..9719eb2b6 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php @@ -30,7 +30,7 @@ class Smarty_Internal_Method_RegisterFilter * * @api Smarty::registerFilter() * - * @link http://www.smarty.net/docs/en/api.register.filter.tpl + * @link https://www.smarty.net/docs/en/api.register.filter.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type filter type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php index 4646e4f22..8e6fe0521 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_RegisterObject * Registers object to be used in templates * * @api Smarty::registerObject() - * @link http://www.smarty.net/docs/en/api.register.object.tpl + * @link https://www.smarty.net/docs/en/api.register.object.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $object_name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php index ed18d84bb..74c0ae908 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_RegisterPlugin * Registers plugin to be used in templates * * @api Smarty::registerPlugin() - * @link http://www.smarty.net/docs/en/api.register.plugin.tpl + * @link https://www.smarty.net/docs/en/api.register.plugin.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type plugin type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php index 7c7d0f78a..302657ae0 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php @@ -22,25 +22,18 @@ class Smarty_Internal_Method_RegisterResource * Registers a resource to fetch a template * * @api Smarty::registerResource() - * @link http://www.smarty.net/docs/en/api.register.resource.tpl + * @link https://www.smarty.net/docs/en/api.register.resource.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $name name of resource type - * @param Smarty_Resource|array $resource_handler or instance of - * Smarty_Resource, - * or array of - * callbacks to - * handle - * resource - * (deprecated) + * @param Smarty_Resource $resource_handler instance of Smarty_Resource * * @return \Smarty|\Smarty_Internal_Template */ - public function registerResource(Smarty_Internal_TemplateBase $obj, $name, $resource_handler) + public function registerResource(Smarty_Internal_TemplateBase $obj, $name, Smarty_Resource $resource_handler) { $smarty = $obj->_getSmartyObj(); - $smarty->registered_resources[ $name ] = - $resource_handler instanceof Smarty_Resource ? $resource_handler : array($resource_handler, false); + $smarty->registered_resources[ $name ] = $resource_handler; return $obj; } } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php index 55e1596be..e41e8dffc 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php @@ -16,7 +16,7 @@ class Smarty_Internal_Method_UnloadFilter extends Smarty_Internal_Method_LoadFil * * @api Smarty::unloadFilter() * - * @link http://www.smarty.net/docs/en/api.unload.filter.tpl + * @link https://www.smarty.net/docs/en/api.unload.filter.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type filter type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php index b99903867..377397e97 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php @@ -22,7 +22,7 @@ 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 + * @link https://www.smarty.net/docs/en/api.unregister.cacheresource.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param $name diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php index 9cb494a52..ebc9337d0 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php @@ -16,7 +16,7 @@ class Smarty_Internal_Method_UnregisterFilter extends Smarty_Internal_Method_Reg * * @api Smarty::unregisterFilter() * - * @link http://www.smarty.net/docs/en/api.unregister.filter.tpl + * @link https://www.smarty.net/docs/en/api.unregister.filter.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type filter type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php index 1e592b339..77d619637 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_UnregisterObject * Registers plugin to be used in templates * * @api Smarty::unregisterObject() - * @link http://www.smarty.net/docs/en/api.unregister.object.tpl + * @link https://www.smarty.net/docs/en/api.unregister.object.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $object_name name of object diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php index f39e31678..2431d5c23 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_UnregisterPlugin * Registers plugin to be used in templates * * @api Smarty::unregisterPlugin() - * @link http://www.smarty.net/docs/en/api.unregister.plugin.tpl + * @link https://www.smarty.net/docs/en/api.unregister.plugin.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type plugin type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php index a79db4299..bbb6a861d 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php @@ -22,7 +22,7 @@ class Smarty_Internal_Method_UnregisterResource * Registers a resource to fetch a template * * @api Smarty::unregisterResource() - * @link http://www.smarty.net/docs/en/api.unregister.resource.tpl + * @link https://www.smarty.net/docs/en/api.unregister.resource.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type name of resource type diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php index ab4c3ec3b..829c420fe 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php @@ -87,83 +87,83 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree $code = ''; foreach ($this->getChunkedSubtrees() as $chunk) { - $text = ''; - switch ($chunk['mode']) { - case 'textstripped': - foreach ($chunk['subtrees'] as $subtree) { - $text .= $subtree->to_smarty_php($parser); - } - $code .= preg_replace( - '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', - "<?php echo '\$1'; ?>\n", - $parser->compiler->processText($text) - ); - break; - case 'text': - foreach ($chunk['subtrees'] as $subtree) { - $text .= $subtree->to_smarty_php($parser); - } - $code .= preg_replace( - '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', - "<?php echo '\$1'; ?>\n", - $text - ); - break; - case 'tag': - foreach ($chunk['subtrees'] as $subtree) { - $text = $parser->compiler->appendCode($text, $subtree->to_smarty_php($parser)); - } - $code .= $text; - break; - default: - foreach ($chunk['subtrees'] as $subtree) { - $text = $subtree->to_smarty_php($parser); - } - $code .= $text; + $text = ''; + switch ($chunk['mode']) { + case 'textstripped': + foreach ($chunk['subtrees'] as $subtree) { + $text .= $subtree->to_smarty_php($parser); + } + $code .= preg_replace( + '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', + "<?php echo '\$1'; ?>\n", + $parser->compiler->processText($text) + ); + break; + case 'text': + foreach ($chunk['subtrees'] as $subtree) { + $text .= $subtree->to_smarty_php($parser); + } + $code .= preg_replace( + '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', + "<?php echo '\$1'; ?>\n", + $text + ); + break; + case 'tag': + foreach ($chunk['subtrees'] as $subtree) { + $text = $parser->compiler->appendCode($text, $subtree->to_smarty_php($parser)); + } + $code .= $text; + break; + default: + foreach ($chunk['subtrees'] as $subtree) { + $text = $subtree->to_smarty_php($parser); + } + $code .= $text; - } + } } return $code; } private function getChunkedSubtrees() { - $chunks = array(); - $currentMode = null; - $currentChunk = array(); - for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) { + $chunks = array(); + $currentMode = null; + $currentChunk = array(); + for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) { - if ($this->subtrees[ $key ]->data === '' && in_array($currentMode, array('textstripped', 'text', 'tag'))) { - continue; - } + if ($this->subtrees[ $key ]->data === '' && in_array($currentMode, array('textstripped', 'text', 'tag'))) { + continue; + } - if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text - && $this->subtrees[ $key ]->isToBeStripped()) { - $newMode = 'textstripped'; - } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) { - $newMode = 'text'; - } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) { - $newMode = 'tag'; - } else { - $newMode = 'other'; - } + if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text + && $this->subtrees[ $key ]->isToBeStripped()) { + $newMode = 'textstripped'; + } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) { + $newMode = 'text'; + } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) { + $newMode = 'tag'; + } else { + $newMode = 'other'; + } - if ($newMode == $currentMode) { - $currentChunk[] = $this->subtrees[ $key ]; - } else { - $chunks[] = array( - 'mode' => $currentMode, - 'subtrees' => $currentChunk - ); - $currentMode = $newMode; - $currentChunk = array($this->subtrees[ $key ]); - } - } - if ($currentMode && $currentChunk) { - $chunks[] = array( - 'mode' => $currentMode, - 'subtrees' => $currentChunk - ); - } - return $chunks; + if ($newMode == $currentMode) { + $currentChunk[] = $this->subtrees[ $key ]; + } else { + $chunks[] = array( + 'mode' => $currentMode, + 'subtrees' => $currentChunk + ); + $currentMode = $newMode; + $currentChunk = array($this->subtrees[ $key ]); + } + } + if ($currentMode && $currentChunk) { + $chunks[] = array( + 'mode' => $currentMode, + 'subtrees' => $currentChunk + ); + } + return $chunks; } } diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php index 399e84941..58116c811 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php @@ -17,30 +17,30 @@ class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree { - /** - * Wether this section should be stripped on output to smarty php - * @var bool - */ - private $toBeStripped = false; + /** + * Wether this section should be stripped on output to smarty php + * @var bool + */ + private $toBeStripped = false; - /** - * Create template text buffer - * - * @param string $data text - * @param bool $toBeStripped wether this section should be stripped on output to smarty php - */ + /** + * Create template text buffer + * + * @param string $data text + * @param bool $toBeStripped wether this section should be stripped on output to smarty php + */ public function __construct($data, $toBeStripped = false) { $this->data = $data; $this->toBeStripped = $toBeStripped; } - /** - * Wether this section should be stripped on output to smarty php - * @return bool - */ - public function isToBeStripped() { - return $this->toBeStripped; + /** + * Wether this section should be stripped on output to smarty php + * @return bool + */ + public function isToBeStripped() { + return $this->toBeStripped; } /** diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php deleted file mode 100644 index df526101f..000000000 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_registered.php +++ /dev/null @@ -1,101 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Registered - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Registered - * Implements the registered resource for Smarty template - * - * @package Smarty - * @subpackage TemplateResources - * @deprecated - */ -class Smarty_Internal_Resource_Registered extends Smarty_Resource -{ - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) - { - $source->filepath = $source->type . ':' . $source->name; - $source->uid = sha1($source->filepath . $source->smarty->_joined_template_dir); - $source->timestamp = $this->getTemplateTimestamp($source); - $source->exists = !!$source->timestamp; - } - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Source $source) - { - $source->timestamp = $this->getTemplateTimestamp($source); - $source->exists = !!$source->timestamp; - } - - /** - * Get timestamp (epoch) the template source was modified - * - * @param Smarty_Template_Source $source source object - * - * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp - */ - public function getTemplateTimestamp(Smarty_Template_Source $source) - { - // return timestamp - $time_stamp = false; - call_user_func_array( - $source->smarty->registered_resources[ $source->type ][ 0 ][ 1 ], - array($source->name, &$time_stamp, $source->smarty) - ); - return is_numeric($time_stamp) ? (int)$time_stamp : $time_stamp; - } - - /** - * Load template's source by invoking the registered callback into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) - { - // return template string - $content = null; - $t = call_user_func_array( - $source->smarty->registered_resources[ $source->type ][ 0 ][ 0 ], - array($source->name, &$content, $source->smarty) - ); - if (is_bool($t) && !$t) { - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - return $content; - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) - { - return basename($source->name); - } -} diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php index 9956bd073..5f0203498 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php @@ -13,7 +13,7 @@ * Smarty Internal Plugin Resource Stream * Implements the streams as resource for Smarty template * - * @link http://php.net/streams + * @link https://php.net/streams * @package Smarty * @subpackage TemplateResources */ diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php index 983ca6180..b5361c9bb 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php @@ -45,7 +45,7 @@ class Smarty_Internal_Runtime_CodeFrame $properties[ 'cache_lifetime' ] = $_template->cache_lifetime; } $output = "<?php\n"; - $output .= "/* Smarty version {$properties[ 'version' ]}, created on " . strftime("%Y-%m-%d %H:%M:%S") . + $output .= "/* Smarty version {$properties[ 'version' ]}, created on " . date("Y-m-d H:i:s") . "\n from '" . str_replace('*/', '* /', $_template->source->filepath) . "' */\n\n"; $output .= "/* @var Smarty_Internal_Template \$_smarty_tpl */\n"; $dec = "\$_smarty_tpl->_decodeProperties(\$_smarty_tpl, " . var_export($properties, true) . ',' . diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php index 200c11bb5..2ffb896fa 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php @@ -138,7 +138,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data * test if cache is valid * * @api Smarty::isCached() - * @link http://www.smarty.net/docs/en/api.is.cached.tpl + * @link https://www.smarty.net/docs/en/api.is.cached.tpl * * @param null|string|\Smarty_Internal_Template $template the resource handle of the template file or template * object @@ -199,6 +199,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data try { $_smarty_old_error_level = isset($smarty->error_reporting) ? error_reporting($smarty->error_reporting) : null; + + if ($smarty->isMutingUndefinedOrNullWarnings()) { + $errorHandler = new Smarty_Internal_ErrorHandler(); + $errorHandler->activate(); + } + if ($this->_objType === 2) { /* @var Smarty_Internal_Template $this */ $template->tplFunctions = $this->tplFunctions; @@ -242,6 +248,11 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data } } } + + if (isset($errorHandler)) { + $errorHandler->deactivate(); + } + if (isset($_smarty_old_error_level)) { error_reporting($_smarty_old_error_level); } @@ -250,6 +261,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data while (ob_get_level() > $level) { ob_end_clean(); } + if (isset($errorHandler)) { + $errorHandler->deactivate(); + } + if (isset($_smarty_old_error_level)) { error_reporting($_smarty_old_error_level); } @@ -261,7 +276,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data * Registers plugin to be used in templates * * @api Smarty::registerPlugin() - * @link http://www.smarty.net/docs/en/api.register.plugin.tpl + * @link https://www.smarty.net/docs/en/api.register.plugin.tpl * * @param string $type plugin type * @param string $name name of template tag @@ -281,7 +296,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data * load a filter of specified type and name * * @api Smarty::loadFilter() - * @link http://www.smarty.net/docs/en/api.load.filter.tpl + * @link https://www.smarty.net/docs/en/api.load.filter.tpl * * @param string $type filter type * @param string $name filter name @@ -298,7 +313,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data * Registers a filter function * * @api Smarty::registerFilter() - * @link http://www.smarty.net/docs/en/api.register.filter.tpl + * @link https://www.smarty.net/docs/en/api.register.filter.tpl * * @param string $type filter type * @param callable $callback @@ -316,7 +331,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data * Registers object to be used in templates * * @api Smarty::registerObject() - * @link http://www.smarty.net/docs/en/api.register.object.tpl + * @link https://www.smarty.net/docs/en/api.register.object.tpl * * @param string $object_name * @param object $object the referenced PHP object to register diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php index 3cc957dec..272616148 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php @@ -204,13 +204,6 @@ abstract class Smarty_Internal_TemplateCompilerBase public $blockOrFunctionCode = ''; /** - * php_handling setting either from Smarty or security - * - * @var int - */ - public $php_handling = 0; - - /** * flags for used modifier plugins * * @var array @@ -438,11 +431,6 @@ abstract class Smarty_Internal_TemplateCompilerBase } $this->smarty->_debug->start_compile($this->template); } - if (isset($this->template->smarty->security_policy)) { - $this->php_handling = $this->template->smarty->security_policy->php_handling; - } else { - $this->php_handling = $this->template->smarty->php_handling; - } $this->parent_compiler = $parent_compiler ? $parent_compiler : $this; $nocache = isset($nocache) ? $nocache : false; if (empty($template->compiled->nocache_hash)) { @@ -627,11 +615,11 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->trigger_template_error('Illegal number of parameter in "isset()"'); } - $pa = array(); - foreach ($parameter as $p) { - $pa[] = $this->syntaxMatchesVariable($p) ? 'isset(' . $p . ')' : '(' . $p . ' !== null )'; - } - return '(' . implode(' && ', $pa) . ')'; + $pa = array(); + foreach ($parameter as $p) { + $pa[] = $this->syntaxMatchesVariable($p) ? 'isset(' . $p . ')' : '(' . $p . ' !== null )'; + } + return '(' . implode(' && ', $pa) . ')'; } elseif (in_array( $func_name, @@ -649,12 +637,8 @@ abstract class Smarty_Internal_TemplateCompilerBase $this->trigger_template_error("Illegal number of parameter in '{$func_name()}'"); } if ($func_name === 'empty') { - if (!$this->syntaxMatchesVariable($parameter[0]) && version_compare(PHP_VERSION, '5.5.0', '<')) { - return '(' . $parameter[ 0 ] . ' === false )'; - } else { - return $func_name . '(' . - str_replace("')->value", "',null,true,false)->value", $parameter[ 0 ]) . ')'; - } + return $func_name . '(' . + str_replace("')->value", "',null,true,false)->value", $parameter[ 0 ]) . ')'; } else { return $func_name . '(' . $parameter[ 0 ] . ')'; } @@ -667,16 +651,16 @@ abstract class Smarty_Internal_TemplateCompilerBase } } - /** - * Determines whether the passed string represents a valid (PHP) variable. - * This is important, because `isset()` only works on variables and `empty()` can only be passed - * a variable prior to php5.5 - * @param $string - * @return bool - */ - private function syntaxMatchesVariable($string) { - static $regex_pattern = '/^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*((->)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*|\[.*]*\])*$/'; - return 1 === preg_match($regex_pattern, trim($string)); + /** + * Determines whether the passed string represents a valid (PHP) variable. + * This is important, because `isset()` only works on variables and `empty()` can only be passed + * a variable prior to php5.5 + * @param $string + * @return bool + */ + private function syntaxMatchesVariable($string) { + static $regex_pattern = '/^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*((->)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*|\[.*]*\])*$/'; + return 1 === preg_match($regex_pattern, trim($string)); } /** @@ -691,11 +675,11 @@ abstract class Smarty_Internal_TemplateCompilerBase { if (strpos($text, '<') === false) { - return preg_replace($this->stripRegEx, '', $text); + return preg_replace($this->stripRegEx, '', $text); } - $store = array(); - $_store = 0; + $store = array(); + $_store = 0; // capture html elements not to be messed with $_offset = 0; @@ -1151,7 +1135,7 @@ abstract class Smarty_Internal_TemplateCompilerBase flush(); } $e = new SmartyCompilerException($error_text); - $e->line = $line; + $e->setLine($line); $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ])); $e->desc = $args; $e->template = $this->template->source->filepath; diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php index 867a31d26..5ca482058 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php @@ -18,12 +18,6 @@ */ class Smarty_Internal_Templatelexer { - const TEXT = 1; - const TAG = 2; - const TAGBODY = 3; - const LITERAL = 4; - const DOUBLEQUOTEDSTRING = 5; - /** * Source * @@ -80,7 +74,7 @@ class Smarty_Internal_Templatelexer */ public $phpType = ''; - /** + /** * state number * * @var int @@ -229,10 +223,6 @@ class Smarty_Internal_Templatelexer */ private $yy_global_literal = null; - private $_yy_state = 1; - - private $_yy_stack = array(); - /** * constructor * @@ -245,14 +235,14 @@ class Smarty_Internal_Templatelexer $this->dataLength = strlen($this->data); $this->counter = 0; if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) { - $this->counter += strlen($match[ 0 ]); + $this->counter += strlen($match[0]); } $this->line = 1; $this->smarty = $compiler->template->smarty; $this->compiler = $compiler; $this->compiler->initDelimiterPreg(); - $this->smarty_token_names[ 'LDEL' ] = $this->smarty->getLeftDelimiter(); - $this->smarty_token_names[ 'RDEL' ] = $this->smarty->getRightDelimiter(); + $this->smarty_token_names['LDEL'] = $this->smarty->getLeftDelimiter(); + $this->smarty_token_names['RDEL'] = $this->smarty->getRightDelimiter(); } /** @@ -265,17 +255,17 @@ class Smarty_Internal_Templatelexer $this->yyTracePrompt = '<br>'; } - /** + /** * replace placeholders with runtime preg code * * @param string $preg * * @return string */ - public function replace($preg) - { + public function replace($preg) + { return $this->compiler->replaceDelimiter($preg); - } + } /** * check if current value is an autoliteral left delimiter @@ -286,7 +276,11 @@ class Smarty_Internal_Templatelexer { return $this->smarty->getAutoLiteral() && isset($this->value[ $this->compiler->getLdelLength() ]) ? strpos(" \n\t\r", $this->value[ $this->compiler->getLdelLength() ]) !== false : false; - } // end function + } + + + private $_yy_state = 1; + private $_yy_stack = array(); public function yylex() { @@ -296,62 +290,60 @@ class Smarty_Internal_Templatelexer public function yypushstate($state) { if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); + fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } array_push($this->_yy_stack, $this->_yy_state); $this->_yy_state = $state; if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); + fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } } public function yypopstate() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); + if ($this->yyTraceFILE) { + fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } - $this->_yy_state = array_pop($this->_yy_stack); + $this->_yy_state = array_pop($this->_yy_stack); if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); + fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } + } public function yybegin($state) { - $this->_yy_state = $state; + $this->_yy_state = $state; if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); + fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } } + + public function yylex1() { if (!isset($this->yy_global_pattern1)) { - $this->yy_global_pattern1 = - $this->replace("/\G([{][}])|\G((SMARTYldel)SMARTYal[*])|\G((SMARTYldel)SMARTYalphp([ ].*?)?SMARTYrdel|(SMARTYldel)SMARTYal[\/]phpSMARTYrdel)|\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([<][?]((php\\s+|=)|\\s+)|[<][%]|[<][?]xml\\s+|[<]script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*[>]|[?][>]|[%][>])|\G([\S\s])/isS"); + $this->yy_global_pattern1 = $this->replace("/\G([{][}])|\G((SMARTYldel)SMARTYal[*])|\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\S\s])/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); } - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } + do { - if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, 0, $this->counter)) { - if (!isset($yymatches[ 0 ][ 1 ])) { - $yymatches = preg_grep("/(.|\s)+/", $yymatches); + if (preg_match($this->yy_global_pattern1,$this->data, $yymatches, 0, $this->counter)) { + if (!isset($yymatches[ 0 ][1])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state TEXT'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state TEXT'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -369,110 +361,102 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; - } - } else { - throw new Exception('Unexpected input at line ' . $this->line . - ': ' . $this->data[ $this->counter ]); + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); } break; } while (true); - } + } // end function + + + const TEXT = 1; public function yy_r1_1() { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } public function yy_r1_2() { - $to = $this->dataLength; - preg_match("/[*]{$this->compiler->getRdelPreg()}[\n]?/", $this->data, $match, PREG_OFFSET_CAPTURE, - $this->counter); - if (isset($match[ 0 ][ 1 ])) { - $to = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]); + + $to = $this->dataLength; + preg_match("/[*]{$this->compiler->getRdelPreg()}[\n]?/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); + if (isset($match[0][1])) { + $to = $match[0][1] + strlen($match[0][0]); } else { - $this->compiler->trigger_template_error("missing or misspelled comment closing tag '{$this->smarty->getRightDelimiter()}'"); + $this->compiler->trigger_template_error ("missing or misspelled comment closing tag '{$this->smarty->getRightDelimiter()}'"); } - $this->value = substr($this->data, $this->counter, $to - $this->counter); + $this->value = substr($this->data,$this->counter,$to-$this->counter); return false; - } - + } public function yy_r1_4() { - $this->compiler->getTagCompiler('private_php')->parsePhp($this); - } - public function yy_r1_8() - { $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yy_r1_10() + } + public function yy_r1_6() { + $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; $this->yypushstate(self::LITERAL); - } - - public function yy_r1_12() + } + public function yy_r1_8() { + $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; $this->yypushstate(self::LITERAL); - } // end function - - public function yy_r1_14() + } + public function yy_r1_10() { + $this->yypushstate(self::TAG); return true; - } - - public function yy_r1_16() + } + public function yy_r1_12() { - $this->compiler->getTagCompiler('private_php')->parsePhp($this); - } - public function yy_r1_19() - { - if (!isset($this->yy_global_text)) { - $this->yy_global_text = - $this->replace('/(SMARTYldel)SMARTYal|[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*[>]|[?][>]|[%][>]SMARTYliteral/isS'); - } - $to = $this->dataLength; - preg_match($this->yy_global_text, $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[ 0 ][ 1 ])) { - $to = $match[ 0 ][ 1 ]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + if (!isset($this->yy_global_text)) { + $this->yy_global_text = $this->replace('/(SMARTYldel)SMARTYal/isS'); + } + $to = $this->dataLength; + preg_match($this->yy_global_text, $this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); + if (isset($match[0][1])) { + $to = $match[0][1]; + } + $this->value = substr($this->data,$this->counter,$to-$this->counter); + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } + public function yylex2() { if (!isset($this->yy_global_pattern2)) { - $this->yy_global_pattern2 = - $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYalmake_nocache\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS"); + $this->yy_global_pattern2 = $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYalmake_nocache\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); } - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } + do { - if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, 0, $this->counter)) { - if (!isset($yymatches[ 0 ][ 1 ])) { - $yymatches = preg_grep("/(.|\s)+/", $yymatches); + if (preg_match($this->yy_global_pattern2,$this->data, $yymatches, 0, $this->counter)) { + if (!isset($yymatches[ 0 ][1])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state TAG'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state TAG'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -490,79 +474,82 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; - } - } else { - throw new Exception('Unexpected input at line ' . $this->line . - ': ' . $this->data[ $this->counter ]); + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); } break; } while (true); - } + } // end function + + + const TAG = 2; public function yy_r2_1() { + $this->token = Smarty_Internal_Templateparser::TP_LDELIF; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r2_4() { + $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r2_6() { + $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r2_8() { + $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r2_10() { + $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r2_12() { + $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; $this->taglineno = $this->line; - } - + } public function yy_r2_15() { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; - $this->taglineno = $this->line; - } + $this->yypopstate(); + $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; + $this->taglineno = $this->line; + } public function yy_r2_18() { + $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG; $this->taglineno = $this->line; - } - + } public function yy_r2_20() { - if ($this->_yy_stack[ count($this->_yy_stack) - 1 ] === self::TEXT) { + + if ($this->_yy_stack[count($this->_yy_stack)-1] === self::TEXT) { $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT; $this->taglineno = $this->line; @@ -572,45 +559,46 @@ class Smarty_Internal_Templatelexer $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } - } // end function - + } public function yy_r2_23() { + $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r2_25() { + $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; - } + } + public function yylex3() { if (!isset($this->yy_global_pattern3)) { - $this->yy_global_pattern3 = - $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"); + $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); } - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } + do { - if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, 0, $this->counter)) { - if (!isset($yymatches[ 0 ][ 1 ])) { - $yymatches = preg_grep("/(.|\s)+/", $yymatches); + if (preg_match($this->yy_global_pattern3,$this->data, $yymatches, 0, $this->counter)) { + if (!isset($yymatches[ 0 ][1])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state TAGBODY'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state TAGBODY'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -628,281 +616,285 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; - } - } else { - throw new Exception('Unexpected input at line ' . $this->line . - ': ' . $this->data[ $this->counter ]); + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); } break; } while (true); - } + } // end function + + + const TAGBODY = 3; public function yy_r3_1() { + $this->token = Smarty_Internal_Templateparser::TP_RDEL; $this->yypopstate(); - } - + } public function yy_r3_2() { + $this->yypushstate(self::TAG); return true; - } - + } public function yy_r3_4() { + $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypushstate(self::DOUBLEQUOTEDSTRING); $this->compiler->enterDoubleQuote(); - } - + } public function yy_r3_5() { - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; - } + $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; + } public function yy_r3_6() { - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } + $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; + } public function yy_r3_7() { - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } + $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; + } public function yy_r3_8() { - $this->token = Smarty_Internal_Templateparser::TP_ISIN; - } + $this->token = Smarty_Internal_Templateparser::TP_ISIN; + } public function yy_r3_9() { - $this->token = Smarty_Internal_Templateparser::TP_AS; - } + $this->token = Smarty_Internal_Templateparser::TP_AS; + } public function yy_r3_10() { - $this->token = Smarty_Internal_Templateparser::TP_TO; - } + $this->token = Smarty_Internal_Templateparser::TP_TO; + } public function yy_r3_11() { - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } + $this->token = Smarty_Internal_Templateparser::TP_STEP; + } public function yy_r3_12() { - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; - } + $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; + } public function yy_r3_13() { - $this->token = Smarty_Internal_Templateparser::TP_LOGOP; - } + $this->token = Smarty_Internal_Templateparser::TP_LOGOP; + } public function yy_r3_15() { - $this->token = Smarty_Internal_Templateparser::TP_SLOGOP; - } + $this->token = Smarty_Internal_Templateparser::TP_SLOGOP; + } public function yy_r3_17() { - $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; - } + $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; + } public function yy_r3_20() { - $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; - } + $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; + } public function yy_r3_23() { - $this->token = Smarty_Internal_Templateparser::TP_NOT; - } + $this->token = Smarty_Internal_Templateparser::TP_NOT; + } public function yy_r3_24() { - $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; - } + $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; + } public function yy_r3_28() { - $this->token = Smarty_Internal_Templateparser::TP_OPENP; - } + $this->token = Smarty_Internal_Templateparser::TP_OPENP; + } public function yy_r3_29() { - $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; - } + $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; + } public function yy_r3_30() { - $this->token = Smarty_Internal_Templateparser::TP_OPENB; - } + $this->token = Smarty_Internal_Templateparser::TP_OPENB; + } public function yy_r3_31() { - $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; - } + $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; + } public function yy_r3_32() { - $this->token = Smarty_Internal_Templateparser::TP_PTR; - } + $this->token = Smarty_Internal_Templateparser::TP_PTR; + } public function yy_r3_33() { - $this->token = Smarty_Internal_Templateparser::TP_APTR; - } + $this->token = Smarty_Internal_Templateparser::TP_APTR; + } public function yy_r3_34() { - $this->token = Smarty_Internal_Templateparser::TP_EQUAL; - } + $this->token = Smarty_Internal_Templateparser::TP_EQUAL; + } public function yy_r3_35() { - $this->token = Smarty_Internal_Templateparser::TP_INCDEC; - } + $this->token = Smarty_Internal_Templateparser::TP_INCDEC; + } public function yy_r3_37() { - $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; - } + $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; + } public function yy_r3_39() { - $this->token = Smarty_Internal_Templateparser::TP_MATH; - } + $this->token = Smarty_Internal_Templateparser::TP_MATH; + } public function yy_r3_41() { - $this->token = Smarty_Internal_Templateparser::TP_AT; - } + $this->token = Smarty_Internal_Templateparser::TP_AT; + } public function yy_r3_42() { - $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN; - } + $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN; + } public function yy_r3_43() { - $this->token = Smarty_Internal_Templateparser::TP_HATCH; - } + $this->token = Smarty_Internal_Templateparser::TP_HATCH; + } public function yy_r3_44() { + // resolve conflicts with shorttag and right_delimiter starting with '=' - if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === - $this->smarty->getRightDelimiter()) { - preg_match('/\s+/', $this->value, $match); - $this->value = $match[ 0 ]; + if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()) { + preg_match('/\s+/',$this->value,$match); + $this->value = $match[0]; $this->token = Smarty_Internal_Templateparser::TP_SPACE; } else { $this->token = Smarty_Internal_Templateparser::TP_ATTR; } - } - + } public function yy_r3_45() { - $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; - } + $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; + } public function yy_r3_48() { - $this->token = Smarty_Internal_Templateparser::TP_ID; - } + $this->token = Smarty_Internal_Templateparser::TP_ID; + } public function yy_r3_49() { - $this->token = Smarty_Internal_Templateparser::TP_INTEGER; - } + $this->token = Smarty_Internal_Templateparser::TP_INTEGER; + } public function yy_r3_50() { + $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->yypopstate(); - } - + } public function yy_r3_51() { - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } + $this->token = Smarty_Internal_Templateparser::TP_VERT; + } public function yy_r3_52() { - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } + $this->token = Smarty_Internal_Templateparser::TP_DOT; + } public function yy_r3_53() { - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } + $this->token = Smarty_Internal_Templateparser::TP_COMMA; + } public function yy_r3_54() { - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } + $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; + } public function yy_r3_55() { - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } + $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; + } public function yy_r3_56() { - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } + $this->token = Smarty_Internal_Templateparser::TP_COLON; + } public function yy_r3_57() { - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } + $this->token = Smarty_Internal_Templateparser::TP_QMARK; + } public function yy_r3_58() { - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } + $this->token = Smarty_Internal_Templateparser::TP_HEX; + } public function yy_r3_59() { - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } // end function + $this->token = Smarty_Internal_Templateparser::TP_SPACE; + } public function yy_r3_60() { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + } + + public function yylex4() { if (!isset($this->yy_global_pattern4)) { - $this->yy_global_pattern4 = - $this->replace("/\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G([\S\s])/isS"); + $this->yy_global_pattern4 = $this->replace("/\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G([\S\s])/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); } - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } + do { - if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, 0, $this->counter)) { - if (!isset($yymatches[ 0 ][ 1 ])) { - $yymatches = preg_grep("/(.|\s)+/", $yymatches); + if (preg_match($this->yy_global_pattern4,$this->data, $yymatches, 0, $this->counter)) { + if (!isset($yymatches[ 0 ][1])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state LITERAL'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state LITERAL'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -920,76 +912,80 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; - } - } else { - throw new Exception('Unexpected input at line ' . $this->line . - ': ' . $this->data[ $this->counter ]); + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); } break; } while (true); - } + } // end function + + + const LITERAL = 4; public function yy_r4_1() { + $this->literal_cnt++; $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - + } public function yy_r4_3() { + if ($this->literal_cnt) { - $this->literal_cnt--; + $this->literal_cnt--; $this->token = Smarty_Internal_Templateparser::TP_LITERAL; } else { $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; $this->yypopstate(); } - } - + } public function yy_r4_5() { - if (!isset($this->yy_global_literal)) { - $this->yy_global_literal = $this->replace('/(SMARTYldel)SMARTYal[\/]?literalSMARTYrdel/isS'); - } - $to = $this->dataLength; - preg_match($this->yy_global_literal, $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[ 0 ][ 1 ])) { - $to = $match[ 0 ][ 1 ]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } // end function + if (!isset($this->yy_global_literal)) { + $this->yy_global_literal = $this->replace('/(SMARTYldel)SMARTYal[\/]?literalSMARTYrdel/isS'); + } + $to = $this->dataLength; + preg_match($this->yy_global_literal, $this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); + if (isset($match[0][1])) { + $to = $match[0][1]; + } else { + $this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); + } + $this->value = substr($this->data,$this->counter,$to-$this->counter); + $this->token = Smarty_Internal_Templateparser::TP_LITERAL; + } + + public function yylex5() { if (!isset($this->yy_global_pattern5)) { - $this->yy_global_pattern5 = - $this->replace("/\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=((SMARTYldel)SMARTYal|\\$|`\\$|\"SMARTYliteral)))|\G([\S\s])/isS"); + $this->yy_global_pattern5 = $this->replace("/\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=((SMARTYldel)SMARTYal|\\$|`\\$|\"SMARTYliteral)))|\G([\S\s])/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); } - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } + do { - if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, 0, $this->counter)) { - if (!isset($yymatches[ 0 ][ 1 ])) { - $yymatches = preg_grep("/(.|\s)+/", $yymatches); + if (preg_match($this->yy_global_pattern5,$this->data, $yymatches, 0, $this->counter)) { + if (!isset($yymatches[ 0 ][1])) { + $yymatches = preg_grep("/(.|\s)+/", $yymatches); } else { $yymatches = array_filter($yymatches); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state DOUBLEQUOTEDSTRING'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state DOUBLEQUOTEDSTRING'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number @@ -1007,89 +1003,93 @@ class Smarty_Internal_Templatelexer } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); - if ($this->counter >= $this->dataLength) { + if ($this->counter >= $this->dataLength) { return false; // end of input } // skip this token continue; - } - } else { - throw new Exception('Unexpected input at line ' . $this->line . - ': ' . $this->data[ $this->counter ]); + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); } break; } while (true); - } + } // end function + + + const DOUBLEQUOTEDSTRING = 5; public function yy_r5_1() { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } public function yy_r5_3() { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } public function yy_r5_5() { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } public function yy_r5_7() { + $this->yypushstate(self::TAG); return true; - } - + } public function yy_r5_9() { + $this->yypushstate(self::TAG); return true; - } - + } public function yy_r5_11() { + $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->taglineno = $this->line; $this->yypushstate(self::TAGBODY); - } - + } public function yy_r5_13() { + $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypopstate(); - } - + } public function yy_r5_14() { + $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->value = substr($this->value, 0, -1); + $this->value = substr($this->value,0,-1); $this->yypushstate(self::TAGBODY); $this->taglineno = $this->line; - } - + } public function yy_r5_15() { - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } + $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; + } public function yy_r5_16() { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } public function yy_r5_17() { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } public function yy_r5_22() { + $to = $this->dataLength; - $this->value = substr($this->data, $this->counter, $to - $this->counter); + $this->value = substr($this->data,$this->counter,$to-$this->counter); $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } -} + } - + } + +
\ No newline at end of file diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php index aaeae63b7..a2dd0d6fb 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php @@ -7,1598 +7,25 @@ class TP_yyStackEntry ** number for the token at this stack level */ public $minor; /* The user-supplied minor token value. This ** is the value of the token */ -} +}; + // line 11 "../smarty/lexer/smarty_internal_templateparser.y" /** - * 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> - */ +* 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'; - 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_SIMPELOUTPUT = 10; - const TP_SIMPLETAG = 11; - const TP_SMARTYBLOCKCHILDPARENT = 12; - const TP_LDEL = 13; - const TP_RDEL = 14; - const TP_DOLLARID = 15; - const TP_EQUAL = 16; - const TP_ID = 17; - const TP_PTR = 18; - const TP_LDELMAKENOCACHE = 19; - const TP_LDELIF = 20; - const TP_LDELFOR = 21; - const TP_SEMICOLON = 22; - const TP_INCDEC = 23; - const TP_TO = 24; - const TP_STEP = 25; - const TP_LDELFOREACH = 26; - const TP_SPACE = 27; - const TP_AS = 28; - const TP_APTR = 29; - const TP_LDELSETFILTER = 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_ARRAYOPEN = 59; - const TP_QUOTE = 60; - const TP_BACKTICK = 61; - const YY_NO_ACTION = 516; - const YY_ACCEPT_ACTION = 515; - const YY_ERROR_ACTION = 514; - const YY_SZ_ACTTAB = 2071; - const YY_SHIFT_USE_DFLT = -31; - const YY_SHIFT_MAX = 230; - const YY_REDUCE_USE_DFLT = -91; - const YY_REDUCE_MAX = 178; - const YYNOCODE = 110; - const YYSTACKDEPTH = 500; - const YYNSTATE = 327; - const YYNRULE = 187; - const YYERRORSYMBOL = 62; - const YYERRSYMDT = 'yy0'; - const YYFALLBACK = 0; - - public static $yy_action = array( - 251, 234, 237, 1, 144, 127, 428, 184, 199, 212, - 10, 54, 19, 175, 282, 215, 109, 389, 428, 428, - 224, 321, 223, 303, 203, 389, 13, 389, 281, 43, - 389, 428, 41, 40, 266, 225, 389, 213, 389, 194, - 389, 52, 4, 308, 301, 383, 34, 209, 222, 3, - 50, 153, 251, 234, 237, 1, 199, 131, 383, 198, - 305, 212, 10, 54, 383, 16, 199, 428, 109, 385, - 132, 18, 224, 321, 223, 222, 221, 12, 32, 428, - 116, 43, 385, 262, 41, 40, 266, 225, 385, 233, - 95, 194, 16, 52, 4, 131, 301, 252, 18, 265, - 164, 3, 50, 324, 251, 234, 237, 1, 23, 130, - 229, 198, 150, 212, 10, 54, 326, 11, 170, 284, - 109, 42, 22, 239, 224, 321, 223, 193, 221, 261, - 13, 52, 157, 43, 301, 286, 41, 40, 266, 225, - 205, 233, 5, 194, 96, 52, 4, 263, 301, 301, - 99, 349, 96, 3, 50, 199, 251, 234, 237, 1, - 238, 130, 241, 181, 349, 212, 10, 54, 382, 240, - 349, 36, 109, 185, 104, 256, 224, 321, 223, 132, - 191, 382, 13, 49, 91, 43, 12, 382, 41, 40, - 266, 225, 257, 233, 152, 194, 457, 52, 4, 457, - 301, 301, 228, 457, 282, 3, 50, 285, 251, 234, - 237, 1, 301, 131, 441, 198, 238, 212, 10, 54, - 349, 441, 325, 175, 109, 30, 349, 273, 224, 321, - 223, 20, 221, 295, 32, 211, 457, 39, 166, 49, - 41, 40, 266, 225, 87, 233, 205, 194, 279, 52, - 4, 24, 301, 204, 200, 280, 99, 3, 50, 199, - 251, 234, 237, 1, 31, 130, 96, 198, 205, 212, - 10, 54, 350, 55, 293, 207, 109, 283, 99, 96, - 224, 321, 223, 199, 180, 350, 13, 134, 230, 43, - 222, 350, 41, 40, 266, 225, 104, 233, 316, 194, - 279, 52, 4, 24, 301, 165, 284, 280, 85, 3, - 50, 25, 251, 234, 237, 1, 131, 129, 210, 198, - 14, 212, 10, 54, 269, 270, 301, 116, 109, 295, - 216, 211, 224, 321, 223, 171, 221, 95, 13, 28, - 219, 43, 323, 9, 41, 40, 266, 225, 151, 233, - 324, 194, 52, 52, 4, 301, 301, 30, 282, 302, - 178, 3, 50, 7, 251, 234, 237, 1, 136, 130, - 304, 179, 238, 212, 10, 54, 279, 175, 282, 24, - 109, 238, 429, 280, 224, 321, 223, 177, 221, 270, - 13, 255, 281, 43, 429, 49, 41, 40, 266, 225, - 275, 233, 318, 194, 49, 52, 4, 276, 301, 163, - 26, 199, 8, 3, 50, 119, 251, 234, 237, 1, - 11, 93, 291, 51, 107, 212, 10, 54, 226, 428, - 206, 201, 109, 148, 178, 322, 224, 321, 223, 441, - 221, 428, 13, 282, 9, 43, 441, 115, 41, 40, - 266, 225, 167, 233, 227, 194, 457, 52, 4, 457, - 301, 96, 158, 457, 101, 3, 50, 271, 251, 234, - 237, 1, 282, 130, 235, 186, 135, 212, 10, 54, - 199, 37, 119, 315, 109, 165, 284, 176, 224, 321, - 223, 104, 221, 149, 13, 281, 146, 43, 281, 300, - 41, 40, 266, 225, 30, 233, 289, 194, 21, 52, - 4, 272, 301, 211, 18, 301, 161, 3, 50, 110, - 251, 234, 237, 1, 137, 128, 282, 198, 268, 212, - 10, 54, 222, 169, 515, 92, 109, 172, 284, 31, - 224, 321, 223, 29, 221, 238, 6, 260, 53, 43, - 232, 139, 41, 40, 266, 225, 154, 233, 178, 194, - 168, 52, 4, 214, 301, 145, 99, 33, 49, 3, - 50, 245, 208, 211, 320, 282, 90, 111, 311, 183, - 98, 70, 309, 297, 236, 178, 95, 319, 142, 258, - 247, 267, 249, 264, 250, 195, 231, 199, 246, 324, - 317, 253, 254, 259, 126, 137, 133, 251, 234, 237, - 1, 326, 290, 105, 143, 156, 212, 10, 54, 88, - 84, 83, 484, 109, 322, 282, 37, 224, 321, 223, - 245, 208, 211, 320, 281, 90, 111, 298, 182, 98, - 56, 245, 298, 211, 178, 95, 103, 147, 258, 197, - 102, 75, 141, 250, 195, 231, 95, 246, 324, 258, - 279, 242, 89, 24, 250, 195, 231, 280, 246, 324, - 298, 298, 298, 298, 298, 298, 298, 16, 298, 192, - 277, 298, 298, 18, 294, 44, 45, 38, 298, 298, - 251, 234, 237, 2, 298, 296, 298, 298, 298, 212, - 10, 54, 310, 312, 313, 314, 109, 162, 298, 298, - 224, 321, 223, 298, 298, 298, 294, 282, 298, 42, - 22, 239, 251, 234, 237, 2, 298, 296, 298, 298, - 298, 212, 10, 54, 298, 159, 298, 298, 109, 298, - 298, 17, 224, 321, 223, 282, 298, 42, 22, 239, - 298, 298, 245, 298, 211, 278, 298, 103, 111, 298, - 183, 98, 70, 298, 298, 298, 298, 95, 298, 298, - 258, 298, 292, 17, 298, 250, 195, 231, 279, 246, - 324, 24, 298, 395, 245, 280, 211, 298, 298, 103, - 298, 298, 197, 102, 75, 16, 298, 140, 298, 95, - 298, 18, 258, 298, 298, 298, 298, 250, 195, 231, - 298, 246, 324, 298, 298, 298, 298, 428, 298, 395, - 395, 395, 202, 277, 298, 245, 298, 211, 298, 428, - 103, 298, 298, 197, 120, 69, 395, 395, 395, 395, - 95, 298, 298, 258, 298, 298, 298, 160, 250, 195, - 231, 86, 246, 324, 245, 16, 211, 282, 298, 103, - 196, 18, 197, 120, 69, 298, 44, 45, 38, 95, - 298, 298, 258, 298, 298, 298, 178, 250, 195, 231, - 298, 246, 324, 310, 312, 313, 314, 298, 298, 190, - 245, 298, 211, 298, 298, 103, 298, 298, 197, 102, - 75, 298, 298, 298, 298, 95, 298, 298, 258, 298, - 298, 298, 298, 250, 195, 231, 298, 246, 324, 298, - 298, 298, 245, 298, 211, 298, 199, 100, 298, 288, - 197, 120, 47, 298, 106, 298, 298, 95, 298, 353, - 258, 155, 298, 218, 298, 250, 195, 231, 298, 246, - 324, 282, 16, 42, 22, 239, 298, 245, 18, 211, - 298, 428, 103, 298, 298, 197, 120, 69, 298, 298, - 298, 298, 95, 428, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 100, 189, 298, 197, 120, 59, 245, 207, 211, - 298, 95, 103, 298, 258, 197, 120, 81, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 120, 80, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 67, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 120, 57, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 120, 58, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 82, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 97, 76, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 120, 71, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 187, 120, 61, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 120, 63, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 94, 79, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 59, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 120, 77, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 188, 108, 64, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 65, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 97, 66, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 120, 68, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 62, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 120, 60, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 120, 74, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 72, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 120, 48, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 120, 46, 298, 298, - 298, 298, 95, 298, 298, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 120, 78, 245, 298, 211, - 298, 95, 103, 298, 258, 197, 120, 73, 298, 250, - 195, 231, 95, 246, 324, 258, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 125, 298, 298, 298, - 298, 298, 95, 298, 298, 298, 298, 298, 298, 244, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 114, 298, 245, 298, 211, - 298, 95, 103, 298, 298, 197, 122, 298, 243, 250, - 195, 231, 95, 246, 324, 298, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 117, 298, 298, 298, - 298, 298, 95, 298, 298, 298, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 121, 298, 245, 298, 211, - 298, 95, 103, 298, 298, 197, 124, 298, 298, 250, - 195, 231, 95, 246, 324, 298, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 298, 245, 298, 211, - 298, 298, 103, 298, 298, 197, 118, 298, 298, 298, - 298, 298, 95, 298, 298, 298, 298, 298, 298, 298, - 250, 195, 231, 298, 246, 324, 245, 298, 211, 298, - 298, 103, 298, 298, 197, 123, 298, 245, 298, 211, - 298, 95, 103, 298, 298, 197, 113, 298, 298, 250, - 195, 231, 95, 246, 324, 298, 298, 298, 298, 298, - 250, 195, 231, 220, 246, 324, 298, 27, 298, 16, - 298, 457, 298, 298, 457, 18, 298, 26, 457, 441, - 44, 45, 38, 217, 44, 45, 38, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 310, 312, 313, - 314, 310, 312, 313, 314, 298, 441, 298, 298, 441, - 298, 457, 220, 441, 457, 298, 298, 457, 298, 298, - 457, 457, 441, 457, 298, 298, 220, 457, 441, 298, - 298, 298, 298, 298, 457, 298, 298, 457, 298, 298, - 5, 457, 441, 298, 298, 298, 298, 298, 298, 441, - 298, 298, 441, 298, 457, 441, 441, 298, 441, 298, - 457, 298, 441, 306, 298, 298, 298, 298, 298, 441, - 298, 298, 441, 298, 457, 220, 441, 298, 298, 298, - 298, 298, 298, 457, 298, 298, 457, 298, 298, 15, - 457, 441, 35, 274, 44, 45, 38, 457, 298, 298, - 457, 298, 298, 298, 457, 441, 298, 298, 298, 298, - 298, 310, 312, 313, 314, 298, 298, 298, 441, 298, - 298, 441, 298, 457, 298, 441, 287, 298, 44, 45, - 38, 298, 441, 298, 298, 441, 298, 457, 298, 441, - 248, 298, 298, 298, 298, 310, 312, 313, 314, 298, - 44, 45, 38, 298, 298, 112, 298, 44, 45, 38, - 298, 173, 298, 298, 44, 45, 38, 310, 312, 313, - 314, 44, 45, 38, 310, 312, 313, 314, 298, 298, - 299, 310, 312, 313, 314, 44, 45, 38, 310, 312, - 313, 314, 174, 298, 298, 298, 138, 298, 298, 298, - 298, 298, 310, 312, 313, 314, 44, 45, 38, 298, - 298, 298, 44, 45, 38, 298, 44, 45, 38, 298, - 44, 45, 38, 310, 312, 313, 314, 307, 298, 310, - 312, 313, 314, 310, 312, 313, 314, 310, 312, 313, - 314, - ); - - public static $yy_lookahead = array( - 10, 11, 12, 13, 74, 15, 36, 17, 1, 19, - 20, 21, 29, 103, 84, 45, 26, 14, 48, 36, - 30, 31, 32, 53, 34, 22, 36, 24, 98, 39, - 27, 48, 42, 43, 44, 45, 33, 47, 35, 49, - 37, 51, 52, 53, 54, 14, 16, 16, 45, 59, - 60, 96, 10, 11, 12, 13, 1, 15, 27, 17, - 53, 19, 20, 21, 33, 27, 1, 36, 26, 14, - 45, 33, 30, 31, 32, 45, 34, 52, 36, 48, - 72, 39, 27, 75, 42, 43, 44, 45, 33, 47, - 82, 49, 27, 51, 52, 15, 54, 17, 33, 91, - 83, 59, 60, 95, 10, 11, 12, 13, 13, 15, - 15, 17, 17, 19, 20, 21, 97, 35, 99, 100, - 26, 86, 87, 88, 30, 31, 32, 66, 34, 49, - 36, 51, 96, 39, 54, 53, 42, 43, 44, 45, - 72, 47, 16, 49, 18, 51, 52, 79, 54, 54, - 82, 14, 18, 59, 60, 1, 10, 11, 12, 13, - 23, 15, 15, 17, 27, 19, 20, 21, 14, 17, - 33, 13, 26, 15, 48, 17, 30, 31, 32, 45, - 34, 27, 36, 46, 83, 39, 52, 33, 42, 43, - 44, 45, 34, 47, 74, 49, 10, 51, 52, 13, - 54, 54, 50, 17, 84, 59, 60, 14, 10, 11, - 12, 13, 54, 15, 45, 17, 23, 19, 20, 21, - 27, 52, 100, 103, 26, 35, 33, 37, 30, 31, - 32, 22, 34, 67, 36, 69, 50, 39, 83, 46, - 42, 43, 44, 45, 35, 47, 72, 49, 10, 51, - 52, 13, 54, 79, 80, 17, 82, 59, 60, 1, - 10, 11, 12, 13, 16, 15, 18, 17, 72, 19, - 20, 21, 14, 107, 108, 79, 26, 71, 82, 18, - 30, 31, 32, 1, 34, 27, 36, 15, 50, 39, - 45, 33, 42, 43, 44, 45, 48, 47, 53, 49, - 10, 51, 52, 13, 54, 99, 100, 17, 36, 59, - 60, 29, 10, 11, 12, 13, 15, 15, 17, 17, - 13, 19, 20, 21, 8, 9, 54, 72, 26, 67, - 75, 69, 30, 31, 32, 78, 34, 82, 36, 24, - 50, 39, 17, 36, 42, 43, 44, 45, 74, 47, - 95, 49, 51, 51, 52, 54, 54, 35, 84, 37, - 103, 59, 60, 36, 10, 11, 12, 13, 74, 15, - 108, 17, 23, 19, 20, 21, 10, 103, 84, 13, - 26, 23, 36, 17, 30, 31, 32, 7, 34, 9, - 36, 17, 98, 39, 48, 46, 42, 43, 44, 45, - 17, 47, 53, 49, 46, 51, 52, 93, 54, 78, - 16, 1, 36, 59, 60, 101, 10, 11, 12, 13, - 35, 15, 37, 17, 48, 19, 20, 21, 18, 36, - 65, 66, 26, 74, 103, 104, 30, 31, 32, 45, - 34, 48, 36, 84, 36, 39, 52, 17, 42, 43, - 44, 45, 15, 47, 17, 49, 10, 51, 52, 13, - 54, 18, 74, 17, 82, 59, 60, 34, 10, 11, - 12, 13, 84, 15, 93, 17, 15, 19, 20, 21, - 1, 2, 101, 101, 26, 99, 100, 17, 30, 31, - 32, 48, 34, 96, 36, 98, 96, 39, 98, 71, - 42, 43, 44, 45, 35, 47, 37, 49, 27, 51, - 52, 67, 54, 69, 33, 54, 74, 59, 60, 17, - 10, 11, 12, 13, 96, 15, 84, 17, 34, 19, - 20, 21, 45, 78, 63, 64, 26, 99, 100, 16, - 30, 31, 32, 16, 34, 23, 36, 17, 17, 39, - 23, 51, 42, 43, 44, 45, 72, 47, 103, 49, - 78, 51, 52, 17, 54, 74, 82, 41, 46, 59, - 60, 67, 68, 69, 70, 84, 72, 73, 53, 75, - 76, 77, 53, 61, 15, 103, 82, 14, 51, 85, - 14, 37, 17, 8, 90, 91, 92, 1, 94, 95, - 3, 4, 5, 6, 7, 96, 82, 10, 11, 12, - 13, 97, 84, 81, 96, 74, 19, 20, 21, 78, - 82, 82, 1, 26, 104, 84, 2, 30, 31, 32, - 67, 68, 69, 70, 98, 72, 73, 109, 75, 76, - 77, 67, 109, 69, 103, 82, 72, 96, 85, 75, - 76, 77, 96, 90, 91, 92, 82, 94, 95, 85, - 10, 14, 96, 13, 90, 91, 92, 17, 94, 95, - 109, 109, 109, 109, 109, 109, 109, 27, 109, 105, - 106, 109, 109, 33, 4, 38, 39, 40, 109, 109, - 10, 11, 12, 13, 109, 15, 109, 109, 109, 19, - 20, 21, 55, 56, 57, 58, 26, 74, 109, 109, - 30, 31, 32, 109, 109, 109, 4, 84, 109, 86, - 87, 88, 10, 11, 12, 13, 109, 15, 109, 109, - 109, 19, 20, 21, 109, 74, 109, 109, 26, 109, - 60, 61, 30, 31, 32, 84, 109, 86, 87, 88, - 109, 109, 67, 109, 69, 70, 109, 72, 73, 109, - 75, 76, 77, 109, 109, 109, 109, 82, 109, 109, - 85, 109, 60, 61, 109, 90, 91, 92, 10, 94, - 95, 13, 109, 2, 67, 17, 69, 109, 109, 72, - 109, 109, 75, 76, 77, 27, 109, 29, 109, 82, - 109, 33, 85, 109, 109, 109, 109, 90, 91, 92, - 109, 94, 95, 109, 109, 109, 109, 36, 109, 38, - 39, 40, 105, 106, 109, 67, 109, 69, 109, 48, - 72, 109, 109, 75, 76, 77, 55, 56, 57, 58, - 82, 109, 109, 85, 109, 109, 109, 74, 90, 91, - 92, 78, 94, 95, 67, 27, 69, 84, 109, 72, - 102, 33, 75, 76, 77, 109, 38, 39, 40, 82, - 109, 109, 85, 109, 109, 109, 103, 90, 91, 92, - 109, 94, 95, 55, 56, 57, 58, 109, 109, 102, - 67, 109, 69, 109, 109, 72, 109, 109, 75, 76, - 77, 109, 109, 109, 109, 82, 109, 109, 85, 109, - 109, 109, 109, 90, 91, 92, 109, 94, 95, 109, - 109, 109, 67, 109, 69, 109, 1, 72, 109, 106, - 75, 76, 77, 109, 79, 109, 109, 82, 109, 14, - 85, 74, 109, 18, 109, 90, 91, 92, 109, 94, - 95, 84, 27, 86, 87, 88, 109, 67, 33, 69, - 109, 36, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 48, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 102, 109, 75, 76, 77, 67, 79, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 77, 109, 109, - 109, 109, 82, 109, 109, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 77, 67, 109, 69, - 109, 82, 72, 109, 85, 75, 76, 77, 109, 90, - 91, 92, 82, 94, 95, 85, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 109, 109, 109, - 109, 109, 82, 109, 109, 109, 109, 109, 109, 89, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 109, 67, 109, 69, - 109, 82, 72, 109, 109, 75, 76, 109, 89, 90, - 91, 92, 82, 94, 95, 109, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 109, 109, 109, - 109, 109, 82, 109, 109, 109, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 109, 67, 109, 69, - 109, 82, 72, 109, 109, 75, 76, 109, 109, 90, - 91, 92, 82, 94, 95, 109, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 109, 67, 109, 69, - 109, 109, 72, 109, 109, 75, 76, 109, 109, 109, - 109, 109, 82, 109, 109, 109, 109, 109, 109, 109, - 90, 91, 92, 109, 94, 95, 67, 109, 69, 109, - 109, 72, 109, 109, 75, 76, 109, 67, 109, 69, - 109, 82, 72, 109, 109, 75, 76, 109, 109, 90, - 91, 92, 82, 94, 95, 109, 109, 109, 109, 109, - 90, 91, 92, 2, 94, 95, 109, 25, 109, 27, - 109, 10, 109, 109, 13, 33, 109, 16, 17, 18, - 38, 39, 40, 37, 38, 39, 40, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 55, 56, 57, - 58, 55, 56, 57, 58, 109, 45, 109, 109, 48, - 109, 50, 2, 52, 10, 109, 109, 13, 109, 109, - 10, 17, 18, 13, 109, 109, 2, 17, 18, 109, - 109, 109, 109, 109, 10, 109, 109, 13, 109, 109, - 16, 17, 18, 109, 109, 109, 109, 109, 109, 45, - 109, 109, 48, 109, 50, 45, 52, 109, 48, 109, - 50, 109, 52, 53, 109, 109, 109, 109, 109, 45, - 109, 109, 48, 109, 50, 2, 52, 109, 109, 109, - 109, 109, 109, 10, 109, 109, 13, 109, 109, 2, - 17, 18, 2, 37, 38, 39, 40, 10, 109, 109, - 13, 109, 109, 109, 17, 18, 109, 109, 109, 109, - 109, 55, 56, 57, 58, 109, 109, 109, 45, 109, - 109, 48, 109, 50, 109, 52, 14, 109, 38, 39, - 40, 109, 45, 109, 109, 48, 109, 50, 109, 52, - 14, 109, 109, 109, 109, 55, 56, 57, 58, 109, - 38, 39, 40, 109, 109, 22, 109, 38, 39, 40, - 109, 14, 109, 109, 38, 39, 40, 55, 56, 57, - 58, 38, 39, 40, 55, 56, 57, 58, 109, 109, - 61, 55, 56, 57, 58, 38, 39, 40, 55, 56, - 57, 58, 14, 109, 109, 109, 28, 109, 109, 109, - 109, 109, 55, 56, 57, 58, 38, 39, 40, 109, - 109, 109, 38, 39, 40, 109, 38, 39, 40, 109, - 38, 39, 40, 55, 56, 57, 58, 53, 109, 55, - 56, 57, 58, 55, 56, 57, 58, 55, 56, 57, - 58, - ); +// line 23 "../smarty/lexer/smarty_internal_templateparser.y" - public static $yy_shift_ofst = array( - -31, 406, 406, 458, 458, 94, 510, 94, 94, 94, - 510, 458, -10, 94, 94, 354, 146, 94, 94, 94, - 94, 146, 94, 94, 94, 94, 250, 94, 94, 94, - 94, 94, 94, 302, 94, 94, 94, 198, 42, 42, - 42, 42, 42, 42, 42, 42, 1772, 828, 828, 80, - 712, 925, 301, 65, 272, 680, 1942, 1920, 1886, 1776, - 647, 1949, 1977, 2008, 2004, 1963, 1998, 1956, 2012, 2012, - 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, - 2012, 2012, 2012, 768, 650, 272, 65, 272, 65, 134, - 126, 479, 597, 1854, 154, 290, 95, 55, 258, 366, - 248, 366, 282, 443, 437, 38, 38, 437, 7, 481, - 410, 38, 461, 621, 596, 596, 261, 596, 596, 261, - 596, 596, 596, 596, 596, -31, -31, 1840, 1791, 1917, - 1903, 1834, 158, 238, 394, 446, 38, 25, 147, 169, - 147, 25, 169, 25, 38, 38, 25, 25, 38, 25, - 307, 38, 38, 25, 527, 38, 38, 25, 38, 38, - 38, 38, 38, 596, 624, 261, 624, 327, 596, 596, - 261, 596, 261, -31, -31, -31, -31, -31, -31, 781, - 3, 31, 193, 137, -30, 186, -17, 522, 349, 469, - 322, 30, 82, 316, 346, 376, 190, 358, 393, 152, - 209, 380, 385, 245, 315, 523, 585, 554, 576, 575, - 537, 573, 569, 529, 525, 546, 500, 526, 531, 325, - 530, 487, 494, 502, 470, 433, 430, 408, 383, 327, - 374, - ); - - public static $yy_reduce_ofst = array( - 471, 504, 563, 717, 574, 685, 919, 890, 787, 758, - 855, 823, 1240, 1199, 1140, 1100, 1070, 1129, 1170, 1210, - 1269, 1280, 1310, 1339, 1350, 1380, 1409, 1420, 1450, 1479, - 1490, 1059, 1030, 1000, 930, 960, 989, 1520, 1549, 1700, - 1619, 1689, 1660, 1630, 1590, 1560, 633, 661, 867, 8, - 166, 773, 255, 541, 174, 262, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 294, -70, 196, 120, 68, 274, 19, - 206, 331, 444, 428, 257, 400, 382, 257, 257, 400, - 386, 397, 257, 386, 381, 388, 359, 314, 257, 442, - 482, 491, 484, 257, 257, 455, 386, 257, 257, 438, - 257, 257, 257, 257, 257, 257, 365, 509, 509, 509, - 509, 509, 524, 536, 509, 509, 528, 514, 539, 551, - 538, 514, 556, 514, 528, 528, 514, 514, 528, 514, - 518, 528, 528, 514, 532, 528, 528, 514, 528, 528, - 528, 528, 528, -90, 520, 122, 520, 566, -90, -90, - 122, -90, 122, -45, 36, 155, 101, 61, 17, - ); - - public static $yyExpectedTokens = array( - array(), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 53, 54, 59, - 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array( - 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60, - ), - array(25, 27, 33, 38, 39, 40, 55, 56, 57, 58,), - array(27, 33, 38, 39, 40, 55, 56, 57, 58,), - array(27, 33, 38, 39, 40, 55, 56, 57, 58,), - array(15, 17, 49, 51, 54,), - array(4, 10, 11, 12, 13, 15, 19, 20, 21, 26, 30, 31, 32, 60, 61,), - array(1, 14, 18, 27, 33, 36, 48,), - array(15, 17, 51, 54,), - array(1, 27, 33,), - array(15, 36, 54,), - array(4, 10, 11, 12, 13, 15, 19, 20, 21, 26, 30, 31, 32, 60, 61,), - array(14, 38, 39, 40, 55, 56, 57, 58,), - array(2, 38, 39, 40, 55, 56, 57, 58,), - array(37, 38, 39, 40, 55, 56, 57, 58,), - array(37, 38, 39, 40, 55, 56, 57, 58,), - array(14, 38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58, 61,), - array(14, 38, 39, 40, 55, 56, 57, 58,), - array(14, 38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 53, 55, 56, 57, 58,), - array(22, 38, 39, 40, 55, 56, 57, 58,), - array(28, 38, 39, 40, 55, 56, 57, 58,), - array(14, 38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(38, 39, 40, 55, 56, 57, 58,), - array(10, 13, 17, 27, 29, 33,), - array(10, 13, 17, 27, 33,), - array(15, 36, 54,), - array(1, 27, 33,), - array(15, 36, 54,), - array(1, 27, 33,), - array(18, 45, 52,), - array(16, 18, 48,), - array(1, 2,), - array(3, 4, 5, 6, 7, 10, 11, 12, 13, 19, 20, 21, 26, 30, 31, 32,), - array(2, 10, 13, 16, 17, 18, 45, 48, 50, 52,), - array(1, 14, 27, 33,), - array(10, 13, 17, 50,), - array(13, 15, 17, 54,), - array(1, 14, 27, 33,), - array(1, 14, 27, 33,), - array(10, 13, 17,), - array(16, 18, 48,), - array(10, 13, 17,), - array(1, 29,), - array(18, 48,), - array(15, 17,), - array(27, 33,), - array(27, 33,), - array(15, 17,), - array(1, 53,), - array(27, 33,), - array(1, 18,), - array(27, 33,), - array(15, 54,), - array(1,), - array(1,), - array(1,), - array(18,), - array(1,), - array(1,), - array(18,), - array(1,), - array(1,), - array(1,), - array(1,), - array(1,), - array(), - array(), - array(2, 10, 13, 17, 18, 45, 48, 50, 52, 53,), - array(2, 10, 13, 16, 17, 18, 45, 48, 50, 52,), - array(2, 10, 13, 17, 18, 45, 48, 50, 52,), - array(2, 10, 13, 17, 18, 45, 48, 50, 52,), - array(10, 13, 17, 18, 45, 48, 50, 52,), - array(13, 15, 17, 34, 54,), - array(10, 13, 17, 50,), - array(16, 45, 52,), - array(10, 13, 17,), - array(27, 33,), - array(45, 52,), - array(15, 54,), - array(45, 52,), - array(15, 54,), - array(45, 52,), - array(45, 52,), - array(45, 52,), - array(27, 33,), - array(27, 33,), - array(45, 52,), - array(45, 52,), - array(27, 33,), - array(45, 52,), - array(13, 36,), - array(27, 33,), - array(27, 33,), - array(45, 52,), - array(16, 23,), - array(27, 33,), - array(27, 33,), - array(45, 52,), - array(27, 33,), - array(27, 33,), - array(27, 33,), - array(27, 33,), - array(27, 33,), - array(1,), - array(2,), - array(18,), - array(2,), - array(36,), - array(1,), - array(1,), - array(18,), - array(1,), - array(18,), - array(), - array(), - array(), - array(), - array(), - array(), - array(2, 36, 38, 39, 40, 48, 55, 56, 57, 58,), - array(14, 22, 24, 27, 33, 35, 37, 45,), - array(14, 16, 27, 33, 36, 48,), - array(14, 23, 27, 33, 46,), - array(14, 23, 27, 33, 46,), - array(36, 45, 48, 53,), - array(10, 13, 17, 50,), - array(29, 36, 48,), - array(23, 46, 61,), - array(23, 46, 53,), - array(35, 37,), - array(35, 37,), - array(16, 45,), - array(35, 53,), - array(8, 9,), - array(36, 48,), - array(36, 48,), - array(35, 37,), - array(23, 46,), - array(36, 48,), - array(17, 50,), - array(22, 35,), - array(7, 9,), - array(35, 37,), - array(45, 53,), - array(24,), - array(16,), - array(8,), - array(37,), - array(14,), - array(17,), - array(51,), - array(14,), - array(15,), - array(53,), - array(53,), - array(17,), - array(51,), - array(41,), - array(17,), - array(17,), - array(17,), - array(45,), - array(34,), - array(17,), - array(17,), - array(34,), - array(17,), - array(36,), - array(17,), - array(36,), - array(17,), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - array(), - ); - - public static $yy_default = array( - 338, 514, 514, 499, 499, 514, 514, 476, 476, 476, - 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 379, 358, 379, 514, - 514, 415, 514, 379, 514, 514, 351, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 384, 514, 399, 475, - 351, 403, 390, 474, 500, 502, 384, 501, 363, 381, - 404, 386, 391, 379, 379, 514, 379, 514, 379, 489, - 431, 370, 327, 430, 393, 441, 514, 393, 393, 441, - 431, 441, 393, 431, 514, 379, 360, 514, 393, 379, - 373, 379, 514, 406, 402, 375, 431, 396, 398, 486, - 393, 408, 397, 407, 406, 483, 336, 430, 430, 430, - 430, 430, 514, 443, 457, 441, 367, 438, 514, 436, - 514, 435, 434, 466, 368, 348, 439, 437, 361, 467, - 441, 356, 354, 468, 514, 366, 355, 469, 362, 359, - 352, 369, 365, 371, 478, 463, 477, 441, 374, 376, - 490, 424, 487, 441, 441, 482, 482, 336, 482, 415, - 411, 415, 405, 405, 415, 442, 415, 405, 405, 514, - 514, 411, 514, 514, 425, 514, 514, 405, 415, 514, - 514, 334, 514, 411, 387, 514, 514, 514, 514, 514, - 514, 514, 514, 420, 514, 514, 514, 417, 514, 514, - 514, 411, 413, 514, 514, 514, 514, 488, 514, 457, - 514, 421, 364, 420, 340, 422, 357, 341, 409, 400, - 480, 457, 462, 401, 485, 423, 426, 342, 447, 380, - 416, 339, 428, 329, 330, 444, 445, 446, 394, 331, - 395, 429, 419, 388, 332, 418, 410, 392, 412, 333, - 335, 414, 337, 472, 417, 479, 427, 497, 347, 461, - 460, 459, 378, 346, 464, 510, 495, 511, 498, 473, - 377, 496, 503, 506, 513, 512, 509, 507, 504, 508, - 345, 458, 471, 448, 505, 454, 452, 455, 456, 450, - 491, 449, 492, 493, 494, 470, 451, 328, 453, 343, - 344, 372, 481, 432, 433, 465, 440, - ); - - public static $yyFallback = array(); - - public static $yyRuleName = array( - 'start ::= template', - 'template ::= template PHP', - 'template ::= template TEXT', - 'template ::= template STRIPON', - 'template ::= template STRIPOFF', - 'template ::= template LITERALSTART literal_e2 LITERALEND', - 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND', - 'literal_e2 ::= literal_e1', - 'literal_e1 ::= literal_e1 LITERAL', - 'literal_e1 ::=', - 'template ::= template smartytag', - 'template ::=', - 'smartytag ::= SIMPELOUTPUT', - 'smartytag ::= SIMPLETAG', - 'smartytag ::= SMARTYBLOCKCHILDPARENT', - 'smartytag ::= LDEL tagbody RDEL', - 'smartytag ::= tag RDEL', - 'tagbody ::= outattr', - 'tagbody ::= DOLLARID eqoutattr', - 'tagbody ::= varindexed eqoutattr', - 'eqoutattr ::= EQUAL outattr', - 'outattr ::= output attributes', - 'output ::= variable', - 'output ::= value', - 'output ::= expr', - 'tag ::= LDEL ID attributes', - 'tag ::= LDEL ID', - 'tag ::= LDEL ID modifierlist attributes', - 'tag ::= LDEL ID PTR ID attributes', - 'tag ::= LDEL ID PTR ID modifierlist attributes', - 'tag ::= LDELMAKENOCACHE DOLLARID', - 'tag ::= LDELIF expr', - 'tag ::= LDELIF expr attributes', - 'tag ::= LDELIF statement', - 'tag ::= LDELIF statement attributes', - 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes', - 'foraction ::= EQUAL expr', - 'foraction ::= INCDEC', - 'tag ::= LDELFOR statement TO expr attributes', - 'tag ::= LDELFOR statement TO expr STEP expr attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', - 'tag ::= LDELFOREACH attributes', - 'tag ::= LDELSETFILTER ID modparameters', - 'tag ::= LDELSETFILTER ID modparameters modifierlist', - 'smartytag ::= CLOSETAG', - 'tag ::= LDELSLASH ID', - 'tag ::= LDELSLASH ID modifierlist', - 'tag ::= LDELSLASH ID PTR ID', - 'tag ::= LDELSLASH ID PTR ID modifierlist', - 'attributes ::= attributes attribute', - 'attributes ::= attribute', - 'attributes ::=', - 'attribute ::= SPACE ID EQUAL ID', - 'attribute ::= ATTR expr', - 'attribute ::= ATTR value', - 'attribute ::= SPACE ID', - 'attribute ::= SPACE expr', - 'attribute ::= SPACE value', - 'attribute ::= SPACE INTEGER EQUAL expr', - 'statements ::= statement', - 'statements ::= statements COMMA statement', - 'statement ::= DOLLARID EQUAL INTEGER', - 'statement ::= DOLLARID EQUAL expr', - 'statement ::= varindexed EQUAL expr', - 'statement ::= OPENP statement CLOSEP', - 'expr ::= value', - 'expr ::= ternary', - 'expr ::= DOLLARID COLON ID', - 'expr ::= expr MATH value', - 'expr ::= expr UNIMATH value', - 'expr ::= expr tlop value', - 'expr ::= expr lop expr', - 'expr ::= expr scond', - 'expr ::= expr ISIN array', - 'expr ::= expr ISIN value', - 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr', - 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', - 'value ::= variable', - 'value ::= UNIMATH value', - 'value ::= NOT value', - 'value ::= TYPECAST value', - 'value ::= variable INCDEC', - 'value ::= HEX', - 'value ::= INTEGER', - 'value ::= INTEGER DOT INTEGER', - 'value ::= INTEGER DOT', - 'value ::= DOT INTEGER', - 'value ::= ID', - 'value ::= function', - 'value ::= OPENP expr CLOSEP', - 'value ::= variable INSTANCEOF ns1', - 'value ::= variable INSTANCEOF variable', - 'value ::= SINGLEQUOTESTRING', - 'value ::= doublequoted_with_quotes', - 'value ::= varindexed DOUBLECOLON static_class_access', - 'value ::= smartytag', - 'value ::= value modifierlist', - 'value ::= NAMESPACE', - 'value ::= arraydef', - 'value ::= ns1 DOUBLECOLON static_class_access', - 'ns1 ::= ID', - 'ns1 ::= NAMESPACE', - 'variable ::= DOLLARID', - 'variable ::= varindexed', - 'variable ::= varvar AT ID', - 'variable ::= object', - 'variable ::= HATCH ID HATCH', - 'variable ::= HATCH ID HATCH arrayindex', - 'variable ::= HATCH variable HATCH', - 'variable ::= HATCH variable HATCH arrayindex', - 'varindexed ::= DOLLARID arrayindex', - 'varindexed ::= varvar arrayindex', - 'arrayindex ::= arrayindex indexdef', - 'arrayindex ::=', - 'indexdef ::= DOT DOLLARID', - 'indexdef ::= DOT varvar', - 'indexdef ::= DOT varvar AT ID', - 'indexdef ::= DOT ID', - 'indexdef ::= DOT INTEGER', - 'indexdef ::= DOT LDEL expr RDEL', - 'indexdef ::= OPENB ID CLOSEB', - 'indexdef ::= OPENB ID DOT ID CLOSEB', - 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB', - 'indexdef ::= OPENB INTEGER CLOSEB', - 'indexdef ::= OPENB DOLLARID CLOSEB', - 'indexdef ::= OPENB variable CLOSEB', - 'indexdef ::= OPENB value CLOSEB', - 'indexdef ::= OPENB expr CLOSEB', - 'indexdef ::= OPENB CLOSEB', - 'varvar ::= DOLLARID', - 'varvar ::= DOLLAR', - 'varvar ::= varvar varvarele', - 'varvarele ::= ID', - 'varvarele ::= SIMPELOUTPUT', - 'varvarele ::= LDEL expr RDEL', - 'object ::= varindexed objectchain', - 'objectchain ::= objectelement', - 'objectchain ::= objectchain objectelement', - 'objectelement ::= PTR ID arrayindex', - 'objectelement ::= PTR varvar arrayindex', - 'objectelement ::= PTR LDEL expr RDEL arrayindex', - 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', - 'objectelement ::= PTR method', - 'function ::= ns1 OPENP params CLOSEP', - 'method ::= ID OPENP params CLOSEP', - 'method ::= DOLLARID OPENP params CLOSEP', - 'params ::= params COMMA expr', - 'params ::= expr', - 'params ::=', - 'modifierlist ::= modifierlist modifier modparameters', - 'modifierlist ::= modifier modparameters', - 'modifier ::= VERT AT ID', - 'modifier ::= VERT ID', - 'modparameters ::= modparameters modparameter', - 'modparameters ::=', - 'modparameter ::= COLON value', - 'modparameter ::= COLON UNIMATH value', - 'modparameter ::= COLON array', - 'static_class_access ::= method', - 'static_class_access ::= method objectchain', - 'static_class_access ::= ID', - 'static_class_access ::= DOLLARID arrayindex', - 'static_class_access ::= DOLLARID arrayindex objectchain', - 'lop ::= LOGOP', - 'lop ::= SLOGOP', - 'tlop ::= TLOGOP', - 'scond ::= SINGLECOND', - 'arraydef ::= OPENB arrayelements CLOSEB', - 'arraydef ::= ARRAYOPEN arrayelements CLOSEP', - 'arrayelements ::= arrayelement', - 'arrayelements ::= arrayelements COMMA arrayelement', - 'arrayelements ::=', - 'arrayelement ::= value APTR expr', - 'arrayelement ::= ID APTR expr', - 'arrayelement ::= expr', - 'doublequoted_with_quotes ::= QUOTE QUOTE', - 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE', - 'doublequoted ::= doublequoted doublequotedcontent', - 'doublequoted ::= doublequotedcontent', - 'doublequotedcontent ::= BACKTICK variable BACKTICK', - 'doublequotedcontent ::= BACKTICK expr BACKTICK', - 'doublequotedcontent ::= DOLLARID', - 'doublequotedcontent ::= LDEL variable RDEL', - 'doublequotedcontent ::= LDEL expr RDEL', - 'doublequotedcontent ::= smartytag', - 'doublequotedcontent ::= TEXT', - ); - - public static $yyRuleInfo = array( - array(0 => 63, 1 => 1), - array(0 => 64, 1 => 2), - array(0 => 64, 1 => 2), - array(0 => 64, 1 => 2), - array(0 => 64, 1 => 2), - array(0 => 64, 1 => 4), - array(0 => 65, 1 => 4), - array(0 => 65, 1 => 1), - array(0 => 66, 1 => 2), - array(0 => 66, 1 => 0), - array(0 => 64, 1 => 2), - array(0 => 64, 1 => 0), - array(0 => 67, 1 => 1), - array(0 => 67, 1 => 1), - array(0 => 67, 1 => 1), - array(0 => 67, 1 => 3), - array(0 => 67, 1 => 2), - array(0 => 68, 1 => 1), - array(0 => 68, 1 => 2), - array(0 => 68, 1 => 2), - array(0 => 71, 1 => 2), - array(0 => 70, 1 => 2), - array(0 => 73, 1 => 1), - array(0 => 73, 1 => 1), - array(0 => 73, 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 => 2), - array(0 => 69, 1 => 3), - array(0 => 69, 1 => 2), - array(0 => 69, 1 => 3), - array(0 => 69, 1 => 8), - array(0 => 81, 1 => 2), - array(0 => 81, 1 => 1), - array(0 => 69, 1 => 5), - array(0 => 69, 1 => 7), - array(0 => 69, 1 => 6), - array(0 => 69, 1 => 8), - array(0 => 69, 1 => 2), - array(0 => 69, 1 => 3), - array(0 => 69, 1 => 4), - array(0 => 67, 1 => 1), - array(0 => 69, 1 => 2), - array(0 => 69, 1 => 3), - array(0 => 69, 1 => 4), - array(0 => 69, 1 => 5), - array(0 => 74, 1 => 2), - array(0 => 74, 1 => 1), - array(0 => 74, 1 => 0), - array(0 => 84, 1 => 4), - array(0 => 84, 1 => 2), - array(0 => 84, 1 => 2), - array(0 => 84, 1 => 2), - array(0 => 84, 1 => 2), - array(0 => 84, 1 => 2), - array(0 => 84, 1 => 4), - array(0 => 80, 1 => 1), - array(0 => 80, 1 => 3), - array(0 => 79, 1 => 3), - array(0 => 79, 1 => 3), - array(0 => 79, 1 => 3), - array(0 => 79, 1 => 3), - array(0 => 77, 1 => 1), - array(0 => 77, 1 => 1), - array(0 => 77, 1 => 3), - array(0 => 77, 1 => 3), - array(0 => 77, 1 => 3), - array(0 => 77, 1 => 3), - array(0 => 77, 1 => 3), - array(0 => 77, 1 => 2), - array(0 => 77, 1 => 3), - array(0 => 77, 1 => 3), - array(0 => 85, 1 => 7), - array(0 => 85, 1 => 7), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 3), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 3), - array(0 => 76, 1 => 3), - array(0 => 76, 1 => 3), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 3), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 2), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 1), - array(0 => 76, 1 => 3), - array(0 => 91, 1 => 1), - array(0 => 91, 1 => 1), - array(0 => 75, 1 => 1), - array(0 => 75, 1 => 1), - array(0 => 75, 1 => 3), - array(0 => 75, 1 => 1), - array(0 => 75, 1 => 3), - array(0 => 75, 1 => 4), - array(0 => 75, 1 => 3), - array(0 => 75, 1 => 4), - array(0 => 72, 1 => 2), - array(0 => 72, 1 => 2), - array(0 => 96, 1 => 2), - array(0 => 96, 1 => 0), - array(0 => 97, 1 => 2), - array(0 => 97, 1 => 2), - array(0 => 97, 1 => 4), - array(0 => 97, 1 => 2), - array(0 => 97, 1 => 2), - array(0 => 97, 1 => 4), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 5), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 3), - array(0 => 97, 1 => 2), - array(0 => 82, 1 => 1), - array(0 => 82, 1 => 1), - array(0 => 82, 1 => 2), - array(0 => 98, 1 => 1), - array(0 => 98, 1 => 1), - array(0 => 98, 1 => 3), - array(0 => 95, 1 => 2), - array(0 => 99, 1 => 1), - array(0 => 99, 1 => 2), - array(0 => 100, 1 => 3), - array(0 => 100, 1 => 3), - array(0 => 100, 1 => 5), - array(0 => 100, 1 => 6), - array(0 => 100, 1 => 2), - array(0 => 90, 1 => 4), - array(0 => 101, 1 => 4), - array(0 => 101, 1 => 4), - array(0 => 102, 1 => 3), - array(0 => 102, 1 => 1), - array(0 => 102, 1 => 0), - array(0 => 78, 1 => 3), - array(0 => 78, 1 => 2), - array(0 => 103, 1 => 3), - array(0 => 103, 1 => 2), - array(0 => 83, 1 => 2), - array(0 => 83, 1 => 0), - array(0 => 104, 1 => 2), - array(0 => 104, 1 => 3), - array(0 => 104, 1 => 2), - array(0 => 93, 1 => 1), - array(0 => 93, 1 => 2), - array(0 => 93, 1 => 1), - array(0 => 93, 1 => 2), - array(0 => 93, 1 => 3), - array(0 => 87, 1 => 1), - array(0 => 87, 1 => 1), - array(0 => 86, 1 => 1), - array(0 => 88, 1 => 1), - array(0 => 94, 1 => 3), - array(0 => 94, 1 => 3), - array(0 => 105, 1 => 1), - array(0 => 105, 1 => 3), - array(0 => 105, 1 => 0), - array(0 => 106, 1 => 3), - array(0 => 106, 1 => 3), - array(0 => 106, 1 => 1), - array(0 => 92, 1 => 2), - array(0 => 92, 1 => 3), - array(0 => 107, 1 => 2), - array(0 => 107, 1 => 1), - array(0 => 108, 1 => 3), - array(0 => 108, 1 => 3), - array(0 => 108, 1 => 1), - array(0 => 108, 1 => 3), - array(0 => 108, 1 => 3), - array(0 => 108, 1 => 1), - array(0 => 108, 1 => 1), - ); - - public static $yyReduceMap = array( - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 22 => 7, - 23 => 7, - 24 => 7, - 37 => 7, - 57 => 7, - 58 => 7, - 66 => 7, - 67 => 7, - 78 => 7, - 83 => 7, - 84 => 7, - 89 => 7, - 93 => 7, - 94 => 7, - 98 => 7, - 99 => 7, - 101 => 7, - 106 => 7, - 170 => 7, - 175 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 12 => 12, - 13 => 13, - 14 => 14, - 15 => 15, - 16 => 16, - 17 => 17, - 18 => 18, - 19 => 19, - 20 => 20, - 21 => 21, - 25 => 25, - 26 => 26, - 27 => 27, - 28 => 28, - 29 => 29, - 30 => 30, - 31 => 31, - 32 => 32, - 34 => 32, - 33 => 33, - 35 => 35, - 36 => 36, - 38 => 38, - 39 => 39, - 40 => 40, - 41 => 41, - 42 => 42, - 43 => 43, - 44 => 44, - 45 => 45, - 46 => 46, - 47 => 47, - 48 => 48, - 49 => 49, - 50 => 50, - 51 => 51, - 60 => 51, - 148 => 51, - 152 => 51, - 156 => 51, - 158 => 51, - 52 => 52, - 149 => 52, - 155 => 52, - 53 => 53, - 54 => 54, - 55 => 54, - 56 => 56, - 133 => 56, - 59 => 59, - 61 => 61, - 62 => 62, - 63 => 62, - 64 => 64, - 65 => 65, - 68 => 68, - 69 => 69, - 70 => 69, - 71 => 71, - 72 => 72, - 73 => 73, - 74 => 74, - 75 => 75, - 76 => 76, - 77 => 77, - 79 => 79, - 81 => 79, - 82 => 79, - 113 => 79, - 80 => 80, - 85 => 85, - 86 => 86, - 87 => 87, - 88 => 88, - 90 => 90, - 91 => 91, - 92 => 91, - 95 => 95, - 96 => 96, - 97 => 97, - 100 => 100, - 102 => 102, - 103 => 103, - 104 => 104, - 105 => 105, - 107 => 107, - 108 => 108, - 109 => 109, - 110 => 110, - 111 => 111, - 112 => 112, - 114 => 114, - 172 => 114, - 115 => 115, - 116 => 116, - 117 => 117, - 118 => 118, - 119 => 119, - 120 => 120, - 128 => 120, - 121 => 121, - 122 => 122, - 123 => 123, - 124 => 123, - 126 => 123, - 127 => 123, - 125 => 125, - 129 => 129, - 130 => 130, - 131 => 131, - 176 => 131, - 132 => 132, - 134 => 134, - 135 => 135, - 136 => 136, - 137 => 137, - 138 => 138, - 139 => 139, - 140 => 140, - 141 => 141, - 142 => 142, - 143 => 143, - 144 => 144, - 145 => 145, - 146 => 146, - 147 => 147, - 150 => 150, - 151 => 151, - 153 => 153, - 154 => 154, - 157 => 157, - 159 => 159, - 160 => 160, - 161 => 161, - 162 => 162, - 163 => 163, - 164 => 164, - 165 => 165, - 166 => 166, - 167 => 167, - 168 => 168, - 169 => 168, - 171 => 171, - 173 => 173, - 174 => 174, - 177 => 177, - 178 => 178, - 179 => 179, - 180 => 180, - 183 => 180, - 181 => 181, - 184 => 181, - 182 => 182, - 185 => 185, - 186 => 186, - ); + const ERR1 = 'Security error: Call to private object member not allowed'; + const ERR2 = 'Security error: Call to dynamic object member not allowed'; /** * result status @@ -1655,12 +82,18 @@ class Smarty_Internal_Templateparser public $lex; /** + * internal error flag + * + * @var bool + */ + private $internalError = false; + + /** * {strip} status * * @var bool */ public $strip = false; - /** * compiler object * @@ -1710,54 +143,6 @@ class Smarty_Internal_Templateparser */ public $template_postfix = array(); - public $yyTraceFILE; - - public $yyTracePrompt; - - public $yyidx; - - public $yyerrcnt; - - public $yystack = array(); - - public $yyTokenName = array( - '$', 'VERT', 'COLON', 'PHP', - 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART', - 'LITERALEND', 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG', - 'SMARTYBLOCKCHILDPARENT', 'LDEL', 'RDEL', 'DOLLARID', - 'EQUAL', 'ID', 'PTR', 'LDELMAKENOCACHE', - 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', - 'TO', 'STEP', 'LDELFOREACH', 'SPACE', - 'AS', 'APTR', 'LDELSETFILTER', 'CLOSETAG', - 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', - 'OPENP', 'CLOSEP', 'MATH', 'UNIMATH', - 'ISIN', 'QMARK', 'NOT', 'TYPECAST', - 'HEX', 'DOT', 'INSTANCEOF', 'SINGLEQUOTESTRING', - 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', - 'OPENB', 'CLOSEB', 'DOLLAR', 'LOGOP', - 'SLOGOP', 'TLOGOP', 'SINGLECOND', 'ARRAYOPEN', - 'QUOTE', 'BACKTICK', 'error', 'start', - 'template', 'literal_e2', 'literal_e1', 'smartytag', - 'tagbody', 'tag', 'outattr', 'eqoutattr', - 'varindexed', 'output', 'attributes', 'variable', - 'value', 'expr', 'modifierlist', 'statement', - 'statements', 'foraction', 'varvar', 'modparameters', - 'attribute', 'ternary', 'tlop', 'lop', - 'scond', 'array', 'function', 'ns1', - 'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'object', - 'arrayindex', 'indexdef', 'varvarele', 'objectchain', - 'objectelement', 'method', 'params', 'modifier', - 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', - 'doublequotedcontent', - ); - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; /* Index of top element in stack */ - private $_retvalue; /* Shifts left before out of the error */ /** * constructor * @@ -1772,16 +157,9 @@ class Smarty_Internal_Templateparser $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(); - } /* The parser's stack */ - public static function yy_destructor($yymajor, $yypminor) - { - switch ($yymajor) { - default: - break; /* If no destructor action specified: do nothing */ - } } - /** + /** * insert PHP code in current buffer * * @param string $code @@ -1823,6 +201,898 @@ class Smarty_Internal_Templateparser return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true)); } + + const TP_VERT = 1; + const TP_COLON = 2; + const TP_TEXT = 3; + const TP_STRIPON = 4; + const TP_STRIPOFF = 5; + const TP_LITERALSTART = 6; + const TP_LITERALEND = 7; + const TP_LITERAL = 8; + const TP_SIMPELOUTPUT = 9; + const TP_SIMPLETAG = 10; + const TP_SMARTYBLOCKCHILDPARENT = 11; + const TP_LDEL = 12; + const TP_RDEL = 13; + const TP_DOLLARID = 14; + const TP_EQUAL = 15; + const TP_ID = 16; + const TP_PTR = 17; + const TP_LDELMAKENOCACHE = 18; + const TP_LDELIF = 19; + const TP_LDELFOR = 20; + const TP_SEMICOLON = 21; + const TP_INCDEC = 22; + const TP_TO = 23; + const TP_STEP = 24; + const TP_LDELFOREACH = 25; + const TP_SPACE = 26; + const TP_AS = 27; + const TP_APTR = 28; + const TP_LDELSETFILTER = 29; + const TP_CLOSETAG = 30; + const TP_LDELSLASH = 31; + const TP_ATTR = 32; + const TP_INTEGER = 33; + const TP_COMMA = 34; + const TP_OPENP = 35; + const TP_CLOSEP = 36; + const TP_MATH = 37; + const TP_UNIMATH = 38; + const TP_ISIN = 39; + const TP_QMARK = 40; + const TP_NOT = 41; + const TP_TYPECAST = 42; + const TP_HEX = 43; + const TP_DOT = 44; + const TP_INSTANCEOF = 45; + const TP_SINGLEQUOTESTRING = 46; + const TP_DOUBLECOLON = 47; + const TP_NAMESPACE = 48; + const TP_AT = 49; + const TP_HATCH = 50; + const TP_OPENB = 51; + const TP_CLOSEB = 52; + const TP_DOLLAR = 53; + const TP_LOGOP = 54; + const TP_SLOGOP = 55; + const TP_TLOGOP = 56; + const TP_SINGLECOND = 57; + const TP_ARRAYOPEN = 58; + const TP_QUOTE = 59; + const TP_BACKTICK = 60; + const YY_NO_ACTION = 514; + const YY_ACCEPT_ACTION = 513; + const YY_ERROR_ACTION = 512; + + const YY_SZ_ACTTAB = 1997; +public static $yy_action = array( + 249, 250, 239, 1, 27, 127, 220, 184, 160, 213, + 11, 54, 278, 10, 173, 34, 108, 387, 282, 279, + 223, 321, 221, 8, 194, 387, 18, 387, 85, 41, + 387, 285, 42, 44, 264, 222, 387, 209, 387, 198, + 387, 52, 5, 307, 288, 288, 164, 283, 224, 4, + 50, 249, 250, 239, 1, 232, 131, 381, 189, 205, + 213, 11, 54, 39, 35, 243, 31, 108, 94, 17, + 381, 223, 321, 221, 439, 226, 381, 33, 49, 426, + 41, 439, 89, 42, 44, 264, 222, 9, 235, 163, + 198, 426, 52, 5, 131, 288, 212, 284, 102, 106, + 4, 50, 249, 250, 239, 1, 232, 129, 426, 189, + 347, 213, 11, 54, 175, 324, 347, 208, 108, 22, + 426, 301, 223, 321, 221, 302, 226, 135, 18, 49, + 52, 41, 26, 288, 42, 44, 264, 222, 16, 235, + 294, 198, 204, 52, 5, 170, 288, 32, 90, 267, + 268, 4, 50, 249, 250, 239, 1, 20, 129, 185, + 179, 255, 213, 11, 54, 455, 288, 192, 455, 108, + 175, 167, 455, 223, 321, 221, 439, 226, 256, 18, + 55, 292, 41, 439, 132, 42, 44, 264, 222, 427, + 235, 12, 198, 165, 52, 5, 232, 288, 288, 347, + 153, 427, 4, 50, 249, 250, 239, 1, 232, 129, + 286, 181, 347, 213, 11, 54, 24, 13, 347, 49, + 108, 232, 320, 426, 223, 321, 221, 195, 201, 173, + 18, 49, 139, 41, 296, 426, 42, 44, 264, 222, + 7, 235, 286, 198, 49, 52, 5, 147, 288, 117, + 150, 317, 263, 4, 50, 249, 250, 239, 1, 95, + 130, 173, 189, 155, 213, 11, 54, 22, 244, 271, + 192, 108, 323, 286, 101, 223, 321, 221, 294, 226, + 204, 18, 348, 257, 41, 166, 283, 42, 44, 264, + 222, 28, 235, 300, 198, 348, 52, 5, 247, 288, + 117, 348, 94, 206, 4, 50, 249, 250, 239, 1, + 95, 129, 22, 189, 277, 213, 11, 54, 91, 274, + 224, 426, 108, 323, 216, 156, 223, 321, 221, 132, + 180, 262, 18, 426, 100, 41, 12, 288, 42, 44, + 264, 222, 15, 235, 216, 198, 254, 52, 5, 233, + 288, 210, 190, 192, 100, 4, 50, 249, 250, 239, + 1, 3, 131, 94, 189, 192, 213, 11, 54, 269, + 10, 204, 290, 108, 325, 216, 224, 223, 321, 221, + 23, 226, 211, 33, 315, 100, 45, 513, 92, 42, + 44, 264, 222, 102, 235, 178, 198, 268, 52, 5, + 275, 288, 161, 192, 37, 25, 4, 50, 249, 250, + 239, 1, 286, 129, 172, 187, 305, 213, 11, 54, + 164, 283, 310, 141, 108, 281, 281, 236, 223, 321, + 221, 169, 226, 230, 18, 122, 171, 41, 225, 175, + 42, 44, 264, 222, 144, 235, 303, 198, 134, 52, + 5, 265, 288, 151, 286, 192, 175, 4, 50, 249, + 250, 239, 1, 286, 128, 94, 189, 143, 213, 11, + 54, 219, 152, 207, 193, 108, 149, 281, 31, 223, + 321, 221, 100, 226, 21, 6, 286, 288, 41, 158, + 16, 42, 44, 264, 222, 102, 235, 238, 198, 286, + 52, 5, 157, 288, 281, 122, 168, 283, 4, 50, + 249, 250, 239, 1, 30, 93, 308, 51, 215, 213, + 11, 54, 53, 251, 140, 248, 108, 245, 304, 116, + 223, 321, 221, 111, 226, 176, 18, 270, 266, 41, + 224, 322, 42, 44, 264, 222, 7, 235, 259, 198, + 147, 52, 5, 257, 288, 43, 40, 38, 83, 4, + 50, 241, 214, 204, 319, 280, 88, 107, 138, 182, + 97, 64, 311, 312, 313, 316, 95, 281, 298, 258, + 142, 234, 94, 105, 272, 197, 231, 482, 237, 323, + 37, 133, 324, 241, 214, 204, 319, 314, 88, 107, + 296, 183, 97, 82, 84, 43, 40, 38, 95, 296, + 296, 258, 296, 296, 296, 159, 272, 197, 231, 296, + 237, 323, 311, 312, 313, 316, 241, 296, 204, 296, + 296, 103, 296, 296, 199, 104, 77, 296, 296, 110, + 296, 95, 296, 296, 258, 278, 296, 296, 34, 272, + 197, 231, 279, 237, 323, 43, 40, 38, 296, 296, + 296, 241, 26, 204, 196, 276, 103, 296, 16, 199, + 104, 77, 311, 312, 313, 316, 95, 192, 296, 258, + 146, 296, 296, 296, 272, 197, 231, 296, 237, 323, + 286, 393, 39, 35, 243, 296, 296, 296, 296, 191, + 276, 296, 26, 318, 252, 253, 126, 296, 16, 249, + 250, 239, 1, 296, 296, 131, 296, 261, 213, 11, + 54, 296, 296, 296, 426, 108, 393, 393, 393, 223, + 321, 221, 241, 296, 204, 299, 426, 103, 107, 296, + 183, 97, 82, 393, 393, 393, 393, 95, 296, 260, + 258, 52, 296, 296, 288, 272, 197, 231, 296, 237, + 323, 293, 296, 296, 296, 296, 296, 249, 250, 239, + 2, 296, 295, 296, 296, 296, 213, 11, 54, 296, + 296, 177, 296, 108, 136, 296, 296, 223, 321, 221, + 296, 296, 296, 293, 43, 40, 38, 296, 296, 249, + 250, 239, 2, 296, 295, 43, 40, 38, 213, 11, + 54, 311, 312, 313, 316, 108, 296, 291, 14, 223, + 321, 221, 311, 312, 313, 316, 296, 296, 241, 296, + 204, 296, 192, 103, 296, 296, 199, 104, 77, 296, + 296, 296, 296, 95, 383, 296, 258, 296, 296, 297, + 14, 272, 197, 231, 296, 237, 323, 383, 296, 296, + 241, 296, 204, 383, 296, 99, 296, 287, 199, 120, + 48, 241, 112, 204, 296, 95, 103, 296, 258, 199, + 120, 74, 296, 272, 197, 231, 95, 237, 323, 258, + 455, 296, 296, 455, 272, 197, 231, 455, 237, 323, + 241, 296, 204, 296, 296, 103, 200, 296, 199, 120, + 74, 296, 296, 296, 296, 95, 296, 296, 258, 278, + 296, 296, 34, 272, 197, 231, 279, 237, 323, 241, + 455, 204, 296, 296, 99, 202, 296, 199, 120, 56, + 241, 211, 204, 296, 95, 103, 296, 258, 199, 120, + 74, 296, 272, 197, 231, 95, 237, 323, 258, 227, + 296, 296, 296, 272, 197, 231, 296, 237, 323, 241, + 296, 204, 148, 296, 103, 203, 86, 199, 120, 73, + 296, 296, 286, 296, 95, 296, 296, 258, 278, 296, + 296, 34, 272, 197, 231, 279, 237, 323, 241, 296, + 204, 175, 296, 103, 296, 296, 199, 120, 75, 241, + 296, 204, 296, 95, 103, 296, 258, 199, 120, 63, + 296, 272, 197, 231, 95, 237, 323, 258, 229, 192, + 296, 296, 272, 197, 231, 296, 237, 323, 241, 296, + 204, 380, 296, 103, 296, 296, 199, 120, 58, 296, + 296, 296, 296, 95, 380, 296, 258, 296, 296, 296, + 380, 272, 197, 231, 296, 237, 323, 241, 296, 204, + 296, 296, 103, 296, 296, 199, 120, 71, 241, 296, + 204, 296, 95, 103, 296, 258, 199, 120, 79, 296, + 272, 197, 231, 95, 237, 323, 258, 296, 296, 296, + 154, 272, 197, 231, 87, 237, 323, 241, 296, 204, + 286, 296, 103, 296, 296, 199, 120, 70, 296, 296, + 296, 296, 95, 296, 296, 258, 296, 296, 296, 175, + 272, 197, 231, 296, 237, 323, 241, 296, 204, 296, + 296, 103, 296, 296, 199, 120, 56, 241, 296, 204, + 296, 95, 103, 296, 258, 199, 120, 46, 296, 272, + 197, 231, 95, 237, 323, 258, 296, 296, 296, 296, + 272, 197, 231, 296, 237, 323, 241, 296, 204, 296, + 296, 103, 296, 296, 199, 120, 78, 296, 296, 296, + 296, 95, 296, 296, 258, 296, 296, 296, 296, 272, + 197, 231, 296, 237, 323, 241, 296, 204, 296, 296, + 103, 296, 296, 199, 120, 66, 241, 296, 204, 296, + 95, 103, 296, 258, 199, 120, 59, 296, 272, 197, + 231, 95, 237, 323, 258, 296, 296, 296, 296, 272, + 197, 231, 296, 237, 323, 241, 296, 204, 296, 296, + 103, 296, 296, 186, 109, 57, 296, 296, 296, 296, + 95, 296, 296, 258, 296, 296, 296, 296, 272, 197, + 231, 296, 237, 323, 241, 296, 204, 296, 296, 103, + 296, 296, 188, 120, 67, 241, 296, 204, 296, 95, + 103, 296, 258, 199, 96, 62, 296, 272, 197, 231, + 95, 237, 323, 258, 296, 296, 296, 296, 272, 197, + 231, 296, 237, 323, 241, 296, 204, 296, 296, 103, + 296, 296, 199, 120, 80, 296, 296, 296, 296, 95, + 296, 296, 258, 296, 296, 296, 296, 272, 197, 231, + 296, 237, 323, 241, 296, 204, 296, 296, 103, 296, + 296, 199, 120, 76, 241, 296, 204, 296, 95, 103, + 296, 258, 199, 120, 81, 296, 272, 197, 231, 95, + 237, 323, 258, 296, 296, 296, 296, 272, 197, 231, + 296, 237, 323, 241, 296, 204, 296, 296, 103, 296, + 296, 199, 120, 65, 296, 296, 296, 296, 95, 296, + 296, 258, 296, 296, 296, 296, 272, 197, 231, 296, + 237, 323, 241, 296, 204, 296, 296, 103, 296, 296, + 199, 96, 68, 241, 296, 204, 296, 95, 103, 296, + 258, 199, 120, 61, 296, 272, 197, 231, 95, 237, + 323, 258, 296, 296, 296, 296, 272, 197, 231, 296, + 237, 323, 241, 296, 204, 296, 296, 103, 296, 296, + 199, 98, 69, 296, 296, 296, 296, 95, 296, 296, + 258, 296, 296, 296, 296, 272, 197, 231, 296, 237, + 323, 241, 296, 204, 296, 296, 103, 296, 296, 199, + 120, 72, 241, 296, 204, 296, 95, 103, 296, 258, + 199, 120, 47, 296, 272, 197, 231, 95, 237, 323, + 258, 296, 296, 296, 296, 272, 197, 231, 296, 237, + 323, 241, 192, 204, 296, 296, 103, 296, 296, 199, + 120, 60, 296, 296, 351, 296, 95, 296, 217, 258, + 296, 296, 296, 296, 272, 197, 231, 26, 237, 323, + 241, 296, 204, 16, 296, 103, 426, 296, 199, 125, + 296, 241, 296, 204, 296, 95, 103, 296, 426, 199, + 118, 296, 242, 272, 197, 231, 95, 237, 323, 296, + 296, 296, 296, 246, 272, 197, 231, 296, 237, 323, + 241, 296, 204, 278, 296, 103, 34, 296, 199, 121, + 279, 296, 296, 296, 296, 95, 296, 296, 296, 296, + 26, 296, 162, 272, 197, 231, 16, 237, 323, 241, + 296, 204, 296, 296, 103, 296, 296, 199, 123, 296, + 241, 296, 204, 296, 95, 103, 296, 296, 199, 114, + 296, 296, 272, 197, 231, 95, 237, 323, 296, 296, + 296, 296, 296, 272, 197, 231, 296, 237, 323, 241, + 296, 204, 296, 145, 103, 296, 296, 199, 124, 296, + 296, 296, 296, 286, 95, 39, 35, 243, 296, 296, + 296, 296, 272, 197, 231, 296, 237, 323, 241, 296, + 204, 296, 296, 103, 296, 296, 199, 115, 296, 241, + 296, 204, 296, 95, 103, 296, 296, 199, 113, 296, + 296, 272, 197, 231, 95, 237, 323, 296, 296, 296, + 296, 296, 272, 197, 231, 228, 237, 323, 241, 296, + 204, 296, 455, 103, 296, 455, 199, 119, 3, 455, + 439, 296, 296, 95, 296, 296, 296, 296, 296, 296, + 296, 272, 197, 231, 228, 237, 323, 296, 296, 296, + 296, 455, 296, 296, 455, 296, 296, 439, 455, 439, + 439, 228, 455, 296, 439, 296, 296, 137, 455, 296, + 296, 455, 296, 296, 32, 455, 439, 286, 296, 39, + 35, 243, 29, 296, 26, 296, 439, 296, 296, 439, + 16, 455, 296, 439, 306, 43, 40, 38, 296, 296, + 296, 296, 296, 439, 296, 296, 439, 296, 455, 296, + 439, 26, 311, 312, 313, 316, 296, 16, 228, 296, + 296, 296, 43, 40, 38, 455, 296, 296, 455, 296, + 296, 296, 455, 439, 296, 296, 19, 296, 296, 311, + 312, 313, 316, 455, 296, 296, 455, 296, 296, 296, + 455, 439, 296, 296, 296, 43, 40, 38, 296, 296, + 439, 296, 296, 439, 174, 455, 296, 439, 296, 240, + 309, 296, 311, 312, 313, 316, 296, 289, 439, 296, + 36, 439, 296, 455, 296, 439, 296, 296, 43, 40, + 38, 296, 296, 43, 40, 38, 296, 296, 296, 296, + 296, 43, 40, 38, 296, 311, 312, 313, 316, 296, + 311, 312, 313, 316, 296, 43, 40, 38, 311, 312, + 313, 316, 273, 43, 40, 38, 296, 296, 296, 296, + 296, 296, 311, 312, 313, 316, 296, 296, 296, 296, + 311, 312, 313, 316, 455, 296, 296, 455, 43, 40, + 38, 455, 439, 218, 43, 40, 38, 296, 296, 296, + 296, 296, 296, 296, 296, 311, 312, 313, 316, 296, + 296, 311, 312, 313, 316, 296, 296, 296, 296, 439, + 296, 296, 439, 296, 455, 296, 439, + ); + public static $yy_lookahead = array( + 9, 10, 11, 12, 12, 14, 14, 16, 16, 18, + 19, 20, 9, 34, 102, 12, 25, 13, 70, 16, + 29, 30, 31, 35, 33, 21, 35, 23, 95, 38, + 26, 52, 41, 42, 43, 44, 32, 46, 34, 48, + 36, 50, 51, 52, 53, 53, 98, 99, 44, 58, + 59, 9, 10, 11, 12, 22, 14, 13, 16, 15, + 18, 19, 20, 85, 86, 87, 15, 25, 17, 21, + 26, 29, 30, 31, 44, 33, 32, 35, 45, 35, + 38, 51, 34, 41, 42, 43, 44, 35, 46, 77, + 48, 47, 50, 51, 14, 53, 16, 13, 47, 47, + 58, 59, 9, 10, 11, 12, 22, 14, 35, 16, + 26, 18, 19, 20, 102, 103, 32, 44, 25, 34, + 47, 36, 29, 30, 31, 52, 33, 14, 35, 45, + 50, 38, 26, 53, 41, 42, 43, 44, 32, 46, + 66, 48, 68, 50, 51, 77, 53, 15, 35, 7, + 8, 58, 59, 9, 10, 11, 12, 12, 14, 14, + 16, 16, 18, 19, 20, 9, 53, 1, 12, 25, + 102, 82, 16, 29, 30, 31, 44, 33, 33, 35, + 106, 107, 38, 51, 44, 41, 42, 43, 44, 35, + 46, 51, 48, 82, 50, 51, 22, 53, 53, 13, + 73, 47, 58, 59, 9, 10, 11, 12, 22, 14, + 83, 16, 26, 18, 19, 20, 28, 12, 32, 45, + 25, 22, 70, 35, 29, 30, 31, 65, 33, 102, + 35, 45, 73, 38, 60, 47, 41, 42, 43, 44, + 35, 46, 83, 48, 45, 50, 51, 95, 53, 71, + 95, 52, 74, 58, 59, 9, 10, 11, 12, 81, + 14, 102, 16, 73, 18, 19, 20, 34, 90, 36, + 1, 25, 94, 83, 81, 29, 30, 31, 66, 33, + 68, 35, 13, 96, 38, 98, 99, 41, 42, 43, + 44, 15, 46, 100, 48, 26, 50, 51, 14, 53, + 71, 32, 17, 74, 58, 59, 9, 10, 11, 12, + 81, 14, 34, 16, 36, 18, 19, 20, 82, 107, + 44, 35, 25, 94, 71, 95, 29, 30, 31, 44, + 33, 78, 35, 47, 81, 38, 51, 53, 41, 42, + 43, 44, 15, 46, 71, 48, 16, 50, 51, 22, + 53, 78, 79, 1, 81, 58, 59, 9, 10, 11, + 12, 15, 14, 17, 16, 1, 18, 19, 20, 66, + 34, 68, 36, 25, 16, 71, 44, 29, 30, 31, + 28, 33, 78, 35, 52, 81, 38, 62, 63, 41, + 42, 43, 44, 47, 46, 6, 48, 8, 50, 51, + 16, 53, 73, 1, 2, 40, 58, 59, 9, 10, + 11, 12, 83, 14, 77, 16, 52, 18, 19, 20, + 98, 99, 52, 95, 25, 97, 97, 92, 29, 30, + 31, 77, 33, 49, 35, 100, 14, 38, 16, 102, + 41, 42, 43, 44, 73, 46, 14, 48, 14, 50, + 51, 36, 53, 73, 83, 1, 102, 58, 59, 9, + 10, 11, 12, 83, 14, 17, 16, 50, 18, 19, + 20, 17, 71, 64, 65, 25, 73, 97, 15, 29, + 30, 31, 81, 33, 26, 35, 83, 53, 38, 73, + 32, 41, 42, 43, 44, 47, 46, 92, 48, 83, + 50, 51, 95, 53, 97, 100, 98, 99, 58, 59, + 9, 10, 11, 12, 23, 14, 52, 16, 16, 18, + 19, 20, 16, 7, 50, 16, 25, 13, 13, 16, + 29, 30, 31, 16, 33, 16, 35, 33, 33, 38, + 44, 16, 41, 42, 43, 44, 35, 46, 16, 48, + 95, 50, 51, 96, 53, 37, 38, 39, 81, 58, + 59, 66, 67, 68, 69, 83, 71, 72, 95, 74, + 75, 76, 54, 55, 56, 57, 81, 97, 60, 84, + 95, 13, 17, 80, 89, 90, 91, 1, 93, 94, + 2, 81, 103, 66, 67, 68, 69, 99, 71, 72, + 108, 74, 75, 76, 81, 37, 38, 39, 81, 108, + 108, 84, 108, 108, 108, 95, 89, 90, 91, 108, + 93, 94, 54, 55, 56, 57, 66, 108, 68, 108, + 108, 71, 108, 108, 74, 75, 76, 108, 108, 21, + 108, 81, 108, 108, 84, 9, 108, 108, 12, 89, + 90, 91, 16, 93, 94, 37, 38, 39, 108, 108, + 108, 66, 26, 68, 104, 105, 71, 108, 32, 74, + 75, 76, 54, 55, 56, 57, 81, 1, 108, 84, + 73, 108, 108, 108, 89, 90, 91, 108, 93, 94, + 83, 2, 85, 86, 87, 108, 108, 108, 108, 104, + 105, 108, 26, 3, 4, 5, 6, 108, 32, 9, + 10, 11, 12, 108, 108, 14, 108, 16, 18, 19, + 20, 108, 108, 108, 35, 25, 37, 38, 39, 29, + 30, 31, 66, 108, 68, 69, 47, 71, 72, 108, + 74, 75, 76, 54, 55, 56, 57, 81, 108, 48, + 84, 50, 108, 108, 53, 89, 90, 91, 108, 93, + 94, 3, 108, 108, 108, 108, 108, 9, 10, 11, + 12, 108, 14, 108, 108, 108, 18, 19, 20, 108, + 108, 13, 108, 25, 27, 108, 108, 29, 30, 31, + 108, 108, 108, 3, 37, 38, 39, 108, 108, 9, + 10, 11, 12, 108, 14, 37, 38, 39, 18, 19, + 20, 54, 55, 56, 57, 25, 108, 59, 60, 29, + 30, 31, 54, 55, 56, 57, 108, 108, 66, 108, + 68, 108, 1, 71, 108, 108, 74, 75, 76, 108, + 108, 108, 108, 81, 13, 108, 84, 108, 108, 59, + 60, 89, 90, 91, 108, 93, 94, 26, 108, 108, + 66, 108, 68, 32, 108, 71, 108, 105, 74, 75, + 76, 66, 78, 68, 108, 81, 71, 108, 84, 74, + 75, 76, 108, 89, 90, 91, 81, 93, 94, 84, + 9, 108, 108, 12, 89, 90, 91, 16, 93, 94, + 66, 108, 68, 108, 108, 71, 101, 108, 74, 75, + 76, 108, 108, 108, 108, 81, 108, 108, 84, 9, + 108, 108, 12, 89, 90, 91, 16, 93, 94, 66, + 49, 68, 108, 108, 71, 101, 108, 74, 75, 76, + 66, 78, 68, 108, 81, 71, 108, 84, 74, 75, + 76, 108, 89, 90, 91, 81, 93, 94, 84, 49, + 108, 108, 108, 89, 90, 91, 108, 93, 94, 66, + 108, 68, 73, 108, 71, 101, 77, 74, 75, 76, + 108, 108, 83, 108, 81, 108, 108, 84, 9, 108, + 108, 12, 89, 90, 91, 16, 93, 94, 66, 108, + 68, 102, 108, 71, 108, 108, 74, 75, 76, 66, + 108, 68, 108, 81, 71, 108, 84, 74, 75, 76, + 108, 89, 90, 91, 81, 93, 94, 84, 49, 1, + 108, 108, 89, 90, 91, 108, 93, 94, 66, 108, + 68, 13, 108, 71, 108, 108, 74, 75, 76, 108, + 108, 108, 108, 81, 26, 108, 84, 108, 108, 108, + 32, 89, 90, 91, 108, 93, 94, 66, 108, 68, + 108, 108, 71, 108, 108, 74, 75, 76, 66, 108, + 68, 108, 81, 71, 108, 84, 74, 75, 76, 108, + 89, 90, 91, 81, 93, 94, 84, 108, 108, 108, + 73, 89, 90, 91, 77, 93, 94, 66, 108, 68, + 83, 108, 71, 108, 108, 74, 75, 76, 108, 108, + 108, 108, 81, 108, 108, 84, 108, 108, 108, 102, + 89, 90, 91, 108, 93, 94, 66, 108, 68, 108, + 108, 71, 108, 108, 74, 75, 76, 66, 108, 68, + 108, 81, 71, 108, 84, 74, 75, 76, 108, 89, + 90, 91, 81, 93, 94, 84, 108, 108, 108, 108, + 89, 90, 91, 108, 93, 94, 66, 108, 68, 108, + 108, 71, 108, 108, 74, 75, 76, 108, 108, 108, + 108, 81, 108, 108, 84, 108, 108, 108, 108, 89, + 90, 91, 108, 93, 94, 66, 108, 68, 108, 108, + 71, 108, 108, 74, 75, 76, 66, 108, 68, 108, + 81, 71, 108, 84, 74, 75, 76, 108, 89, 90, + 91, 81, 93, 94, 84, 108, 108, 108, 108, 89, + 90, 91, 108, 93, 94, 66, 108, 68, 108, 108, + 71, 108, 108, 74, 75, 76, 108, 108, 108, 108, + 81, 108, 108, 84, 108, 108, 108, 108, 89, 90, + 91, 108, 93, 94, 66, 108, 68, 108, 108, 71, + 108, 108, 74, 75, 76, 66, 108, 68, 108, 81, + 71, 108, 84, 74, 75, 76, 108, 89, 90, 91, + 81, 93, 94, 84, 108, 108, 108, 108, 89, 90, + 91, 108, 93, 94, 66, 108, 68, 108, 108, 71, + 108, 108, 74, 75, 76, 108, 108, 108, 108, 81, + 108, 108, 84, 108, 108, 108, 108, 89, 90, 91, + 108, 93, 94, 66, 108, 68, 108, 108, 71, 108, + 108, 74, 75, 76, 66, 108, 68, 108, 81, 71, + 108, 84, 74, 75, 76, 108, 89, 90, 91, 81, + 93, 94, 84, 108, 108, 108, 108, 89, 90, 91, + 108, 93, 94, 66, 108, 68, 108, 108, 71, 108, + 108, 74, 75, 76, 108, 108, 108, 108, 81, 108, + 108, 84, 108, 108, 108, 108, 89, 90, 91, 108, + 93, 94, 66, 108, 68, 108, 108, 71, 108, 108, + 74, 75, 76, 66, 108, 68, 108, 81, 71, 108, + 84, 74, 75, 76, 108, 89, 90, 91, 81, 93, + 94, 84, 108, 108, 108, 108, 89, 90, 91, 108, + 93, 94, 66, 108, 68, 108, 108, 71, 108, 108, + 74, 75, 76, 108, 108, 108, 108, 81, 108, 108, + 84, 108, 108, 108, 108, 89, 90, 91, 108, 93, + 94, 66, 108, 68, 108, 108, 71, 108, 108, 74, + 75, 76, 66, 108, 68, 108, 81, 71, 108, 84, + 74, 75, 76, 108, 89, 90, 91, 81, 93, 94, + 84, 108, 108, 108, 108, 89, 90, 91, 108, 93, + 94, 66, 1, 68, 108, 108, 71, 108, 108, 74, + 75, 76, 108, 108, 13, 108, 81, 108, 17, 84, + 108, 108, 108, 108, 89, 90, 91, 26, 93, 94, + 66, 108, 68, 32, 108, 71, 35, 108, 74, 75, + 108, 66, 108, 68, 108, 81, 71, 108, 47, 74, + 75, 108, 88, 89, 90, 91, 81, 93, 94, 108, + 108, 108, 108, 88, 89, 90, 91, 108, 93, 94, + 66, 108, 68, 9, 108, 71, 12, 108, 74, 75, + 16, 108, 108, 108, 108, 81, 108, 108, 108, 108, + 26, 108, 28, 89, 90, 91, 32, 93, 94, 66, + 108, 68, 108, 108, 71, 108, 108, 74, 75, 108, + 66, 108, 68, 108, 81, 71, 108, 108, 74, 75, + 108, 108, 89, 90, 91, 81, 93, 94, 108, 108, + 108, 108, 108, 89, 90, 91, 108, 93, 94, 66, + 108, 68, 108, 73, 71, 108, 108, 74, 75, 108, + 108, 108, 108, 83, 81, 85, 86, 87, 108, 108, + 108, 108, 89, 90, 91, 108, 93, 94, 66, 108, + 68, 108, 108, 71, 108, 108, 74, 75, 108, 66, + 108, 68, 108, 81, 71, 108, 108, 74, 75, 108, + 108, 89, 90, 91, 81, 93, 94, 108, 108, 108, + 108, 108, 89, 90, 91, 2, 93, 94, 66, 108, + 68, 108, 9, 71, 108, 12, 74, 75, 15, 16, + 17, 108, 108, 81, 108, 108, 108, 108, 108, 108, + 108, 89, 90, 91, 2, 93, 94, 108, 108, 108, + 108, 9, 108, 108, 12, 108, 108, 44, 16, 17, + 47, 2, 49, 108, 51, 108, 108, 73, 9, 108, + 108, 12, 108, 108, 15, 16, 17, 83, 108, 85, + 86, 87, 24, 108, 26, 108, 44, 108, 108, 47, + 32, 49, 108, 51, 52, 37, 38, 39, 108, 108, + 108, 108, 108, 44, 108, 108, 47, 108, 49, 108, + 51, 26, 54, 55, 56, 57, 108, 32, 2, 108, + 108, 108, 37, 38, 39, 9, 108, 108, 12, 108, + 108, 108, 16, 17, 108, 108, 2, 108, 108, 54, + 55, 56, 57, 9, 108, 108, 12, 108, 108, 108, + 16, 17, 108, 108, 108, 37, 38, 39, 108, 108, + 44, 108, 108, 47, 13, 49, 108, 51, 108, 13, + 52, 108, 54, 55, 56, 57, 108, 13, 44, 108, + 2, 47, 108, 49, 108, 51, 108, 108, 37, 38, + 39, 108, 108, 37, 38, 39, 108, 108, 108, 108, + 108, 37, 38, 39, 108, 54, 55, 56, 57, 108, + 54, 55, 56, 57, 108, 37, 38, 39, 54, 55, + 56, 57, 36, 37, 38, 39, 108, 108, 108, 108, + 108, 108, 54, 55, 56, 57, 108, 108, 108, 108, + 54, 55, 56, 57, 9, 108, 108, 12, 37, 38, + 39, 16, 17, 36, 37, 38, 39, 108, 108, 108, + 108, 108, 108, 108, 108, 54, 55, 56, 57, 108, + 108, 54, 55, 56, 57, 108, 108, 108, 108, 44, + 108, 108, 47, 108, 49, 108, 51, +); + const YY_SHIFT_USE_DFLT = -22; + const YY_SHIFT_MAX = 230; + public static $yy_shift_ofst = array( + -22, 501, 501, 93, 399, 399, 450, 93, 93, 93, + 399, 450, -9, 93, 93, 93, 93, 93, 93, 144, + 93, 195, 93, 93, 93, 246, 195, 93, 93, 93, + 93, 93, 297, 93, 93, 93, 93, 348, 42, 42, + 42, 42, 42, 42, 42, 42, 1768, 1795, 1795, 701, + 758, 1521, 80, 676, 113, 790, 1927, 1828, 1896, 568, + 768, 1861, 757, 1866, 1874, 1888, 618, 518, 1921, 1921, + 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, + 1921, 1921, 1921, 1584, 636, 285, 676, 676, 346, 113, + 113, 402, 700, 1723, -8, 910, 831, 269, 1028, 51, + 3, 3, 422, 448, 352, 106, 422, 106, 458, 364, + 434, 454, 106, 166, 166, 166, 166, 565, 166, 166, + 166, 586, 565, 166, 166, -22, -22, 1752, 1769, 1826, + 1844, 1945, 145, 979, 156, 132, 284, 106, 140, 106, + 30, 140, 140, 30, 106, 106, 106, 140, 106, 106, + 140, 106, 327, 106, 106, 106, 140, 140, 106, 140, + 205, 106, 284, 166, 565, 588, 565, 588, 565, 166, + 166, -12, 166, -22, -22, -22, -22, -22, -22, 689, + 4, 44, 84, 186, 73, 881, 199, 188, 174, 286, + 48, 336, 384, 389, 332, 142, -21, 52, 154, 33, + 85, 276, 278, 233, 515, 509, 474, 516, 502, 464, + 491, 415, 417, 432, 514, 370, 463, 506, 365, 513, + -12, 517, 504, 519, 505, 511, 496, 525, 532, 330, + 358, +); + const YY_REDUCE_USE_DFLT = -89; + const YY_REDUCE_MAX = 178; + public static $yy_reduce_ofst = array( + 325, 527, 495, 666, 595, 560, 863, 874, 834, 805, + 762, 794, 1179, 1455, 1208, 1012, 1386, 1139, 1070, 1110, + 1150, 1219, 1248, 1277, 1288, 1317, 1346, 1357, 1415, 1426, + 1081, 1041, 1001, 972, 943, 932, 903, 1484, 1495, 1622, + 1633, 1662, 1593, 1564, 1553, 1524, 1704, 607, 1590, 178, + 74, 1027, 229, 899, 273, 212, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, 380, 329, 187, 159, 127, -52, 253, + 304, 12, 303, 152, 193, 328, 68, 68, 68, 322, + 328, 407, 405, 322, 68, 190, 335, 416, 403, 68, + 401, 354, 371, 68, 68, 68, 337, 322, 68, 68, + 68, 68, 408, 68, 68, 68, 409, 455, 455, 455, + 455, 455, 510, 480, 455, 455, 477, 482, 457, 482, + 473, 457, 457, 485, 482, 482, 482, 457, 482, 482, + 457, 482, 503, 482, 482, 482, 457, 457, 482, 457, + 520, 482, 523, -88, 498, 489, 498, 489, 498, -88, + -88, -67, -88, 111, 155, 89, 236, 230, 162, +); + public static $yyExpectedTokens = array( + array(), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ), + array(24, 26, 32, 37, 38, 39, 54, 55, 56, 57, ), + array(26, 32, 37, 38, 39, 54, 55, 56, 57, ), + array(26, 32, 37, 38, 39, 54, 55, 56, 57, ), + array(14, 16, 48, 50, 53, ), + array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ), + array(1, 13, 17, 26, 32, 35, 47, ), + array(14, 16, 50, 53, ), + array(1, 26, 32, ), + array(14, 35, 53, ), + array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ), + array(36, 37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 52, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 54, 55, 56, 57, ), + array(13, 37, 38, 39, 54, 55, 56, 57, ), + array(13, 37, 38, 39, 54, 55, 56, 57, ), + array(13, 37, 38, 39, 54, 55, 56, 57, ), + array(27, 37, 38, 39, 54, 55, 56, 57, ), + array(13, 37, 38, 39, 54, 55, 56, 57, ), + array(13, 37, 38, 39, 54, 55, 56, 57, ), + array(2, 37, 38, 39, 54, 55, 56, 57, ), + array(21, 37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, 60, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(37, 38, 39, 54, 55, 56, 57, ), + array(9, 12, 16, 26, 28, 32, ), + array(9, 12, 16, 26, 32, ), + array(17, 44, 51, ), + array(1, 26, 32, ), + array(1, 26, 32, ), + array(15, 17, 47, ), + array(14, 35, 53, ), + array(14, 35, 53, ), + array(1, 2, ), + array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 20, 25, 29, 30, 31, ), + array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ), + array(12, 14, 16, 53, ), + array(9, 12, 16, 49, ), + array(1, 13, 26, 32, ), + array(1, 13, 26, 32, ), + array(1, 13, 26, 32, ), + array(15, 17, 47, ), + array(9, 12, 16, ), + array(9, 12, 16, ), + array(14, 16, ), + array(17, 47, ), + array(1, 28, ), + array(26, 32, ), + array(14, 16, ), + array(26, 32, ), + array(26, 32, ), + array(1, 52, ), + array(14, 53, ), + array(1, 17, ), + array(26, 32, ), + array(1, ), + array(1, ), + array(1, ), + array(1, ), + array(17, ), + array(1, ), + array(1, ), + array(1, ), + array(1, ), + array(17, ), + array(1, ), + array(1, ), + array(), + array(), + array(2, 9, 12, 16, 17, 44, 47, 49, 51, 52, ), + array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ), + array(2, 9, 12, 16, 17, 44, 47, 49, 51, ), + array(2, 9, 12, 16, 17, 44, 47, 49, 51, ), + array(9, 12, 16, 17, 44, 47, 49, 51, ), + array(12, 14, 16, 33, 53, ), + array(9, 12, 16, 49, ), + array(9, 12, 16, ), + array(15, 44, 51, ), + array(14, 53, ), + array(26, 32, ), + array(44, 51, ), + array(26, 32, ), + array(44, 51, ), + array(44, 51, ), + array(44, 51, ), + array(44, 51, ), + array(26, 32, ), + array(26, 32, ), + array(26, 32, ), + array(44, 51, ), + array(26, 32, ), + array(26, 32, ), + array(44, 51, ), + array(26, 32, ), + array(15, 22, ), + array(26, 32, ), + array(26, 32, ), + array(26, 32, ), + array(44, 51, ), + array(44, 51, ), + array(26, 32, ), + array(44, 51, ), + array(12, 35, ), + array(26, 32, ), + array(14, 53, ), + array(1, ), + array(17, ), + array(2, ), + array(17, ), + array(2, ), + array(17, ), + array(1, ), + array(1, ), + array(35, ), + array(1, ), + array(), + array(), + array(), + array(), + array(), + array(), + array(2, 35, 37, 38, 39, 47, 54, 55, 56, 57, ), + array(13, 21, 23, 26, 32, 34, 36, 44, ), + array(13, 15, 26, 32, 35, 47, ), + array(13, 22, 26, 32, 45, ), + array(13, 22, 26, 32, 45, ), + array(35, 44, 47, 52, ), + array(9, 12, 16, 49, ), + array(22, 45, 52, ), + array(28, 35, 47, ), + array(22, 45, 60, ), + array(35, 47, ), + array(21, 34, ), + array(34, 36, ), + array(16, 49, ), + array(6, 8, ), + array(44, 52, ), + array(7, 8, ), + array(34, 52, ), + array(35, 47, ), + array(35, 47, ), + array(22, 45, ), + array(34, 36, ), + array(15, 44, ), + array(34, 36, ), + array(34, 36, ), + array(13, ), + array(16, ), + array(50, ), + array(7, ), + array(16, ), + array(52, ), + array(23, ), + array(36, ), + array(50, ), + array(14, ), + array(13, ), + array(52, ), + array(15, ), + array(16, ), + array(40, ), + array(16, ), + array(35, ), + array(16, ), + array(33, ), + array(16, ), + array(33, ), + array(35, ), + array(44, ), + array(16, ), + array(16, ), + array(16, ), + array(16, ), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), + array(), +); + public static $yy_default = array( + 336, 512, 512, 512, 497, 497, 512, 474, 474, 474, + 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, + 512, 512, 512, 512, 512, 512, 377, 377, 356, 512, + 512, 413, 512, 377, 512, 512, 512, 512, 512, 512, + 512, 512, 382, 512, 349, 512, 512, 512, 382, 379, + 389, 388, 384, 402, 473, 397, 498, 500, 401, 361, + 472, 499, 349, 377, 377, 487, 377, 377, 429, 512, + 512, 368, 326, 428, 512, 439, 391, 391, 391, 429, + 439, 439, 512, 429, 391, 377, 512, 377, 377, 391, + 512, 371, 358, 395, 394, 396, 373, 429, 400, 404, + 391, 404, 484, 406, 405, 481, 334, 428, 428, 428, + 428, 428, 512, 441, 439, 455, 512, 363, 435, 354, + 434, 437, 433, 432, 359, 357, 364, 436, 353, 367, + 466, 365, 512, 352, 350, 360, 467, 465, 346, 464, + 439, 366, 512, 369, 461, 475, 488, 476, 485, 372, + 422, 439, 374, 480, 439, 480, 480, 439, 334, 413, + 409, 413, 403, 403, 413, 440, 403, 413, 403, 413, + 512, 512, 512, 332, 409, 512, 512, 512, 423, 403, + 512, 409, 512, 512, 512, 512, 512, 512, 512, 418, + 385, 512, 512, 512, 512, 512, 512, 512, 415, 512, + 455, 512, 512, 512, 411, 486, 409, 512, 512, 512, + 512, 419, 407, 362, 445, 418, 425, 424, 420, 339, + 460, 421, 483, 398, 416, 340, 399, 455, 378, 337, + 338, 330, 328, 329, 442, 443, 444, 438, 392, 393, + 427, 426, 386, 417, 408, 390, 410, 331, 333, 335, + 412, 470, 414, 415, 503, 478, 495, 471, 459, 458, + 375, 457, 344, 462, 508, 493, 376, 496, 456, 509, + 494, 501, 504, 511, 510, 507, 505, 502, 506, 345, + 468, 469, 446, 355, 341, 452, 450, 454, 448, 453, + 447, 489, 490, 491, 463, 449, 492, 451, 327, 342, + 343, 370, 430, 431, 479, 477, +); + const YYNOCODE = 109; + const YYSTACKDEPTH = 500; + const YYNSTATE = 326; + const YYNRULE = 186; + const YYERRORSYMBOL = 61; + const YYERRSYMDT = 'yy0'; + const YYFALLBACK = 0; + public static $yyFallback = array( + ); public function Trace($TraceFILE, $zTracePrompt) { if (!$TraceFILE) { @@ -1840,18 +1110,250 @@ class Smarty_Internal_Templateparser $this->yyTracePrompt = '<br>'; } + public $yyTraceFILE; + public $yyTracePrompt; + public $yyidx; /* Index of top element in stack */ + public $yyerrcnt; /* Shifts left before out of the error */ + public $yystack = array(); /* The parser's stack */ + + public $yyTokenName = array( + '$', 'VERT', 'COLON', 'TEXT', + 'STRIPON', 'STRIPOFF', 'LITERALSTART', 'LITERALEND', + 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG', 'SMARTYBLOCKCHILDPARENT', + 'LDEL', 'RDEL', 'DOLLARID', 'EQUAL', + 'ID', 'PTR', 'LDELMAKENOCACHE', 'LDELIF', + 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', + 'STEP', 'LDELFOREACH', 'SPACE', 'AS', + 'APTR', 'LDELSETFILTER', 'CLOSETAG', 'LDELSLASH', + 'ATTR', 'INTEGER', 'COMMA', 'OPENP', + 'CLOSEP', 'MATH', 'UNIMATH', 'ISIN', + 'QMARK', 'NOT', 'TYPECAST', 'HEX', + 'DOT', 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON', + 'NAMESPACE', 'AT', 'HATCH', 'OPENB', + 'CLOSEB', 'DOLLAR', 'LOGOP', 'SLOGOP', + 'TLOGOP', 'SINGLECOND', 'ARRAYOPEN', 'QUOTE', + 'BACKTICK', 'error', 'start', 'template', + 'literal_e2', 'literal_e1', 'smartytag', 'tagbody', + 'tag', 'outattr', 'eqoutattr', 'varindexed', + 'output', 'attributes', 'variable', 'value', + 'expr', 'modifierlist', 'statement', 'statements', + 'foraction', 'varvar', 'modparameters', 'attribute', + 'ternary', 'tlop', 'lop', 'scond', + 'array', 'function', 'ns1', 'doublequoted_with_quotes', + 'static_class_access', 'arraydef', 'object', 'arrayindex', + 'indexdef', 'varvarele', 'objectchain', 'objectelement', + 'method', 'params', 'modifier', 'modparameter', + 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent', + ); + + public static $yyRuleName = array( + 'start ::= template', + 'template ::= template TEXT', + 'template ::= template STRIPON', + 'template ::= template STRIPOFF', + 'template ::= template LITERALSTART literal_e2 LITERALEND', + 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND', + 'literal_e2 ::= literal_e1', + 'literal_e1 ::= literal_e1 LITERAL', + 'literal_e1 ::=', + 'template ::= template smartytag', + 'template ::=', + 'smartytag ::= SIMPELOUTPUT', + 'smartytag ::= SIMPLETAG', + 'smartytag ::= SMARTYBLOCKCHILDPARENT', + 'smartytag ::= LDEL tagbody RDEL', + 'smartytag ::= tag RDEL', + 'tagbody ::= outattr', + 'tagbody ::= DOLLARID eqoutattr', + 'tagbody ::= varindexed eqoutattr', + 'eqoutattr ::= EQUAL outattr', + 'outattr ::= output attributes', + 'output ::= variable', + 'output ::= value', + 'output ::= expr', + 'tag ::= LDEL ID attributes', + 'tag ::= LDEL ID', + 'tag ::= LDEL ID modifierlist attributes', + 'tag ::= LDEL ID PTR ID attributes', + 'tag ::= LDEL ID PTR ID modifierlist attributes', + 'tag ::= LDELMAKENOCACHE DOLLARID', + 'tag ::= LDELIF expr', + 'tag ::= LDELIF expr attributes', + 'tag ::= LDELIF statement', + 'tag ::= LDELIF statement attributes', + 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes', + 'foraction ::= EQUAL expr', + 'foraction ::= INCDEC', + 'tag ::= LDELFOR statement TO expr attributes', + 'tag ::= LDELFOR statement TO expr STEP expr attributes', + 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', + 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', + 'tag ::= LDELFOREACH attributes', + 'tag ::= LDELSETFILTER ID modparameters', + 'tag ::= LDELSETFILTER ID modparameters modifierlist', + 'smartytag ::= CLOSETAG', + 'tag ::= LDELSLASH ID', + 'tag ::= LDELSLASH ID modifierlist', + 'tag ::= LDELSLASH ID PTR ID', + 'tag ::= LDELSLASH ID PTR ID modifierlist', + 'attributes ::= attributes attribute', + 'attributes ::= attribute', + 'attributes ::=', + 'attribute ::= SPACE ID EQUAL ID', + 'attribute ::= ATTR expr', + 'attribute ::= ATTR value', + 'attribute ::= SPACE ID', + 'attribute ::= SPACE expr', + 'attribute ::= SPACE value', + 'attribute ::= SPACE INTEGER EQUAL expr', + 'statements ::= statement', + 'statements ::= statements COMMA statement', + 'statement ::= DOLLARID EQUAL INTEGER', + 'statement ::= DOLLARID EQUAL expr', + 'statement ::= varindexed EQUAL expr', + 'statement ::= OPENP statement CLOSEP', + 'expr ::= value', + 'expr ::= ternary', + 'expr ::= DOLLARID COLON ID', + 'expr ::= expr MATH value', + 'expr ::= expr UNIMATH value', + 'expr ::= expr tlop value', + 'expr ::= expr lop expr', + 'expr ::= expr scond', + 'expr ::= expr ISIN array', + 'expr ::= expr ISIN value', + 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr', + 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', + 'value ::= variable', + 'value ::= UNIMATH value', + 'value ::= NOT value', + 'value ::= TYPECAST value', + 'value ::= variable INCDEC', + 'value ::= HEX', + 'value ::= INTEGER', + 'value ::= INTEGER DOT INTEGER', + 'value ::= INTEGER DOT', + 'value ::= DOT INTEGER', + 'value ::= ID', + 'value ::= function', + 'value ::= OPENP expr CLOSEP', + 'value ::= variable INSTANCEOF ns1', + 'value ::= variable INSTANCEOF variable', + 'value ::= SINGLEQUOTESTRING', + 'value ::= doublequoted_with_quotes', + 'value ::= varindexed DOUBLECOLON static_class_access', + 'value ::= smartytag', + 'value ::= value modifierlist', + 'value ::= NAMESPACE', + 'value ::= arraydef', + 'value ::= ns1 DOUBLECOLON static_class_access', + 'ns1 ::= ID', + 'ns1 ::= NAMESPACE', + 'variable ::= DOLLARID', + 'variable ::= varindexed', + 'variable ::= varvar AT ID', + 'variable ::= object', + 'variable ::= HATCH ID HATCH', + 'variable ::= HATCH ID HATCH arrayindex', + 'variable ::= HATCH variable HATCH', + 'variable ::= HATCH variable HATCH arrayindex', + 'varindexed ::= DOLLARID arrayindex', + 'varindexed ::= varvar arrayindex', + 'arrayindex ::= arrayindex indexdef', + 'arrayindex ::=', + 'indexdef ::= DOT DOLLARID', + 'indexdef ::= DOT varvar', + 'indexdef ::= DOT varvar AT ID', + 'indexdef ::= DOT ID', + 'indexdef ::= DOT INTEGER', + 'indexdef ::= DOT LDEL expr RDEL', + 'indexdef ::= OPENB ID CLOSEB', + 'indexdef ::= OPENB ID DOT ID CLOSEB', + 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB', + 'indexdef ::= OPENB INTEGER CLOSEB', + 'indexdef ::= OPENB DOLLARID CLOSEB', + 'indexdef ::= OPENB variable CLOSEB', + 'indexdef ::= OPENB value CLOSEB', + 'indexdef ::= OPENB expr CLOSEB', + 'indexdef ::= OPENB CLOSEB', + 'varvar ::= DOLLARID', + 'varvar ::= DOLLAR', + 'varvar ::= varvar varvarele', + 'varvarele ::= ID', + 'varvarele ::= SIMPELOUTPUT', + 'varvarele ::= LDEL expr RDEL', + 'object ::= varindexed objectchain', + 'objectchain ::= objectelement', + 'objectchain ::= objectchain objectelement', + 'objectelement ::= PTR ID arrayindex', + 'objectelement ::= PTR varvar arrayindex', + 'objectelement ::= PTR LDEL expr RDEL arrayindex', + 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', + 'objectelement ::= PTR method', + 'function ::= ns1 OPENP params CLOSEP', + 'method ::= ID OPENP params CLOSEP', + 'method ::= DOLLARID OPENP params CLOSEP', + 'params ::= params COMMA expr', + 'params ::= expr', + 'params ::=', + 'modifierlist ::= modifierlist modifier modparameters', + 'modifierlist ::= modifier modparameters', + 'modifier ::= VERT AT ID', + 'modifier ::= VERT ID', + 'modparameters ::= modparameters modparameter', + 'modparameters ::=', + 'modparameter ::= COLON value', + 'modparameter ::= COLON UNIMATH value', + 'modparameter ::= COLON array', + 'static_class_access ::= method', + 'static_class_access ::= method objectchain', + 'static_class_access ::= ID', + 'static_class_access ::= DOLLARID arrayindex', + 'static_class_access ::= DOLLARID arrayindex objectchain', + 'lop ::= LOGOP', + 'lop ::= SLOGOP', + 'tlop ::= TLOGOP', + 'scond ::= SINGLECOND', + 'arraydef ::= OPENB arrayelements CLOSEB', + 'arraydef ::= ARRAYOPEN arrayelements CLOSEP', + 'arrayelements ::= arrayelement', + 'arrayelements ::= arrayelements COMMA arrayelement', + 'arrayelements ::=', + 'arrayelement ::= value APTR expr', + 'arrayelement ::= ID APTR expr', + 'arrayelement ::= expr', + 'doublequoted_with_quotes ::= QUOTE QUOTE', + 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE', + 'doublequoted ::= doublequoted doublequotedcontent', + 'doublequoted ::= doublequotedcontent', + 'doublequotedcontent ::= BACKTICK variable BACKTICK', + 'doublequotedcontent ::= BACKTICK expr BACKTICK', + 'doublequotedcontent ::= DOLLARID', + 'doublequotedcontent ::= LDEL variable RDEL', + 'doublequotedcontent ::= LDEL expr RDEL', + 'doublequotedcontent ::= smartytag', + 'doublequotedcontent ::= TEXT', + ); + public function tokenName($tokenType) { if ($tokenType === 0) { return 'End of Input'; } if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[ $tokenType ]; + 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)) { @@ -1860,18 +1362,19 @@ class Smarty_Internal_Templateparser $yytos = array_pop($this->yystack); if ($this->yyTraceFILE && $this->yyidx >= 0) { fwrite($this->yyTraceFILE, - $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] . - "\n"); + $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()) { + while ($this->yystack !== Array()) { $this->yy_pop_parser_stack(); } if (is_resource($this->yyTraceFILE)) { @@ -1883,14 +1386,14 @@ class Smarty_Internal_Templateparser { 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; } } @@ -1910,21 +1413,20 @@ class Smarty_Internal_Templateparser return array_unique($expected); } $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ]; + $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->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); @@ -1936,8 +1438,8 @@ class Smarty_Internal_Templateparser $this->yyidx++; $x = new TP_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; @@ -1958,8 +1460,9 @@ class Smarty_Internal_Templateparser } break; } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; + $this->yyidx = $yyidx; + $this->yystack = $stack; + return array_unique($expected); } @@ -1970,16 +1473,16 @@ class Smarty_Internal_Templateparser 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; } - } + } $stack = $this->yystack; $yyidx = $this->yyidx; do { @@ -1996,20 +1499,18 @@ class Smarty_Internal_Templateparser return true; } $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ]; + $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->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; @@ -2020,8 +1521,8 @@ class Smarty_Internal_Templateparser $this->yyidx++; $x = new TP_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; @@ -2048,65 +1549,69 @@ class Smarty_Internal_Templateparser } while (true); $this->yyidx = $yyidx; $this->yystack = $stack; + return true; } - public function yy_find_shift_action($iLookAhead) + public function yy_find_shift_action($iLookAhead) { - $stateno = $this->yystack[ $this->yyidx ]->stateno; + $stateno = $this->yystack[$this->yyidx]->stateno; + /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ - if (!isset(self::$yy_shift_ofst[ $stateno ])) { + if (!isset(self::$yy_shift_ofst[$stateno])) { // no shift actions - return self::$yy_default[ $stateno ]; + return self::$yy_default[$stateno]; } - $i = self::$yy_shift_ofst[ $stateno ]; + $i = self::$yy_shift_ofst[$stateno]; if ($i === self::YY_SHIFT_USE_DFLT) { - return self::$yy_default[ $stateno ]; + return self::$yy_default[$stateno]; } if ($iLookAhead === self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; if ($i < 0 || $i >= self::YY_SZ_ACTTAB || - self::$yy_lookahead[ $i ] != $iLookAhead) { + self::$yy_lookahead[$i] != $iLookAhead) { if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) - && ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0) { + && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { if ($this->yyTraceFILE) { fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'FALLBACK ' . - $this->yyTokenName[ $iLookAhead ] . ' => ' . - $this->yyTokenName[ $iFallback ] . "\n"); + $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]; } } public function yy_find_reduce_action($stateno, $iLookAhead) { /* $stateno = $this->yystack[$this->yyidx]->stateno; */ - if (!isset(self::$yy_reduce_ofst[ $stateno ])) { - return self::$yy_default[ $stateno ]; + + if (!isset(self::$yy_reduce_ofst[$stateno])) { + return self::$yy_default[$stateno]; } - $i = self::$yy_reduce_ofst[ $stateno ]; + $i = self::$yy_reduce_ofst[$stateno]; if ($i === self::YY_REDUCE_USE_DFLT) { - return self::$yy_default[ $stateno ]; + return self::$yy_default[$stateno]; } if ($iLookAhead === self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; if ($i < 0 || $i >= self::YY_SZ_ACTTAB || - self::$yy_lookahead[ $i ] != $iLookAhead) { - return self::$yy_default[ $stateno ]; + self::$yy_lookahead[$i] != $iLookAhead) { + return self::$yy_default[$stateno]; } else { - return self::$yy_action[ $i ]; + return self::$yy_action[$i]; } } - // line 234 "../smarty/lexer/smarty_internal_templateparser.y" public function yy_shift($yyNewState, $yyMajor, $yypMinor) { $this->yyidx++; @@ -2118,9 +1623,11 @@ class Smarty_Internal_Templateparser while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } - // line 221 "../smarty/lexer/smarty_internal_templateparser.y" - $this->internalError = true; - $this->compiler->trigger_template_error('Stack overflow in template parser'); +// line 220 "../smarty/lexer/smarty_internal_templateparser.y" + + $this->internalError = true; + $this->compiler->trigger_template_error('Stack overflow in template parser'); + return; } $yytos = new TP_yyStackEntry; @@ -2134,1357 +1641,1150 @@ class Smarty_Internal_Templateparser fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); for ($i = 1; $i <= $this->yyidx; $i++) { fprintf($this->yyTraceFILE, " %s", - $this->yyTokenName[ $this->yystack[ $i ]->major ]); + $this->yyTokenName[$this->yystack[$i]->major]); } - fwrite($this->yyTraceFILE, "\n"); + fwrite($this->yyTraceFILE,"\n"); } } - // line 242 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r0() - { - $this->root_buffer->prepend_array($this, $this->template_prefix); - $this->root_buffer->append_array($this, $this->template_postfix); - $this->_retvalue = $this->root_buffer->to_smarty_php($this); - } - - // line 251 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r1() - { - $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->current_buffer->append_subtree($this, - new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true))); - } - } - - // line 255 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r2() - { - $text = $this->yystack[ $this->yyidx + 0 ]->minor; - - if ((string)$text == '') { - $this->current_buffer->append_subtree($this, null); - } - - $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip)); - } + public static $yyRuleInfo = array( + array( 0 => 62, 1 => 1 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 4 ), + array( 0 => 64, 1 => 4 ), + array( 0 => 64, 1 => 1 ), + array( 0 => 65, 1 => 2 ), + array( 0 => 65, 1 => 0 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 0 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 3 ), + array( 0 => 66, 1 => 2 ), + array( 0 => 67, 1 => 1 ), + array( 0 => 67, 1 => 2 ), + array( 0 => 67, 1 => 2 ), + array( 0 => 70, 1 => 2 ), + array( 0 => 69, 1 => 2 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 68, 1 => 6 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 8 ), + array( 0 => 80, 1 => 2 ), + array( 0 => 80, 1 => 1 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 68, 1 => 7 ), + array( 0 => 68, 1 => 6 ), + array( 0 => 68, 1 => 8 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 73, 1 => 2 ), + array( 0 => 73, 1 => 1 ), + array( 0 => 73, 1 => 0 ), + array( 0 => 83, 1 => 4 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 4 ), + array( 0 => 79, 1 => 1 ), + array( 0 => 79, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 2 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 84, 1 => 7 ), + array( 0 => 84, 1 => 7 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 90, 1 => 1 ), + array( 0 => 90, 1 => 1 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 74, 1 => 3 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 74, 1 => 3 ), + array( 0 => 74, 1 => 4 ), + array( 0 => 74, 1 => 3 ), + array( 0 => 74, 1 => 4 ), + array( 0 => 71, 1 => 2 ), + array( 0 => 71, 1 => 2 ), + array( 0 => 95, 1 => 2 ), + array( 0 => 95, 1 => 0 ), + array( 0 => 96, 1 => 2 ), + array( 0 => 96, 1 => 2 ), + array( 0 => 96, 1 => 4 ), + array( 0 => 96, 1 => 2 ), + array( 0 => 96, 1 => 2 ), + array( 0 => 96, 1 => 4 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 5 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 2 ), + array( 0 => 81, 1 => 1 ), + array( 0 => 81, 1 => 1 ), + array( 0 => 81, 1 => 2 ), + array( 0 => 97, 1 => 1 ), + array( 0 => 97, 1 => 1 ), + array( 0 => 97, 1 => 3 ), + array( 0 => 94, 1 => 2 ), + array( 0 => 98, 1 => 1 ), + array( 0 => 98, 1 => 2 ), + array( 0 => 99, 1 => 3 ), + array( 0 => 99, 1 => 3 ), + array( 0 => 99, 1 => 5 ), + array( 0 => 99, 1 => 6 ), + array( 0 => 99, 1 => 2 ), + array( 0 => 89, 1 => 4 ), + array( 0 => 100, 1 => 4 ), + array( 0 => 100, 1 => 4 ), + array( 0 => 101, 1 => 3 ), + array( 0 => 101, 1 => 1 ), + array( 0 => 101, 1 => 0 ), + array( 0 => 77, 1 => 3 ), + array( 0 => 77, 1 => 2 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 82, 1 => 2 ), + array( 0 => 82, 1 => 0 ), + array( 0 => 103, 1 => 2 ), + array( 0 => 103, 1 => 3 ), + array( 0 => 103, 1 => 2 ), + array( 0 => 92, 1 => 1 ), + array( 0 => 92, 1 => 2 ), + array( 0 => 92, 1 => 1 ), + array( 0 => 92, 1 => 2 ), + array( 0 => 92, 1 => 3 ), + array( 0 => 86, 1 => 1 ), + array( 0 => 86, 1 => 1 ), + array( 0 => 85, 1 => 1 ), + array( 0 => 87, 1 => 1 ), + array( 0 => 93, 1 => 3 ), + array( 0 => 93, 1 => 3 ), + array( 0 => 104, 1 => 1 ), + array( 0 => 104, 1 => 3 ), + array( 0 => 104, 1 => 0 ), + array( 0 => 105, 1 => 3 ), + array( 0 => 105, 1 => 3 ), + array( 0 => 105, 1 => 1 ), + array( 0 => 91, 1 => 2 ), + array( 0 => 91, 1 => 3 ), + array( 0 => 106, 1 => 2 ), + array( 0 => 106, 1 => 1 ), + array( 0 => 107, 1 => 3 ), + array( 0 => 107, 1 => 3 ), + array( 0 => 107, 1 => 1 ), + array( 0 => 107, 1 => 3 ), + array( 0 => 107, 1 => 3 ), + array( 0 => 107, 1 => 1 ), + array( 0 => 107, 1 => 1 ), + ); - // line 259 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r3() - { + public static $yyReduceMap = array( + 0 => 0, + 1 => 1, + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 5, + 6 => 6, + 21 => 6, + 22 => 6, + 23 => 6, + 36 => 6, + 56 => 6, + 57 => 6, + 65 => 6, + 66 => 6, + 77 => 6, + 82 => 6, + 83 => 6, + 88 => 6, + 92 => 6, + 93 => 6, + 97 => 6, + 98 => 6, + 100 => 6, + 105 => 6, + 169 => 6, + 174 => 6, + 7 => 7, + 8 => 8, + 9 => 9, + 11 => 11, + 12 => 12, + 13 => 13, + 14 => 14, + 15 => 15, + 16 => 16, + 17 => 17, + 18 => 18, + 19 => 19, + 20 => 20, + 24 => 24, + 25 => 25, + 26 => 26, + 27 => 27, + 28 => 28, + 29 => 29, + 30 => 30, + 31 => 31, + 33 => 31, + 32 => 32, + 34 => 34, + 35 => 35, + 37 => 37, + 38 => 38, + 39 => 39, + 40 => 40, + 41 => 41, + 42 => 42, + 43 => 43, + 44 => 44, + 45 => 45, + 46 => 46, + 47 => 47, + 48 => 48, + 49 => 49, + 50 => 50, + 59 => 50, + 147 => 50, + 151 => 50, + 155 => 50, + 157 => 50, + 51 => 51, + 148 => 51, + 154 => 51, + 52 => 52, + 53 => 53, + 54 => 53, + 55 => 55, + 132 => 55, + 58 => 58, + 60 => 60, + 61 => 61, + 62 => 61, + 63 => 63, + 64 => 64, + 67 => 67, + 68 => 68, + 69 => 68, + 70 => 70, + 71 => 71, + 72 => 72, + 73 => 73, + 74 => 74, + 75 => 75, + 76 => 76, + 78 => 78, + 80 => 78, + 81 => 78, + 112 => 78, + 79 => 79, + 84 => 84, + 85 => 85, + 86 => 86, + 87 => 87, + 89 => 89, + 90 => 90, + 91 => 90, + 94 => 94, + 95 => 95, + 96 => 96, + 99 => 99, + 101 => 101, + 102 => 102, + 103 => 103, + 104 => 104, + 106 => 106, + 107 => 107, + 108 => 108, + 109 => 109, + 110 => 110, + 111 => 111, + 113 => 113, + 171 => 113, + 114 => 114, + 115 => 115, + 116 => 116, + 117 => 117, + 118 => 118, + 119 => 119, + 127 => 119, + 120 => 120, + 121 => 121, + 122 => 122, + 123 => 122, + 125 => 122, + 126 => 122, + 124 => 124, + 128 => 128, + 129 => 129, + 130 => 130, + 175 => 130, + 131 => 131, + 133 => 133, + 134 => 134, + 135 => 135, + 136 => 136, + 137 => 137, + 138 => 138, + 139 => 139, + 140 => 140, + 141 => 141, + 142 => 142, + 143 => 143, + 144 => 144, + 145 => 145, + 146 => 146, + 149 => 149, + 150 => 150, + 152 => 152, + 153 => 153, + 156 => 156, + 158 => 158, + 159 => 159, + 160 => 160, + 161 => 161, + 162 => 162, + 163 => 163, + 164 => 164, + 165 => 165, + 166 => 166, + 167 => 167, + 168 => 167, + 170 => 170, + 172 => 172, + 173 => 173, + 176 => 176, + 177 => 177, + 178 => 178, + 179 => 179, + 182 => 179, + 180 => 180, + 183 => 180, + 181 => 181, + 184 => 184, + 185 => 185, + ); +// line 233 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r0(){ + $this->root_buffer->prepend_array($this, $this->template_prefix); + $this->root_buffer->append_array($this, $this->template_postfix); + $this->_retvalue = $this->root_buffer->to_smarty_php($this); + } +// line 240 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r1(){ + $text = $this->yystack[ $this->yyidx + 0 ]->minor; + + if ((string)$text == '') { + $this->current_buffer->append_subtree($this, null); + } + + $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip)); + } +// line 250 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r2(){ + $this->strip = true; + } +// line 254 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r3(){ + $this->strip = false; + } +// line 259 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r4(){ + $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($this->yystack[$this->yyidx + -1]->minor)); + } +// line 264 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r5(){ + $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.$this->yystack[$this->yyidx + -1]->minor; + } +// line 267 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r6(){ + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; + } +// line 271 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r7(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; + + } +// line 276 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r8(){ + $this->_retvalue = ''; + } +// line 280 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r9(){ + if ($this->compiler->has_code) { + $this->current_buffer->append_subtree($this, $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor)); + } + $this->compiler->has_variable_string = false; + $this->block_nesting_level = count($this->compiler->_tag_stack); + } +// line 292 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r11(){ + $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $'); + if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { + $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\''))); + } else { + $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\''))); + } + } +// line 302 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r12(){ + $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength())); + if ($tag == 'strip') { $this->strip = true; - } - - // line 264 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r4() - { - $this->strip = false; - } - - // line 269 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r5() - { - $this->current_buffer->append_subtree($this, - new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + -1 ]->minor)); - } - - // line 272 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r6() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -3 ]->minor . $this->yystack[ $this->yyidx + -1 ]->minor; - } - - // line 276 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r7() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 281 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r8() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 285 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r9() - { - $this->_retvalue = ''; - } - - // line 297 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r10() - { - if ($this->compiler->has_code) { - $this->current_buffer->append_subtree($this, - $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor)); - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); - } - - // line 307 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r12() - { - $var = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(), - -$this->compiler->getRdelLength()), ' $'); - if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', array('nocache'), - array('value' => $this->compiler->compileVariable('\'' . $match[ 1 ] . '\''))); - } else { - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', array(), - array('value' => $this->compiler->compileVariable('\'' . $var . '\''))); - } - } - - // line 328 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r13() - { - $tag = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(), - -$this->compiler->getRdelLength())); - if ($tag == 'strip') { - $this->strip = true; - $this->_retvalue = null; - } else { - if (defined($tag)) { - if ($this->security) { - $this->security->isTrustedConstant($tag, $this->compiler); - } - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag)); - } else { - if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { - $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array('\'nocache\'')); - } else { - $this->_retvalue = $this->compiler->compileTag($tag, array()); - } - } - } - } - - // line 339 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r14() - { - $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.'); - if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') { - // {$smarty.block.child} - $this->_retvalue = - $this->compiler->compileTag('child', array(), array($this->yystack[ $this->yyidx + 0 ]->minor)); - } else { - // {$smarty.block.parent} - $this->_retvalue = - $this->compiler->compileTag('parent', array(), array($this->yystack[ $this->yyidx + 0 ]->minor)); - } - } - - // line 343 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r15() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor; - } - - // line 347 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r16() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor; - } - - // line 356 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r17() - { - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ], - array('value' => $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ])); - } - - // line 360 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r18() - { - $this->_retvalue = - $this->compiler->compileTag('assign', array_merge(array( - array('value' => $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ]), - array('var' => '\'' . substr($this->yystack[ $this->yyidx + -1 ]->minor, 1) . '\'') - ), $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ])); - } - - // line 364 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r19() - { - $this->_retvalue = - $this->compiler->compileTag('assign', array_merge(array( - array('value' => $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ]), - array('var' => $this->yystack[ $this->yyidx + -1 ]->minor[ 'var' ]) - ), $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]), array( - 'smarty_internal_index' => $this->yystack[ $this->yyidx + - -1 ]->minor[ 'smarty_internal_index' ] - )); - } - - // line 368 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r20() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 383 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r21() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - // line 393 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r25() - { - 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 406 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r26() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { + $this->_retvalue = null; + } else { + if (defined($tag)) { if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); + $this->security->isTrustedConstant($tag, $this->compiler); } - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', array(), - array('value' => $this->yystack[ $this->yyidx + 0 ]->minor)); + $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag)); } else { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor, array()); - } - } - - // line 418 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r27() - { - if (defined($this->yystack[ $this->yyidx + -2 ]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + -2 ]->minor, $this->compiler); + if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { + $this->_retvalue = $this->compiler->compileTag($match[1],array('\'nocache\'')); + } else { + $this->_retvalue = $this->compiler->compileTag($tag,array()); } - $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 423 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r28() - { - $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 428 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r29() - { - $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 433 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r30() - { - $this->_retvalue = - $this->compiler->compileTag('make_nocache', - array(array('var' => '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''))); - } - - // line 438 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r31() - { - $tag = trim(substr($this->yystack[ $this->yyidx + -1 ]->minor, $this->compiler->getLdelLength())); - $this->_retvalue = - $this->compiler->compileTag(($tag === 'else if') ? 'elseif' : $tag, array(), - array('if condition' => $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - // line 443 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r32() - { - $tag = trim(substr($this->yystack[ $this->yyidx + -2 ]->minor, $this->compiler->getLdelLength())); - $this->_retvalue = - $this->compiler->compileTag(($tag === 'else if') ? 'elseif' : $tag, - $this->yystack[ $this->yyidx + 0 ]->minor, - array('if condition' => $this->yystack[ $this->yyidx + -1 ]->minor)); - } - - // line 454 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r33() - { - $tag = trim(substr($this->yystack[ $this->yyidx + -1 ]->minor, $this->compiler->getLdelLength())); - $this->_retvalue = - $this->compiler->compileTag(($tag === 'else if') ? 'elseif' : $tag, array(), - array('if condition' => $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - // line 458 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r35() - { - $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 466 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r36() - { - $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 470 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r38() - { - $this->_retvalue = - $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array( - array('start' => $this->yystack[ $this->yyidx + -3 ]->minor), - array('to' => $this->yystack[ $this->yyidx + -1 ]->minor) - )), 0); - } - - // line 475 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r39() - { - $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 479 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r40() - { - $this->_retvalue = - $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array( - array('from' => $this->yystack[ $this->yyidx + -3 ]->minor), - array('item' => $this->yystack[ $this->yyidx + -1 ]->minor) - ))); - } - - // line 482 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r41() - { - $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 487 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r42() - { - $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor); - } - - // line 491 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r43() - { - $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 497 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r44() - { - $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 506 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r45() - { - $tag = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(), - -$this->compiler->getRdelLength()), ' /'); - if ($tag === 'strip') { - $this->strip = false; - $this->_retvalue = null; - } else { - $this->_retvalue = $this->compiler->compileTag($tag . 'close', array()); } } - - // line 510 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r46() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array()); } - - // line 515 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r47() - { - $this->_retvalue = - $this->compiler->compileTag($this->yystack[ $this->yyidx + -1 ]->minor . 'close', array(), - array('modifier_list' => $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - // line 519 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r48() - { - $this->_retvalue = - $this->compiler->compileTag($this->yystack[ $this->yyidx + -2 ]->minor . 'close', array(), - array('object_method' => $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - // line 527 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r49() - { - $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 533 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r50() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor; - $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 538 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r51() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); - } - - // line 543 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r52() - { - $this->_retvalue = array(); - } - - // line 554 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r53() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { +// line 323 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r13(){ + $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.'); + if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') { + // {$smarty.block.child} + $this->_retvalue = $this->compiler->compileTag('child',array(),array($this->yystack[$this->yyidx + 0]->minor)); + } else { + // {$smarty.block.parent} + $this->_retvalue = $this->compiler->compileTag('parent',array(),array($this->yystack[$this->yyidx + 0]->minor)); + } + } +// line 334 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r14(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; + } +// line 338 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r15(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; + } +// line 342 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r16(){ + $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor[1],array('value'=>$this->yystack[$this->yyidx + 0]->minor[0])); + } +// line 351 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r17(){ + $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'')),$this->yystack[$this->yyidx + 0]->minor[1])); + } +// line 355 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r18(){ + $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>$this->yystack[$this->yyidx + -1]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor[1]),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'])); + } +// line 359 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r19(){ + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; + } +// line 363 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r20(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); + } +// line 378 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r24(){ + if (defined($this->yystack[$this->yyidx + -1]->minor)) { if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); + $this->security->isTrustedConstant($this->yystack[$this->yyidx + -1]->minor, $this->compiler); } - $this->_retvalue = - array($this->yystack[ $this->yyidx + -2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); + $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 = - array( - $this->yystack[ $this->yyidx + -2 ]->minor => '\'' . - $this->yystack[ $this->yyidx + 0 ]->minor . - '\'' - ); + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } } - - // line 562 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r54() - { - $this->_retvalue = - array( - trim($this->yystack[ $this->yyidx + -1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx + - 0 ]->minor - ); - } - - // line 574 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r56() - { - $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; - } - - // line 587 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r59() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + -2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - // line 592 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r61() - { - $this->yystack[ $this->yyidx + -2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor; - $this->_retvalue = $this->yystack[ $this->yyidx + -2 ]->minor; - } - - // line 599 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r62() - { - $this->_retvalue = - array( - 'var' => '\'' . substr($this->yystack[ $this->yyidx + -2 ]->minor, 1) . '\'', - 'value' => $this->yystack[ $this->yyidx + 0 ]->minor - ); - } - - // line 603 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r64() - { - $this->_retvalue = - array( - 'var' => $this->yystack[ $this->yyidx + -2 ]->minor, - 'value' => $this->yystack[ $this->yyidx + 0 ]->minor - ); - } - - // line 623 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r65() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor; - } - - // line 628 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r68() - { - $this->_retvalue = - '$_smarty_tpl->getStreamVariable(\'' . - substr($this->yystack[ $this->yyidx + -2 ]->minor, 1) . - '://' . - $this->yystack[ $this->yyidx + 0 ]->minor . - '\')'; - } - - // line 638 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r69() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + -2 ]->minor . - trim($this->yystack[ $this->yyidx + -1 ]->minor) . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 642 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r71() - { - $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 646 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r72() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + -2 ]->minor . - $this->yystack[ $this->yyidx + -1 ]->minor . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 650 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r73() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + -1 ]->minor . ')'; - } - - // line 654 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r74() - { - $this->_retvalue = - 'in_array(' . - $this->yystack[ $this->yyidx + -2 ]->minor . - ',' . - $this->yystack[ $this->yyidx + 0 ]->minor . - ')'; - } - - // line 662 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r75() - { - $this->_retvalue = - 'in_array(' . - $this->yystack[ $this->yyidx + -2 ]->minor . - ',(array)' . - $this->yystack[ $this->yyidx + 0 ]->minor . - ')'; - } - - // line 666 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r76() - { - $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 676 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r77() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + -5 ]->minor . - ' ? ' . - $this->yystack[ $this->yyidx + -2 ]->minor . - ' : ' . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 681 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r79() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 702 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r80() - { - $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 706 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r85() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 710 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r86() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . '.'; - } - - // line 715 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r87() - { - $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 732 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r88() - { - if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { +// line 388 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r25(){ + if (defined($this->yystack[$this->yyidx + 0]->minor)) { if ($this->security) { - $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); + $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); } - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; + $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + 0]->minor)); } else { - $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array()); } } - - // line 736 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r90() - { - $this->_retvalue = '(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')'; - } - - // line 754 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r91() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + -2 ]->minor . - $this->yystack[ $this->yyidx + -1 ]->minor . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 765 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r95() - { - $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 772 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r96() - { - $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 785 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r97() - { - $this->_retvalue = - $this->compiler->compileTag('private_modifier', array(), array( - 'value' => $this->yystack[ $this->yyidx + -1 ]->minor, - 'modifierlist' => $this->yystack[ $this->yyidx + 0 ]->minor - )); - } - - // line 804 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r100() - { - 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 ]; +// line 401 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r26(){ + if (defined($this->yystack[$this->yyidx + -2]->minor)) { + if ($this->security) { + $this->security->isTrustedConstant($this->yystack[$this->yyidx + -2]->minor, $this->compiler); } + $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -1]->minor)); } else { - $this->compiler->trigger_template_error('static class \'' . - $this->yystack[ $this->yyidx + -2 ]->minor . - '\' is undefined or not allowed by security setting'); + $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 815 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r102() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - // line 818 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r103() - { - $this->_retvalue = - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''); - } - - // line 831 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r104() - { - 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 413 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r27(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + 0]->minor,array('object_method'=>$this->yystack[$this->yyidx + -1]->minor)); + } +// line 418 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r28(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor, 'object_method'=>$this->yystack[$this->yyidx + -2]->minor)); + } +// line 423 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r29(){ + $this->_retvalue = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''))); + } +// line 428 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r30(){ + $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength())); + $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor)); + } +// line 433 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r31(){ + $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->compiler->getLdelLength())); + $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + 0]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); + } +// line 438 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r32(){ + $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength())); + $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor)); + } +// line 449 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r34(){ + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -4]->minor),array('var'=>$this->yystack[$this->yyidx + -2]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),1); + } +// line 453 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r35(){ + $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor; + } +// line 461 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r37(){ + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -3]->minor),array('to'=>$this->yystack[$this->yyidx + -1]->minor))),0); + } +// line 465 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r38(){ + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -5]->minor),array('to'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),0); + } +// line 470 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r39(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -3]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor)))); + } +// line 474 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r40(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor),array('key'=>$this->yystack[$this->yyidx + -3]->minor)))); + } +// line 477 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r41(){ + $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor); + } +// line 482 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r42(){ + $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -1]->minor),$this->yystack[$this->yyidx + 0]->minor)))); + } +// line 486 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r43(){ + $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)),$this->yystack[$this->yyidx + 0]->minor))); + } +// line 492 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r44(){ + $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /'); + if ($tag === 'strip') { + $this->strip = false; + $this->_retvalue = null; + } else { + $this->_retvalue = $this->compiler->compileTag($tag.'close',array()); + } + } +// line 501 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r45(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array()); + } +// line 505 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r46(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor)); + } +// line 510 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r47(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + 0]->minor)); + } +// line 514 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r48(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + -1]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + 0]->minor)); + } +// line 522 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r49(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; + $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; + } +// line 528 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r50(){ + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); + } +// line 533 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r51(){ + $this->_retvalue = array(); + } +// line 538 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r52(){ + if (defined($this->yystack[$this->yyidx + 0]->minor)) { + if ($this->security) { + $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); } + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); + } else { + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'\''.$this->yystack[$this->yyidx + 0]->minor.'\''); } - - // line 841 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r105() - { - $this->_retvalue = - '$_smarty_tpl->tpl_vars[' . - $this->yystack[ $this->yyidx + -2 ]->minor . - ']->' . - $this->yystack[ $this->yyidx + 0 ]->minor; } - - // line 845 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r107() - { - $this->_retvalue = - $this->compiler->compileConfigVariable('\'' . $this->yystack[ $this->yyidx + -1 ]->minor . '\''); +// line 549 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r53(){ + $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor); } - - // line 849 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r108() - { - $this->_retvalue = - '(is_array($tmp = ' . - $this->compiler->compileConfigVariable('\'' . $this->yystack[ $this->yyidx + -2 ]->minor . '\'') . - ') ? $tmp' . - $this->yystack[ $this->yyidx + 0 ]->minor . - ' :null)'; +// line 557 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r55(){ + $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } - - // line 853 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r109() - { - $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + -1 ]->minor); +// line 569 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r58(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); } - - // line 857 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r110() - { - $this->_retvalue = - '(is_array($tmp = ' . - $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + -2 ]->minor) . - ') ? $tmp' . - $this->yystack[ $this->yyidx + 0 ]->minor . - ' : null)'; +// line 582 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r60(){ + $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } - - // line 860 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r111() - { - $this->_retvalue = - array( - 'var' => '\'' . substr($this->yystack[ $this->yyidx + -1 ]->minor, 1) . '\'', - 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor - ); +// line 587 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r61(){ + $this->_retvalue = array('var' => '\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'', 'value'=>$this->yystack[$this->yyidx + 0]->minor); } - - // line 873 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r112() - { - $this->_retvalue = - array( - 'var' => $this->yystack[ $this->yyidx + -1 ]->minor, - 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor - ); +// line 594 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r63(){ + $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor); } - - // line 879 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r114() - { - return; +// line 598 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r64(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } - - // line 882 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r115() - { - $this->_retvalue = - '[' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') . - ']'; +// line 618 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r67(){ + $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'://' . $this->yystack[$this->yyidx + 0]->minor . '\')'; } - - // line 886 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r116() - { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']'; +// line 623 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r68(){ + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor; } - - // line 890 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r117() - { - $this->_retvalue = - '[' . - $this->compiler->compileVariable($this->yystack[ $this->yyidx + -2 ]->minor) . - '->' . - $this->yystack[ $this->yyidx + 0 ]->minor . - ']'; +// line 633 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r70(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor['pre']. $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor['op'].$this->yystack[$this->yyidx + 0]->minor .')'; } - - // line 894 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r118() - { - $this->_retvalue = '[\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\']'; +// line 637 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r71(){ + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } - - // line 899 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r119() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; - } - - // line 904 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r120() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + -1 ]->minor . ']'; - } - - // line 908 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r121() - { - $this->_retvalue = - '[' . - $this->compiler->compileTag('private_special_variable', array(), - '[\'section\'][\'' . $this->yystack[ $this->yyidx + -1 ]->minor . '\'][\'index\']') . - ']'; - } - - // line 911 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r122() - { - $this->_retvalue = - '[' . - $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . - $this->yystack[ $this->yyidx + - -3 ]->minor . - '\'][\'' . - $this->yystack[ $this->yyidx + - -1 ]->minor . - '\']') . - ']'; - } - - // line 917 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r123() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + -1 ]->minor . ']'; - } - - // line 933 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r125() - { - $this->_retvalue = - '[' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + -1 ]->minor, 1) . '\'') . - ']'; - } - - // line 943 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r129() - { - $this->_retvalue = '[]'; +// line 641 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r72(){ + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')'; } - - // line 947 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r130() - { - $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''; +// line 645 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r73(){ + $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')'; } - - // line 952 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r131() - { - $this->_retvalue = '\'\''; +// line 649 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r74(){ + $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')'; } - - // line 960 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r132() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; +// line 657 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r75(){ + $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '. $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'') . ' : '.$this->yystack[$this->yyidx + 0]->minor; } - - // line 966 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r134() - { - $var = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(), - -$this->compiler->getRdelLength()), ' $'); - $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\''); +// line 661 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r76(){ + $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } - - // line 973 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r135() - { - $this->_retvalue = '(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')'; +// line 671 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r78(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } - - // line 982 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r136() - { - 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 676 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r79(){ + $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } - - // line 987 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r137() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; +// line 697 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r84(){ + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } - - // line 992 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r138() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; +// line 701 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r85(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; } - - // line 999 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r139() - { - 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 705 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r86(){ + $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1006 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r140() - { +// line 710 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r87(){ + if (defined($this->yystack[$this->yyidx + 0]->minor)) { if ($this->security) { - $this->compiler->trigger_template_error(self::ERR2); + $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); } - $this->_retvalue = - '->{' . - $this->compiler->compileVariable($this->yystack[ $this->yyidx + -1 ]->minor) . - $this->yystack[ $this->yyidx + 0 ]->minor . - '}'; + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; + } else { + $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } - - // line 1013 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r141() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::ERR2); - } - $this->_retvalue = - '->{' . $this->yystack[ $this->yyidx + -2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; } - - // line 1021 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r142() - { - 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 727 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r89(){ + $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')'; } - - // line 1029 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r143() - { - $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor; +// line 731 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r90(){ + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1037 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r144() - { - $this->_retvalue = - $this->compiler->compilePHPFunctionCall($this->yystack[ $this->yyidx + -3 ]->minor, - $this->yystack[ $this->yyidx + -1 ]->minor); +// line 749 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r94(){ + if ($this->security && $this->security->static_classes !== array()) { + $this->compiler->trigger_template_error('dynamic static class not allowed by security setting'); + } + $prefixVar = $this->compiler->getNewPrefixVariable(); + if ($this->yystack[$this->yyidx + -2]->minor['var'] === '\'smarty\'') { + $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).';?>'); + } else { + $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].';?>'); + } + $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1]; + } +// line 760 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r95(){ + $prefixVar = $this->compiler->getNewPrefixVariable(); + $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[$this->yyidx + 0]->minor); + $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php {$prefixVar} = ob_get_clean();?>")); + $this->_retvalue = $prefixVar; + } +// line 767 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r96(){ + $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor)); + } +// line 780 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r99(){ + if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler))) { + if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) { + $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1]; + } else { + $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 1044 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r145() - { - 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 1055 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r146() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::ERR2); +// line 799 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r101(){ + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } - $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 1072 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r147() - { - $this->_retvalue = - array_merge($this->yystack[ $this->yyidx + -2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor)); +// line 810 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r102(){ + $this->_retvalue = $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''); + } +// line 813 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r103(){ + if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') { + $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); + $this->_retvalue = $smarty_var; + } else { + // used for array reset,next,prev,end,current + $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var']; + $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; + $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; + } + } +// line 826 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r104(){ + $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor; + } +// line 836 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r106(){ + $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\''); + } +// line 840 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r107(){ + $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)'; + } +// line 844 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r108(){ + $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor); + } +// line 848 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r109(){ + $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)'; + } +// line 852 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r110(){ + $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); + } +// line 855 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r111(){ + $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); + } +// line 868 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r113(){ + return; + } +// line 874 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r114(){ + $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'').']'; + } +// line 877 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r115(){ + $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor).']'; + } +// line 881 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r116(){ + $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']'; + } +// line 885 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r117(){ + $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']'; + } +// line 889 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r118(){ + $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']'; + } +// line 894 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r119(){ + $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']'; } - - // line 1076 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r150() - { - $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 899 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r120(){ + $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; + } +// line 903 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r121(){ + $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; + } +// line 906 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r122(){ + $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']'; + } +// line 912 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r124(){ + $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'').']'; + } +// line 928 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r128(){ + $this->_retvalue = '[]'; + } +// line 938 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r129(){ + $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''; + } +// line 942 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r130(){ + $this->_retvalue = '\'\''; + } +// line 947 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r131(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1084 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r151() - { - $this->_retvalue = - array(array_merge($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor)); +// line 955 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r133(){ + $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $'); + $this->_retvalue = $this->compiler->compileVariable('\''.$var.'\''); } - - // line 1092 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r153() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); +// line 961 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r134(){ + $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } - - // line 1105 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r154() - { - $this->_retvalue = - array_merge($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); +// line 968 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r135(){ + if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') { + $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor; + } else { + $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; } - - // line 1114 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r157() - { - $this->_retvalue = - array(trim($this->yystack[ $this->yyidx + -1 ]->minor) . $this->yystack[ $this->yyidx + 0 ]->minor); } - - // line 1119 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r159() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method'); +// line 977 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r136(){ + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } - - // line 1124 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r160() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method'); - } - - // line 1129 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r161() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, ''); - } - - // line 1134 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r162() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); - } - - // line 1140 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r163() - { - $this->_retvalue = - array( - $this->yystack[ $this->yyidx + -2 ]->minor, - $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor, 'property' - ); +// line 982 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r137(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1144 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r164() - { - $this->_retvalue = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' '; +// line 987 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r138(){ + if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') { + $this->compiler->trigger_template_error (self::ERR1); } - - // line 1163 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r165() - { - 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 1176 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r166() - { - 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 ]; + $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1190 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r167() - { - static $scond = array( - 'iseven' => '!(1 & ', +// line 994 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r139(){ + if ($this->security) { + $this->compiler->trigger_template_error (self::ERR2); + } + $this->_retvalue = '->{'.$this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}'; + } +// line 1001 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r140(){ + if ($this->security) { + $this->compiler->trigger_template_error (self::ERR2); + } + $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; + } +// line 1008 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r141(){ + if ($this->security) { + $this->compiler->trigger_template_error (self::ERR2); + } + $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; + } +// line 1016 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r142(){ + $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; + } +// line 1024 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r143(){ + $this->_retvalue = $this->compiler->compilePHPFunctionCall($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor); + } +// line 1032 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r144(){ + if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') { + $this->compiler->trigger_template_error (self::ERR1); + } + $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; + } +// line 1039 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r145(){ + if ($this->security) { + $this->compiler->trigger_template_error (self::ERR2); + } + $prefixVar = $this->compiler->getNewPrefixVariable(); + $this->compiler->appendPrefixCode("<?php {$prefixVar} = ".$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -3]->minor,1).'\'').';?>'); + $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; + } +// line 1050 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r146(){ + $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor)); + } +// line 1067 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r149(){ + $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor))); + } +// line 1071 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r150(){ + $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)); + } +// line 1079 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r152(){ + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); + } +// line 1087 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r153(){ + $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); + } +// line 1100 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r156(){ + $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor); + } +// line 1109 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r158(){ + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method'); + } +// line 1114 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r159(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method'); + } +// line 1119 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r160(){ + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, ''); + } +// line 1124 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r161(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property'); + } +// line 1129 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r162(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property'); + } +// line 1135 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r163(){ + $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' '; + } +// line 1139 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r164(){ + static $lops = array( + 'eq' => ' == ', + 'ne' => ' != ', + 'neq' => ' != ', + 'gt' => ' > ', + 'ge' => ' >= ', + 'gte' => ' >= ', + 'lt' => ' < ', + 'le' => ' <= ', + 'lte' => ' <= ', + 'mod' => ' % ', + 'and' => ' && ', + 'or' => ' || ', + 'xor' => ' xor ', + ); + $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); + $this->_retvalue = $lops[$op]; + } +// line 1158 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r165(){ + static $tlops = array( + 'isdivby' => array('op' => ' % ', 'pre' => '!('), + 'isnotdivby' => array('op' => ' % ', 'pre' => '('), + 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '), + 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '), + 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '), + 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '), + ); + $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); + $this->_retvalue = $tlops[$op]; + } +// line 1171 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r166(){ + static $scond = array ( + 'iseven' => '!(1 & ', 'isnoteven' => '(1 & ', - 'isodd' => '(1 & ', - 'isnotodd' => '!(1 & ', + 'isodd' => '(1 & ', + 'isnotodd' => '!(1 & ', ); - $op = strtolower(str_replace(' ', '', $this->yystack[ $this->yyidx + 0 ]->minor)); - $this->_retvalue = $scond[ $op ]; + $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor)); + $this->_retvalue = $scond[$op]; } - - // line 1201 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r168() - { - $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')'; +// line 1185 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r167(){ + $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } - - // line 1209 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r171() - { - $this->_retvalue = $this->yystack[ $this->yyidx + -2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor; +// line 1196 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r170(){ + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1213 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r173() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + -2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor; +// line 1204 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r172(){ + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1229 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r174() - { - $this->_retvalue = - '\'' . $this->yystack[ $this->yyidx + -2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor; +// line 1208 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r173(){ + $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } - - // line 1235 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r177() - { - $this->compiler->leaveDoubleQuote(); - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor->to_smarty_php($this); +// line 1224 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r176(){ + $this->compiler->leaveDoubleQuote(); + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this); } - - // line 1240 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r178() - { - $this->yystack[ $this->yyidx + -1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor; +// line 1230 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r177(){ + $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } - - // line 1244 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r179() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor); +// line 1235 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r178(){ + $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[$this->yyidx + 0]->minor); } - - // line 1248 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r180() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + -1 ]->minor); +// line 1239 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r179(){ + $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)'.$this->yystack[$this->yyidx + -1]->minor); } - - // line 1252 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r181() - { - $this->_retvalue = - new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')'); +// line 1243 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r180(){ + $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')'); } - - // line 1264 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r182() - { - $this->_retvalue = - new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' . - substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . - '\']->value'); +// line 1247 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r181(){ + $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value'); } - - // line 1268 "../smarty/lexer/smarty_internal_templateparser.y" - public function yy_r185() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor); +// line 1259 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r184(){ + $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[$this->yyidx + 0]->minor); } - - public function yy_r186() - { - $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor); +// line 1263 "../smarty/lexer/smarty_internal_templateparser.y" + public function yy_r185(){ + $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[$this->yyidx + 0]->minor); } + private $_retvalue; + public function yy_reduce($yyruleno) { if ($this->yyTraceFILE && $yyruleno >= 0 - && $yyruleno < count(self::$yyRuleName)) { + && $yyruleno < count(self::$yyRuleName)) { fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, - self::$yyRuleName[ $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++; @@ -3492,7 +2792,7 @@ class Smarty_Internal_Templateparser $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); } @@ -3505,37 +2805,38 @@ class Smarty_Internal_Templateparser { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { + } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } } public function yy_syntax_error($yymajor, $TOKEN) { - // line 214 "../smarty/lexer/smarty_internal_templateparser.y" - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_template_error(); +// line 213 "../smarty/lexer/smarty_internal_templateparser.y" + + $this->internalError = true; + $this->yymajor = $yymajor; + $this->compiler->trigger_template_error(); } public function yy_accept() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { + } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } - // line 207 "../smarty/lexer/smarty_internal_templateparser.y" - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; +// line 206 "../smarty/lexer/smarty_internal_templateparser.y" + + $this->successful = !$this->internalError; + $this->internalError = false; + $this->retvalue = $this->_retvalue; } public function doParse($yymajor, $yytokenvalue) { $yyerrorhit = 0; /* True if yymajor has invoked an error */ + if ($this->yyidx === null || $this->yyidx < 0) { $this->yyidx = 0; $this->yyerrcnt = -1; @@ -3545,15 +2846,17 @@ class Smarty_Internal_Templateparser $this->yystack = array(); $this->yystack[] = $x; } - $yyendofinput = ($yymajor == 0); + $yyendofinput = ($yymajor==0); + if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sInput %s\n", - $this->yyTracePrompt, $this->yyTokenName[ $yymajor ]); + $this->yyTracePrompt, $this->yyTokenName[$yymajor]); } + do { $yyact = $this->yy_find_shift_action($yymajor); if ($yymajor < self::YYERRORSYMBOL && - !$this->yy_is_expected_token($yymajor)) { + !$this->yy_is_expected_token($yymajor)) { // force a syntax error $yyact = self::YY_ERROR_ACTION; } @@ -3576,22 +2879,22 @@ class Smarty_Internal_Templateparser 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 ]); + $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 - ) { + $yymx !== self::YYERRORSYMBOL && + ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE + ){ $this->yy_pop_parser_stack(); } - if ($this->yyidx < 0 || $yymajor == 0) { + if ($this->yyidx < 0 || $yymajor==0) { $this->yy_destructor($yymajor, $yytokenvalue); $this->yy_parse_failed(); $yymajor = self::YYNOCODE; diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php index 504a4582c..1fac79b74 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php @@ -362,7 +362,6 @@ class Smarty_Internal_TestInstall '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, @@ -373,7 +372,6 @@ class Smarty_Internal_TestInstall '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, @@ -388,7 +386,6 @@ class Smarty_Internal_TestInstall 'smarty_internal_config_file_compiler.php' => true, 'smarty_internal_data.php' => true, 'smarty_internal_debug.php' => true, - 'smarty_internal_errorhandler.php' => true, 'smarty_internal_extension_handler.php' => true, 'smarty_internal_method_addautoloadfilters.php' => true, 'smarty_internal_method_adddefaultmodifiers.php' => true, @@ -450,7 +447,6 @@ class Smarty_Internal_TestInstall '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, diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php index aae7e42f7..7fe84536f 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php @@ -72,9 +72,7 @@ abstract class Smarty_Resource } // 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(); + return $smarty->_cache[ 'resource_handlers' ][ $type ] = $smarty->registered_resources[ $type ]; } // try sysplugins dir if (isset(self::$sysplugins[ $type ])) { diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_security.php b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php index 441a7e284..3c29c8132 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_security.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php @@ -21,19 +21,6 @@ */ class Smarty_Security { - /** - * This determines how Smarty handles "<?php ... ?>" tags in templates. - * possible values: - * <ul> - * <li>Smarty::PHP_PASSTHRU -> echo PHP tags as they are</li> - * <li>Smarty::PHP_QUOTE -> escape tags as entities</li> - * <li>Smarty::PHP_REMOVE -> remove php tags</li> - * <li>Smarty::PHP_ALLOW -> execute php tags</li> - * </ul> - * - * @var integer - */ - public $php_handling = Smarty::PHP_PASSTHRU; /** * This is the list of template directories that are considered secure. diff --git a/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php index f7ad39b93..8833aa52c 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php +++ b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php @@ -16,12 +16,12 @@ class SmartyCompilerException extends SmartyException } /** - * The line number of the template error - * - * @type int|null + * @param int $line */ - public $line = null; - + public function setLine($line) + { + $this->line = $line; + } /** * The template source snippet relating to the error * diff --git a/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/symfony/polyfill-ctype/Ctype.php index 58414dc73..ba75a2c95 100644 --- a/vendor/symfony/polyfill-ctype/Ctype.php +++ b/vendor/symfony/polyfill-ctype/Ctype.php @@ -25,13 +25,13 @@ final class Ctype * * @see https://php.net/ctype-alnum * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_alnum($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); } @@ -41,13 +41,13 @@ final class Ctype * * @see https://php.net/ctype-alpha * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_alpha($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); } @@ -57,13 +57,13 @@ final class Ctype * * @see https://php.net/ctype-cntrl * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_cntrl($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); } @@ -73,13 +73,13 @@ final class Ctype * * @see https://php.net/ctype-digit * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_digit($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); } @@ -89,13 +89,13 @@ final class Ctype * * @see https://php.net/ctype-graph * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_graph($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); } @@ -105,13 +105,13 @@ final class Ctype * * @see https://php.net/ctype-lower * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_lower($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); } @@ -121,13 +121,13 @@ final class Ctype * * @see https://php.net/ctype-print * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_print($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); } @@ -137,13 +137,13 @@ final class Ctype * * @see https://php.net/ctype-punct * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_punct($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); } @@ -153,13 +153,13 @@ final class Ctype * * @see https://php.net/ctype-space * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_space($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); } @@ -169,13 +169,13 @@ final class Ctype * * @see https://php.net/ctype-upper * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_upper($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); } @@ -185,13 +185,13 @@ final class Ctype * * @see https://php.net/ctype-xdigit * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_xdigit($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); } @@ -204,11 +204,12 @@ final class Ctype * (negative values have 256 added in order to allow characters in the Extended ASCII range). * Any other integer is interpreted as a string containing the decimal digits of the integer. * - * @param string|int $int + * @param mixed $int + * @param string $function * * @return mixed */ - private static function convert_int_to_char_for_ctype($int) + private static function convert_int_to_char_for_ctype($int, $function) { if (!\is_int($int)) { return $int; @@ -218,6 +219,10 @@ final class Ctype return (string) $int; } + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + if ($int < 0) { $int += 256; } diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json index f0621a3b6..ccb8e5703 100644 --- a/vendor/symfony/polyfill-ctype/composer.json +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -18,6 +18,9 @@ "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, "files": [ "bootstrap.php" ] diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php index 7fb2000e9..37937cbfa 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -1,5 +1,7 @@ <?php -class UnhandledMatchError extends Error -{ +if (\PHP_VERSION_ID < 80000) { + class UnhandledMatchError extends Error + { + } } diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php index 99843cad3..a3a9b88b0 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php @@ -1,5 +1,7 @@ <?php -class ValueError extends Error -{ +if (\PHP_VERSION_ID < 80000) { + class ValueError extends Error + { + } } diff --git a/vendor/symfony/polyfill-php81/Php81.php b/vendor/symfony/polyfill-php81/Php81.php index 709c20bb5..f0507b765 100644 --- a/vendor/symfony/polyfill-php81/Php81.php +++ b/vendor/symfony/polyfill-php81/Php81.php @@ -20,7 +20,7 @@ final class Php81 { public static function array_is_list(array $array): bool { - if ([] === $array) { + if ([] === $array || $array === array_values($array)) { return true; } diff --git a/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php b/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php index 197709ba6..f4cad34f6 100644 --- a/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php +++ b/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php @@ -1,9 +1,11 @@ <?php -#[Attribute(Attribute::TARGET_METHOD)] -final class ReturnTypeWillChange -{ - public function __construct() +if (\PHP_VERSION_ID < 80100) { + #[Attribute(Attribute::TARGET_METHOD)] + final class ReturnTypeWillChange { + public function __construct() + { + } } } diff --git a/vendor/voku/portable-ascii/.whitesource b/vendor/voku/portable-ascii/.whitesource new file mode 100644 index 000000000..55b922e8c --- /dev/null +++ b/vendor/voku/portable-ascii/.whitesource @@ -0,0 +1,12 @@ +{ + "scanSettings": { + "baseBranches": [] + }, + "checkRunSettings": { + "vulnerableCheckRunConclusionLevel": "failure", + "displayMode": "diff" + }, + "issueSettings": { + "minSeverityLevel": "LOW" + } +}
\ No newline at end of file diff --git a/vendor/voku/portable-ascii/CHANGELOG.md b/vendor/voku/portable-ascii/CHANGELOG.md index 6e5357d08..04b64acdd 100644 --- a/vendor/voku/portable-ascii/CHANGELOG.md +++ b/vendor/voku/portable-ascii/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +### 1.6.1 (2021-01-24) + +- revert: prefer "Russian - Passport (2013), ICAO" instead of "Russian - GOST 7.79-2000(B)" +- revert: fix "Ukrainian" char-mapping (thanks to @Andr1yk0) +- revert: fix "Persian" char-mapping (thanks to @frost-cyber) + +### 1.6.0 (2021-01-24) + +- prefer "Russian - Passport (2013), ICAO" instead of "Russian - GOST 7.79-2000(B)" +- fix "Ukrainian" char-mapping (thanks to @Andr1yk0) +- fix "Persian" char-mapping (thanks to @frost-cyber) +- fix "ASCII::normalize_whitespace()" -> "CARRIAGE RETURN" is more like "<br>" and no "\n" +- add "ASCII::to_ascii_remap()" -> this method will return broken characters and is only for special cases + ### 1.5.6 (2020-11-12) - "ASCII::normalize_whitespace()" -> can now also remove "control characters" if needed v2 diff --git a/vendor/voku/portable-ascii/README.md b/vendor/voku/portable-ascii/README.md index 9dd7cecef..929c21e29 100644 --- a/vendor/voku/portable-ascii/README.md +++ b/vendor/voku/portable-ascii/README.md @@ -1,7 +1,7 @@ [//]: # (AUTO-GENERATED BY "PHP README Helper": base file -> docs/base.md) -[![Build Status](https://travis-ci.com/voku/portable-ascii.svg?branch=master)](https://travis-ci.com/voku/portable-ascii) +[![Build Status](https://github.com/voku/portable-ascii/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/voku/portable-ascii/actions) [![Build status](https://ci.appveyor.com/api/projects/status/gnejjnk7qplr7f5t/branch/master?svg=true)](https://ci.appveyor.com/project/voku/portable-ascii/branch/master) -[![Coverage Status](https://coveralls.io/repos/voku/portable-ascii/badge.svg?branch=master&service=github)](https://coveralls.io/github/voku/portable-ascii?branch=master) +[![codecov.io](https://codecov.io/github/voku/portable-ascii/coverage.svg?branch=master)](https://codecov.io/github/voku/portable-ascii?branch=master) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/997c9bb10d1c4791967bdf2e42013e8e)](https://www.codacy.com/app/voku/portable-ascii) [![Latest Stable Version](https://poser.pugx.org/voku/portable-ascii/v/stable)](https://packagist.org/packages/voku/portable-ascii) [![Total Downloads](https://poser.pugx.org/voku/portable-ascii/downloads)](https://packagist.org/packages/voku/portable-ascii) @@ -96,8 +96,8 @@ The API from the "ASCII"-Class is written as small static methods. </td><td><a href="#getalllanguages-string">getAllLanguages</a> </td><td><a href="#is_asciistring-str-bool">is_ascii</a> </td><td><a href="#normalize_mswordstring-str-string">normalize_msword</a> -</td></tr><tr><td><a href="#normalize_whitespacestring-str-bool-keepnonbreakingspace-bool-keepbidiunicodecontrols-bool-replaceseparatorswithnewline-string">normalize_whitespace</a> -</td><td><a href="#remove_invisible_charactersstring-str-bool-url_encoded-string-replacement-bool-keep_control_characters-string">remove_invisible_characters</a> +</td></tr><tr><td><a href="#normalize_whitespacestring-str-bool-keepnonbreakingspace-bool-keepbidiunicodecontrols-bool-normalize_control_characters-string">normalize_whitespace</a> +</td><td><a href="#remove_invisible_charactersstring-str-bool-url_encoded-string-replacement-bool-keep_basic_control_characters-string">remove_invisible_characters</a> </td><td><a href="#to_asciistring-str-string-language-bool-remove_unsupported_chars-bool-replace_extra_symbols-bool-use_transliterate-boolnull-replace_single_chars_only-string">to_ascii</a> </td><td><a href="#to_filenamestring-str-bool-use_transliterate-string-fallback_char-string">to_filename</a> </td></tr><tr><td><a href="#to_slugifystring-str-string-separator-string-language-string-replacements-bool-replace_extra_symbols-bool-use_str_to_lower-bool-use_transliterate-string">to_slugify</a> @@ -254,7 +254,7 @@ ASCII::normalize_msword('„Abcdef…â€'); // '"Abcdef..."' -------- -#### normalize_whitespace(string $str, bool $keepNonBreakingSpace, bool $keepBidiUnicodeControls, bool $replaceSeparatorsWithNewline): string +#### normalize_whitespace(string $str, bool $keepNonBreakingSpace, bool $keepBidiUnicodeControls, bool $normalize_control_characters): string <a href="#voku-php-readme-class-methods">↑</a> Normalize the whitespace. @@ -267,14 +267,14 @@ ASCII::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", tru - `bool $keepNonBreakingSpace [optional] <p>Set to true, to keep non-breaking-spaces.</p>` - `bool $keepBidiUnicodeControls [optional] <p>Set to true, to keep non-printable (for the web) bidirectional text chars.</p>` -- `bool $replaceSeparatorsWithNewline [optional] <p>Set to true, to convert LINE and PARAGRAPH SEPARATOR with "\n".</p>` +- `bool $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p>` **Return:** - `string <p>A string with normalized whitespace.</p>` -------- -#### remove_invisible_characters(string $str, bool $url_encoded, string $replacement, bool $keep_control_characters): string +#### remove_invisible_characters(string $str, bool $url_encoded, string $replacement, bool $keep_basic_control_characters): string <a href="#voku-php-readme-class-methods">↑</a> Remove invisible characters from a string. @@ -286,7 +286,7 @@ copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/C - `string $str` - `bool $url_encoded` - `string $replacement` -- `bool $keep_control_characters` +- `bool $keep_basic_control_characters` **Return:** - `string` diff --git a/vendor/voku/portable-ascii/build/docs/base.md b/vendor/voku/portable-ascii/build/docs/base.md index e21e73137..ca949d8b6 100644 --- a/vendor/voku/portable-ascii/build/docs/base.md +++ b/vendor/voku/portable-ascii/build/docs/base.md @@ -1,6 +1,6 @@ -[![Build Status](https://travis-ci.com/voku/portable-ascii.svg?branch=master)](https://travis-ci.com/voku/portable-ascii) +[![Build Status](https://github.com/voku/portable-ascii/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/voku/portable-ascii/actions) [![Build status](https://ci.appveyor.com/api/projects/status/gnejjnk7qplr7f5t/branch/master?svg=true)](https://ci.appveyor.com/project/voku/portable-ascii/branch/master) -[![Coverage Status](https://coveralls.io/repos/voku/portable-ascii/badge.svg?branch=master&service=github)](https://coveralls.io/github/voku/portable-ascii?branch=master) +[![codecov.io](https://codecov.io/github/voku/portable-ascii/coverage.svg?branch=master)](https://codecov.io/github/voku/portable-ascii?branch=master) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/997c9bb10d1c4791967bdf2e42013e8e)](https://www.codacy.com/app/voku/portable-ascii) [![Latest Stable Version](https://poser.pugx.org/voku/portable-ascii/v/stable)](https://packagist.org/packages/voku/portable-ascii) [![Total Downloads](https://poser.pugx.org/voku/portable-ascii/downloads)](https://packagist.org/packages/voku/portable-ascii) diff --git a/vendor/voku/portable-ascii/src/voku/helper/ASCII.php b/vendor/voku/portable-ascii/src/voku/helper/ASCII.php index d4ec32ab1..aa676abda 100644 --- a/vendor/voku/portable-ascii/src/voku/helper/ASCII.php +++ b/vendor/voku/portable-ascii/src/voku/helper/ASCII.php @@ -200,7 +200,7 @@ final class ASCII * * @return string[] * - * @psalm-return array<string, string> + * @phpstan-return array<string, string> */ public static function getAllLanguages(): array { @@ -238,7 +238,7 @@ final class ASCII * * @return array * - * @psalm-return array<string, array<string , string>> + * @phpstan-return array<string, array<string , string>> */ public static function charsArray(bool $replace_extra_symbols = false): array { @@ -268,7 +268,7 @@ final class ASCII * @return array * <p>An array of replacements.</p> * - * @psalm-return array<string, array<int, string>> + * @phpstan-return array<string, array<int, string>> */ public static function charsArrayWithMultiLanguageValues(bool $replace_extra_symbols = false): array { @@ -300,10 +300,7 @@ final class ASCII $CHARS_ARRAY[$cacheKey] = $return; - /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */ - /** @var array<string, array<int, string>> $return */ - $return = $return; - + /** @var array<string, array<int, string>> $return - hack for phpstan */ return $return; } @@ -332,7 +329,7 @@ final class ASCII * @return array * <p>An array of replacements.</p> * - * @psalm-return array{orig: string[], replace: string[]}|array<string, string> + * @phpstan-return array{orig: string[], replace: string[]}|array<string, string> */ public static function charsArrayWithOneLanguage( string $language = self::ENGLISH_LANGUAGE_CODE, @@ -428,7 +425,7 @@ final class ASCII * @return array * <p>An array of replacements.</p> * - * @psalm-return array{orig: string[], replace: string[]}|array<string, string> + * @phpstan-return array{orig: string[], replace: string[]}|array<string, string> */ public static function charsArrayWithSingleLanguageValues( bool $replace_extra_symbols = false, @@ -616,7 +613,7 @@ final class ASCII * @param bool $keepNonBreakingSpace [optional] <p>Set to true, to keep non-breaking-spaces.</p> * @param bool $keepBidiUnicodeControls [optional] <p>Set to true, to keep non-printable (for the web) * bidirectional text chars.</p> - * @param bool $normalize_control_characters [optional] <p>Set to true, to convert LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p> + * @param bool $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p> * * @psalm-pure * @@ -645,16 +642,14 @@ final class ASCII "\x0d\x0c", // 'END OF LINE' "\xe2\x80\xa8", // 'LINE SEPARATOR' "\xe2\x80\xa9", // 'PARAGRAPH SEPARATOR' - "\x0c", // 'FORM FEED' - "\x0d", // 'CARRIAGE RETURN' - "\x0b", // 'VERTICAL TAB' + "\x0c", // 'FORM FEED' // "\f" + "\x0b", // 'VERTICAL TAB' // "\v" ], [ "\n", "\n", "\n", "\n", - "\n", "\t", ], $str @@ -738,6 +733,71 @@ final class ASCII } /** + * WARNING: This method will return broken characters and is only for special cases. + * + * Convert two UTF-8 encoded string to a single-byte strings suitable for + * functions that need the same string length after the conversion. + * + * The function simply uses (and updates) a tailored dynamic encoding + * (in/out map parameter) where non-ascii characters are remapped to + * the range [128-255] in order of appearance. + * + * @param string $str1 + * @param string $str2 + * + * @return string[] + * + * @phpstan-return array{0: string, 1: string} + */ + public static function to_ascii_remap(string $str1, string $str2): array + { + $charMap = []; + $str1 = self::to_ascii_remap_intern($str1, $charMap); + $str2 = self::to_ascii_remap_intern($str2, $charMap); + + return [$str1, $str2]; + } + + /** + * WARNING: This method will return broken characters and is only for special cases. + * + * Convert a UTF-8 encoded string to a single-byte string suitable for + * functions that need the same string length after the conversion. + * + * The function simply uses (and updates) a tailored dynamic encoding + * (in/out map parameter) where non-ascii characters are remapped to + * the range [128-255] in order of appearance. + * + * Thus, it supports up to 128 different multibyte code points max over + * the whole set of strings sharing this encoding. + * + * Source: https://github.com/KEINOS/mb_levenshtein + * + * @param string $str UTF-8 string to be converted to extended ASCII. + * @return string Mapped borken string. + */ + private static function to_ascii_remap_intern(string $str, array &$map): string + { + // find all utf-8 characters + $matches = []; + if (!\preg_match_all('/[\xC0-\xF7][\x80-\xBF]+/', $str, $matches)) { + return $str; // plain ascii string + } + + // update the encoding map with the characters not already met + $mapCount = \count($map); + foreach ($matches[0] as $mbc) { + if (!isset($map[$mbc])) { + $map[$mbc] = \chr(128 + $mapCount); + $mapCount++; + } + } + + // finally remap non-ascii characters + return \strtr($str, $map); + } + + /** * Returns an ASCII version of the string. A set of non-ASCII characters are * replaced with their closest ASCII counterparts, and the rest are removed * by default. The language or locale of the source string can be supplied @@ -807,7 +867,7 @@ final class ASCII $EXTRA_SYMBOLS_CACHE === null ) { $EXTRA_SYMBOLS_CACHE = []; - foreach (self::$ASCII_EXTRAS ?? [] as $extrasLanguageTmp => $extrasDataTmp) { + foreach (self::$ASCII_EXTRAS ?? [] as $extrasDataTmp) { foreach ($extrasDataTmp as $extrasDataKeyTmp => $extrasDataValueTmp) { $EXTRA_SYMBOLS_CACHE[$extrasDataKeyTmp] = $extrasDataKeyTmp; } @@ -933,7 +993,7 @@ final class ASCII } } - foreach ($matches[0] as $keyTmp => $char) { + foreach ($matches[0] as $char) { if ( !isset($charDone[$char]) && diff --git a/view/css/full.css b/view/css/full.css index 3f9a01d24..1a36c9b08 100644 --- a/view/css/full.css +++ b/view/css/full.css @@ -7,7 +7,6 @@ header #banner { } section { - display: block; - min-height: 112px; - margin: 50px 10px; + height: 100vh; + padding: 4.5rem 7px 200px 7px; } diff --git a/view/css/minimal.css b/view/css/minimal.css new file mode 100644 index 000000000..3bd04a5df --- /dev/null +++ b/view/css/minimal.css @@ -0,0 +1,3 @@ +section { + height: 100vh; +} diff --git a/view/css/mod_pdledit_gui.css b/view/css/mod_pdledit_gui.css new file mode 100644 index 000000000..dcda842dc --- /dev/null +++ b/view/css/mod_pdledit_gui.css @@ -0,0 +1,3 @@ +.aside_wrapper { + min-height: 70vh; +} diff --git a/view/css/widgets.css b/view/css/widgets.css index 0a091272c..ebe0f47b0 100644 --- a/view/css/widgets.css +++ b/view/css/widgets.css @@ -136,17 +136,6 @@ li:hover .group-edit-icon { } -/* tasklist */ - -.tasklist-tasks { - max-height: 300px; - overflow-y: auto; -} - -#tasklist-new-summary { - width: 250px; -} - /* cover photo */ #cover-photo { diff --git a/view/fr/htconfig.tpl b/view/fr/htconfig.tpl index ddc1d1053..563877247 100644 --- a/view/fr/htconfig.tpl +++ b/view/fr/htconfig.tpl @@ -1,9 +1,8 @@ <?php -// Set the following for your MySQL installation +// Définissez les éléments suivants pour votre installation MySQL // Utilisez ces informations pour configurer votre instance de BD (MySQL) -// Copy or rename this file to .htconfig.php -// Copier ou renomer ce fichier .htconfig.php et placer le à la racine de l'installation de la Matrice Rouge. +// Copier ou renomer ce fichier .htconfig.php et placer le à la racine de l'installation. $db_host = '{{$dbhost}}'; $db_port = '{{$dbport}}'; @@ -13,52 +12,74 @@ $db_data = '{{$dbdata}}'; $db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres /* - * Note: Plusieurs de ces réglages seront disponibles via le panneau d'administration - * après l'installation. Lorsque des modifications sont apportés à travers le panneau d'administration - * elle sont automatiquement enregistrées dans la base de données. - * Les configurations inscrites dans la BD prévalent sur celles de ce fichier de configuration. + * Note: Plusieurs de ces réglages seront disponibles via le panneau d'administration + * après l'installation. Lorsque des modifications sont apportés à travers le panneau d'administration + * elle sont automatiquement enregistrées dans la base de données. + * Les configurations inscrites dans la BD prévalent sur celles de ce fichier de configuration. * - * En cas de difficultés d'accès au panneau d'administration, nous mettons à votre disposition, + * En cas de difficultés d'accès au panneau d'administration, nous mettons à votre disposition, * un outil en ligne de commande est disponible [util/config] pour rechercher et apporter des modifications - * sur les entrées dans la BD. + * sur les entrées dans la BD. * - */ + */ -// Choisissez votre emplacement géographique. Si vous n'êtes pas certain, utilisez "America/Los_Angeles". -// Vous pourrez le changer plus tard et ce réglage n'affecte que les visiteurs anonymes. +// Choisissez votre emplacement géographique. Si vous n'êtes pas certain, utilisez "America/Los_Angeles". +// Vous pourrez le changer plus tard et ce réglage n'affecte que les visiteurs anonymes. App::$config['system']['timezone'] = '{{$timezone}}'; -// Quel sera le nom de votre site? +// Quels Sont l'url et le nom de votre site ? Ne pas mettre le slash à la fin App::$config['system']['baseurl'] = '{{$siteurl}}'; App::$config['system']['sitename'] = "Hubzilla"; App::$config['system']['location_hash'] = '{{$site_id}}'; -// These lines set additional security headers to be sent with all responses -// You may wish to set transport_security_header to 0 if your server already sends -// this header. content_security_policy may need to be disabled if you wish to -// run the piwik analytics plugin or include other offsite resources on a page +// Ces lignes définissent des en-têtes de sécurité supplémentaires à envoyer avec toutes les réponses. +// Vous pouvez définir transport_security_header à 0 si votre serveur envoie déjà cet en-tête. +// Content_security_policy peut être désactivé si vous souhaitez utiliser le plugin d'analyse Piwik ou inclure d'autres sites web. +// Utiliser le plugin piwik analytics ou ajouter d'autres ressources hors site sur une page. App::$config['system']['transport_security_header'] = 1; App::$config['system']['content_security_policy'] = 1; +App::$config['system']['ssl_cookie_protection'] = 1; // Vos choix sont REGISTER_OPEN, REGISTER_APPROVE, ou REGISTER_CLOSED. -// Soyez certains de créer votre compte personnel avant de déclarer -// votre site REGISTER_CLOSED. 'register_text' (si vous décider de l'utiliser) -// renvois son contenu systématiquement sur la page d'enregistrement des nouveaux membres. +// Soyez certains de créer votre compte personnel avant de déclarer +// votre site REGISTER_CLOSED. 'register_text' (si vous décider de l'utiliser) +// renvois son contenu systématiquement sur la page d'enregistrement des nouveaux membres. // REGISTER_APPROVE requiert la configuration de 'admin_email' avec l'adresse de courriel -// d'un membre déjà inscrit qui pourra autoriser et/ou approuver/supprimer la demande. +// d'un membre déjà inscrit qui pourra autoriser et/ou approuver/supprimer la demande. App::$config['system']['register_policy'] = REGISTER_OPEN; App::$config['system']['register_text'] = ''; App::$config['system']['admin_email'] = '{{$adminmail}}'; -// taille maximale pour l'importation d'un message, 0 est illimité +// Il est recommandé de laisser cette valeur à 1. La valeur 0 permet aux personnes de s'inscrire sans avoir à prouver qu'elles possèdent une adresse électronique. +// vérifier que cette adresse électronique leur appartient. + +App::$config['system']['verify_email'] = 1; + +// Restrictions d'accès au site. Par défaut, nous allons créer des sites privés. +// Vous avez le choix entre ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED et ACCESS_FREE. +// Si vous laissez REGISTER_OPEN ci-dessus, n'importe qui peut s'inscrire sur votre site. +// Cependant, votre site ne sera pas répertorié comme un hub ouvert aux inscriptions. +// Nous utiliserons la politique d'accès au système (ci-dessous) +// pour déterminer s'il faut ou non inscrire votre site dans l'annuaire +// comme un hub ouvert où tout le monde peut créer des comptes. Vous avez le choix entre : +// inscription payante, à plusieurs niveaux ou gratuite : détermine la façon dont ces inscriptions seront présentées. + + App::$config['system']['access_policy'] = ACCESS_PRIVATE; + + // Si vous gérez un site public, vous souhaitez peut-être que les visiteurs soient dirigés // vers une "page d'accueil" où vous pouvez décrire en détail les caractéristiques, les politiques ou les services proposés. + // Il doit s'agir d'une URL absolue commençant par http:// ou https:// . + + App::$config['system']['sellpage'] = ''; + +// taille maximale pour l'importation d'un message, 0 est illimité App::$config['system']['max_import_size'] = 200000; -// taille maximale pour le téléversement de photos +// taille maximale pour le téléversement de photos App::$config['system']['maximagesize'] = 8000000; @@ -66,15 +87,25 @@ App::$config['system']['maximagesize'] = 8000000; App::$config['system']['php_path'] = '{{$phpath}}'; -// configurez la façon dont votre site communique avec les autres serveurs. [Répertoire des membres inscrits à la Matrice] -// DIRECTORY_MODE_NORMAL = client du répertoire de membres, nous vous trouverons un répertoire accessible autre serveur. -// DIRECTORY_MODE_SECONDARY = copie mirroir du répertoire des membres. -// DIRECTORY_MODE_PRIMARY = répertoire des membres principal. -// DIRECTORY_MODE_STANDALONE = "autonome/déconnecté" ou répertoire de membres privés +// configurez la façon dont votre site communique avec les autres serveurs. [Répertoire des membres inscrits à la Matrice] +// DIRECTORY_MODE_NORMAL = client du répertoire de membres, nous vous trouverons un répertoire accessible autre serveur. +// DIRECTORY_MODE_SECONDARY = copie mirroir du répertoire des membres. +// DIRECTORY_MODE_PRIMARY = répertoire des membres principal. +// DIRECTORY_MODE_STANDALONE = "autonome/déconnecté" ou répertoire de membres privés App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL; -// Thème par défaut +// Thème par défaut App::$config['system']['theme'] = 'redbasic'; +// Configuration de l'enregistrement des erreurs PHP +// Avant de faire cela, assurez-vous que le serveur web a la permission de créer et d'écrire dans le fichier php.out dans le répertoire web correspondant. +// de créer et d'écrire dans le fichier php.out dans le répertoire web correspondant, +// ou changez le nom (ci-dessous) pour un fichier/chemin où cela est autorisé. +// Décommentez les 4 lignes suivantes pour activer la journalisation des erreurs PHP. + +//error_reporting(E_ERROR | E_WARNING | E_PARSE ) ; +//ini_set('error_log', 'php.out') ; +//ini_set('log_errors', '1') ; +//ini_set('display_errors', '0') ; diff --git a/view/fr/invite.material.subject.tpl b/view/fr/invite.material.subject.tpl new file mode 100644 index 000000000..4f3ff1c7a --- /dev/null +++ b/view/fr/invite.material.subject.tpl @@ -0,0 +1 @@ +Invitation {{$invite_loc}} diff --git a/view/fr/invite.material.tpl b/view/fr/invite.material.tpl new file mode 100644 index 000000000..6d9b770b7 --- /dev/null +++ b/view/fr/invite.material.tpl @@ -0,0 +1 @@ +{{* tpl en matériel, pour inviter avec des données essentielles *}} diff --git a/view/fr/lostpass_eml.tpl b/view/fr/lostpass_eml.tpl index 0421d41a8..81e426af6 100644 --- a/view/fr/lostpass_eml.tpl +++ b/view/fr/lostpass_eml.tpl @@ -1,30 +1,32 @@ - -Cher {{$username}}, - Une demande pour réinitialiser votre mot de passe a récemment été reçue par {{$sitename}} -Pour confirmer cette requête, veuillez suivre le lien de vérification -ci-dessous ou en faire un copier-coller dans la barre d'adresse de votre navigateur. - -Si vous N'AVEZ PAS demandé ce changement, NE SUIVEZ PAS ce lien, ignorez-le simplement et/ou supprimez ce courriel. - -Votre mot de passe ne sera pas changé à moins que nous puissions vérifier vos intentions. - -Suivez ce lien pour confirmer votre identité: - -{{$reset_link}} - -Vous recevrez ensuite un second courriel avec votre nouveau mot de passe. - -Vous pouvez changer ce mot de passe à partir des réglages du profil après vous être connecté. - -Voici les détails de connexion: - -Emplacement du site:⇥{{$siteurl}} -Utilisateur:⇥{{$email}} - - - - -Sincèrement, - L'administrateur {{$sitename}} - -
\ No newline at end of file +Cher {{$username}},
+
+Une demande pour réinitialiser votre mot de passe a récemment été reçue par {{$sitename}}
+Pour confirmer cette requête, veuillez suivre le lien de vérification
+ci-dessous ou en faire un copier-coller dans la barre d'adresse de votre navigateur.
+
+Si vous N'AVEZ PAS demandé ce changement, NE SUIVEZ PAS ce lien, ignorez-le simplement et/ou supprimez ce courriel.
+
+Votre mot de passe ne sera pas changé à moins que nous puissions vérifier vos intentions.
+
+Suivez ce lien pour confirmer votre identité:
+
+{{$reset_link}}
+
+Vous recevrez ensuite un second courriel avec votre nouveau mot de passe.
+
+Vous pouvez changer ce mot de passe à partir des réglages du profil après vous être connecté.
+
+Voici les détails de connexion:
+
+Emplacement du site: {{$siteurl}}
+Utilisateur: {{$email}}
+
+
+Sincèrement,
+L'administrateur de {{$sitename}}
+
+--
+Conditions d'utilisation :
+{{$siteurl}}/help/TermsOfService
+
+
diff --git a/view/fr/passchanged_eml.tpl b/view/fr/passchanged_eml.tpl index 7c4e3d7bb..c70e45f6b 100644 --- a/view/fr/passchanged_eml.tpl +++ b/view/fr/passchanged_eml.tpl @@ -1,19 +1,21 @@ - -Cher {{$username}}, - Votre mot de passe a bien été réinitialisé. -Veuillez conserver cette information (ou changer immédiatement ce mot de passe temporaire). - - -Voici les détails de connexion: - -Emplacement du site:⇥{{$siteurl}} -Utilisateur:⇥{{$email}} -Mot de passe:⇥{{$new_password}} - -Vous pouvez changer ce mot de passe à partir des réglages du profil après vous être connecté. - - -Sincèrement, - L'administrateur {{$sitename}} - -
\ No newline at end of file +Cher {{$username}},
+
+Votre mot de passe a bien été réinitialisé.
+Veuillez conserver cette information (ou changer immédiatement ce mot de passe temporaire).
+
+
+Voici les détails de connexion:
+
+Emplacement du site : {{$siteurl}}
+Utilisateur : {{$email}}
+Mot de passe : {{$new_password}}
+
+Vous pouvez changer ce mot de passe à partir des Paramètres / Paramètres du compte après vous être connecté.
+
+
+Sincèrement,
+L'administrateur {{$sitename}}
+
+--
+Conditions d'utilisation :
+{{$siteurl}}/help/TermsOfService
diff --git a/view/fr/update_fail_eml.tpl b/view/fr/update_fail_eml.tpl index 5fbad2c8a..5548579ed 100644 --- a/view/fr/update_fail_eml.tpl +++ b/view/fr/update_fail_eml.tpl @@ -1,16 +1,21 @@ -Bonjour, -Je suis le serveur web de {{$sitename}}; - -Les développeurs de la Matrice Rouge ont lancé une mise à jour {{$update}} récemment, -toutefois, lorsque j'ai essayé de l'installer, quelques choses d'inattendu s'est produit. - -Nous devons corriger la situation et cela requiert votre intervention. - -Veuillez contacter un développeur de la Matrice Rouge si vous avez des difficultés à déterminer -la meilleure approche pour résoudre le problème. Ma base de donnée est peut-être corrompue. - -Le message d'erreur est '{{$error}}'. - -Veuillez accepter mes plus humbles excuses pour les désagréments, - - votre serveur web a {{$siteurl}}
\ No newline at end of file +Bonjour,
+Je suis le serveur web de {{$sitename}};
+
+Les développeurs du projet ont récemment publié la mise à jour {{$update}}, mais lors de la tentative d'installation, quelque chose s'est mal passé.
+
+Ce problème doit être résolu rapidement et nécessite votre intervention.
+
+Veuillez contacter un développeur du projet si vous ne parvenez pas à résoudre le problème par vous-même. La base de données de votre installation est peut-être corrompue.
+
+Le message d'erreur est '{{$error}}'.
+
+Vous pouvez tenter de réappliquer cette mise à jour en vous rendant à l'adresse suivante (avec un compte administrateur) :
+
+{{$baseurl}}/admin/dbsync
+
+
+{{$source}}
+
+Veuillez nous excuser pour ce désagrément,
+
+votre serveur Web à {{$siteurl}}}}
diff --git a/view/pdl/mod_admin.pdl b/view/pdl/mod_admin.pdl index 1cf49750d..3c9633a69 100644 --- a/view/pdl/mod_admin.pdl +++ b/view/pdl/mod_admin.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=admin][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_appman.pdl b/view/pdl/mod_appman.pdl index ad8843890..71306785e 100644 --- a/view/pdl/mod_appman.pdl +++ b/view/pdl/mod_appman.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=appstore][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_apps.pdl b/view/pdl/mod_apps.pdl index 32e2ce560..be9e15366 100644 --- a/view/pdl/mod_apps.pdl +++ b/view/pdl/mod_apps.pdl @@ -2,6 +2,9 @@ [widget=appstore][/widget] [widget=appcategories][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_articles.pdl b/view/pdl/mod_articles.pdl index 490917358..051e89278 100644 --- a/view/pdl/mod_articles.pdl +++ b/view/pdl/mod_articles.pdl @@ -5,6 +5,9 @@ [widget=tasklist][/widget] [widget=notes][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_blocks.pdl b/view/pdl/mod_blocks.pdl index 4a90a4f36..c0ccacdc7 100644 --- a/view/pdl/mod_blocks.pdl +++ b/view/pdl/mod_blocks.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=design_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_cal.pdl b/view/pdl/mod_cal.pdl index d7e5d29f3..47af1ed38 100644 --- a/view/pdl/mod_cal.pdl +++ b/view/pdl/mod_cal.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=profile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_cards.pdl b/view/pdl/mod_cards.pdl index fd08121fc..2252659a3 100644 --- a/view/pdl/mod_cards.pdl +++ b/view/pdl/mod_cards.pdl @@ -4,6 +4,9 @@ [widget=tasklist][/widget] [widget=notes][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_cdav.pdl b/view/pdl/mod_cdav.pdl index c0f9a511f..be5b491ae 100644 --- a/view/pdl/mod_cdav.pdl +++ b/view/pdl/mod_cdav.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=cdav][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_channel.pdl b/view/pdl/mod_channel.pdl index 5857fca95..80333afdc 100644 --- a/view/pdl/mod_channel.pdl +++ b/view/pdl/mod_channel.pdl @@ -8,6 +8,9 @@ [widget=categories][/widget] [widget=tagcloud_wall][var=limit]24[/var][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_chanview.pdl b/view/pdl/mod_chanview.pdl index a5461df50..0527ac00c 100644 --- a/view/pdl/mod_chanview.pdl +++ b/view/pdl/mod_chanview.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=vcard][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_chat.pdl b/view/pdl/mod_chat.pdl index 8a79b4b12..b761e3361 100644 --- a/view/pdl/mod_chat.pdl +++ b/view/pdl/mod_chat.pdl @@ -5,6 +5,9 @@ [widget=suggestedchats][/widget] [widget=chatroom_members][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_cloud.pdl b/view/pdl/mod_cloud.pdl index 7f40e7ea0..699aff1f8 100644 --- a/view/pdl/mod_cloud.pdl +++ b/view/pdl/mod_cloud.pdl @@ -2,6 +2,9 @@ [widget=profile][/widget] [widget=categories][var=files]1[/var][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_common.pdl b/view/pdl/mod_common.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_common.pdl +++ b/view/pdl/mod_common.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_connect.pdl b/view/pdl/mod_connect.pdl index d7e5d29f3..47af1ed38 100644 --- a/view/pdl/mod_connect.pdl +++ b/view/pdl/mod_connect.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=profile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_connections.pdl b/view/pdl/mod_connections.pdl index 3c3dfd313..992ed9ca4 100644 --- a/view/pdl/mod_connections.pdl +++ b/view/pdl/mod_connections.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=findpeople][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_connedit.pdl b/view/pdl/mod_connedit.pdl index a5461df50..0527ac00c 100644 --- a/view/pdl/mod_connedit.pdl +++ b/view/pdl/mod_connedit.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=vcard][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_defperms.pdl b/view/pdl/mod_defperms.pdl index 37c85c765..759dbf039 100644 --- a/view/pdl/mod_defperms.pdl +++ b/view/pdl/mod_defperms.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=settings_menu][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_directory.pdl b/view/pdl/mod_directory.pdl index 3840691b4..56ce119f8 100644 --- a/view/pdl/mod_directory.pdl +++ b/view/pdl/mod_directory.pdl @@ -3,6 +3,9 @@ [widget=dirsort][/widget] [widget=dirtags][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_display.pdl b/view/pdl/mod_display.pdl index a5461df50..0527ac00c 100644 --- a/view/pdl/mod_display.pdl +++ b/view/pdl/mod_display.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=vcard][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_editblock.pdl b/view/pdl/mod_editblock.pdl index 4a90a4f36..c0ccacdc7 100644 --- a/view/pdl/mod_editblock.pdl +++ b/view/pdl/mod_editblock.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=design_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_editlayout.pdl b/view/pdl/mod_editlayout.pdl index 4a90a4f36..c0ccacdc7 100644 --- a/view/pdl/mod_editlayout.pdl +++ b/view/pdl/mod_editlayout.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=design_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_editwebpage.pdl b/view/pdl/mod_editwebpage.pdl index 4a90a4f36..c0ccacdc7 100644 --- a/view/pdl/mod_editwebpage.pdl +++ b/view/pdl/mod_editwebpage.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=design_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_go.pdl b/view/pdl/mod_go.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_go.pdl +++ b/view/pdl/mod_go.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_group.pdl b/view/pdl/mod_group.pdl index 749ede18c..523f24178 100644 --- a/view/pdl/mod_group.pdl +++ b/view/pdl/mod_group.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=privacygroups][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_help.pdl b/view/pdl/mod_help.pdl index 4bb380cc9..6f8a41226 100644 --- a/view/pdl/mod_help.pdl +++ b/view/pdl/mod_help.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=helpindex][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_id.pdl b/view/pdl/mod_id.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_id.pdl +++ b/view/pdl/mod_id.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_import_items.pdl b/view/pdl/mod_import_items.pdl index e657fa88b..9f0bb4d9a 100644 --- a/view/pdl/mod_import_items.pdl +++ b/view/pdl/mod_import_items.pdl @@ -1,3 +1,8 @@ +[region=aside] +[/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [/region] diff --git a/view/pdl/mod_layouts.pdl b/view/pdl/mod_layouts.pdl index 4a90a4f36..c0ccacdc7 100644 --- a/view/pdl/mod_layouts.pdl +++ b/view/pdl/mod_layouts.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=design_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_locs.pdl b/view/pdl/mod_locs.pdl index 37c85c765..759dbf039 100644 --- a/view/pdl/mod_locs.pdl +++ b/view/pdl/mod_locs.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=settings_menu][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_menu.pdl b/view/pdl/mod_menu.pdl index 4a90a4f36..c0ccacdc7 100644 --- a/view/pdl/mod_menu.pdl +++ b/view/pdl/mod_menu.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=design_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_mitem.pdl b/view/pdl/mod_mitem.pdl index 0cca7fd85..f0b03c854 100644 --- a/view/pdl/mod_mitem.pdl +++ b/view/pdl/mod_mitem.pdl @@ -2,6 +2,9 @@ [widget=design_tools][/widget] [widget=menu_preview][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_moderate.pdl b/view/pdl/mod_moderate.pdl index 95f069031..11cdb4672 100644 --- a/view/pdl/mod_moderate.pdl +++ b/view/pdl/mod_moderate.pdl @@ -1,3 +1,8 @@ +[region=aside] +[/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_permcats.pdl b/view/pdl/mod_permcats.pdl index bc6c89920..996b073da 100644 --- a/view/pdl/mod_permcats.pdl +++ b/view/pdl/mod_permcats.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=permcats][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_photos.pdl b/view/pdl/mod_photos.pdl index bdcc087f3..4b544faa9 100644 --- a/view/pdl/mod_photos.pdl +++ b/view/pdl/mod_photos.pdl @@ -2,6 +2,9 @@ [widget=profile][/widget] [widget=photo_albums][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_profile.pdl b/view/pdl/mod_profile.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_profile.pdl +++ b/view/pdl/mod_profile.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_profile_photo.pdl b/view/pdl/mod_profile_photo.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_profile_photo.pdl +++ b/view/pdl/mod_profile_photo.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_profiles.pdl b/view/pdl/mod_profiles.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_profiles.pdl +++ b/view/pdl/mod_profiles.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_profperm.pdl b/view/pdl/mod_profperm.pdl index d7e5d29f3..47af1ed38 100644 --- a/view/pdl/mod_profperm.pdl +++ b/view/pdl/mod_profperm.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=profile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_pubstream.pdl b/view/pdl/mod_pubstream.pdl index 539900155..914218e19 100644 --- a/view/pdl/mod_pubstream.pdl +++ b/view/pdl/mod_pubstream.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=pubtagcloud][var=trending]8[/var][var=limit]20[/var][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_rate.pdl b/view/pdl/mod_rate.pdl deleted file mode 100644 index a5461df50..000000000 --- a/view/pdl/mod_rate.pdl +++ /dev/null @@ -1,7 +0,0 @@ -[region=aside] -[widget=vcard][/widget] -[/region] -[region=right_aside] -[widget=notifications][/widget] -[widget=newmember][/widget] -[/region] diff --git a/view/pdl/mod_ratings.pdl b/view/pdl/mod_ratings.pdl deleted file mode 100644 index f6e87cb7c..000000000 --- a/view/pdl/mod_ratings.pdl +++ /dev/null @@ -1,11 +0,0 @@ -[region=aside] -[widget=pubsites][/widget] -[widget=vcard][/widget] -[widget=rating][/widget] -[widget=suggestions][/widget] -[widget=findpeople][/widget] -[/region] -[region=right_aside] -[widget=notifications][/widget] -[widget=newmember][/widget] -[/region] diff --git a/view/pdl/mod_search.pdl b/view/pdl/mod_search.pdl index ed1f77c5a..11cdb4672 100644 --- a/view/pdl/mod_search.pdl +++ b/view/pdl/mod_search.pdl @@ -1,5 +1,8 @@ [region=aside] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_settings.pdl b/view/pdl/mod_settings.pdl index 37c85c765..759dbf039 100644 --- a/view/pdl/mod_settings.pdl +++ b/view/pdl/mod_settings.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=settings_menu][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_sharedwithme.pdl b/view/pdl/mod_sharedwithme.pdl index 95f069031..11cdb4672 100644 --- a/view/pdl/mod_sharedwithme.pdl +++ b/view/pdl/mod_sharedwithme.pdl @@ -1,3 +1,8 @@ +[region=aside] +[/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_sources.pdl b/view/pdl/mod_sources.pdl index 37c85c765..759dbf039 100644 --- a/view/pdl/mod_sources.pdl +++ b/view/pdl/mod_sources.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=settings_menu][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_suggest.pdl b/view/pdl/mod_suggest.pdl index b74391cba..7878bca4e 100644 --- a/view/pdl/mod_suggest.pdl +++ b/view/pdl/mod_suggest.pdl @@ -2,6 +2,9 @@ [widget=follow][/widget] [widget=findpeople][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_thing.pdl b/view/pdl/mod_thing.pdl index 7e15fc869..df722e5bf 100644 --- a/view/pdl/mod_thing.pdl +++ b/view/pdl/mod_thing.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=fullprofile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_tokens.pdl b/view/pdl/mod_tokens.pdl index 97bdc3ab4..6a81829fe 100644 --- a/view/pdl/mod_tokens.pdl +++ b/view/pdl/mod_tokens.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=tokens][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_uexport.pdl b/view/pdl/mod_uexport.pdl index ed1f77c5a..11cdb4672 100644 --- a/view/pdl/mod_uexport.pdl +++ b/view/pdl/mod_uexport.pdl @@ -1,5 +1,8 @@ [region=aside] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_viewconnections.pdl b/view/pdl/mod_viewconnections.pdl index d7e5d29f3..47af1ed38 100644 --- a/view/pdl/mod_viewconnections.pdl +++ b/view/pdl/mod_viewconnections.pdl @@ -1,6 +1,9 @@ [region=aside] [widget=profile][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_webpages.pdl b/view/pdl/mod_webpages.pdl index d13bf8862..87945fb5f 100644 --- a/view/pdl/mod_webpages.pdl +++ b/view/pdl/mod_webpages.pdl @@ -2,6 +2,9 @@ [widget=design_tools][/widget] [widget=website_portation_tools][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/pdl/mod_wiki.pdl b/view/pdl/mod_wiki.pdl index db8faa0d9..e650e364e 100644 --- a/view/pdl/mod_wiki.pdl +++ b/view/pdl/mod_wiki.pdl @@ -2,6 +2,9 @@ [widget=profile][/widget] [widget=wiki_pages][/widget] [/region] +[region=content] +$content +[/region] [region=right_aside] [widget=notifications][/widget] [widget=newmember][/widget] diff --git a/view/php/default.php b/view/php/default.php index 64d58a0c1..10e150906 100644 --- a/view/php/default.php +++ b/view/php/default.php @@ -1,3 +1,15 @@ +<?php +/** + * * Name: default + * * Description: Hubzilla default 3-column layout + * * Version: 1 + * * Author: Mario Vavti + * * Maintainer: Mario Vavti + * * ContentRegion: aside, left_aside_wrapper + * * ContentRegion: content, region_2 + * * ContentRegion: right_aside, right_aside_wrapper + */ +?> <!DOCTYPE html > <html prefix="og: http://ogp.me/ns#"> <head> @@ -8,7 +20,7 @@ <body <?php if($page['direction']) echo 'dir="rtl"' ?> > <?php if(x($page,'banner')) echo $page['banner']; ?> <header><?php if(x($page,'header')) echo $page['header']; ?></header> - <?php if(x($page,'nav')) echo $page['nav']; ?></nav> + <?php if(x($page,'nav')) echo $page['nav']; ?> <main> <div class="content"> <div class="columns"> diff --git a/view/php/full.php b/view/php/full.php index 1a9cd9a84..d855fb650 100644 --- a/view/php/full.php +++ b/view/php/full.php @@ -1,3 +1,13 @@ +<?php +/** + * * Name: full + * * Description: A single column full width layout with the hubzilla navbar + * * Version: 1 + * * Author: None + * * Maintainer: None + * * ContentRegion: content, region_1 + */ +?> <!DOCTYPE html > <html prefix="og: http://ogp.me/ns#"> <head> @@ -8,8 +18,9 @@ <body <?php if($page['direction']) echo 'dir="rtl"' ?> > <?php if(x($page,'banner')) echo $page['banner']; ?> <header><?php if(x($page,'header')) echo $page['header']; ?></header> - <nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark"><?php if(x($page,'nav')) echo $page['nav']; ?></nav> - <section id="region_2"><?php if(x($page,'content')) echo $page['content']; ?> + <?php if(x($page,'nav')) echo $page['nav']; ?> + <section id="region_1"> + <?php if(x($page,'content')) echo $page['content']; ?> <div id="page-footer"></div> </section> </body> diff --git a/view/php/minimal.php b/view/php/minimal.php index 3572f3b5c..3fab0c5f9 100644 --- a/view/php/minimal.php +++ b/view/php/minimal.php @@ -1,14 +1,25 @@ -<!DOCTYPE html >
-<html prefix="og: http://ogp.me/ns#">
-<head>
- <title><?php if(x($page,'title')) echo $page['title'] ?></title>
- <script>var baseurl="<?php echo z_root() ?>";</script>
- <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
-</head>
-<body>
- <section style="margin:0px!important; padding:0px!important; float:none!important;display:block!important;"><?php if(x($page,'content')) echo $page['content']; ?>
- <div id="page-footer"></div>
- </section>
-</body>
-</html>
-
+<?php +/** + * * Name: full + * * Description: A single column full width layout without a navbar + * * Version: 1 + * * Author: None + * * Maintainer: None + * * ContentRegion: content, region_1 + */ +?> +<!DOCTYPE html > +<html prefix="og: http://ogp.me/ns#"> +<head> + <title><?php if(x($page,'title')) echo $page['title'] ?></title> + <script>var baseurl="<?php echo z_root() ?>";</script> + <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> +</head> +<body> + <section id="region_1"> + <?php if(x($page,'content')) echo $page['content']; ?> + <div id="page-footer"></div> + </section> +</body> +</html> + diff --git a/view/php/none.php b/view/php/none.php index 51d0e83dc..5e92310b7 100644 --- a/view/php/none.php +++ b/view/php/none.php @@ -1 +1,10 @@ +<?php +/** + * * Name: none + * * Description: A barebones empty single page template + * * Version: 1 + * * Author: None + * * Maintainer: None + */ +?> <?php if(x($page,'content')) echo $page['content']; ?> diff --git a/view/php/zen.php b/view/php/zen.php index a96cf722f..24aae951b 100644 --- a/view/php/zen.php +++ b/view/php/zen.php @@ -1,11 +1,11 @@ <!DOCTYPE html> <html prefix="og: http://ogp.me/ns#"> -<head> - <title><?php if(x($page,'title')) echo $page['title'] ?></title> - <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1"> - <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> -</head> -<body> - <?php if(x($page,'content')) echo $page['content']; ?> -</body> + <head> + <title><?php if(x($page,'title')) echo $page['title'] ?></title> + <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1"> + <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> + </head> + <body> + <?php if(x($page,'content')) echo $page['content']; ?> + </body> </html> diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index cea9b8ae5..ebbc1aaa3 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -1728,7 +1728,7 @@ dl.bb-dl > dd > li { text-align: center; } -#login-main, .rmagic-button { +.login-wrapper { max-width: 400px; margin-top: 20px; margin-left: auto; diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index c0c03d4f8..04469cb85 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -17,8 +17,13 @@ $(document).ready(function() { } $('#css3-calc').remove(); // Remove the test element - stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_1')).getPropertyValue('padding-top')), 0); - stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_3')).getPropertyValue('padding-top')), 20); + if (document.querySelector('#region_1')) { + stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_1')).getPropertyValue('padding-top')), 0); + } + + if (document.querySelector('#region_3')) { + stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_3')).getPropertyValue('padding-top')), 20); + } $('#expand-aside').on('click', function() { if($('main').hasClass('region_1-on')){ @@ -121,8 +126,14 @@ function setStyle(element, cssProperty) { } function stickyScroll(sticky, stickyTop, container, topOffset, bottomOffset) { + var lastScrollTop = 0; var sticky = document.querySelector(sticky); + + if (!sticky) { + return; + } + var stickyHeight = sticky.getBoundingClientRect().height; var stickyTop = document.querySelector(stickyTop); var content = document.querySelector(container); diff --git a/view/theme/redbasic/php/style.php b/view/theme/redbasic/php/style.php index 9cb835ec6..3dbc29a96 100644 --- a/view/theme/redbasic/php/style.php +++ b/view/theme/redbasic/php/style.php @@ -36,9 +36,8 @@ if(! App::$install) { // not --- like the mobile theme does instead. // Allow layouts to over-ride the schema - -if($_REQUEST['schema']) { - $schema = $_REQUEST['schema']; +if (isset($_REQUEST['schema']) && preg_match('/^[\w_-]+$/i', $_REQUEST['schema'])) { + $schema = $_REQUEST['schema']; } if (($schema) && ($schema != '---')) { @@ -112,6 +111,10 @@ if(file_exists('view/theme/redbasic/css/style.css')) { $x = file_get_contents('view/theme/redbasic/css/style.css'); + if($schema === 'dark' && file_exists('view/theme/redbasic/schema/bootstrap-nightfall.css')) { + $x .= file_get_contents('view/theme/redbasic/schema/bootstrap-nightfall.css'); + } + if($narrow_navbar && file_exists('view/theme/redbasic/css/narrow_navbar.css')) { $x .= file_get_contents('view/theme/redbasic/css/narrow_navbar.css'); } diff --git a/view/theme/redbasic/schema/bootstrap-nightfall.css b/view/theme/redbasic/schema/bootstrap-nightfall.css new file mode 100644 index 000000000..d9cb8cc63 --- /dev/null +++ b/view/theme/redbasic/schema/bootstrap-nightfall.css @@ -0,0 +1,1898 @@ +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * + * Bootstrap-Nightfall v1.1.3 (https://vinorodrigues.github.io/bootstrap-dark-5/) + * Copyright 2020-2022 Vino Rodrigues + * This version is an extraction with only the dark elements, or deltas, of the + * dark theme. Used as a bootstrap plugin. + */ +:root { + color-scheme: dark; +} + +:root { + --bs-blue: #375a7f; + --bs-indigo: #673ab7; + --bs-purple: #654ea3; + --bs-pink: #e83e8c; + --bs-red: #e74c3c; + --bs-orange: #fd7e14; + --bs-yellow: #f39c12; + --bs-green: #00bc8c; + --bs-teal: #45b5aa; + --bs-cyan: #17a2b8; + --bs-white: #fafafa; + --bs-black: #111; + --bs-gray: #7e7e7e; + --bs-gray-dark: #121212; + --bs-gray-100: #e1e1e1; + --bs-gray-200: #cfcfcf; + --bs-gray-300: #b1b1b1; + --bs-gray-400: #9e9e9e; + --bs-gray-500: #7e7e7e; + --bs-gray-600: #626262; + --bs-gray-700: #515151; + --bs-gray-800: #3b3b3b; + --bs-gray-900: #222; + --bs-primary: #375a7f; + --bs-secondary: #626262; + --bs-success: #00bc8c; + --bs-info: #17a2b8; + --bs-warning: #f39c12; + --bs-danger: #e74c3c; + --bs-light: #9e9e9e; + --bs-dark: #3b3b3b; + --bs-primary-rgb: 55, 90, 127; + --bs-secondary-rgb: 98, 98, 98; + --bs-success-rgb: 0, 188, 140; + --bs-info-rgb: 23, 162, 184; + --bs-warning-rgb: 243, 156, 18; + --bs-danger-rgb: 231, 76, 60; + --bs-light-rgb: 158, 158, 158; + --bs-dark-rgb: 59, 59, 59; + --bs-white-rgb: 250, 250, 250; + --bs-black-rgb: 17, 17, 17; + --bs-body-color-rgb: 225, 225, 225; + --bs-body-bg-rgb: 34, 34, 34; + --bs-body-color: #e1e1e1; + --bs-body-bg: #222; + --bs-gradient: linear-gradient(180deg, rgba(17, 17, 17, 0.15), rgba(17, 17, 17, 0)); +} + +hr { + color: #fafafa; + background-color: currentColor; + opacity: 0.1; +} + +mark { + background-color: rgba(243, 156, 18, 0.5); +} + +a { + color: #5f7b99; +} +a:hover { + color: #4b6b8c; +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; +} + +pre { + color: #e1e1e1; +} +pre code { + color: inherit; +} + +code { + color: #45b5aa; +} +a > code { + color: inherit; +} + +kbd { + color: #e1e1e1; + background-color: #3b3b3b; +} + +caption { + color: #9e9e9e; +} + +.blockquote-footer { + color: #626262; +} + +.img-thumbnail { + background-color: #222; + border: 1px solid #515151; +} + +.figure-caption { + color: #9e9e9e; +} + +.table { + --bs-table-color: #e1e1e1; + --bs-table-bg: transparent; + --bs-table-border-color: #515151; + --bs-table-accent-bg: transparent; + --bs-table-striped-color: #e1e1e1; + --bs-table-striped-bg: rgba(250, 250, 250, 0.05); + --bs-table-active-color: #e1e1e1; + --bs-table-active-bg: rgba(250, 250, 250, 0.1); + --bs-table-hover-color: #e1e1e1; + --bs-table-hover-bg: rgba(250, 250, 250, 0.075); + color: #e1e1e1; + border-color: #515151; +} +.table > :not(:first-child) { + border-top: 2px solid currentColor; +} + +.table-primary { + --bs-table-color: #fff; + --bs-table-bg: #1c2d40; + --bs-table-border-color: #334253; + --bs-table-striped-bg: #27384a; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #334253; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #2d3d4e; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #334253; +} + +.table-secondary { + --bs-table-color: #fff; + --bs-table-bg: #313131; + --bs-table-border-color: #464646; + --bs-table-striped-bg: #3b3b3b; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #464646; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #404040; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #464646; +} + +.table-success { + --bs-table-color: #fff; + --bs-table-bg: #005e46; + --bs-table-border-color: #1a6e59; + --bs-table-striped-bg: #0d664f; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #1a6e59; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #136a54; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #1a6e59; +} + +.table-info { + --bs-table-color: #fff; + --bs-table-bg: #0c515c; + --bs-table-border-color: #24626c; + --bs-table-striped-bg: #185a64; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #24626c; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #1e5e68; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #24626c; +} + +.table-warning { + --bs-table-color: #fff; + --bs-table-bg: #7a4e09; + --bs-table-border-color: #876022; + --bs-table-striped-bg: #815715; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #876022; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #845b1b; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #876022; +} + +.table-danger { + --bs-table-color: #fff; + --bs-table-bg: #74261e; + --bs-table-border-color: #823c35; + --bs-table-striped-bg: #7b3129; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #823c35; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #7e362f; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #823c35; +} + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #9e9e9e; + --bs-table-border-color: #8e8e8e; + --bs-table-striped-bg: #969696; + --bs-table-striped-color: #000; + --bs-table-active-bg: #8e8e8e; + --bs-table-active-color: #000; + --bs-table-hover-bg: #929292; + --bs-table-hover-color: #000; + color: #000; + border-color: #8e8e8e; +} + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #3b3b3b; + --bs-table-border-color: #4f4f4f; + --bs-table-striped-bg: #454545; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #4f4f4f; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #4a4a4a; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #4f4f4f; +} + +.form-text { + color: #9e9e9e; +} + +.form-control { + color: #b1b1b1; + background-color: #222; + border: 1px solid #515151; +} +.form-control:focus { + color: #b1b1b1; + background-color: #222; + border-color: #9badbf; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-control::-moz-placeholder { + color: #5a5a5a; +} +.form-control::placeholder { + color: #5a5a5a; +} +.form-control:disabled, .form-control[readonly] { + background-color: #222; +} +.form-control::-webkit-file-upload-button { + color: #b1b1b1; + background-color: #3b3b3b; + border-color: inherit; +} +.form-control::file-selector-button { + color: #b1b1b1; + background-color: #3b3b3b; + border-color: inherit; +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #383838; +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #383838; +} +.form-control::-webkit-file-upload-button { + color: #b1b1b1; + background-color: #3b3b3b; + border-color: inherit; +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #383838; +} + +.form-control-plaintext { + color: #e1e1e1; + background-color: transparent; + border: solid transparent; +} + +.form-select { + color: #b1b1b1; + background-color: #222; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23cfcfcf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + border: 1px solid #515151; +} +.form-select:focus { + border-color: #9badbf; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-select[multiple], .form-select[size]:not([size="1"]) { + background-image: none; +} +.form-select:disabled { + background-color: #3b3b3b; +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #b1b1b1; +} + +.form-check-input { + background-color: #222; + border: 1px solid rgba(255, 255, 255, 0.25); +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #9badbf; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-check-input:checked { + background-color: #375a7f; + border-color: #375a7f; +} +.form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fafafa' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fafafa'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #375a7f; + border-color: #375a7f; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fafafa' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + opacity: 0.5; +} + +.form-switch .form-check-input { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28250, 250, 250, 0.25%29'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239badbf'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fafafa'/%3e%3c/svg%3e"); +} + +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + opacity: 0.65; +} + +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #222, 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #222, 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.form-range::-webkit-slider-thumb { + background-color: #375a7f; + border: 0; +} +.form-range::-webkit-slider-thumb:active { + background-color: #c3ced9; +} +.form-range::-webkit-slider-runnable-track { + background-color: #515151; +} +.form-range::-moz-range-thumb { + background-color: #375a7f; + border: 0; +} +.form-range::-moz-range-thumb:active { + background-color: #c3ced9; +} +.form-range::-moz-range-track { + background-color: #515151; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: #7e7e7e; +} +.form-range:disabled::-moz-range-thumb { + background-color: #7e7e7e; +} + +.form-floating > .form-control::-moz-placeholder { + color: transparent; +} + +.form-floating > .form-control::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; +} +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-select ~ label { + opacity: 0.65; +} +.form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; +} + +.input-group-text { + color: #b1b1b1; + background-color: #3b3b3b; + border: 1px solid #515151; +} + +.valid-feedback { + color: #00bc8c; +} + +.valid-tooltip { + color: #111; + background-color: rgba(0, 188, 140, 0.9); +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #00bc8c; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); +} +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #00bc8c; + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: #00bc8c; +} +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23cfcfcf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); +} +.was-validated .form-select:valid[multiple], .was-validated .form-select:valid[size]:not([size="1"]), .form-select.is-valid[multiple], .form-select.is-valid[size]:not([size="1"]) { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); +} +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: #00bc8c; + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: #00bc8c; +} +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: #00bc8c; +} +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25); +} +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #00bc8c; +} + +.invalid-feedback { + color: #e74c3c; +} + +.invalid-tooltip { + color: #fafafa; + background-color: rgba(231, 76, 60, 0.9); +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #e74c3c; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); +} +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #e74c3c; + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: #e74c3c; +} +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23cfcfcf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); +} +.was-validated .form-select:invalid[multiple], .was-validated .form-select:invalid[size]:not([size="1"]), .form-select.is-invalid[multiple], .form-select.is-invalid[size]:not([size="1"]) { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); +} +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: #e74c3c; + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: #e74c3c; +} +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: #e74c3c; +} +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25); +} +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #e74c3c; +} + +.btn { + color: #e1e1e1; + background-color: transparent; + border: 1px solid transparent; +} +.btn:hover { + color: #e1e1e1; +} +.btn-check:focus + .btn, .btn:focus { + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + opacity: 0.65; +} + +.btn-primary { + color: #fafafa; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-primary:hover { + color: #fafafa; + background-color: #2f4d6c; + border-color: #2c4866; +} +.btn-check:focus + .btn-primary, .btn-primary:focus { + color: #fafafa; + background-color: #2f4d6c; + border-color: #2c4866; + box-shadow: 0 0 0 0.25rem rgba(84, 114, 145, 0.5); +} +.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { + color: #fafafa; + background-color: #2c4866; + border-color: #29445f; +} +.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(84, 114, 145, 0.5); +} +.btn-primary:disabled, .btn-primary.disabled { + color: #fafafa; + background-color: #375a7f; + border-color: #375a7f; +} + +.btn-secondary { + color: #fafafa; + background-color: #626262; + border-color: #626262; +} +.btn-secondary:hover { + color: #fafafa; + background-color: #535353; + border-color: #4e4e4e; +} +.btn-check:focus + .btn-secondary, .btn-secondary:focus { + color: #fafafa; + background-color: #535353; + border-color: #4e4e4e; + box-shadow: 0 0 0 0.25rem rgba(121, 121, 121, 0.5); +} +.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { + color: #fafafa; + background-color: #4e4e4e; + border-color: #4a4a4a; +} +.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(121, 121, 121, 0.5); +} +.btn-secondary:disabled, .btn-secondary.disabled { + color: #fafafa; + background-color: #626262; + border-color: #626262; +} + +.btn-success { + color: #111; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-success:hover { + color: #111; + background-color: #26c69d; + border-color: #1ac398; +} +.btn-check:focus + .btn-success, .btn-success:focus { + color: #111; + background-color: #26c69d; + border-color: #1ac398; + box-shadow: 0 0 0 0.25rem rgba(3, 162, 122, 0.5); +} +.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { + color: #111; + background-color: #33c9a3; + border-color: #1ac398; +} +.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(3, 162, 122, 0.5); +} +.btn-success:disabled, .btn-success.disabled { + color: #111; + background-color: #00bc8c; + border-color: #00bc8c; +} + +.btn-info { + color: #fafafa; + background-color: #17a2b8; + border-color: #17a2b8; +} +.btn-info:hover { + color: #fafafa; + background-color: #148a9c; + border-color: #128293; +} +.btn-check:focus + .btn-info, .btn-info:focus { + color: #fafafa; + background-color: #148a9c; + border-color: #128293; + box-shadow: 0 0 0 0.25rem rgba(57, 175, 194, 0.5); +} +.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { + color: #fafafa; + background-color: #128293; + border-color: #117a8a; +} +.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(57, 175, 194, 0.5); +} +.btn-info:disabled, .btn-info.disabled { + color: #fafafa; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-warning { + color: #111; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-warning:hover { + color: #111; + background-color: #f5ab36; + border-color: #f4a62a; +} +.btn-check:focus + .btn-warning, .btn-warning:focus { + color: #111; + background-color: #f5ab36; + border-color: #f4a62a; + box-shadow: 0 0 0 0.25rem rgba(209, 135, 18, 0.5); +} +.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { + color: #111; + background-color: #f5b041; + border-color: #f4a62a; +} +.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(209, 135, 18, 0.5); +} +.btn-warning:disabled, .btn-warning.disabled { + color: #111; + background-color: #f39c12; + border-color: #f39c12; +} + +.btn-danger { + color: #fafafa; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-danger:hover { + color: #fafafa; + background-color: #c44133; + border-color: #b93d30; +} +.btn-check:focus + .btn-danger, .btn-danger:focus { + color: #fafafa; + background-color: #c44133; + border-color: #b93d30; + box-shadow: 0 0 0 0.25rem rgba(234, 102, 89, 0.5); +} +.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { + color: #fafafa; + background-color: #b93d30; + border-color: #ad392d; +} +.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(234, 102, 89, 0.5); +} +.btn-danger:disabled, .btn-danger.disabled { + color: #fafafa; + background-color: #e74c3c; + border-color: #e74c3c; +} + +.btn-light { + color: #fafafa; + background-color: #9e9e9e; + border-color: #9e9e9e; +} +.btn-light:hover { + color: #fafafa; + background-color: #868686; + border-color: #7e7e7e; +} +.btn-check:focus + .btn-light, .btn-light:focus { + color: #fafafa; + background-color: #868686; + border-color: #7e7e7e; + box-shadow: 0 0 0 0.25rem rgba(172, 172, 172, 0.5); +} +.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { + color: #fafafa; + background-color: #7e7e7e; + border-color: #777777; +} +.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(172, 172, 172, 0.5); +} +.btn-light:disabled, .btn-light.disabled { + color: #fafafa; + background-color: #9e9e9e; + border-color: #9e9e9e; +} + +.btn-dark { + color: #fafafa; + background-color: #3b3b3b; + border-color: #3b3b3b; +} +.btn-dark:hover { + color: #fafafa; + background-color: #323232; + border-color: #2f2f2f; +} +.btn-check:focus + .btn-dark, .btn-dark:focus { + color: #fafafa; + background-color: #323232; + border-color: #2f2f2f; + box-shadow: 0 0 0 0.25rem rgba(88, 88, 88, 0.5); +} +.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { + color: #fafafa; + background-color: #2f2f2f; + border-color: #2c2c2c; +} +.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(88, 88, 88, 0.5); +} +.btn-dark:disabled, .btn-dark.disabled { + color: #fafafa; + background-color: #3b3b3b; + border-color: #3b3b3b; +} + +.btn-outline-primary { + color: #375a7f; + border-color: #375a7f; +} +.btn-outline-primary:hover { + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.5); +} +.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { + color: #fff; + background-color: #375a7f; + border-color: #375a7f; +} +.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.5); +} +.btn-outline-primary:disabled, .btn-outline-primary.disabled { + color: #375a7f; + background-color: transparent; +} + +.btn-outline-secondary { + color: #626262; + border-color: #626262; +} +.btn-outline-secondary:hover { + color: #fff; + background-color: #626262; + border-color: #626262; +} +.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { + box-shadow: 0 0 0 0.25rem rgba(98, 98, 98, 0.5); +} +.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { + color: #fff; + background-color: #626262; + border-color: #626262; +} +.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(98, 98, 98, 0.5); +} +.btn-outline-secondary:disabled, .btn-outline-secondary.disabled { + color: #626262; + background-color: transparent; +} + +.btn-outline-success { + color: #00bc8c; + border-color: #00bc8c; +} +.btn-outline-success:hover { + color: #000; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-check:focus + .btn-outline-success, .btn-outline-success:focus { + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.5); +} +.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { + color: #000; + background-color: #00bc8c; + border-color: #00bc8c; +} +.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.5); +} +.btn-outline-success:disabled, .btn-outline-success.disabled { + color: #00bc8c; + background-color: transparent; +} + +.btn-outline-info { + color: #17a2b8; + border-color: #17a2b8; +} +.btn-outline-info:hover { + color: #000; + background-color: #17a2b8; + border-color: #17a2b8; +} +.btn-check:focus + .btn-outline-info, .btn-outline-info:focus { + box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5); +} +.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { + color: #000; + background-color: #17a2b8; + border-color: #17a2b8; +} +.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5); +} +.btn-outline-info:disabled, .btn-outline-info.disabled { + color: #17a2b8; + background-color: transparent; +} + +.btn-outline-warning { + color: #f39c12; + border-color: #f39c12; +} +.btn-outline-warning:hover { + color: #000; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { + box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5); +} +.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { + color: #000; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5); +} +.btn-outline-warning:disabled, .btn-outline-warning.disabled { + color: #f39c12; + background-color: transparent; +} + +.btn-outline-danger { + color: #e74c3c; + border-color: #e74c3c; +} +.btn-outline-danger:hover { + color: #000; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5); +} +.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { + color: #000; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5); +} +.btn-outline-danger:disabled, .btn-outline-danger.disabled { + color: #e74c3c; + background-color: transparent; +} + +.btn-outline-light { + color: #9e9e9e; + border-color: #9e9e9e; +} +.btn-outline-light:hover { + color: #000; + background-color: #9e9e9e; + border-color: #9e9e9e; +} +.btn-check:focus + .btn-outline-light, .btn-outline-light:focus { + box-shadow: 0 0 0 0.25rem rgba(158, 158, 158, 0.5); +} +.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { + color: #000; + background-color: #9e9e9e; + border-color: #9e9e9e; +} +.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(158, 158, 158, 0.5); +} +.btn-outline-light:disabled, .btn-outline-light.disabled { + color: #9e9e9e; + background-color: transparent; +} + +.btn-outline-dark { + color: #3b3b3b; + border-color: #3b3b3b; +} +.btn-outline-dark:hover { + color: #fff; + background-color: #3b3b3b; + border-color: #3b3b3b; +} +.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { + box-shadow: 0 0 0 0.25rem rgba(59, 59, 59, 0.5); +} +.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { + color: #fff; + background-color: #3b3b3b; + border-color: #3b3b3b; +} +.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(59, 59, 59, 0.5); +} +.btn-outline-dark:disabled, .btn-outline-dark.disabled { + color: #3b3b3b; + background-color: transparent; +} + +.btn-link { + color: #5f7b99; +} +.btn-link:hover { + color: #4b6b8c; +} +.btn-link:disabled, .btn-link.disabled { + color: #626262; +} + +.dropdown-menu { + color: #e1e1e1; + background-color: #111; + border: 1px solid rgba(250, 250, 250, 0.15); +} + +.dropdown-divider { + border-top: 1px solid rgba(250, 250, 250, 0.15); +} + +.dropdown-item { + color: #f8f9fa; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, .dropdown-item:focus { + color: #dfe0e1; + background-color: #343a40; +} +.dropdown-item.active, .dropdown-item:active { + color: #fafafa; + background-color: #375a7f; +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: #7e7e7e; + background-color: transparent; +} + +.dropdown-header { + color: #9e9e9e; +} + +.dropdown-item-text { + color: #f8f9fa; +} + +.dropdown-menu-dark { + color: #515151; + background-color: #cfcfcf; + border-color: rgba(250, 250, 250, 0.15); +} +.dropdown-menu-dark .dropdown-item { + color: #515151; +} +.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { + color: #111; + background-color: rgba(17, 17, 17, 0.15); +} +.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { + color: #fafafa; + background-color: #375a7f; +} +.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { + color: #7e7e7e; +} +.dropdown-menu-dark .dropdown-divider { + border-color: rgba(250, 250, 250, 0.15); +} +.dropdown-menu-dark .dropdown-item-text { + color: #515151; +} +.dropdown-menu-dark .dropdown-header { + color: #7e7e7e; +} + +.nav-link { + color: #5f7b99; +} +.nav-link:hover, .nav-link:focus { + color: #4b6b8c; +} +.nav-link.disabled { + color: #9e9e9e; +} + +.nav-tabs { + border-bottom: 1px solid #515151; +} +.nav-tabs .nav-link { + border: 1px solid transparent; +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #3b3b3b #3b3b3b #515151; +} +.nav-tabs .nav-link.disabled { + color: #9e9e9e; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #b1b1b1; + background-color: #222; + border-color: #515151 #515151 #222; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fafafa; + background-color: #375a7f; +} + +.navbar-toggler { + background-color: transparent; + border: 1px solid transparent; +} + +.navbar-light .navbar-brand { + color: rgba(250, 250, 250, 0.9); +} +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(250, 250, 250, 0.9); +} +.navbar-light .navbar-nav .nav-link { + color: rgba(250, 250, 250, 0.55); +} +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(250, 250, 250, 0.7); +} +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(250, 250, 250, 0.3); +} +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(250, 250, 250, 0.9); +} +.navbar-light .navbar-toggler { + color: rgba(250, 250, 250, 0.55); + border-color: rgba(250, 250, 250, 0.1); +} +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28250, 250, 250, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-light .navbar-text { + color: rgba(250, 250, 250, 0.55); +} +.navbar-light .navbar-text a, +.navbar-light .navbar-text a:hover, +.navbar-light .navbar-text a:focus { + color: rgba(250, 250, 250, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fafafa; +} +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fafafa; +} +.navbar-dark .navbar-nav .nav-link { + color: rgba(250, 250, 250, 0.55); +} +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(250, 250, 250, 0.75); +} +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(250, 250, 250, 0.25); +} +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .nav-link.active { + color: #fafafa; +} +.navbar-dark .navbar-toggler { + color: rgba(250, 250, 250, 0.55); + border-color: rgba(250, 250, 250, 0.1); +} +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28250, 250, 250, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-dark .navbar-text { + color: rgba(250, 250, 250, 0.55); +} +.navbar-dark .navbar-text a, +.navbar-dark .navbar-text a:hover, +.navbar-dark .navbar-text a:focus { + color: #fafafa; +} + +.card { + background-color: #222; + border: 1px solid rgba(250, 250, 250, 0.125); +} + +.card-header { + background-color: rgba(250, 250, 250, 0.03); + border-bottom: 1px solid rgba(250, 250, 250, 0.125); +} + +.card-footer { + background-color: rgba(250, 250, 250, 0.03); + border-top: 1px solid rgba(250, 250, 250, 0.125); +} + +.accordion-button { + color: #e1e1e1; + background-color: #222; +} +.accordion-button:not(.collapsed) { + color: #879cb2; + background-color: #1c2d40; + box-shadow: inset 0 -1px 0 rgba(250, 250, 250, 0.125); +} +.accordion-button:not(.collapsed)::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23879cb2'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} +.accordion-button::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23e1e1e1'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + border-color: #9badbf; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} + +.accordion-item { + background-color: #222; + border: 1px solid rgba(250, 250, 250, 0.125); +} + +.accordion-flush .accordion-collapse { + border-width: 0; +} +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; +} +.accordion-flush .accordion-item:first-child { + border-top: 0; +} +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} + +.breadcrumb-item + .breadcrumb-item::before { + color: #9e9e9e; +} +.breadcrumb-item.active { + color: #9e9e9e; +} + +.page-link { + color: #5f7b99; + background-color: #3b3b3b; + border: 1px solid #515151; +} +.page-link:hover { + color: #4b6b8c; + background-color: #515151; + border-color: #515151; +} +.page-link:focus { + color: #4b6b8c; + background-color: #3b3b3b; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); +} + +.page-item.active .page-link { + color: #fafafa; + background-color: #375a7f; + border-color: #375a7f; +} +.page-item.disabled .page-link { + color: #5a5a5a; + background-color: #222; + border-color: #515151; +} + +.badge { + color: #fafafa; +} + +.alert-heading { + color: inherit; +} + +.alert-primary { + color: #738ca5; + background-color: #1c2d40; + border-color: #21364c; +} +.alert-primary .alert-link { + color: #5c7084; +} + +.alert-secondary { + color: #919191; + background-color: #313131; + border-color: #3b3b3b; +} +.alert-secondary .alert-link { + color: #747474; +} + +.alert-success { + color: #4dd0af; + background-color: #005e46; + border-color: #007154; +} +.alert-success .alert-link { + color: #3ea68c; +} + +.alert-info { + color: #5dbecd; + background-color: #0c515c; + border-color: #0e616e; +} +.alert-info .alert-link { + color: #4a98a4; +} + +.alert-warning { + color: #f7ba59; + background-color: #7a4e09; + border-color: #925e0b; +} +.alert-warning .alert-link { + color: #c69547; +} + +.alert-danger { + color: #ee8277; + background-color: #74261e; + border-color: #8b2e24; +} +.alert-danger .alert-link { + color: #be685f; +} + +.alert-light { + color: #bbbbbb; + background-color: #4f4f4f; + border-color: #5f5f5f; +} +.alert-light .alert-link { + color: #969696; +} + +.alert-dark { + color: #767676; + background-color: #1e1e1e; + border-color: #232323; +} +.alert-dark .alert-link { + color: #5e5e5e; +} + +.progress { + background-color: #3b3b3b; +} + +.progress-bar { + color: #111; + background-color: #375a7f; +} + +.list-group-item-action { + color: #b1b1b1; +} +.list-group-item-action:hover, .list-group-item-action:focus { + color: #b1b1b1; + background-color: #2f2f2f; +} +.list-group-item-action:active { + color: #e1e1e1; + background-color: #3b3b3b; +} + +.list-group-item { + color: #e1e1e1; + background-color: #222; + border: 1px solid rgba(250, 250, 250, 0.125); +} +.list-group-item.disabled, .list-group-item:disabled { + color: #9e9e9e; + background-color: #222; +} +.list-group-item.active { + color: #fafafa; + background-color: #375a7f; + border-color: #375a7f; +} + +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #738ca5; + background-color: #1c2d40; +} +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #738ca5; + background-color: #19293a; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #738ca5; + border-color: #738ca5; +} + +.list-group-item-secondary { + color: #919191; + background-color: #313131; +} +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #919191; + background-color: #2c2c2c; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #919191; + border-color: #919191; +} + +.list-group-item-success { + color: #4dd0af; + background-color: #005e46; +} +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #4dd0af; + background-color: #00553f; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #4dd0af; + border-color: #4dd0af; +} + +.list-group-item-info { + color: #5dbecd; + background-color: #0c515c; +} +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #5dbecd; + background-color: #0b4953; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #5dbecd; + border-color: #5dbecd; +} + +.list-group-item-warning { + color: #f7ba59; + background-color: #7a4e09; +} +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #f7ba59; + background-color: #6e4608; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #f7ba59; + border-color: #f7ba59; +} + +.list-group-item-danger { + color: #ee8277; + background-color: #74261e; +} +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #ee8277; + background-color: #68221b; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #ee8277; + border-color: #ee8277; +} + +.list-group-item-light { + color: #bbbbbb; + background-color: #4f4f4f; +} +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #bbbbbb; + background-color: #474747; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #bbbbbb; + border-color: #bbbbbb; +} + +.list-group-item-dark { + color: #767676; + background-color: #1e1e1e; +} +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #767676; + background-color: #1b1b1b; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #767676; + border-color: #767676; +} + +.btn-close { + color: #fafafa; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fafafa'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + opacity: 0.5; +} +.btn-close:hover { + color: #fafafa; + opacity: 0.75; +} +.btn-close:focus { + box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25); + opacity: 1; +} +.btn-close:disabled, .btn-close.disabled { + opacity: 0.25; +} + +.btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.toast { + background-color: rgba(17, 17, 17, 0.85); + border: 1px solid rgba(250, 250, 250, 0.1); + box-shadow: 0 0.5rem 1rem rgba(17, 17, 17, 0.15); +} + +.toast-header { + color: #9e9e9e; + background-color: rgba(17, 17, 17, 0.85); + border-bottom: 1px solid rgba(250, 250, 250, 0.05); +} + +.modal-content { + background-color: #2f2f2f; + border: 1px solid rgba(250, 250, 250, 0.2); +} + +.modal-backdrop { + background-color: #111; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: 0.85; +} + +.modal-header { + border-bottom: 1px solid #515151; +} + +.modal-footer { + border-top: 1px solid #515151; +} + +.tooltip { + opacity: 0; +} +.tooltip.show { + opacity: 0.9; +} + +.bs-tooltip-top .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + border-top-color: #fafafa; +} + +.bs-tooltip-end .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + border-right-color: #fafafa; +} + +.bs-tooltip-bottom .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + border-bottom-color: #fafafa; +} + +.bs-tooltip-start .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + border-left-color: #fafafa; +} + +.tooltip-inner { + color: #111; + background-color: #fafafa; +} + +.popover { + background-color: #111; + border: 1px solid rgba(250, 250, 250, 0.2); +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + border-color: transparent; + border-style: solid; +} + +.bs-popover-top > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + border-top-color: rgba(250, 250, 250, 0.25); +} +.bs-popover-top > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-top-color: #111; +} + +.bs-popover-end > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + border-right-color: rgba(250, 250, 250, 0.25); +} +.bs-popover-end > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-right-color: #111; +} + +.bs-popover-bottom > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + border-bottom-color: rgba(250, 250, 250, 0.25); +} +.bs-popover-bottom > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-bottom-color: #111; +} +.bs-popover-bottom .popover-header::before, +.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + border-bottom: 1px solid #1f1f1f; +} + +.bs-popover-start > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + border-left-color: rgba(250, 250, 250, 0.25); +} +.bs-popover-start > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-left-color: #111; +} + +.popover-header { + background-color: #1f1f1f; + border-bottom: 1px solid rgba(250, 250, 250, 0.2); +} + +.popover-body { + color: #e1e1e1; +} + +.carousel-control-prev, +.carousel-control-next { + color: #fafafa; + opacity: 0.5; +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fafafa; + opacity: 0.9; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fafafa'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fafafa'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.carousel-indicators [data-bs-target] { + background-color: #111; + opacity: 0.5; +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + color: #111; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #fafafa; +} +.carousel-dark .carousel-caption { + color: #fafafa; +} + +.offcanvas { + background-color: #2f2f2f; +} + +.offcanvas-backdrop { + background-color: #111; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.85; +} + +.offcanvas-start { + border-right: 1px solid rgba(250, 250, 250, 0.2); +} + +.offcanvas-end { + border-left: 1px solid rgba(250, 250, 250, 0.2); +} + +.offcanvas-top { + border-bottom: 1px solid rgba(250, 250, 250, 0.2); +} + +.offcanvas-bottom { + border-top: 1px solid rgba(250, 250, 250, 0.2); +} + +.placeholder { + background-color: currentColor; + opacity: 0.5; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #fafafa 55%, rgba(255, 255, 255, 0.8) 75%, #fafafa 95%); + mask-image: linear-gradient(130deg, #fafafa 55%, rgba(255, 255, 255, 0.8) 75%, #fafafa 95%); +} + +.link-primary { + color: #375a7f; +} +.link-primary:hover, .link-primary:focus { + color: #2c4866; +} + +.link-secondary { + color: #626262; +} +.link-secondary:hover, .link-secondary:focus { + color: #4e4e4e; +} + +.link-success { + color: #00bc8c; +} +.link-success:hover, .link-success:focus { + color: #33c9a3; +} + +.link-info { + color: #17a2b8; +} +.link-info:hover, .link-info:focus { + color: #128293; +} + +.link-warning { + color: #f39c12; +} +.link-warning:hover, .link-warning:focus { + color: #f5b041; +} + +.link-danger { + color: #e74c3c; +} +.link-danger:hover, .link-danger:focus { + color: #b93d30; +} + +.link-light { + color: #9e9e9e; +} +.link-light:hover, .link-light:focus { + color: #7e7e7e; +} + +.link-dark { + color: #3b3b3b; +} +.link-dark:hover, .link-dark:focus { + color: #2f2f2f; +} + +.vr { + background-color: currentColor; + opacity: 0.1; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(17, 17, 17, 0.15) !important; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(17, 17, 17, 0.075) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(17, 17, 17, 0.175) !important; +} + +.border { + border: 1px solid #515151 !important; +} + +.border-top { + border-top: 1px solid #515151 !important; +} + +.border-end { + border-right: 1px solid #515151 !important; +} + +.border-bottom { + border-bottom: 1px solid #515151 !important; +} + +.border-start { + border-left: 1px solid #515151 !important; +} + +.border-primary { + border-color: #375a7f !important; +} + +.border-secondary { + border-color: #626262 !important; +} + +.border-success { + border-color: #00bc8c !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #f39c12 !important; +} + +.border-danger { + border-color: #e74c3c !important; +} + +.border-light { + border-color: #9e9e9e !important; +} + +.border-dark { + border-color: #3b3b3b !important; +} + +.border-white { + border-color: #fafafa !important; +} + +.border-black { + border-color: #111 !important; +} + +.text-muted { + --bs-text-opacity: 1; + color: #9e9e9e !important; +} + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(250, 250, 250, 0.5) !important; +} + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(17, 17, 17, 0.5) !important; +} + +.bg-black { + --bs-bg-opacity: 1; + background-color: #111 !important; +} + +body::-moz-selection { + color: #cfcfcf; + background: rgba(23, 162, 184, 0.5); +} + +body::selection { + color: #cfcfcf; + background: rgba(23, 162, 184, 0.5); +} + +/*# sourceMappingURL=bootstrap-nightfall.css.map */
\ No newline at end of file diff --git a/view/theme/redbasic/schema/dark.css b/view/theme/redbasic/schema/dark.css index bf55fec72..e7049a1c5 100644 --- a/view/theme/redbasic/schema/dark.css +++ b/view/theme/redbasic/schema/dark.css @@ -157,6 +157,10 @@ option { color:#fff !important; } +.dropdown-item { + color: $font_colour; +} + a.btn, aside a { font-weight: 400 !important; } @@ -164,7 +168,7 @@ a.btn, aside a { .btn { background-color: #1e1e1e; border-color: #222; - color: #ccc; + color: $font_colour; text-shadow: none; box-shadow: none; } @@ -181,7 +185,7 @@ a.btn, aside a { } .btn-primary, input#event-submit, input#rmagic-submit-button, input#lostpass-submit-button { - background-color: #337AB7; + background-color: #20537E; color: #FFF; } @@ -192,8 +196,8 @@ a.btn, aside a { } .btn-success { - color: #FFF !important; - background-color: #5CB85C !important; + color: #ccc !important; + background-color: #336A33 !important; border-color: #4CAE4C !important; } @@ -216,7 +220,7 @@ a.btn, aside a { } .btn-danger, form#chat-destroy > input { - background-color: #D9534F !important; + background-color: #B22A26 !important; border-color: #D43F3A !important; color: #FFF !important; } diff --git a/view/tpl/login.tpl b/view/tpl/login.tpl index cc4616b16..ead524193 100644 --- a/view/tpl/login.tpl +++ b/view/tpl/login.tpl @@ -1,13 +1,13 @@ <form action="{{$dest_url}}" id="{{$form_id}}" method="post" > <input type="hidden" name="auth-params" value="login" /> - <div id="login-main" class="d-grid gap-2"> + <div class="login-wrapper d-grid gap-2"> {{include file="field_input.tpl" field=$lname}} {{include file="field_password.tpl" field=$lpassword}} {{include file="field_checkbox.tpl" field=$remember_me}} <button type="submit" name="submit" class="btn btn-primary">{{$login}}</button> - {{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" id="register-link" class="float-end">{{$register.desc}}</a>{{/if}} - {{if $lostlink}}<a href="lostpass" title="{{$lostpass}}" id="lost-password-link" >{{$lostlink}}</a>{{/if}} -<hr> + {{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" class="register-link float-end">{{$register.desc}}</a>{{/if}} + {{if $lostlink}}<a href="lostpass" title="{{$lostpass}}" class="lost-pass-link">{{$lostlink}}</a>{{/if}} + <hr> <a href="rmagic" class="btn btn-outline-success">{{$remote_login}}</a> </div> {{foreach $hiddens as $k=>$v}} diff --git a/view/tpl/navbar_default.tpl b/view/tpl/navbar_default.tpl index 8d6d5dfd7..0dccd4404 100644 --- a/view/tpl/navbar_default.tpl +++ b/view/tpl/navbar_default.tpl @@ -1,23 +1,5 @@ <nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark"> <div class="container-fluid flex-nowrap"> - {{if $nav.login && !$userinfo}} - <div class="d-lg-none pt-1 pb-1"> - {{if $nav.loginmenu.1.4}} - <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-bs-toggle="modal" data-bs-target="#nav-login"> - {{$nav.loginmenu.1.1}} - </a> - {{else}} - <a class="btn btn-primary btn-sm text-white" href="login" title="{{$nav.loginmenu.1.3}}"> - {{$nav.loginmenu.1.1}} - </a> - {{/if}} - {{if $nav.register}} - <a class="btn btn-warning btn-sm text-dark" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}" > - {{$nav.register.1}} - </a> - {{/if}} - </div> - {{/if}} {{if $userinfo}} <div class="d-flex" style="max-width: 50%"> <div class="dropdown"> @@ -83,8 +65,9 @@ {{/if}} {{/if}} </div> + {{else}} + <div id="banner" class="navbar-text d-lg-none">{{$banner}}</div> {{/if}} - <div class="navbar-toggler-right"> {{if $nav.help.6}} <button id="context-help-btn" class="navbar-toggler border-0" type="button" onclick="contextualHelp(); return false;"> @@ -179,6 +162,25 @@ </nav> <div class="offcanvas offcanvas-end" tabindex="-1" id="app-bin" aria-labelledby="app-bin-label"> <div class="offcanvas-header"> + {{if $nav.login && !$userinfo}} + <div class="d-lg-none pt-1 pb-1"> + {{if $nav.loginmenu.1.4}} + <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-bs-toggle="modal" data-bs-target="#nav-login"> + {{$nav.loginmenu.1.1}} + </a> + {{else}} + <a class="btn btn-primary btn-sm text-white" href="login" title="{{$nav.loginmenu.1.3}}"> + {{$nav.loginmenu.1.1}} + </a> + {{/if}} + {{if $nav.register}} + <a class="btn btn-warning btn-sm text-dark" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}" > + {{$nav.register.1}} + </a> + {{/if}} + </div> + <div class="d-lg-flex"></div> + {{else}} <div class="lh-1" id="app-bin-label"> {{if $name}} <img src="{{$thumb}}" class="menu-img-2"> @@ -189,7 +191,10 @@ {{/if}} </div> <i id="app-bin-trash" class="fa fa-2x fa-fw fa-trash-o d-none"></i> + {{/if}} + <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> + </div> <div class="offcanvas-body pt-0"> {{if $channel_apps.0}} diff --git a/view/tpl/pdledit_gui.tpl b/view/tpl/pdledit_gui.tpl new file mode 100644 index 000000000..8c4ca3e50 --- /dev/null +++ b/view/tpl/pdledit_gui.tpl @@ -0,0 +1,243 @@ +<div id="pdledit_gui_offcanvas" class="offcanvas offcanvas-lg offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px"> + <div id="pdledit_gui_offcanvas_body" class="offcanvas-body"></div> + <div class="offcanvas-header"> + <div class="offcanvas-title h3"></div> + <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> + </div> +</div> + +<div id="pdledit_gui_offcanvas_edit" class="offcanvas offcanvas-lg offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px"> + <div id="pdledit_gui_offcanvas_edit_body" class="offcanvas-body"> + <textarea id="pdledit_gui_offcanvas_edit_textarea" class="form-control font-monospace h-100"></textarea> + </div> + <div class="offcanvas-header"> + <button id="pdledit_gui_offcanvas_edit_submit" type="button" class="btn btn-primary">Submit</button> + <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> + </div> +</div> + +<div id="pdledit_gui_offcanvas_submit" class="offcanvas offcanvas-lg offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px"> + <div id="pdledit_gui_offcanvas_submit_body" class="offcanvas-body"></div> + <div class="offcanvas-header"> + <button id="pdledit_gui_offcanvas_submit_submit" type="button" class="btn btn-primary">Submit</button> + <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> + </div> +</div> + +<ul class="nav position-fixed bottom-0 start-50 bg-light translate-middle-x text-uppercase" style="min-width: 300px"> + <li class="nav-item"> + <a id="pdledit_gui_modules" class="nav-link" href="#">Modules</a> + </li> + <li class="nav-item"> + <a id="pdledit_gui_templates" class="nav-link" href="#">Templates</a> + </li> + <li class="nav-item"> + <a id="pdledit_gui_items" class="nav-link" href="#">Items</a> + </li> + <li class="nav-item"> + <a id="pdledit_gui_src" class="nav-link" href="#">Source</a> + </li> + {{if $module_modified}} + <li class="nav-item"> + <a id="pdledit_gui_reset" class="nav-link" href="#">Reset</a> + </li> + {{/if}} + <li class="nav-item"> + <a id="pdledit_gui_save" class="nav-link" href="#">Apply</a> + </li> +</ul> + +<script> + $(document).ready(function() { + let poi; + let regions = []; + let content_regions = []; + let page_src = atob('{{$page_src}}'); + + let offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas')); + let edit_offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas_edit')); + let submit_offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas_submit')); + + {{foreach $content_regions as $content_region}} + regions.push('{{$content_region.0}}'); + content_regions.push('{{$content_region.1}}'); + + let sortable_{{$content_region.1}} = document.getElementById('{{$content_region.1}}'); + new Sortable(sortable_{{$content_region.1}}, { + group: 'shared', + handle: '.pdledit_gui_item_handle', + animation: 150 + }); + {{/foreach}} + + let sortable_items = document.getElementById('pdledit_gui_offcanvas_body'); + new Sortable(sortable_items, { + group: { + name: 'shared', + pull: 'clone', + put: false + }, + sort: false, + handle: '.pdledit_gui_item_handle', + animation: 150, + onEnd: function (e) { + $(e.item).find('button').removeClass('disabled'); + } + }); + + $(document).on('click', '.pdledit_gui_item_src', function(e) { + poi = this.closest('.pdledit_gui_item'); + let src = atob(poi.dataset.src); + $('#pdledit_gui_offcanvas_edit_textarea').val(src); + $('#pdledit_gui_offcanvas_edit_textarea').bbco_autocomplete('comanche'); + edit_offcanvas.show(); + }); + + $(document).on('click', '.pdledit_gui_item_remove', function(e) { + poi = this.closest('.pdledit_gui_item'); + $(poi).remove(); + }); + + $(document).on('click', '#pdledit_gui_offcanvas_edit_submit', function(e) { + let src = $('#pdledit_gui_offcanvas_edit_textarea').val(); + + if (poi) { + poi.dataset.src = btoa(src); + } + else { + $.post( + 'pdledit_gui', + { + 'save_src': 1, + 'module': '{{$module}}', + 'src': $('#pdledit_gui_offcanvas_edit_textarea').val() + } + ) + .done(function(data) { + if (data.success) { + window.location.href = 'pdledit_gui/' + data.module; + } + }); + } + + edit_offcanvas.hide(); + }); + + $(document).on('click', '#pdledit_gui_offcanvas_submit_submit', function(e) { + if ($('#pdledit_gui_templates_form').length) { + $.post( + 'pdledit_gui', + { + 'save_template': 1, + 'module': '{{$module}}', + 'data': $('#pdledit_gui_templates_form').serializeArray() + } + ) + .done(function(data) { + if (data.success) { + window.location.href = 'pdledit_gui/' + data.module; + } + }); + } + + submit_offcanvas.hide(); + }); + + $(document).on('click', '#pdledit_gui_src', function(e) { + e.preventDefault(); + poi = null; // this is important! + + let obj = {}; + + content_regions.forEach(function (content_region, i) { + let data_src = []; + $('#' + content_region + ' > .card').each(function () { + data_src.push(atob(this.dataset.src)); + }); + obj[regions[i]] = data_src; + }); + + for (let [region, entries] of Object.entries(obj)) { + let region_pdl = ''; + + entries.forEach(function (entry) { + region_pdl = region_pdl.concat(entry + "\r\n"); + }); + + let regex_str = '\\[region=' + region + '\\](.*?)\\[\\/region\\]'; + let replace_str = '[region=' + region + ']' + "\r\n" + region_pdl + "\r\n" + '[/region]' + let regex = new RegExp(regex_str, 'ism'); + + page_src = page_src.replace(regex, replace_str); + } + + $('#pdledit_gui_offcanvas_edit_textarea').val(page_src); + $('#pdledit_gui_offcanvas_edit_textarea').bbco_autocomplete('comanche'); + edit_offcanvas.show(); + }); + + $(document).on('click', '#pdledit_gui_items', function(e) { + e.preventDefault(); + $('#pdledit_gui_offcanvas_body').html(atob('{{$items}}')); + offcanvas.show(); + }); + + $(document).on('click', '#pdledit_gui_templates', function(e) { + e.preventDefault(); + $('#pdledit_gui_offcanvas_submit_body').html(atob('{{$templates}}')); + + submit_offcanvas.show(); + }); + + $(document).on('click', '#pdledit_gui_modules', function(e) { + e.preventDefault(); + $('#pdledit_gui_offcanvas_body').html(atob('{{$modules}}')); + offcanvas.show(); + }); + + $(document).on('click', '#pdledit_gui_save', function(e) { + e.preventDefault(); + + let obj = {}; + + content_regions.forEach(function (content_region, i) { + let data_src = []; + $('#' + content_region + ' > .card').each(function () { + data_src.push(this.dataset.src); + }); + obj[regions[i]] = data_src; + }); + + $.post( + 'pdledit_gui', + { + 'save': 1, + 'module': '{{$module}}', + 'data': JSON.stringify(obj) + } + ) + .done(function(data) { + if (data.success) { + window.location.href = 'pdledit_gui/' + data.module; + } + }); + }); + + $(document).on('click', '#pdledit_gui_reset', function(e) { + e.preventDefault(); + $.post( + 'pdledit_gui', + { + 'reset': 1, + 'module': '{{$module}}' + } + ) + .done(function(data) { + if (data.success) { + window.location.href = 'pdledit_gui/' + data.module; + } + }); + }); + + }); +</script> diff --git a/view/tpl/pdledit_gui_item.tpl b/view/tpl/pdledit_gui_item.tpl new file mode 100644 index 000000000..9d0095ed4 --- /dev/null +++ b/view/tpl/pdledit_gui_item.tpl @@ -0,0 +1,18 @@ +<div class="pdledit_gui_item card mb-3" data-src="{{$entry.src}}"> + <div class="card-header d-flex justify-content-between"> + <span class="text-uppercase">{{$entry.name}}</span> + <div class="badge rounded-pill{{if $entry.type === 'widget'}} bg-info text-dark{{/if}}{{if $entry.type === 'content'}} bg-primary{{/if}}{{if $entry.type === 'menu'}} bg-secondary{{/if}}{{if $entry.type === 'block'}} bg-warning text-dark{{/if}}"> + {{$entry.type}} + </div> + </div> + <div class="card-body"> + {{if $entry.desc}} + <div class="mb-3 text-muted">{{$entry.desc}}</div> + {{/if}} + {{if $entry.type !== 'content'}} + <button type="button" class="btn btn-sm btn-outline-primary pdledit_gui_item_src{{if $disable_controls}} disabled{{/if}}">Edit</button> + <button type="button" class="btn btn-sm btn-outline-danger pdledit_gui_item_remove{{if $disable_controls}} disabled{{/if}}">Remove</button> + <i class="fa fa-fw fa-arrows-alt m-2 float-end cursor-pointer pdledit_gui_item_handle"></i> + {{/if}} + </div> +</div> diff --git a/view/tpl/pdledit_gui_templates.tpl b/view/tpl/pdledit_gui_templates.tpl new file mode 100644 index 000000000..0f3d8a7b6 --- /dev/null +++ b/view/tpl/pdledit_gui_templates.tpl @@ -0,0 +1,11 @@ +<form id="pdledit_gui_templates_form"> + {{foreach $templates as $template}} + <div class="form-check mb-2"> + <input class="form-check-input" type="radio" name="template" id="id_template_{{$template.name}}" value="{{$template.name}}" {{if $template.name == $active}} checked{{/if}}> + <label class="form-check-label" for="id_template_{{$template.name}}"> + {{$template.name}} + </label> + <small class="text-muted">{{$template.desc}}</small> + </div> + {{/foreach}} +</form> diff --git a/view/tpl/photo_album_portfolio.tpl b/view/tpl/photo_album_portfolio.tpl index 1635e0ae1..e939ac3e1 100644 --- a/view/tpl/photo_album_portfolio.tpl +++ b/view/tpl/photo_album_portfolio.tpl @@ -1,7 +1,7 @@ {{if isset($mode) && $mode == 'orbit'}} <div class="row"> <div class="orbit small-12 medium-9 large-9 columns" id="photo-album-contents-{{$album_id}}" role="region" aria-label="portfolioOrbit-{{$album_id}}" data-orbit data-options="animInFromLeft:fade-in; animInFromRight:fade-in; animOutToLeft:fade-out; animOutToRight:fade-out;"> - + <ul class="orbit-container"> <button class="orbit-previous"><span class="show-for-sr">Previous Slide</span>◀︎</button> <button class="orbit-next"><span class="show-for-sr">Next Slide</span>▶︎</button> diff --git a/view/tpl/settings.tpl b/view/tpl/settings.tpl index 9b23d7d82..2c617834a 100644 --- a/view/tpl/settings.tpl +++ b/view/tpl/settings.tpl @@ -26,6 +26,10 @@ {{include file="field_input.tpl" field=$photo_path}} {{include file="field_input.tpl" field=$attach_path}} {{include file="field_input.tpl" field=$expire}} + + {{include file="field_textarea.tpl" field=$message_filter_excl}} + {{include file="field_textarea.tpl" field=$message_filter_incl}} + {{if $basic_addon}} {{$basic_addon}} {{/if}} diff --git a/view/tpl/suggest_widget.tpl b/view/tpl/suggest_widget.tpl index 7b9afa668..d4a5a56f9 100644 --- a/view/tpl/suggest_widget.tpl +++ b/view/tpl/suggest_widget.tpl @@ -6,5 +6,5 @@ {{/foreach}} {{/if}} <div class="clear"></div> -<div class="suggest-widget-more"><a href="suggest">{{$more}}</a></div> +<div class="suggest-widget-more"><a href="directory?f=&suggest=1">{{$more}}</a></div> </div> |