+
+ Copyright (C) Rodolfo Berrios A. All rights reserved.
+
+ BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
+ http://chevereto.com/license
+
+ --------------------------------------------------------------------- */
+
+$route = function ($handler) {
+ try {
+ if (!CHV\Login::isAdmin()) {
+ $this->template = 'request-denied';
+ return;
+ }
+ // Allow 3 levels only -> /importer-jobs/X/process
+ if ($handler->isRequestLevel(4)) {
+ return $handler->issue404();
+ }
+ if (is_null($handler->request[0]) || is_null($handler->request[1])) {
+ return $handler->issue404();
+ }
+ $filepath = G_ROOT_PATH . sprintf('app/importer/jobs/%1$s/%2$s.txt', $handler->request[0], $handler->request[1]);
+ if (!file_exists($filepath)) {
+ return $handler->issue404();
+ }
+ if (!headers_sent()) {
+ header('Content-Type: text/plain');
+ }
+ readfile($filepath);
+ exit;
+ } catch (Exception $e) {
+ G\exception_to_error($e);
+ }
+};
diff --git a/app/routes/route.json.php b/app/routes/route.json.php
index e97a25f..e08329d 100644
--- a/app/routes/route.json.php
+++ b/app/routes/route.json.php
@@ -34,6 +34,12 @@ $route = function ($handler) {
$doing = 'deny';
}
+ if (in_array($doing, ['importAdd', 'importStats', 'importProcess', 'importEdit', 'importDelete']) && $logged_user['is_admin'] == false) {
+ throw new Exception(_s('Request denied'), 400);
+ } else {
+ $import = new CHV\Import();
+ }
+
switch ($doing) {
case 'deny':
throw new Exception(_s('Request denied'), 403);
@@ -1314,11 +1320,91 @@ $route = function ($handler) {
} catch (Exception $e) {
throw new Exception('Error: ' . $e->getMessage());
}
- break;
+ break;
+ // Adds the importer job (path+options)
+ case 'importAdd':
+ if ($_REQUEST['path'] == false) {
+ throw new Exception('Missing path parameter', 100);
+ }
+ $import->path = $_REQUEST['path'];
+ if ($_REQUEST['options'] != false) {
+ $import->options = $_REQUEST['options'];
+ }
+ $import->add();
+ $import->get();
+ $json_array['status_code'] = 200;
+ $json_array['import'] = $import->parsedImport;
+ break;
+ // Common operations
+ case 'importStats':
+ case 'importProcess':
+ case 'importEdit':
+ case 'importDelete':
+ case 'importReset':
+ case 'importResume':
+ if ($_REQUEST['id'] == false) {
+ throw new Exception('Missing id parameter', 100);
+ }
+ $import->id = (int) $_REQUEST['id'];
+ $import->get();
+ break;
+ case 'toggleTone':
+ if (!$logged_user) {
+ throw new Exception('Invalid request', 403);
+ }
+ CHV\User::update($logged_user['id'], ['is_dark_mode' => $logged_user['is_dark_mode'] ? 0 : 1]);
+ $json_array['status_code'] = 200;
+ $logged_user = CHV\User::getSingle($logged_user['id']);
+ $json_array['is_dark_mode'] = (bool) $logged_user['is_dark_mode'];
+ break;
default: // EX X
- throw new Exception(!G\check_value($_REQUEST['action']) ? 'empty action' : 'invalid action', !G\check_value($_REQUEST['action']) ? 0 : 1);
- break;
+ throw new Exception(!G\check_value($doing) ? 'empty action' : 'invalid action', !G\check_value($doing) ? 0 : 1);
+ break;
+ }
+ if (isset($import->id)) {
+ switch ($doing) {
+ // Check the importer stats (id)
+ case 'importStats':
+ $json_array['status_code'] = 200;
+ $json_array['import'] = $import->parsedImport;
+ break;
+ // Issue/Resume import operation (id+thread)
+ case 'importProcess':
+ session_write_close();
+ $import->thread = (int) $_REQUEST['thread'] ?: 1;
+ $import->process();
+ $json_array['status_code'] = 200;
+ break;
+ // Edit import job (id,values)
+ case 'importEdit':
+ if ($_REQUEST['values'] == false) {
+ throw new Exception('Missing values parameter', 101);
+ }
+ if (is_array($_REQUEST['values']) == false) {
+ throw new Exception('Expecting array values', 102);
+ }
+ $import->edit($_REQUEST['values']);
+ $import->get();
+ $json_array['import'] = $import->parsedImport;
+ $json_array['status_code'] = 200;
+ break;
+ case 'importReset':
+ $import->reset();
+ $json_array['import'] = $import->parsedImport;
+ $json_array['status_code'] = 200;
+ break;
+ case 'importResume':
+ $import->resume();
+ $json_array['import'] = $import->parsedImport;
+ $json_array['status_code'] = 200;
+ break;
+ case 'importDelete':
+ $import->delete();
+ $json_array['status_code'] = 200;
+ $json_array['import'] = $import->parsedImport;
+ break;
+ }
}
// Inject any missing status_code
if (isset($json_array['success']) and !isset($json_array['status_code'])) {
diff --git a/app/themes/Peafowl/footer.php b/app/themes/Peafowl/footer.php
index 85bce37..703c039 100644
--- a/app/themes/Peafowl/footer.php
+++ b/app/themes/Peafowl/footer.php
@@ -52,11 +52,11 @@ if (CHV\Login::isAdmin()) {
-
Upgrade to premium
-
💎👏💖
-
Upgrading to paid Chevereto allows you to enjoy more features like multiple external storage servers, bulk content importer, manage banners, content likes, user followers, social login signup and more. It also comes with support in case you need help.
-
👍🏾 Keep in mind that Chevereto is made by a single developer. Your purchase helps to sustain ongoing development of this software.
-
You can upgrade now by pasting your license key. If you don't have one you can buy it now with PayPal, AliPay, UnionPay and cryptocurrency.
+
Upgrade Chevereto
+
⭐⭐⭐
+
Upgrading to paid Chevereto allows you to get more features like multiple external storage servers, manage banners, content likes, user followers, social login signup, etc. Support included.
+
Keep in mind that Chevereto is made by a single developer, your purchase helps to sustain ongoing development of this software.
+
You can upgrade now by pasting your license key. If you don't have one you can buy it now with PayPal, AliPay, UnionPay and crypto.
- 💎 Upgrade
+ ⭐ Upgrade
diff --git a/app/themes/Peafowl/snippets/listing.php b/app/themes/Peafowl/snippets/listing.php
index 10e8127..940a35a 100644
--- a/app/themes/Peafowl/snippets/listing.php
+++ b/app/themes/Peafowl/snippets/listing.php
@@ -34,7 +34,7 @@ foreach ($tabs as $tab) {
parse_str($QS, $current_page_qs);
unset($current_page_qs['lang']); // Get rid of any ?lang=
$current_url = $currentUrlPath . '?' . http_build_query($current_page_qs);
- $page = intval($_GET['page'] ? $_GET['page'] : $current_page_qs['page'] ?: 1);
+ $page = intval(($_GET['page'] ? $_GET['page'] : $current_page_qs['page']) ?: 1);
$pages = [];
foreach (['prev', 'next'] as $v) {
$params = $current_page_qs;
diff --git a/app/themes/Peafowl/snippets/modal_login.php b/app/themes/Peafowl/snippets/modal_login.php
deleted file mode 100644
index bedd97c..0000000
--- a/app/themes/Peafowl/snippets/modal_login.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
sign up right now.", G\get_base_url("signup"));
- }
- ?>
-
-
\ No newline at end of file
diff --git a/app/themes/Peafowl/style.css b/app/themes/Peafowl/style.css
index 7b08ae7..4084a8d 100644
--- a/app/themes/Peafowl/style.css
+++ b/app/themes/Peafowl/style.css
@@ -2331,6 +2331,7 @@ body.full--wh {
[data-content="dashboard-imports"] [data-status="paused"] [data-action="pause"],
[data-content="dashboard-imports"] [data-status="canceled"] [data-action="pause"],
+[data-content="dashboard-imports"] [data-status="completed"] [data-action="pause"],
[data-content="dashboard-imports"] [data-status="queued"] [data-action="pause"],
[data-content="dashboard-imports"] [data-status="canceled"] [data-action="cancel"],
[data-content="dashboard-imports"] [data-status="canceled"] [data-target="modal-process-import"],
diff --git a/app/themes/Peafowl/style.min.css b/app/themes/Peafowl/style.min.css
index e9f76c0..793638b 100644
--- a/app/themes/Peafowl/style.min.css
+++ b/app/themes/Peafowl/style.min.css
@@ -1 +1 @@
-body{padding-top:65px;padding-bottom:20px;min-height:100%;background:#fefefe;position:relative;font-family:Helvetica,Arial,sans-serif;font-size:14px}body.landing{min-height:500px;height:100%;padding:0;margin:0}.phone body.landing{min-height:auto}.js body.landing{overflow:hidden;opacity:0}.js body.landing.load{-webkit-transition:-webkit-transform .6s ease,opacity 350ms linear;-webkit-transition:opacity 350ms linear,-webkit-transform .6s ease;transition:opacity 350ms linear,-webkit-transform .6s ease;transition:transform .6s ease,opacity 350ms linear;transition:transform .6s ease,opacity 350ms linear,-webkit-transform .6s ease;opacity:1}#home-cover-content,#index .flex-center{opacity:0}.js body#index.load .flex-center,.js body.load #home-cover-content{transition:all .6s ease;transition-delay:150ms;opacity:1}.js body.loaded{overflow:auto}body.split{margin-top:0;padding-top:0}.content-width.fluid,.fluid .content-width{width:100%}@media (min-width:992px){.content-width.wide{max-width:none}}html.device-mobile .device-mobile--hide{display:none!important}html.device-nonmobile .device-nonmobile--hide{display:none!important}body#upload{padding-top:50px;padding-bottom:0;background-color:transparent}.image-viewer{text-align:center;background:#f7f7f7;position:relative;min-height:72px;overflow:hidden}.image-viewer-main{display:inline-block;vertical-align:middle}.image-viewer-container{display:block;margin:0 auto;position:relative}.image-viewer-container img{display:block;margin:0 auto;max-height:100%;width:auto}.js .image-viewer-container img{position:absolute;width:100%;height:auto}.image-viewer .btn-download{position:absolute;top:20px;right:20px;z-index:1}.image-viewer-navigation a{z-index:3}.image-viewer-navigation a:hover{background-color:#aaa;background-color:rgba(0,0,0,.3)}#image-viewer-loading,.viewer-loader{width:30px;height:30px;position:absolute;left:50%;top:50%;margin-left:-15px;margin-top:-15px;border-radius:100%;background:rgba(17,17,17,.9)}#image-viewer-loader{position:absolute;background:rgba(0,0,0,.5);border:2px solid rgba(255,255,255,.7);color:rgba(255,255,255,.9);font-size:13px;left:50%;top:50%;padding:8px 14px;border-radius:100px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);cursor:pointer;display:none}#image-viewer-loader:hover{background:rgba(0,0,0,.6);border-color:rgba(255,255,255,.8);color:#fff}#image-viewer-loader .btn-icon{position:relative;top:1px;font-size:12px}#image .top-bar-placeholder,.image-viewer.full-viewer{background:#111}.top-bar-white #image .top-bar-placeholder,.top-bar-white .image-viewer.full-viewer{background:#fff}.btn-like .btn.btn-liked,.btn-like .btn.btn-unliked{display:none}.btn-like[data-liked="0"] .btn-unliked{display:inline-block}.btn-like[data-liked="1"] .btn-liked{display:inline-block}.btn-follow .btn.btn-followed,.btn-follow .btn.btn-unfollowed{display:none}.btn-follow[data-followed="0"] .btn-unfollowed{display:inline-block}.btn-follow[data-followed="1"] .btn-followed{display:inline-block}#fullscreen-uploader-mask{z-index:99}.phone #fullscreen-uploader-mask{z-index:400}#anywhere-upload{z-index:400;scroll:auto;-webkit-overflow-scrolling:touch;-webkit-transition:transform .3s ease;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}#anywhere-upload.hidden-visibility iframe{visibility:hidden}.phone #anywhere-upload{z-index:500;height:100vh!important}#upload #anywhere-upload{overflow:hidden!important;height:auto!important}#upload .upload-box .upload-box-allowed-files,.phone .upload-box .upload-box-allowed-files{display:none}#upload .upload-box[data-queue-size="0"] .upload-box-allowed-files,.phone .upload-box[data-queue-size="0"] .upload-box-allowed-files{display:block}#upload .upload-box-allowed-files,.phone .upload-box-allowed-files{position:fixed;top:auto;left:0;right:0;text-align:center;bottom:10px}#anywhere-upload-paste{height:0;opacity:0;font-size:0}#anywhere-upload-paste *{display:none}.upload-box{border-bottom:0}.upload-box-queue{text-align:center;font-size:0;margin-top:35px;margin-bottom:35px}.upload-box-queue li{position:relative;text-align:center;display:inline-block;background:red;margin:5px;background:#efefef;-webkit-box-shadow:inset 0 2px 10px 0 rgba(0,0,0,.07);box-shadow:inset 0 2px 10px 0 rgba(0,0,0,.07)}.tone-dark .upload-box-queue li{background:#222}.upload-box-queue .block,.upload-box-queue li{border-radius:0}.ios .upload-box-queue .block,.ios .upload-box-queue li,.upload-box-queue .block.failed{border-radius:0}.upload-box-queue li,.upload-box-queue li.normal{width:110px;height:110px;font-size:14px;font-size:1rem}.upload-box-queue li.small{width:77px;height:77px;font-size:9px;font-size:.643rem}.upload-box-queue li.tiny{width:54px;height:54px;font-size:7px;font-size:.5rem}.upload-box-queue .block{width:100%;height:100%;top:0;left:0;overflow:hidden;position:absolute}.upload-box-queue a.image-link{display:none}.upload-box-queue .completed a.image-link{display:block;position:absolute;overflow:hidden;z-index:1;-webkit-transform:rotate(.000001deg)}.upload-box-queue .queue-item .block.edit,.upload-box-queue .queue-item .queue-item-button{display:block;position:absolute;cursor:pointer;z-index:100}.upload-box-queue .queue-item .queue-item-button .icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.upload-box-queue .queue-item.completed:hover .queue-item-button{display:none}.upload-box-queue .queue-item .queue-item-button{font-size:7px;width:21px;height:21px;line-height:23px;background:#fff;color:#333;border-radius:200px;left:-7px;-webkit-box-shadow:1px 1px 4px 0 rgba(0,0,0,.5);box-shadow:1px 1px 4px 0 rgba(0,0,0,.5)}.tone-dark .upload-box-queue .queue-item .queue-item-button{background:#333;color:#fff}.upload-box-queue .queue-item .queue-item-button.cancel{top:-7px}.upload-box-queue .queue-item .queue-item-button.edit{top:16px;font-size:9px}.upload-box-queue .big-icon{position:absolute;color:#dadada;font-size:5.36em;width:1em;height:1em;left:50%;top:50%;margin-left:-.5em;margin-top:-.5em;text-shadow:1px 1px 0 rgba(255,255,255,.9)}.tone-dark .upload-box-queue .big-icon{color:#444;text-shadow:1px 1px 0 rgba(0,0,0,.9)}.upload-box-queue .done,.upload-box-queue .preview{position:relative;overflow:hidden}.upload-box-queue .preview .canvas{position:absolute;top:50%;left:50%}.upload-box-queue .progress{position:absolute}.upload-box-queue .progress-bar,.upload-box-queue .progress-percent{height:100%}.upload-box-queue .uploading .progress-percent{display:block}.queue-item.uploading .block.edit,.queue-item.uploading .queue-item-button.edit,.queue-item.uploading.waiting .progress-percent{display:none}.upload-box-queue .progress-percent{font-family:arial,helvetica,sans-serif;font-size:2.86em;font-weight:400;color:#fff;text-shadow:2px 2px 10px rgba(0,0,0,.8);text-align:center;width:100%;height:1em;position:absolute;top:.86em;z-index:1;display:none}.upload-box-queue .progress-percent b{font-weight:700}.upload-box-queue .progress-percent span{font-size:.5em;font-weight:400;position:relative}.upload-box-queue .progress-bar{float:right;width:100%;display:none}.upload-box-queue .failed .result,.upload-box-queue .progress-bar{background:rgba(255,255,255,.65)}.upload-box-queue .uploading .progress-bar{display:block}.upload-box-queue .completed .result.done,.upload-box-queue .failed .result.failed{display:block}.upload-box-queue .result{position:absolute;z-index:1;display:none}.tone-dark .upload-box-queue .failed .result,.tone-dark .upload-box-queue .progress-bar{background:rgba(0,0,0,.65)}.upload-box-queue .result .icon{position:absolute;width:1em;font-size:3.429em;color:#fff;top:50%;left:50%;margin-top:-.5em;margin-left:-.5em;margin-left:-.5em;opacity:.92;text-shadow:none}.upload-box-queue .done .result .icon{text-shadow:2px 2px 6px rgba(0,0,0,.2)}.upload-box-queue .failed .result .icon{color:#e84c3d;font-size:3.429em}.upload-box-queue.queue-complete .cancel,.upload-box-queue.queue-complete .edit{display:none}#form-embed-toggle-combo,#uploaded-embed-toggle-combo{position:relative}#upload .top-bar{-webkit-box-shadow:none;box-shadow:none;border-bottom-color:transparent}#upload #anywhere-upload{background:0 0}#upload .upload-box{transform:none;position:static}body#upload [data-action=close-upload]{display:none!important}.upload-box.queueHasResults [data-action=cancel-upload],.upload-box.queueReady [data-action=close-upload],.upload-box.queueUploading [data-action=close-upload],.upload-box:not(.queueHasResults) [data-action=cancel-upload-remaining],.upload-box:not(.queueReady):not(.queueCompleted) [data-action=reset-upload],.upload-box:not(.queueUploading) [data-action^=cancel-upload],.upload-box:not([data-queue-size="0"]) [data-action=close-upload]{display:none}#background-cover{height:290px;background-color:#000;position:relative}.phone #background-cover{height:230px}#background-cover.no-background{background-color:#f9f9f9;background-image:none!important;padding:9px 0;height:auto;margin-top:50px}.tone-dark #background-cover.no-background{background:#101010}#background-cover-wrap{height:100%;overflow:hidden;position:relative}#background-cover .content-width{text-align:center}#change-background-cover{position:absolute;right:10px;bottom:10px}#user-background-upload{top:0;left:0;width:1px;height:1px}#background-cover-src{overflow:hidden;background-position:center center;background-size:cover}#background-cover .loading-placeholder,#background-cover-src{position:absolute;top:0;left:0;width:100%;height:100%}#background-cover .loading-placeholder{background:rgba(0,0,0,.8)}[data-privacy=public] .list-item-privacy{display:none}.list-item-thumbs li,.list-item-thumbs li a{display:block;height:auto;overflow:hidden}.list-item-thumbs li a{height:100%;background-size:cover;background-position:center center}.list-item-thumbs li img{width:100%;display:block}.input-copy{position:relative}.input-copy .btn-copy{font-size:10px;position:absolute;right:2px;top:8px;background:#fff;padding:0 4px;height:18px;line-height:18px;text-transform:uppercase;cursor:pointer;border-width:0 4px;border-style:solid;border-color:#fff;display:none}.input-copy .btn-copy:hover{background:#e5e5e5}.list-item-image-tools{position:absolute;right:0;top:0}.list-item.selected .list-item-image-tools li.tool-select .icon{color:#fff;background:#27ae60}.list-item-image-tools li{margin:2px;cursor:pointer;position:relative;height:2.4em;line-height:2.4em;font-size:1em;right:calc(-2.4em - 2px);transition:all .2s ease-in-out}.list-item .hover-display.list-item-image-tools{opacity:1}.list-item.selected li.tool-select,.list-item[data-flag=unsafe] li.tool-flag,html:not(.--idle) .list-item:hover .list-item-image-tools li{right:0}.list-item-image-tools li,.list-item-image-tools li *{display:block;color:inherit}.list-item-image-tools li span{float:right}.list-item-image-tools li .label{font-size:.86em}.list-item-image-tools li .btn-icon{font-size:1em}.list-item-image-tools li .label{text-transform:uppercase;padding-left:1em;padding-right:0;display:none;height:100%}.list-item-image-tools li:hover .label{display:block}.small-cols .list-item-image-tools li:hover .label{display:none}[data-flag=safe] li:hover .label-flag-safe,[data-flag=unsafe] li:hover .label-flag-unsafe{display:none}.unsafe-blur-on .list-item .list-item-thumbs li[data-flag=unsafe] a,.unsafe-blur-on [data-flag=unsafe] .image-container{filter:blur(5px);-webkit-filter:blur(5px);-webkit-transform:scale(1.04);transform:scale(1.04)}.unsafe-blur-on .list-item:hover .list-item-thumbs li[data-flag=unsafe] a,.unsafe-blur-on [data-flag=unsafe]:hover .image-container{filter:none;-webkit-filter:none}.list-item-image-tools li .btn-icon{width:2.4em;height:2.4em;line-height:2.4em;color:#fff;background:#000;background:rgba(0,0,0,.2);text-align:center}.list-item-image-tools li .label,.list-item-image-tools li:hover .btn-icon{color:#fff;background:rgba(0,0,0,.4)}.list-item.selected li.tool-select .btn-icon,[data-flag=unsafe] li.tool-flag .btn-icon{background:rgba(0,0,0,.4)}.list-item-album .tool-flag{display:none}.list-item-image-tools li .label{text-shadow:1px 1px 0 rgba(0,0,0,.1)}.list-item .list-item-avatar-cover,.list-item .list-item-avatar-cover>*{border-radius:100%}.list-item .list-item-avatar-cover{width:160px;height:160px;border:0;background-color:#e5e5e5;position:absolute;left:50%;top:50%;margin-top:-80px!important;margin-left:-80px!important;-webkit-transition:all .3s;transition:all .3s}.tone-dark .list-item .list-item-avatar-cover{background:#555}.list-item .list-item-avatar-cover>*{width:100px;height:100px}.list-item .list-item-avatar-cover img{height:auto;-webkit-box-shadow:2px 2px 2px rgba(0,0,0,.3);box-shadow:2px 2px 2px rgba(0,0,0,.3)}.list-item .list-item-avatar-cover .icon.empty{display:block;top:50%;position:relative;margin-top:-45px}.list-item .list-item-avatar-cover .icon.empty,.tone-dark .list-item-image .list-item-avatar-cover .icon.empty{color:#fff}.list-item-privacy{position:absolute;left:0;top:0;width:2.4em;height:2.4em;line-height:2.4em;color:#fff;text-shadow:1px 1px 5px rgba(0,0,0,.5);text-align:center}.tone-dark .list-item-privacy{background:rgba(0,0,0,.5);color:#fff}.list-item-like{color:#fff;position:absolute;right:0;bottom:0}.list-item-like .btn-like{font-size:20px;padding:10px;cursor:pointer;display:none;opacity:.8}.list-item-like .btn-like.btn-liked,.list-item-like .btn-like:hover{opacity:1}[data-liked="0"] .list-item-like .btn-like.btn-unliked{display:block}[data-liked="1"] .list-item-like .btn-like.btn-liked{display:block}.list-item-play-gif,.list-item-play-gif *{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAACdCAMAAAAgwM7pAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAcVQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///9///+///+///+///+///+///9///8///1///5///9///9///u///f///+///+///+///9///q///z///9///+///9///8///9///+///+///+///+///8///w///9///+///3///8///9///2///9///7///t///+///8///b///9///9///M///+///y//+A///9///r///7///+///7///3///+///8//+////8//+q///8///+///z///+///+///9///6///m///7///j///7///9///+///+///9///9///6///+///+///+///7///V///+///9///5///9///+///+///8///9///6///8///+///9///4///+///+///+///+///4///9///5///+///v///7///9///8///o///9///9///8///6///y///9///0///+///x///+///6////////////vBUIqgAAAJd0Uk5TABQmNkZSWF5iCipmAiRKZAQuXCwYVDoMUBpgIiil+enVw7GJUBoujZkOCPf/45sMFnDPbEqhtcfZ714Qi9EgWI8adDgO21oGbmoEyxICcgw87Toe+1QEVgJg/RTru344CkIIRnrx55VmMNf1wT4GyaMoh+HlTJcyYt+pJrfTzd0ipyqtEECTXAp8aGQ2FIMWxRKzLrhG/4D2XIEAAAQlSURBVHiczZjnWxNBEMYPCCThgNC7IIKCyaCIdJCmgIooYkFCEwsqTRRQQREb9l7u7/UuuZhccm1vX5+H99Ne2d/d7uzOzowgmCgpOcWVmub2eNxpqa6U5CSzdw3lTXe5xTi5XeleNkpGZpYvnhKWLyszwzYmOydXnxJWbk62PU5ewpAShphnA5NfYIVRVJBvgckoNJibhLkqNJ2qomJ7GEXFRcacklL7HFEsLTHilHlYOKLoKdPnlNucnqh85br/w8yRSTr/VMI4rrA8CfNUxDTPUZXG2S6Dwe5aFWvXU6FTjigWxnLyHUx0RL7Y3WJrfxmpIMrJ4+GI4j9fkG3pN8zljvinHD6OKOaopjf1h3aUG14CmbwcUcwMgbL4QVkKx8uxhiLyefltH5ayAlwIkEsGcS6isNzy+Y7giGKSkIwBJQspGFAKZq6V2U7FgFKFNAwoDWN9xf6OTqFEeXAg2NBgkw0zP2xBwrYIbNPC3AjMseFcLcT5pyOPI9gBiTuyYUEELKzBBVqw0A8XjOLCY1jAjkshYEkNLs3CJX64VBSXHOPSdVwBAVfSEGBFFkWgso+AK0QJsNJYSN48RLFOFaR8CNe+isr9VQeqaw46636otu5wqOEPkKr6I0dZKQ3HGuWOx8MXTc0trW3tIVQHG6azK/QTJ7pjb3b39La29rFg/P3K19vrTrJ9PUGnBmTMwOCQySunB/ptgE4SVZ45a/rKMFHLOUvQSP/5CxavjF6ULThm46csdamV6PIVBOlql0waN3x8jQE1ETQkTZ6Y6tZ/YkQK6q6QkWmiJgaQ0BGMLH2tZoiqWMYmCLPnr+vcnQvSFNMGMNCNegreBHCEW0TVCM7kbZpn9jV6ukN011nPe1pLX6YFNotFdHSRJmKvlwLLzn5oZZHua26YuR9TrRI9cNpXozmihxCQsEbrGFA1amwbzIeUgSaJHqnNx0tPeEib1Ki2tmiNB7RKU2priTZ5QE+fRQa0Tc95QFGt0zQGFKCtPQaCDW2bhjGgJdrh6f5ia1BtvaQ2HlAzVaqtV683eEDRLcKnmE3LJ5gbkR3bUwgI5WrntGe9/41TkPY4WlkI7DrjDGkPSL/jI/twgDR++q3jIGLsneZSCWveOyPFCRVoCdfriSChn7ArB6MOc804fZDD4xGmHrMf/Xq3lYB9lIUjB+yfdB80VC10MnCUFOIzy4eNOSbpkW1ZpFm2ZSvx889YpqLLchpeb2mYGqIpi+R421Zy/GUnlK7rLhFVX+ftpOvCkFpAmLXzsrk6ayuUksbwt9ib3eO935/9YEVNhoosql16mn9GiixOLP6r9m14nvroX9mnjstnjUxXzPMUovaIfv8BgSQJhJIkEEqSQChJAqEkCYSSJBBKkkCo/wICDQ002SDzgxYkaIuANi0X5i8hpIpr8W0lCwAAAABJRU5ErkJggg==);position:absolute;top:50%;left:50%}.list-item-play-gif{width:72px;height:72px;margin-left:-36px;margin-top:-36px;background-position:0 0;cursor:pointer}.list-item-play-gif>span{width:66px;height:66px;margin-left:-33px;margin-top:-33px;background-position:0 -73px}.list-item-play-gif--loading>span,.list-item-play-gif:hover>span{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.list-item-play-gif>i{width:32px;height:17px;margin-left:-16px;margin-top:-9px;background-position:0 -140px}@-webkit-keyframes spin{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.settings-group{display:none}.settings-group-isolated{display:block}.stats-block,a.stats-block{text-decoration:none;color:inherit;padding:10px}a.stats-block:hover{background:#f9f9f9}.tone-dark a.stats-block:hover{background:#222}.text-align-center .stats-big-number{text-align:center}.stats-big-number .number{font-size:44px;font-weight:200}.stats-big-number .number span{font-size:24px}.stats-big-number .label{display:block}.text-content code{background:#f9f9f9;padding:2px;border:1px solid #ddd}.tone-dark .text-content code{border-color:#222;background:#111}#home-top-bar-placeholder{margin-top:-65px}#home-cover{width:100%;background-position:center center;background-color:#333;background-size:cover;color:#fff;position:relative}body.landing #home-cover{margin:0;padding:0;height:100%;min-height:500px}body.split #home-cover{margin:0;height:500px}#home-cover-content{position:relative;text-align:center}body.landing #home-cover-content,body.split #home-cover-content{top:50%;position:relative;-webkit-transform:translateY(-50%);transform:translateY(-50%);overflow:auto}#home-cover-content h1,#home-cover-content p{text-shadow:1px 1px 2px rgba(0,0,0,.25)}#home-cover-content h1{font-size:2.4em;line-height:120%;font-weight:600}@media (min-width:768px){#home-cover-content h1{font-size:2.7em}}@media (min-width:992px){#home-cover-content h1{font-size:3em}}#home-cover-content p{font-size:22px;margin:20px 0;font-weight:100}#home-cover-content .home-buttons{margin:30px 0 20px}.home-buttons{margin:20px 0;text-align:center}.home-buttons a{font-size:16px;text-transform:uppercase;min-height:50px;line-height:1.5;height:auto;text-align:center;letter-spacing:2px;padding:12px 30px}#home-pics-feature{height:700px;overflow:hidden;position:relative;margin:10px 0}#home-pics-feature.empty{height:auto}#home-pics-feature-overlay{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(rgba(255,255,255,1)));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);width:100%;height:200px;position:absolute;bottom:0;z-index:1}.tone-dark #home-pics-feature-overlay{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(#0b0b0b));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,#0b0b0b 100%)}#home-pics-feature.empty #home-pics-overlay{display:none}#home-join{margin:40px 0}#home-join h1{font-size:38px;font-weight:100}#home-join p{margin:20px 0;font-size:18px}.ad-banner{margin:10px;text-align:center}.ad-banner img{display:block;margin:0 auto}.ad-banner-size-300x250{width:300px;height:250px}.ad-banner-size-336x280{width:336px;height:280px}.ad-banner-size-728x90{width:728px;height:90px}.ad-banner-size-300x600{width:300px;height:600px}.ad-banner-size-320x100{width:320px;height:100px}.ad-banner-size-320x50{width:320px;height:50px}.ad-banner-size-468x60{width:468px;height:60px}.ad-banner-size-234x60{width:234px;height:60px}.ad-banner-size-120x600{width:120px;height:600px}.ad-banner-size-120x240{width:120px;height:240px}.ad-banner-size-160x600{width:160px;height:600px}.ad-banner-size-300x1050{width:300px;height:1050px}.ad-banner-size-970x90{width:970px;height:90px}.ad-banner-size-970x250{width:970px;height:250px}.ad-banner-size-250x250{width:250px;height:250px}.ad-banner-size-200x200{width:200px;height:200px}.ad-banner-size-180x150{width:180px;height:150px}.ad-banner-size-125x125{width:125px;height:125px}#banner_before_home_cover{margin:0;padding:10px;background:#000}#banner_image_image-viewer_foot,#banner_image_image-viewer_top{height:90px;margin-left:auto;margin-right:auto}body#consent-screen,body#maintenance{padding:0;margin:0;width:100%;height:100%}#consent-screen-cover,#maintenance-cover{height:100%;background-position:center center;background-color:#333;background-size:cover}#consent-screen-cover-inner,#maintenance-cover-inner{background:rgba(0,0,0,.25);width:100%;height:100%}#consent-screen-cover-content,#maintenance-cover-content{color:#fff;padding:40px;text-align:center;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#maintenance-cover-content #logo{display:inline-block;margin-bottom:20px}#maintenance-cover-content #logo img{height:30px}#maintenance-cover-content h1{font-size:2.5em;margin-bottom:20px}#maintenance-cover-content p{font-size:1.2em}#consent-screen-cover-inner{background:0 0}#consent-screen-cover-src{width:100%;height:100%;position:absolute;top:0;left:0;background-position:center;background-size:cover}#consent-screen-content{background:#fff;margin:0 auto;padding:30px;-webkit-box-shadow:0 0 50px 6px rgba(0,0,0,.25);box-shadow:0 0 50px 6px rgba(0,0,0,.25);top:50%;position:relative;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.tone-dark #consent-screen-content{background:#161616}#consent-screen-content h1{line-height:2em}#consent-screen-content .logo{width:2em;height:auto;display:inline;margin-right:10px;vertical-align:top}#fullscreen-modal-box .image-preview .canvas{border:0;display:block;margin:0 auto;max-width:100%;max-height:500px}.content-password-gate{background:#f9f9f9;border-radius:10px;padding:30px;font-size:16px;text-align:center}.tone-dark .content-password-gate{background:0 0}.content-password-gate h1{font-size:30px;margin-bottom:10px}.content-password-gate h1 .icon{display:block;font-size:60px;margin-bottom:10px}.content-password-gate .g-recaptcha>div{margin-right:auto;margin-left:auto}.tone-dark .growl{background:#212121;color:#fff}#home-cover-slideshow{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.home-cover-img{position:absolute;left:0;top:0;width:100%;height:100%;background-size:cover;background-repeat:no-repeat;background-position:center center;display:block;opacity:0;-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.home-cover-img.animate-in,.home-cover-img.animate-in--alt{-webkit-animation-name:slideshow;animation-name:slideshow;-webkit-animation-duration:10s;animation-duration:10s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.home-cover-img.animate-in--alt{opacity:1;-webkit-animation-name:slideshow--alt;animation-name:slideshow--alt}.home-cover-img.animate-end{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-animation:none;animation:none}@-webkit-keyframes slideshow{0%{opacity:0}20%{opacity:1}100%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}}@keyframes slideshow{0%{opacity:0}20%{opacity:1}100%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}}@-webkit-keyframes slideshow--alt{100%{-webkit-transform:scale(1.1);transform:scale(1.1)}}@keyframes slideshow--alt{100%{-webkit-transform:scale(1.1);transform:scale(1.1)}}@supports (-ms-accelerator:true){.home-cover-img.animate-end{-webkit-transform:scale(1);transform:scale(1)}@-webkit-keyframes slideshow{0%{opacity:0}20%{opacity:1}}@keyframes slideshow{0%{opacity:0}20%{opacity:1}}@-webkit-keyframes slideshow--alt{100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes slideshow--alt{100%{-webkit-transform:scale(1);transform:scale(1)}}}#home-cover-slideshow::after{content:"";z-index:1;height:50px;position:absolute;top:0;left:0;right:0;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.1)),to(rgba(0,0,0,0)));background:-webkit-linear-gradient(top,rgba(0,0,0,.1) 0,rgba(0,0,0,0) 100%);background:-o-linear-gradient(top,rgba(0,0,0,.1) 0,rgba(0,0,0,0) 100%);background:linear-gradient(to bottom,rgba(0,0,0,.1) 0,rgba(0,0,0,0) 100%)}#dashboard-settings{min-height:400px}.footer{color:#ccc;font-size:10px;line-height:20px;text-align:center;width:100%;position:absolute;bottom:0}.tone-dark .footer{color:#444}.js #powered-by.footer{display:none}body.landing .footer{color:#fff;text-shadow:2px 2px 6px rgba(0,0,0,.4)}body.landing .footer a{color:rgba(255,255,255,.7)}body.landing .footer,body.landing .footer a:hover{color:#fff}body.--viewer-shown{overflow:hidden}.viewer{background:#000;position:fixed;top:0;right:0;bottom:0;left:0;z-index:500}.js .viewer{display:block;touch-action:pinch-zoom!important}.viewer--hide{opacity:0}.viewer--show{opacity:1}.viewer.viewer--no-cursor,.viewer.viewer--no-cursor *{cursor:none}.viewer .btn-icon{font-size:20px}.viewer-content{position:relative;top:0;left:0;width:100%;height:100%}.viewer-content img{position:absolute;max-height:100vh;max-width:100vw;transform:translate(-50%,-50%);top:50%;left:50%}.viewer-close,.viewer-wheel>div{color:#fff;top:0;font-size:1em;text-shadow:1px 1px 0 rgba(0,0,0,.5);text-align:center}.viewer-close{position:absolute;width:2.4em;height:2.4em;line-height:2.4em;cursor:pointer;right:-2.4em;z-index:500}.viewer:hover .hover-display.viewer-close{right:2px}.viewer-wheel>div{position:fixed;bottom:0;width:calc(1em + 20px);cursor:pointer;padding:10px;opacity:.7;display:none}.viewer-wheel>div:hover{opacity:1}.viewer--nav-prev .viewer-wheel-prev{left:0;display:block}.viewer--nav-next .viewer-wheel-next{right:0;display:block}.viewer-wheel>div>.icon{position:absolute;top:50%;transform:translateY(-50%);display:block}.viewer-foot{padding:20px;position:absolute;left:0;right:0;bottom:0;height:80px;background:-webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.6)));background:-webkit-linear-gradient(top,transparent 0,rgba(0,0,0,.6) 100%);background:-moz-linear-gradient(top,transparent 0,rgba(0,0,0,.6) 100%);background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.6) 100%)}.viewer-foot{display:flex;flex-wrap:wrap;flex-flow:row}.viewer-owner{width:190px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.viewer-owner .user-image{width:40px;height:40px;vertical-align:bottom;margin-right:10px}.viewer-owner .user-name{font-size:initial;text-decoration:none;vertical-align:middle;line-height:40px;color:inherit}.viewer-owner a.user-name:hover{color:rgba(255,255,255,.8)}.viewer-owner{order:1}.viewer-kb{font-size:.86em;flex-grow:1;order:2;padding-right:190px;text-align:center}.device-mobile .viewer-kb{display:none}.viewer-kb-input{display:inline-block}.viewer-kb-key{color:#fff;display:inline-block;margin:10px}.viewer-kb-key kbd{border:1px solid rgba(0,0,0,.5);background:rgba(120,120,120,.5);color:#fff;padding:4px 6px;border-radius:2px;display:inline-block;margin-right:5px;line-height:1}.viewer-like{transform:none;top:auto;bottom:20px;right:20px;position:absolute}.viewer:hover .hover-display--flex{display:flex}.--width-auto{width:auto}.--height-auto{height:auto}html.--idle .viewer,html.--idle .viewer *{cursor:none!important}html .fullscreen-show{display:none}:-webkit-full-screen .fullscreen-hide{display:none}:-moz-full-screen .fullscreen-hide{display:none}:-ms-fullscreen .fullscreen-hide{display:none}:fullscreen .fullscreen-hide{display:none}:-webkit-full-screen .fullscreen-show{display:block}:-moz-full-screen .fullscreen-show{display:block}:-ms-fullscreen .fullscreen-show{display:block}:fullscreen .fullscreen-show{display:block}a.image-container{-webkit-tap-highlight-color:transparent}a{color:#3498db;outline:0}a{text-decoration:none}input,textarea{border-color:#c6c8ca}.content-section,.input-label{margin-top:20px;margin-bottom:20px;position:relative}.content-section:first-child{margin-top:0}.input-label .input{width:100%;margin-bottom:0}.input-label .input+.input{margin-top:5px}.input-label .input-label{margin-bottom:10px}.input-label .input-label .label{font-weight:400}.input-label label .caption,.input-label label .optional{font-weight:400;font-size:.92em}.input-label label .caption:before,.input-label label .optional:before{content:"("}.input-label label .caption:after,.input-label label .optional:after{content:")"}.input-label-below{margin-top:5px;clear:both}.background-cover{position:fixed;top:0;right:0;bottom:0;left:0;background-position:center center;background-size:cover}.input-with-button{position:relative}.input-with-button button{background:0 0;position:absolute;right:0;top:50%;transform:translateY(-50%);border:none;font-size:22px;width:1em;height:1em;outline:0;color:#d9d9d9}.tone-dark .input-with-button button{color:#666}.input-with-button button:focus,.input-with-button button:hover{color:#3498db}#top-left{position:fixed;padding:5px;left:0;top:0}.top-button{padding:5px}.top-button .menu-box{margin-top:5px}.top-button-icon{font-size:16px;color:#fff;cursor:pointer;text-shadow:1px 1px 0 rgba(0,0,0,.15)}.background-default{background:#2ecc71;background:-moz-linear-gradient(top,#2ecc71 0,#3498db 100%);background:-webkit-linear-gradient(top,#2ecc71 0,#3498db 100%);background:linear-gradient(to bottom,#2ecc71 0,#3498db 100%)}.content-box{position:relative;margin:20px}.content-box-text :first-child{margin-top:0}.content-box-text :last-child{margin-bottom:0}.logo{max-height:50px;max-width:220px;margin-bottom:20px}.card-box{min-width:270px;width:calc(100vw - 40px)}.access-box-content{background:#fff}.fancy-box-heading{font-size:22px;margin:20px 0 30px 0}.fancy-fieldset{border:0;padding:0;margin:0}.fancy-fieldset input:not([type=checkbox]),.fancy-fieldset input[type=text],.fancy-fieldset select,.fancy-fieldset textarea{outline:0;padding:10px 0;width:100%;border-radius:0;border-color:#ebebeb;background:0 0;box-shadow:none}.fancy-fieldset .checkbox-label input[type=checkbox]{width:auto;vertical-align:middle;margin:0 0 0 -20px}.tone-dark .fancy-fieldset input,.tone-dark .fancy-fieldset input[type=text],.tone-dark .fancy-fieldset select,.tone-dark .fancy-fieldset textarea{box-shadow:none;border-color:#212121}.fancy-fieldset select{-webkit-appearance:none;-moz-appearance:none;appearance:none}.fancy-fieldset input,.fancy-fieldset select{padding:10px 0;border-top:transparent;border-left:transparent;border-right:transparent}.fancy-fieldset input:focus,.fancy-fieldset input:focus[type=text],.fancy-fieldset select:focus,.fancy-fieldset textarea:focus{border-color:#3498db}.fancy-fieldset .input-with-button input[type=password]{padding-right:30px}.fancy-fieldset>div:last-child{margin-bottom:inherit}.fancy-fieldset .label{line-height:1.5}.fancy-fieldset .input-label:last-child{margin-bottom:0}.fancy-fieldset .checkbox-label{margin:0}a.social-button{position:relative;text-decoration:none;display:inline-block;font-size:1em;margin:10px 0;background:#d9d9d9;padding:8px;text-decoration:none;display:block;color:#fff;border-radius:3px}a.social-button--facebook{background-color:#4267b2}a.social-button--facebook .icon:before{content:"\e8c9"}a.social-button--twitter{background-color:#1da1f2}a.social-button--google{background-color:#ea4335}a.social-button--vk{background-color:#45668e}.social-button-outline{position:relative;text-decoration:none;width:32px;height:32px;display:inline-block;border-radius:50%;border-width:1px;border-style:solid;font-size:16px;margin:5px}.social-button-outline .icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.social-button-outline.border-color-facebook:focus,.social-button-outline.border-color-facebook:hover{background-color:#3b5998}.social-button-outline.border-color-twitter:focus,.social-button-outline.border-color-twitter:hover{background-color:#1da1f2}.social-button-outline.border-color-google:focus,.social-button-outline.border-color-google:hover{background-color:#ea4335}.social-button-outline.border-color-vk:focus,.social-button-outline.border-color-vk:hover{background-color:#45668e}.social-button-outline:focus .icon,.social-button-outline:hover .icon{color:#fff}#login{padding:0;margin:0}.content-section--recaptchaFix #g-recaptcha{min-height:78px;-webkit-transform:scale(.89);-ms-transform:scale(.89);transform:scale(.89);-webkit-transform-origin:left;-ms-transform-origin:left;transform-origin:left}#login .input{margin:0}.btn-container--fixed{position:fixed;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);padding:10px;margin:0;border:0}.tone-dark .btn-container--fixed{background:rgba(0,0,0,.75)}body#dashboard{min-height:100%;padding-bottom:4em}body.full--wh{height:100%;width:100%}.display-flex #home-cover-slideshow{position:fixed}[data-content=dashboard-imports] [data-action=resume],[data-content=dashboard-imports] [data-errors="0"] [data-content=log-errors],[data-content=dashboard-imports] [data-result],[data-content=dashboard-imports] [data-started="0"] [data-content^=log]{display:none}[data-content=dashboard-imports] [data-errors="1"] [data-content=log-process],[data-content=dashboard-imports] [data-status=completed] [data-action=pause],[data-content=dashboard-imports] [data-status=completed][data-errors="0"] [data-result=success],[data-content=dashboard-imports] [data-status=paused] [data-action=resume],[data-content=dashboard-imports] [data-status][data-errors="1"] [data-result=error]{display:initial}[data-content=dashboard-imports] [data-status=canceled] [data-action=cancel],[data-content=dashboard-imports] [data-status=canceled] [data-action=pause],[data-content=dashboard-imports] [data-status=canceled] [data-target=modal-process-import],[data-content=dashboard-imports] [data-status=completed] [data-action=cancel],[data-content=dashboard-imports] [data-status=completed] [data-target=modal-process-import],[data-content=dashboard-imports] [data-status=paused] [data-action=pause],[data-content=dashboard-imports] [data-status=queued] [data-action=pause],[data-content=dashboard-imports] [data-status=working] [data-target=modal-process-import]{display:none!important}.panel-thumb-list li{overflow:hidden}.connecting-ip{font-family:monospace;font-size:27px}.code{padding:2px;background:#ecf0f1}.tone-dark .code{background:#0b0b0b}.importing{background:#ecf0f1;padding:10px;position:relative}.tone-dark .importing{background:#111}.importing:nth-child(even){margin:0 10px}.phablet .importing:nth-child(even),.phone .importing:nth-child(even){margin:10px 0}.importing-stats{margin:10px 0}.importing-stats .figure{display:inline-block;padding:5px;background:rgba(0,0,0,.1)}.tone-dark .importing-stats .figure{background:rgba(255,255,255,.1)}body#index.landing [data-action=top-bar-tone]{display:none}
\ No newline at end of file
+body{padding-top:65px;padding-bottom:20px;min-height:100%;background:#fefefe;position:relative;font-family:Helvetica,Arial,sans-serif;font-size:14px}body.landing{min-height:500px;height:100%;padding:0;margin:0}.phone body.landing{min-height:auto}.js body.landing{overflow:hidden;opacity:0}.js body.landing.load{-webkit-transition:-webkit-transform .6s ease,opacity 350ms linear;-webkit-transition:opacity 350ms linear,-webkit-transform .6s ease;transition:opacity 350ms linear,-webkit-transform .6s ease;transition:transform .6s ease,opacity 350ms linear;transition:transform .6s ease,opacity 350ms linear,-webkit-transform .6s ease;opacity:1}#home-cover-content,#index .flex-center{opacity:0}.js body#index.load .flex-center,.js body.load #home-cover-content{transition:all .6s ease;transition-delay:150ms;opacity:1}.js body.loaded{overflow:auto}body.split{margin-top:0;padding-top:0}.content-width.fluid,.fluid .content-width{width:100%}@media (min-width:992px){.content-width.wide{max-width:none}}html.device-mobile .device-mobile--hide{display:none!important}html.device-nonmobile .device-nonmobile--hide{display:none!important}body#upload{padding-top:50px;padding-bottom:0;background-color:transparent}.image-viewer{text-align:center;background:#f7f7f7;position:relative;min-height:72px;overflow:hidden}.image-viewer-main{display:inline-block;vertical-align:middle}.image-viewer-container{display:block;margin:0 auto;position:relative}.image-viewer-container img{display:block;margin:0 auto;max-height:100%;width:auto}.js .image-viewer-container img{position:absolute;width:100%;height:auto}.image-viewer .btn-download{position:absolute;top:20px;right:20px;z-index:1}.image-viewer-navigation a{z-index:3}.image-viewer-navigation a:hover{background-color:#aaa;background-color:rgba(0,0,0,.3)}#image-viewer-loading,.viewer-loader{width:30px;height:30px;position:absolute;left:50%;top:50%;margin-left:-15px;margin-top:-15px;border-radius:100%;background:rgba(17,17,17,.9)}#image-viewer-loader{position:absolute;background:rgba(0,0,0,.5);border:2px solid rgba(255,255,255,.7);color:rgba(255,255,255,.9);font-size:13px;left:50%;top:50%;padding:8px 14px;border-radius:100px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);cursor:pointer;display:none}#image-viewer-loader:hover{background:rgba(0,0,0,.6);border-color:rgba(255,255,255,.8);color:#fff}#image-viewer-loader .btn-icon{position:relative;top:1px;font-size:12px}#image .top-bar-placeholder,.image-viewer.full-viewer{background:#111}.top-bar-white #image .top-bar-placeholder,.top-bar-white .image-viewer.full-viewer{background:#fff}.btn-like .btn.btn-liked,.btn-like .btn.btn-unliked{display:none}.btn-like[data-liked="0"] .btn-unliked{display:inline-block}.btn-like[data-liked="1"] .btn-liked{display:inline-block}.btn-follow .btn.btn-followed,.btn-follow .btn.btn-unfollowed{display:none}.btn-follow[data-followed="0"] .btn-unfollowed{display:inline-block}.btn-follow[data-followed="1"] .btn-followed{display:inline-block}#fullscreen-uploader-mask{z-index:99}.phone #fullscreen-uploader-mask{z-index:400}#anywhere-upload{z-index:400;scroll:auto;-webkit-overflow-scrolling:touch;-webkit-transition:transform .3s ease;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}#anywhere-upload.hidden-visibility iframe{visibility:hidden}.phone #anywhere-upload{z-index:500;height:100vh!important}#upload #anywhere-upload{overflow:hidden!important;height:auto!important}#upload .upload-box .upload-box-allowed-files,.phone .upload-box .upload-box-allowed-files{display:none}#upload .upload-box[data-queue-size="0"] .upload-box-allowed-files,.phone .upload-box[data-queue-size="0"] .upload-box-allowed-files{display:block}#upload .upload-box-allowed-files,.phone .upload-box-allowed-files{position:fixed;top:auto;left:0;right:0;text-align:center;bottom:10px}#anywhere-upload-paste{height:0;opacity:0;font-size:0}#anywhere-upload-paste *{display:none}.upload-box{border-bottom:0}.upload-box-queue{text-align:center;font-size:0;margin-top:35px;margin-bottom:35px}.upload-box-queue li{position:relative;text-align:center;display:inline-block;background:red;margin:5px;background:#efefef;-webkit-box-shadow:inset 0 2px 10px 0 rgba(0,0,0,.07);box-shadow:inset 0 2px 10px 0 rgba(0,0,0,.07)}.tone-dark .upload-box-queue li{background:#222}.upload-box-queue .block,.upload-box-queue li{border-radius:0}.ios .upload-box-queue .block,.ios .upload-box-queue li,.upload-box-queue .block.failed{border-radius:0}.upload-box-queue li,.upload-box-queue li.normal{width:110px;height:110px;font-size:14px;font-size:1rem}.upload-box-queue li.small{width:77px;height:77px;font-size:9px;font-size:.643rem}.upload-box-queue li.tiny{width:54px;height:54px;font-size:7px;font-size:.5rem}.upload-box-queue .block{width:100%;height:100%;top:0;left:0;overflow:hidden;position:absolute}.upload-box-queue a.image-link{display:none}.upload-box-queue .completed a.image-link{display:block;position:absolute;overflow:hidden;z-index:1;-webkit-transform:rotate(.000001deg)}.upload-box-queue .queue-item .block.edit,.upload-box-queue .queue-item .queue-item-button{display:block;position:absolute;cursor:pointer;z-index:100}.upload-box-queue .queue-item .queue-item-button .icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.upload-box-queue .queue-item.completed:hover .queue-item-button{display:none}.upload-box-queue .queue-item .queue-item-button{font-size:7px;width:21px;height:21px;line-height:23px;background:#fff;color:#333;border-radius:200px;left:-7px;-webkit-box-shadow:1px 1px 4px 0 rgba(0,0,0,.5);box-shadow:1px 1px 4px 0 rgba(0,0,0,.5)}.tone-dark .upload-box-queue .queue-item .queue-item-button{background:#333;color:#fff}.upload-box-queue .queue-item .queue-item-button.cancel{top:-7px}.upload-box-queue .queue-item .queue-item-button.edit{top:16px;font-size:9px}.upload-box-queue .big-icon{position:absolute;color:#dadada;font-size:5.36em;width:1em;height:1em;left:50%;top:50%;margin-left:-.5em;margin-top:-.5em;text-shadow:1px 1px 0 rgba(255,255,255,.9)}.tone-dark .upload-box-queue .big-icon{color:#444;text-shadow:1px 1px 0 rgba(0,0,0,.9)}.upload-box-queue .done,.upload-box-queue .preview{position:relative;overflow:hidden}.upload-box-queue .preview .canvas{position:absolute;top:50%;left:50%}.upload-box-queue .progress{position:absolute}.upload-box-queue .progress-bar,.upload-box-queue .progress-percent{height:100%}.upload-box-queue .uploading .progress-percent{display:block}.queue-item.uploading .block.edit,.queue-item.uploading .queue-item-button.edit,.queue-item.uploading.waiting .progress-percent{display:none}.upload-box-queue .progress-percent{font-family:arial,helvetica,sans-serif;font-size:2.86em;font-weight:400;color:#fff;text-shadow:2px 2px 10px rgba(0,0,0,.8);text-align:center;width:100%;height:1em;position:absolute;top:.86em;z-index:1;display:none}.upload-box-queue .progress-percent b{font-weight:700}.upload-box-queue .progress-percent span{font-size:.5em;font-weight:400;position:relative}.upload-box-queue .progress-bar{float:right;width:100%;display:none}.upload-box-queue .failed .result,.upload-box-queue .progress-bar{background:rgba(255,255,255,.65)}.upload-box-queue .uploading .progress-bar{display:block}.upload-box-queue .completed .result.done,.upload-box-queue .failed .result.failed{display:block}.upload-box-queue .result{position:absolute;z-index:1;display:none}.tone-dark .upload-box-queue .failed .result,.tone-dark .upload-box-queue .progress-bar{background:rgba(0,0,0,.65)}.upload-box-queue .result .icon{position:absolute;width:1em;font-size:3.429em;color:#fff;top:50%;left:50%;margin-top:-.5em;margin-left:-.5em;margin-left:-.5em;opacity:.92;text-shadow:none}.upload-box-queue .done .result .icon{text-shadow:2px 2px 6px rgba(0,0,0,.2)}.upload-box-queue .failed .result .icon{color:#e84c3d;font-size:3.429em}.upload-box-queue.queue-complete .cancel,.upload-box-queue.queue-complete .edit{display:none}#form-embed-toggle-combo,#uploaded-embed-toggle-combo{position:relative}#upload .top-bar{-webkit-box-shadow:none;box-shadow:none;border-bottom-color:transparent}#upload #anywhere-upload{background:0 0}#upload .upload-box{transform:none;position:static}body#upload [data-action=close-upload]{display:none!important}.upload-box.queueHasResults [data-action=cancel-upload],.upload-box.queueReady [data-action=close-upload],.upload-box.queueUploading [data-action=close-upload],.upload-box:not(.queueHasResults) [data-action=cancel-upload-remaining],.upload-box:not(.queueReady):not(.queueCompleted) [data-action=reset-upload],.upload-box:not(.queueUploading) [data-action^=cancel-upload],.upload-box:not([data-queue-size="0"]) [data-action=close-upload]{display:none}#background-cover{height:290px;background-color:#000;position:relative}.phone #background-cover{height:230px}#background-cover.no-background{background-color:#f9f9f9;background-image:none!important;padding:9px 0;height:auto;margin-top:50px}.tone-dark #background-cover.no-background{background:#101010}#background-cover-wrap{height:100%;overflow:hidden;position:relative}#background-cover .content-width{text-align:center}#change-background-cover{position:absolute;right:10px;bottom:10px}#user-background-upload{top:0;left:0;width:1px;height:1px}#background-cover-src{overflow:hidden;background-position:center center;background-size:cover}#background-cover .loading-placeholder,#background-cover-src{position:absolute;top:0;left:0;width:100%;height:100%}#background-cover .loading-placeholder{background:rgba(0,0,0,.8)}[data-privacy=public] .list-item-privacy{display:none}.list-item-thumbs li,.list-item-thumbs li a{display:block;height:auto;overflow:hidden}.list-item-thumbs li a{height:100%;background-size:cover;background-position:center center}.list-item-thumbs li img{width:100%;display:block}.input-copy{position:relative}.input-copy .btn-copy{font-size:10px;position:absolute;right:2px;top:8px;background:#fff;padding:0 4px;height:18px;line-height:18px;text-transform:uppercase;cursor:pointer;border-width:0 4px;border-style:solid;border-color:#fff;display:none}.input-copy .btn-copy:hover{background:#e5e5e5}.list-item-image-tools{position:absolute;right:0;top:0}.list-item.selected .list-item-image-tools li.tool-select .icon{color:#fff;background:#27ae60}.list-item-image-tools li{margin:2px;cursor:pointer;position:relative;height:2.4em;line-height:2.4em;font-size:1em;right:calc(-2.4em - 2px);transition:all .2s ease-in-out}.list-item .hover-display.list-item-image-tools{opacity:1}.list-item.selected li.tool-select,.list-item[data-flag=unsafe] li.tool-flag,html:not(.--idle) .list-item:hover .list-item-image-tools li{right:0}.list-item-image-tools li,.list-item-image-tools li *{display:block;color:inherit}.list-item-image-tools li span{float:right}.list-item-image-tools li .label{font-size:.86em}.list-item-image-tools li .btn-icon{font-size:1em}.list-item-image-tools li .label{text-transform:uppercase;padding-left:1em;padding-right:0;display:none;height:100%}.list-item-image-tools li:hover .label{display:block}.small-cols .list-item-image-tools li:hover .label{display:none}[data-flag=safe] li:hover .label-flag-safe,[data-flag=unsafe] li:hover .label-flag-unsafe{display:none}.unsafe-blur-on .list-item .list-item-thumbs li[data-flag=unsafe] a,.unsafe-blur-on [data-flag=unsafe] .image-container{filter:blur(5px);-webkit-filter:blur(5px);-webkit-transform:scale(1.04);transform:scale(1.04)}.unsafe-blur-on .list-item:hover .list-item-thumbs li[data-flag=unsafe] a,.unsafe-blur-on [data-flag=unsafe]:hover .image-container{filter:none;-webkit-filter:none}.list-item-image-tools li .btn-icon{width:2.4em;height:2.4em;line-height:2.4em;color:#fff;background:#000;background:rgba(0,0,0,.2);text-align:center}.list-item-image-tools li .label,.list-item-image-tools li:hover .btn-icon{color:#fff;background:rgba(0,0,0,.4)}.list-item.selected li.tool-select .btn-icon,[data-flag=unsafe] li.tool-flag .btn-icon{background:rgba(0,0,0,.4)}.list-item-album .tool-flag{display:none}.list-item-image-tools li .label{text-shadow:1px 1px 0 rgba(0,0,0,.1)}.list-item .list-item-avatar-cover,.list-item .list-item-avatar-cover>*{border-radius:100%}.list-item .list-item-avatar-cover{width:160px;height:160px;border:0;background-color:#e5e5e5;position:absolute;left:50%;top:50%;margin-top:-80px!important;margin-left:-80px!important;-webkit-transition:all .3s;transition:all .3s}.tone-dark .list-item .list-item-avatar-cover{background:#555}.list-item .list-item-avatar-cover>*{width:100px;height:100px}.list-item .list-item-avatar-cover img{height:auto;-webkit-box-shadow:2px 2px 2px rgba(0,0,0,.3);box-shadow:2px 2px 2px rgba(0,0,0,.3)}.list-item .list-item-avatar-cover .icon.empty{display:block;top:50%;position:relative;margin-top:-45px}.list-item .list-item-avatar-cover .icon.empty,.tone-dark .list-item-image .list-item-avatar-cover .icon.empty{color:#fff}.list-item-privacy{position:absolute;left:0;top:0;width:2.4em;height:2.4em;line-height:2.4em;color:#fff;text-shadow:1px 1px 5px rgba(0,0,0,.5);text-align:center}.tone-dark .list-item-privacy{background:rgba(0,0,0,.5);color:#fff}.list-item-like{color:#fff;position:absolute;right:0;bottom:0}.list-item-like .btn-like{font-size:20px;padding:10px;cursor:pointer;display:none;opacity:.8}.list-item-like .btn-like.btn-liked,.list-item-like .btn-like:hover{opacity:1}[data-liked="0"] .list-item-like .btn-like.btn-unliked{display:block}[data-liked="1"] .list-item-like .btn-like.btn-liked{display:block}.list-item-play-gif,.list-item-play-gif *{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAACdCAMAAAAgwM7pAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAcVQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///9///+///+///+///+///+///9///8///1///5///9///9///u///f///+///+///+///9///q///z///9///+///9///8///9///+///+///+///+///8///w///9///+///3///8///9///2///9///7///t///+///8///b///9///9///M///+///y//+A///9///r///7///+///7///3///+///8//+////8//+q///8///+///z///+///+///9///6///m///7///j///7///9///+///+///9///9///6///+///+///+///7///V///+///9///5///9///+///+///8///9///6///8///+///9///4///+///+///+///+///4///9///5///+///v///7///9///8///o///9///9///8///6///y///9///0///+///x///+///6////////////vBUIqgAAAJd0Uk5TABQmNkZSWF5iCipmAiRKZAQuXCwYVDoMUBpgIiil+enVw7GJUBoujZkOCPf/45sMFnDPbEqhtcfZ714Qi9EgWI8adDgO21oGbmoEyxICcgw87Toe+1QEVgJg/RTru344CkIIRnrx55VmMNf1wT4GyaMoh+HlTJcyYt+pJrfTzd0ipyqtEECTXAp8aGQ2FIMWxRKzLrhG/4D2XIEAAAQlSURBVHiczZjnWxNBEMYPCCThgNC7IIKCyaCIdJCmgIooYkFCEwsqTRRQQREb9l7u7/UuuZhccm1vX5+H99Ne2d/d7uzOzowgmCgpOcWVmub2eNxpqa6U5CSzdw3lTXe5xTi5XeleNkpGZpYvnhKWLyszwzYmOydXnxJWbk62PU5ewpAShphnA5NfYIVRVJBvgckoNJibhLkqNJ2qomJ7GEXFRcacklL7HFEsLTHilHlYOKLoKdPnlNucnqh85br/w8yRSTr/VMI4rrA8CfNUxDTPUZXG2S6Dwe5aFWvXU6FTjigWxnLyHUx0RL7Y3WJrfxmpIMrJ4+GI4j9fkG3pN8zljvinHD6OKOaopjf1h3aUG14CmbwcUcwMgbL4QVkKx8uxhiLyefltH5ayAlwIkEsGcS6isNzy+Y7giGKSkIwBJQspGFAKZq6V2U7FgFKFNAwoDWN9xf6OTqFEeXAg2NBgkw0zP2xBwrYIbNPC3AjMseFcLcT5pyOPI9gBiTuyYUEELKzBBVqw0A8XjOLCY1jAjkshYEkNLs3CJX64VBSXHOPSdVwBAVfSEGBFFkWgso+AK0QJsNJYSN48RLFOFaR8CNe+isr9VQeqaw46636otu5wqOEPkKr6I0dZKQ3HGuWOx8MXTc0trW3tIVQHG6azK/QTJ7pjb3b39La29rFg/P3K19vrTrJ9PUGnBmTMwOCQySunB/ptgE4SVZ45a/rKMFHLOUvQSP/5CxavjF6ULThm46csdamV6PIVBOlql0waN3x8jQE1ETQkTZ6Y6tZ/YkQK6q6QkWmiJgaQ0BGMLH2tZoiqWMYmCLPnr+vcnQvSFNMGMNCNegreBHCEW0TVCM7kbZpn9jV6ukN011nPe1pLX6YFNotFdHSRJmKvlwLLzn5oZZHua26YuR9TrRI9cNpXozmihxCQsEbrGFA1amwbzIeUgSaJHqnNx0tPeEib1Ki2tmiNB7RKU2priTZ5QE+fRQa0Tc95QFGt0zQGFKCtPQaCDW2bhjGgJdrh6f5ia1BtvaQ2HlAzVaqtV683eEDRLcKnmE3LJ5gbkR3bUwgI5WrntGe9/41TkPY4WlkI7DrjDGkPSL/jI/twgDR++q3jIGLsneZSCWveOyPFCRVoCdfriSChn7ArB6MOc804fZDD4xGmHrMf/Xq3lYB9lIUjB+yfdB80VC10MnCUFOIzy4eNOSbpkW1ZpFm2ZSvx889YpqLLchpeb2mYGqIpi+R421Zy/GUnlK7rLhFVX+ftpOvCkFpAmLXzsrk6ayuUksbwt9ib3eO935/9YEVNhoosql16mn9GiixOLP6r9m14nvroX9mnjstnjUxXzPMUovaIfv8BgSQJhJIkEEqSQChJAqEkCYSSJBBKkkCo/wICDQ002SDzgxYkaIuANi0X5i8hpIpr8W0lCwAAAABJRU5ErkJggg==);position:absolute;top:50%;left:50%}.list-item-play-gif{width:72px;height:72px;margin-left:-36px;margin-top:-36px;background-position:0 0;cursor:pointer}.list-item-play-gif>span{width:66px;height:66px;margin-left:-33px;margin-top:-33px;background-position:0 -73px}.list-item-play-gif--loading>span,.list-item-play-gif:hover>span{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.list-item-play-gif>i{width:32px;height:17px;margin-left:-16px;margin-top:-9px;background-position:0 -140px}@-webkit-keyframes spin{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.settings-group{display:none}.settings-group-isolated{display:block}.stats-block,a.stats-block{text-decoration:none;color:inherit;padding:10px}a.stats-block:hover{background:#f9f9f9}.tone-dark a.stats-block:hover{background:#222}.text-align-center .stats-big-number{text-align:center}.stats-big-number .number{font-size:44px;font-weight:200}.stats-big-number .number span{font-size:24px}.stats-big-number .label{display:block}.text-content code{background:#f9f9f9;padding:2px;border:1px solid #ddd}.tone-dark .text-content code{border-color:#222;background:#111}#home-top-bar-placeholder{margin-top:-65px}#home-cover{width:100%;background-position:center center;background-color:#333;background-size:cover;color:#fff;position:relative}body.landing #home-cover{margin:0;padding:0;height:100%;min-height:500px}body.split #home-cover{margin:0;height:500px}#home-cover-content{position:relative;text-align:center}body.landing #home-cover-content,body.split #home-cover-content{top:50%;position:relative;-webkit-transform:translateY(-50%);transform:translateY(-50%);overflow:auto}#home-cover-content h1,#home-cover-content p{text-shadow:1px 1px 2px rgba(0,0,0,.25)}#home-cover-content h1{font-size:2.4em;line-height:120%;font-weight:600}@media (min-width:768px){#home-cover-content h1{font-size:2.7em}}@media (min-width:992px){#home-cover-content h1{font-size:3em}}#home-cover-content p{font-size:22px;margin:20px 0;font-weight:100}#home-cover-content .home-buttons{margin:30px 0 20px}.home-buttons{margin:20px 0;text-align:center}.home-buttons a{font-size:16px;text-transform:uppercase;min-height:50px;line-height:1.5;height:auto;text-align:center;letter-spacing:2px;padding:12px 30px}#home-pics-feature{height:700px;overflow:hidden;position:relative;margin:10px 0}#home-pics-feature.empty{height:auto}#home-pics-feature-overlay{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(rgba(255,255,255,1)));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);width:100%;height:200px;position:absolute;bottom:0;z-index:1}.tone-dark #home-pics-feature-overlay{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(#0b0b0b));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,#0b0b0b 100%)}#home-pics-feature.empty #home-pics-overlay{display:none}#home-join{margin:40px 0}#home-join h1{font-size:38px;font-weight:100}#home-join p{margin:20px 0;font-size:18px}.ad-banner{margin:10px;text-align:center}.ad-banner img{display:block;margin:0 auto}.ad-banner-size-300x250{width:300px;height:250px}.ad-banner-size-336x280{width:336px;height:280px}.ad-banner-size-728x90{width:728px;height:90px}.ad-banner-size-300x600{width:300px;height:600px}.ad-banner-size-320x100{width:320px;height:100px}.ad-banner-size-320x50{width:320px;height:50px}.ad-banner-size-468x60{width:468px;height:60px}.ad-banner-size-234x60{width:234px;height:60px}.ad-banner-size-120x600{width:120px;height:600px}.ad-banner-size-120x240{width:120px;height:240px}.ad-banner-size-160x600{width:160px;height:600px}.ad-banner-size-300x1050{width:300px;height:1050px}.ad-banner-size-970x90{width:970px;height:90px}.ad-banner-size-970x250{width:970px;height:250px}.ad-banner-size-250x250{width:250px;height:250px}.ad-banner-size-200x200{width:200px;height:200px}.ad-banner-size-180x150{width:180px;height:150px}.ad-banner-size-125x125{width:125px;height:125px}#banner_before_home_cover{margin:0;padding:10px;background:#000}#banner_image_image-viewer_foot,#banner_image_image-viewer_top{height:90px;margin-left:auto;margin-right:auto}body#consent-screen,body#maintenance{padding:0;margin:0;width:100%;height:100%}#consent-screen-cover,#maintenance-cover{height:100%;background-position:center center;background-color:#333;background-size:cover}#consent-screen-cover-inner,#maintenance-cover-inner{background:rgba(0,0,0,.25);width:100%;height:100%}#consent-screen-cover-content,#maintenance-cover-content{color:#fff;padding:40px;text-align:center;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#maintenance-cover-content #logo{display:inline-block;margin-bottom:20px}#maintenance-cover-content #logo img{height:30px}#maintenance-cover-content h1{font-size:2.5em;margin-bottom:20px}#maintenance-cover-content p{font-size:1.2em}#consent-screen-cover-inner{background:0 0}#consent-screen-cover-src{width:100%;height:100%;position:absolute;top:0;left:0;background-position:center;background-size:cover}#consent-screen-content{background:#fff;margin:0 auto;padding:30px;-webkit-box-shadow:0 0 50px 6px rgba(0,0,0,.25);box-shadow:0 0 50px 6px rgba(0,0,0,.25);top:50%;position:relative;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.tone-dark #consent-screen-content{background:#161616}#consent-screen-content h1{line-height:2em}#consent-screen-content .logo{width:2em;height:auto;display:inline;margin-right:10px;vertical-align:top}#fullscreen-modal-box .image-preview .canvas{border:0;display:block;margin:0 auto;max-width:100%;max-height:500px}.content-password-gate{background:#f9f9f9;border-radius:10px;padding:30px;font-size:16px;text-align:center}.tone-dark .content-password-gate{background:0 0}.content-password-gate h1{font-size:30px;margin-bottom:10px}.content-password-gate h1 .icon{display:block;font-size:60px;margin-bottom:10px}.content-password-gate .g-recaptcha>div{margin-right:auto;margin-left:auto}.tone-dark .growl{background:#212121;color:#fff}#home-cover-slideshow{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.home-cover-img{position:absolute;left:0;top:0;width:100%;height:100%;background-size:cover;background-repeat:no-repeat;background-position:center center;display:block;opacity:0;-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.home-cover-img.animate-in,.home-cover-img.animate-in--alt{-webkit-animation-name:slideshow;animation-name:slideshow;-webkit-animation-duration:10s;animation-duration:10s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.home-cover-img.animate-in--alt{opacity:1;-webkit-animation-name:slideshow--alt;animation-name:slideshow--alt}.home-cover-img.animate-end{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-animation:none;animation:none}@-webkit-keyframes slideshow{0%{opacity:0}20%{opacity:1}100%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}}@keyframes slideshow{0%{opacity:0}20%{opacity:1}100%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}}@-webkit-keyframes slideshow--alt{100%{-webkit-transform:scale(1.1);transform:scale(1.1)}}@keyframes slideshow--alt{100%{-webkit-transform:scale(1.1);transform:scale(1.1)}}@supports (-ms-accelerator:true){.home-cover-img.animate-end{-webkit-transform:scale(1);transform:scale(1)}@-webkit-keyframes slideshow{0%{opacity:0}20%{opacity:1}}@keyframes slideshow{0%{opacity:0}20%{opacity:1}}@-webkit-keyframes slideshow--alt{100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes slideshow--alt{100%{-webkit-transform:scale(1);transform:scale(1)}}}#home-cover-slideshow::after{content:"";z-index:1;height:50px;position:absolute;top:0;left:0;right:0;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.1)),to(rgba(0,0,0,0)));background:-webkit-linear-gradient(top,rgba(0,0,0,.1) 0,rgba(0,0,0,0) 100%);background:-o-linear-gradient(top,rgba(0,0,0,.1) 0,rgba(0,0,0,0) 100%);background:linear-gradient(to bottom,rgba(0,0,0,.1) 0,rgba(0,0,0,0) 100%)}#dashboard-settings{min-height:400px}.footer{color:#ccc;font-size:10px;line-height:20px;text-align:center;width:100%;position:absolute;bottom:0}.tone-dark .footer{color:#444}.js #powered-by.footer{display:none}body.landing .footer{color:#fff;text-shadow:2px 2px 6px rgba(0,0,0,.4)}body.landing .footer a{color:rgba(255,255,255,.7)}body.landing .footer,body.landing .footer a:hover{color:#fff}body.--viewer-shown{overflow:hidden}.viewer{background:#000;position:fixed;top:0;right:0;bottom:0;left:0;z-index:500}.js .viewer{display:block;touch-action:pinch-zoom!important}.viewer--hide{opacity:0}.viewer--show{opacity:1}.viewer.viewer--no-cursor,.viewer.viewer--no-cursor *{cursor:none}.viewer .btn-icon{font-size:20px}.viewer-content{position:relative;top:0;left:0;width:100%;height:100%}.viewer-content img{position:absolute;max-height:100vh;max-width:100vw;transform:translate(-50%,-50%);top:50%;left:50%}.viewer-close,.viewer-wheel>div{color:#fff;top:0;font-size:1em;text-shadow:1px 1px 0 rgba(0,0,0,.5);text-align:center}.viewer-close{position:absolute;width:2.4em;height:2.4em;line-height:2.4em;cursor:pointer;right:-2.4em;z-index:500}.viewer:hover .hover-display.viewer-close{right:2px}.viewer-wheel>div{position:fixed;bottom:0;width:calc(1em + 20px);cursor:pointer;padding:10px;opacity:.7;display:none}.viewer-wheel>div:hover{opacity:1}.viewer--nav-prev .viewer-wheel-prev{left:0;display:block}.viewer--nav-next .viewer-wheel-next{right:0;display:block}.viewer-wheel>div>.icon{position:absolute;top:50%;transform:translateY(-50%);display:block}.viewer-foot{padding:20px;position:absolute;left:0;right:0;bottom:0;height:80px;background:-webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.6)));background:-webkit-linear-gradient(top,transparent 0,rgba(0,0,0,.6) 100%);background:-moz-linear-gradient(top,transparent 0,rgba(0,0,0,.6) 100%);background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.6) 100%)}.viewer-foot{display:flex;flex-wrap:wrap;flex-flow:row}.viewer-owner{width:190px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.viewer-owner .user-image{width:40px;height:40px;vertical-align:bottom;margin-right:10px}.viewer-owner .user-name{font-size:initial;text-decoration:none;vertical-align:middle;line-height:40px;color:inherit}.viewer-owner a.user-name:hover{color:rgba(255,255,255,.8)}.viewer-owner{order:1}.viewer-kb{font-size:.86em;flex-grow:1;order:2;padding-right:190px;text-align:center}.device-mobile .viewer-kb{display:none}.viewer-kb-input{display:inline-block}.viewer-kb-key{color:#fff;display:inline-block;margin:10px}.viewer-kb-key kbd{border:1px solid rgba(0,0,0,.5);background:rgba(120,120,120,.5);color:#fff;padding:4px 6px;border-radius:2px;display:inline-block;margin-right:5px;line-height:1}.viewer-like{transform:none;top:auto;bottom:20px;right:20px;position:absolute}.viewer:hover .hover-display--flex{display:flex}.--width-auto{width:auto}.--height-auto{height:auto}html.--idle .viewer,html.--idle .viewer *{cursor:none!important}html .fullscreen-show{display:none}:-webkit-full-screen .fullscreen-hide{display:none}:-moz-full-screen .fullscreen-hide{display:none}:-ms-fullscreen .fullscreen-hide{display:none}:fullscreen .fullscreen-hide{display:none}:-webkit-full-screen .fullscreen-show{display:block}:-moz-full-screen .fullscreen-show{display:block}:-ms-fullscreen .fullscreen-show{display:block}:fullscreen .fullscreen-show{display:block}a.image-container{-webkit-tap-highlight-color:transparent}a{color:#3498db;outline:0}a{text-decoration:none}input,textarea{border-color:#c6c8ca}.content-section,.input-label{margin-top:20px;margin-bottom:20px;position:relative}.content-section:first-child{margin-top:0}.input-label .input{width:100%;margin-bottom:0}.input-label .input+.input{margin-top:5px}.input-label .input-label{margin-bottom:10px}.input-label .input-label .label{font-weight:400}.input-label label .caption,.input-label label .optional{font-weight:400;font-size:.92em}.input-label label .caption:before,.input-label label .optional:before{content:"("}.input-label label .caption:after,.input-label label .optional:after{content:")"}.input-label-below{margin-top:5px;clear:both}.background-cover{position:fixed;top:0;right:0;bottom:0;left:0;background-position:center center;background-size:cover}.input-with-button{position:relative}.input-with-button button{background:0 0;position:absolute;right:0;top:50%;transform:translateY(-50%);border:none;font-size:22px;width:1em;height:1em;outline:0;color:#d9d9d9}.tone-dark .input-with-button button{color:#666}.input-with-button button:focus,.input-with-button button:hover{color:#3498db}#top-left{position:fixed;padding:5px;left:0;top:0}.top-button{padding:5px}.top-button .menu-box{margin-top:5px}.top-button-icon{font-size:16px;color:#fff;cursor:pointer;text-shadow:1px 1px 0 rgba(0,0,0,.15)}.background-default{background:#2ecc71;background:-moz-linear-gradient(top,#2ecc71 0,#3498db 100%);background:-webkit-linear-gradient(top,#2ecc71 0,#3498db 100%);background:linear-gradient(to bottom,#2ecc71 0,#3498db 100%)}.content-box{position:relative;margin:20px}.content-box-text :first-child{margin-top:0}.content-box-text :last-child{margin-bottom:0}.logo{max-height:50px;max-width:220px;margin-bottom:20px}.card-box{min-width:270px;width:calc(100vw - 40px)}.access-box-content{background:#fff}.fancy-box-heading{font-size:22px;margin:20px 0 30px 0}.fancy-fieldset{border:0;padding:0;margin:0}.fancy-fieldset input:not([type=checkbox]),.fancy-fieldset input[type=text],.fancy-fieldset select,.fancy-fieldset textarea{outline:0;padding:10px 0;width:100%;border-radius:0;border-color:#ebebeb;background:0 0;box-shadow:none}.fancy-fieldset .checkbox-label input[type=checkbox]{width:auto;vertical-align:middle;margin:0 0 0 -20px}.tone-dark .fancy-fieldset input,.tone-dark .fancy-fieldset input[type=text],.tone-dark .fancy-fieldset select,.tone-dark .fancy-fieldset textarea{box-shadow:none;border-color:#212121}.fancy-fieldset select{-webkit-appearance:none;-moz-appearance:none;appearance:none}.fancy-fieldset input,.fancy-fieldset select{padding:10px 0;border-top:transparent;border-left:transparent;border-right:transparent}.fancy-fieldset input:focus,.fancy-fieldset input:focus[type=text],.fancy-fieldset select:focus,.fancy-fieldset textarea:focus{border-color:#3498db}.fancy-fieldset .input-with-button input[type=password]{padding-right:30px}.fancy-fieldset>div:last-child{margin-bottom:inherit}.fancy-fieldset .label{line-height:1.5}.fancy-fieldset .input-label:last-child{margin-bottom:0}.fancy-fieldset .checkbox-label{margin:0}a.social-button{position:relative;text-decoration:none;display:inline-block;font-size:1em;margin:10px 0;background:#d9d9d9;padding:8px;text-decoration:none;display:block;color:#fff;border-radius:3px}a.social-button--facebook{background-color:#4267b2}a.social-button--facebook .icon:before{content:"\e8c9"}a.social-button--twitter{background-color:#1da1f2}a.social-button--google{background-color:#ea4335}a.social-button--vk{background-color:#45668e}.social-button-outline{position:relative;text-decoration:none;width:32px;height:32px;display:inline-block;border-radius:50%;border-width:1px;border-style:solid;font-size:16px;margin:5px}.social-button-outline .icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.social-button-outline.border-color-facebook:focus,.social-button-outline.border-color-facebook:hover{background-color:#3b5998}.social-button-outline.border-color-twitter:focus,.social-button-outline.border-color-twitter:hover{background-color:#1da1f2}.social-button-outline.border-color-google:focus,.social-button-outline.border-color-google:hover{background-color:#ea4335}.social-button-outline.border-color-vk:focus,.social-button-outline.border-color-vk:hover{background-color:#45668e}.social-button-outline:focus .icon,.social-button-outline:hover .icon{color:#fff}#login{padding:0;margin:0}.content-section--recaptchaFix #g-recaptcha{min-height:78px;-webkit-transform:scale(.89);-ms-transform:scale(.89);transform:scale(.89);-webkit-transform-origin:left;-ms-transform-origin:left;transform-origin:left}#login .input{margin:0}.btn-container--fixed{position:fixed;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);padding:10px;margin:0;border:0}.tone-dark .btn-container--fixed{background:rgba(0,0,0,.75)}body#dashboard{min-height:100%;padding-bottom:4em}body.full--wh{height:100%;width:100%}.display-flex #home-cover-slideshow{position:fixed}[data-content=dashboard-imports] [data-action=resume],[data-content=dashboard-imports] [data-errors="0"] [data-content=log-errors],[data-content=dashboard-imports] [data-result],[data-content=dashboard-imports] [data-started="0"] [data-content^=log]{display:none}[data-content=dashboard-imports] [data-errors="1"] [data-content=log-process],[data-content=dashboard-imports] [data-status=completed] [data-action=pause],[data-content=dashboard-imports] [data-status=completed][data-errors="0"] [data-result=success],[data-content=dashboard-imports] [data-status=paused] [data-action=resume],[data-content=dashboard-imports] [data-status][data-errors="1"] [data-result=error]{display:initial}[data-content=dashboard-imports] [data-status=canceled] [data-action=cancel],[data-content=dashboard-imports] [data-status=canceled] [data-action=pause],[data-content=dashboard-imports] [data-status=canceled] [data-target=modal-process-import],[data-content=dashboard-imports] [data-status=completed] [data-action=cancel],[data-content=dashboard-imports] [data-status=completed] [data-action=pause],[data-content=dashboard-imports] [data-status=completed] [data-target=modal-process-import],[data-content=dashboard-imports] [data-status=paused] [data-action=pause],[data-content=dashboard-imports] [data-status=queued] [data-action=pause],[data-content=dashboard-imports] [data-status=working] [data-target=modal-process-import]{display:none!important}.panel-thumb-list li{overflow:hidden}.connecting-ip{font-family:monospace;font-size:27px}.code{padding:2px;background:#ecf0f1}.tone-dark .code{background:#0b0b0b}.importing{background:#ecf0f1;padding:10px;position:relative}.tone-dark .importing{background:#111}.importing:nth-child(even){margin:0 10px}.phablet .importing:nth-child(even),.phone .importing:nth-child(even){margin:10px 0}.importing-stats{margin:10px 0}.importing-stats .figure{display:inline-block;padding:5px;background:rgba(0,0,0,.1)}.tone-dark .importing-stats .figure{background:rgba(255,255,255,.1)}body#index.landing [data-action=top-bar-tone]{display:none}
\ No newline at end of file
diff --git a/app/themes/Peafowl/views/dashboard.php b/app/themes/Peafowl/views/dashboard.php
index 4e5157b..3ef1be2 100644
--- a/app/themes/Peafowl/views/dashboard.php
+++ b/app/themes/Peafowl/views/dashboard.php
@@ -108,7 +108,359 @@ function free_version_waring($wrap=true)
-
+
+
+
+
+
+
+
🤖
+
'' . G_ROOT_PATH . 'importing']); ?> '1',
+ '%m' => _n('minute', 'minutes', '1')
+ ]); ?>
+
+
+ _s('Queued'),
+ 'working' => _s('Working'),
+ 'paused' => _s('Paused'),
+ 'canceled' => _s('Canceled'),
+ 'completed' => _s('Completed'),
+ ];
+ if ($continuous = CHV\Import::getContinuous()) {
+ foreach ($continuous as $v) {
+ $boxTpl = '
+
Path %pathRelative%
+
+
+
' . _s('Actions') . '
+
+
+
+
+
+ %images% images
+ %albums% albums
+ %users% users
+
+
' . _s('Status') . ': %displayStatus%
+
@%dateTime% UTC
+
+
';
+ echo strtr($boxTpl, [
+ '%id%' => $v['id'],
+ '%dateTime%' => $v['time_updated'],
+ '%object%' => htmlspecialchars(json_encode($v), ENT_QUOTES, 'UTF-8'),
+ '%status%' => $v['status'],
+ '%parse%' => $v['options']['root'],
+ '%shortParse%' => $v['options']['root'][0],
+ '%displayStatus%' => $statusesDisplay[$v['status']],
+ '%path%' => $v['path'],
+ '%pathRelative%' => '.' . G\absolute_to_relative($v['path']),
+ '%users%' => $v['users'] ?: 0,
+ '%images%' => $v['images'] ?: 0,
+ '%albums%' => $v['albums'] ?: 0,
+ '%errors%' => $v['errors'] ?: 0,
+ '%started%' => $v['started'] ?: 0,
+ ]);
+ }
+ } ?>
+
+
+
+
+ * * * * * IS_CRON=1 THREAD_ID=1 /usr/bin/php >/dev/null 2>&1
+
+
'THREAD_ID
']); ?>
+
+ ⚠ G_ROOT_PATH . 'importing']); ?>
+
+
+
+
+
+
+ &$v) {
+ if ($v['status'] != 'working') {
+ continue;
+ }
+ $then = strtotime($v['time_updated']);
+ $now = strtotime(G\datetimegmt());
+ if ($now > ($then + 300)) { // 5 min
+ $v['status'] = 'paused';
+ CHV\DB::update('imports', ['status' => 'paused'], ['id' => $v['id']]);
+ }
+ }
+ $imports = array_reverse($imports);
+ }
+ $rowTpl = '
+ %id%
+ %shortParse%
+
+
+
+ %displayStatus%
+
+ %path%
+ %users% ' . _s('Users') . '
+ %albums% ' . _s('Albums') . '
+ %images% ' . _s('Images') . '
+
+
+
+
' . _s('Actions') . '
+
+
+
+
+
+ ';
+ $manualImportingClass = is_array($imports) == false ? ' hidden' : '';
+ ?>
+
+
+
+
+ $v) {
+ echo strtr($rowTpl, [
+ '%id%' => $v['id'],
+ '%object%' => htmlspecialchars(json_encode($v), ENT_QUOTES, 'UTF-8'),
+ '%status%' => $v['status'],
+ '%parse%' => $v['options']['root'],
+ '%shortParse%' => $v['options']['root'][0],
+ '%displayStatus%' => $statusesDisplay[$v['status']],
+ '%path%' => $v['path'],
+ '%users%' => $v['users'] ?: 0,
+ '%images%' => $v['images'] ?: 0,
+ '%albums%' => $v['albums'] ?: 0,
+ '%errors%' => $v['errors'] ?: 0,
+ '%started%' => $v['started'] ?: 0,
+ ]);
+ }
+ }
+ ?>
+
+
* @author Jordi Boggiano
- * @see http://www.php-fig.org/psr/psr-0/
- * @see http://www.php-fig.org/psr/psr-4/
+ * @see https://www.php-fig.org/psr/psr-0/
+ * @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
diff --git a/app/vendor/composer/InstalledVersions.php b/app/vendor/composer/InstalledVersions.php
new file mode 100644
index 0000000..c67d75f
--- /dev/null
+++ b/app/vendor/composer/InstalledVersions.php
@@ -0,0 +1,245 @@
+
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '892dc79d4abe4d0139868de4b440739906564564',
+ 'name' => 'chevereto/chevereto-free',
+ ),
+ 'versions' =>
+ array (
+ 'chevereto/chevereto-free' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '892dc79d4abe4d0139868de4b440739906564564',
+ ),
+ 'jbroadway/urlify' =>
+ array (
+ 'pretty_version' => '1.1.3-stable',
+ 'version' => '1.1.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '37fe4e7680a1c8cd68ac43a27dac7ef4be476300',
+ ),
+ 'mobiledetect/mobiledetectlib' =>
+ array (
+ 'pretty_version' => '2.8.34',
+ 'version' => '2.8.34.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '6f8113f57a508494ca36acbcfa2dc2d923c7ed5b',
+ ),
+ 'phpmailer/phpmailer' =>
+ array (
+ 'pretty_version' => 'v6.1.7',
+ 'version' => '6.1.7.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0',
+ ),
+ 'tijsverkoyen/akismet' =>
+ array (
+ 'pretty_version' => '1.1.1',
+ 'version' => '1.1.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '6f7987fe181fd0fddbc9832f2ddeaf088425c83f',
+ ),
+ ),
+);
+
+
+
+
+
+
+
+public static function getInstalledPackages()
+{
+return array_keys(self::$installed['versions']);
+}
+
+
+
+
+
+
+
+
+
+public static function isInstalled($packageName)
+{
+return isset(self::$installed['versions'][$packageName]);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+public static function satisfies(VersionParser $parser, $packageName, $constraint)
+{
+$constraint = $parser->parseConstraints($constraint);
+$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+return $provided->matches($constraint);
+}
+
+
+
+
+
+
+
+
+
+
+public static function getVersionRanges($packageName)
+{
+if (!isset(self::$installed['versions'][$packageName])) {
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+$ranges = array();
+if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
+$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
+}
+if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
+$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
+}
+if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
+$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
+}
+if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
+$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
+}
+
+return implode(' || ', $ranges);
+}
+
+
+
+
+
+public static function getVersion($packageName)
+{
+if (!isset(self::$installed['versions'][$packageName])) {
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+if (!isset(self::$installed['versions'][$packageName]['version'])) {
+return null;
+}
+
+return self::$installed['versions'][$packageName]['version'];
+}
+
+
+
+
+
+public static function getPrettyVersion($packageName)
+{
+if (!isset(self::$installed['versions'][$packageName])) {
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
+return null;
+}
+
+return self::$installed['versions'][$packageName]['pretty_version'];
+}
+
+
+
+
+
+public static function getReference($packageName)
+{
+if (!isset(self::$installed['versions'][$packageName])) {
+throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+}
+
+if (!isset(self::$installed['versions'][$packageName]['reference'])) {
+return null;
+}
+
+return self::$installed['versions'][$packageName]['reference'];
+}
+
+
+
+
+
+public static function getRootPackage()
+{
+return self::$installed['root'];
+}
+
+
+
+
+
+
+
+public static function getRawData()
+{
+return self::$installed;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+public static function reload($data)
+{
+self::$installed = $data;
+}
+}
diff --git a/app/vendor/composer/autoload_classmap.php b/app/vendor/composer/autoload_classmap.php
index 5b216c3..c5ad0ae 100644
--- a/app/vendor/composer/autoload_classmap.php
+++ b/app/vendor/composer/autoload_classmap.php
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));
return array(
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'Detection\\MobileDetect' => $vendorDir . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php',
'Mobile_Detect' => $vendorDir . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
'PHPMailer\\PHPMailer\\Exception' => $vendorDir . '/phpmailer/phpmailer/src/Exception.php',
@@ -16,5 +17,4 @@ return array(
'TijsVerkoyen\\Akismet\\Akismet' => $vendorDir . '/tijsverkoyen/akismet/Akismet.php',
'TijsVerkoyen\\Akismet\\Exception' => $vendorDir . '/tijsverkoyen/akismet/Exception.php',
'URLify' => $vendorDir . '/jbroadway/urlify/URLify.php',
- 'URLifyTest' => $vendorDir . '/jbroadway/urlify/tests/URLifyTest.php',
);
diff --git a/app/vendor/composer/autoload_real.php b/app/vendor/composer/autoload_real.php
index 0b8ba41..ce157b0 100644
--- a/app/vendor/composer/autoload_real.php
+++ b/app/vendor/composer/autoload_real.php
@@ -22,13 +22,15 @@ class ComposerAutoloaderInit5ebab6dc32ca006b1a67a63e20c04846
return self::$loader;
}
+ require __DIR__ . '/platform_check.php';
+
spl_autoload_register(array('ComposerAutoloaderInit5ebab6dc32ca006b1a67a63e20c04846', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit5ebab6dc32ca006b1a67a63e20c04846', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
- require_once __DIR__ . '/autoload_static.php';
+ require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit5ebab6dc32ca006b1a67a63e20c04846::getInitializer($loader));
} else {
diff --git a/app/vendor/composer/autoload_static.php b/app/vendor/composer/autoload_static.php
index 7f6ce08..8321846 100644
--- a/app/vendor/composer/autoload_static.php
+++ b/app/vendor/composer/autoload_static.php
@@ -38,6 +38,7 @@ class ComposerStaticInit5ebab6dc32ca006b1a67a63e20c04846
);
public static $classMap = array (
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'Detection\\MobileDetect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php',
'Mobile_Detect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
'PHPMailer\\PHPMailer\\Exception' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/Exception.php',
@@ -48,7 +49,6 @@ class ComposerStaticInit5ebab6dc32ca006b1a67a63e20c04846
'TijsVerkoyen\\Akismet\\Akismet' => __DIR__ . '/..' . '/tijsverkoyen/akismet/Akismet.php',
'TijsVerkoyen\\Akismet\\Exception' => __DIR__ . '/..' . '/tijsverkoyen/akismet/Exception.php',
'URLify' => __DIR__ . '/..' . '/jbroadway/urlify/URLify.php',
- 'URLifyTest' => __DIR__ . '/..' . '/jbroadway/urlify/tests/URLifyTest.php',
);
public static function getInitializer(ClassLoader $loader)
diff --git a/app/vendor/composer/installed.json b/app/vendor/composer/installed.json
index 50850ee..144cafa 100644
--- a/app/vendor/composer/installed.json
+++ b/app/vendor/composer/installed.json
@@ -1,226 +1,237 @@
-[
- {
- "name": "jbroadway/urlify",
- "version": "1.1.3-stable",
- "version_normalized": "1.1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/jbroadway/urlify.git",
- "reference": "37fe4e7680a1c8cd68ac43a27dac7ef4be476300"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jbroadway/urlify/zipball/37fe4e7680a1c8cd68ac43a27dac7ef4be476300",
- "reference": "37fe4e7680a1c8cd68ac43a27dac7ef4be476300",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5"
- },
- "time": "2019-06-13T18:30:56+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "URLify": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause-Clear"
- ],
- "authors": [
- {
- "name": "Johnny Broadway",
- "email": "johnny@johnnybroadway.com",
- "homepage": "http://www.johnnybroadway.com/"
- }
- ],
- "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.",
- "homepage": "https://github.com/jbroadway/urlify",
- "keywords": [
- "encode",
- "iconv",
- "link",
- "slug",
- "translit",
- "transliterate",
- "transliteration",
- "url",
- "urlify"
- ]
- },
- {
- "name": "mobiledetect/mobiledetectlib",
- "version": "2.8.34",
- "version_normalized": "2.8.34.0",
- "source": {
- "type": "git",
- "url": "https://github.com/serbanghita/Mobile-Detect.git",
- "reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
- "reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8.35||~5.7"
- },
- "time": "2019-09-18T18:44:20+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "classmap": [
- "Mobile_Detect.php"
+{
+ "packages": [
+ {
+ "name": "jbroadway/urlify",
+ "version": "1.1.3-stable",
+ "version_normalized": "1.1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jbroadway/urlify.git",
+ "reference": "37fe4e7680a1c8cd68ac43a27dac7ef4be476300"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jbroadway/urlify/zipball/37fe4e7680a1c8cd68ac43a27dac7ef4be476300",
+ "reference": "37fe4e7680a1c8cd68ac43a27dac7ef4be476300",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5"
+ },
+ "time": "2019-06-13T18:30:56+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "URLify": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause-Clear"
],
- "psr-0": {
- "Detection": "namespaced/"
- }
+ "authors": [
+ {
+ "name": "Johnny Broadway",
+ "email": "johnny@johnnybroadway.com",
+ "homepage": "http://www.johnnybroadway.com/"
+ }
+ ],
+ "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.",
+ "homepage": "https://github.com/jbroadway/urlify",
+ "keywords": [
+ "encode",
+ "iconv",
+ "link",
+ "slug",
+ "translit",
+ "transliterate",
+ "transliteration",
+ "url",
+ "urlify"
+ ],
+ "install-path": "../jbroadway/urlify"
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Serban Ghita",
- "email": "serbanghita@gmail.com",
- "homepage": "http://mobiledetect.net",
- "role": "Developer"
- }
- ],
- "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
- "homepage": "https://github.com/serbanghita/Mobile-Detect",
- "keywords": [
- "detect mobile devices",
- "mobile",
- "mobile detect",
- "mobile detector",
- "php mobile detect"
- ]
- },
- {
- "name": "phpmailer/phpmailer",
- "version": "v6.1.6",
- "version_normalized": "6.1.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
- "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-filter": "*",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "doctrine/annotations": "^1.2",
- "friendsofphp/php-cs-fixer": "^2.2",
- "phpunit/phpunit": "^4.8 || ^5.7"
- },
- "suggest": {
- "ext-mbstring": "Needed to send email in multibyte encoding charset",
- "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
- "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
- "psr/log": "For optional PSR-3 debug logging",
- "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
- "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
- },
- "time": "2020-05-27T12:24:03+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "PHPMailer\\PHPMailer\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1-only"
- ],
- "authors": [
- {
- "name": "Marcus Bointon",
- "email": "phpmailer@synchromedia.co.uk"
+ {
+ "name": "mobiledetect/mobiledetectlib",
+ "version": "2.8.34",
+ "version_normalized": "2.8.34.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/serbanghita/Mobile-Detect.git",
+ "reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b"
},
- {
- "name": "Jim Jagielski",
- "email": "jimjag@gmail.com"
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
+ "reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
+ "shasum": ""
},
- {
- "name": "Andy Prevost",
- "email": "codeworxtech@users.sourceforge.net"
+ "require": {
+ "php": ">=5.0.0"
},
- {
- "name": "Brent R. Matzelle"
- }
- ],
- "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
- "funding": [
- {
- "url": "https://github.com/synchro",
- "type": "github"
- }
- ]
- },
- {
- "name": "tijsverkoyen/akismet",
- "version": "1.1.1",
- "version_normalized": "1.1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/tijsverkoyen/Akismet.git",
- "reference": "6f7987fe181fd0fddbc9832f2ddeaf088425c83f"
+ "require-dev": {
+ "phpunit/phpunit": "~4.8.35||~5.7"
+ },
+ "time": "2019-09-18T18:44:20+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "Mobile_Detect.php"
+ ],
+ "psr-0": {
+ "Detection": "namespaced/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Serban Ghita",
+ "email": "serbanghita@gmail.com",
+ "homepage": "http://mobiledetect.net",
+ "role": "Developer"
+ }
+ ],
+ "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
+ "homepage": "https://github.com/serbanghita/Mobile-Detect",
+ "keywords": [
+ "detect mobile devices",
+ "mobile",
+ "mobile detect",
+ "mobile detector",
+ "php mobile detect"
+ ],
+ "install-path": "../mobiledetect/mobiledetectlib"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/Akismet/zipball/6f7987fe181fd0fddbc9832f2ddeaf088425c83f",
- "reference": "6f7987fe181fd0fddbc9832f2ddeaf088425c83f",
- "shasum": ""
+ {
+ "name": "phpmailer/phpmailer",
+ "version": "v6.1.7",
+ "version_normalized": "6.1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPMailer/PHPMailer.git",
+ "reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
+ "reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.2",
+ "friendsofphp/php-cs-fixer": "^2.2",
+ "phpunit/phpunit": "^4.8 || ^5.7"
+ },
+ "suggest": {
+ "ext-mbstring": "Needed to send email in multibyte encoding charset",
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+ "psr/log": "For optional PSR-3 debug logging",
+ "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
+ },
+ "time": "2020-07-14T18:50:27+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "PHPMailer\\PHPMailer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-only"
+ ],
+ "authors": [
+ {
+ "name": "Marcus Bointon",
+ "email": "phpmailer@synchromedia.co.uk"
+ },
+ {
+ "name": "Jim Jagielski",
+ "email": "jimjag@gmail.com"
+ },
+ {
+ "name": "Andy Prevost",
+ "email": "codeworxtech@users.sourceforge.net"
+ },
+ {
+ "name": "Brent R. Matzelle"
+ }
+ ],
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "support": {
+ "issues": "https://github.com/PHPMailer/PHPMailer/issues",
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.1.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/synchro",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phpmailer/phpmailer"
},
- "require": {
- "ext-curl": "*",
- "php": ">=5.2.0"
- },
- "time": "2016-07-19T13:50:18+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "classmap": [
- ""
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD"
- ],
- "authors": [
- {
- "name": "Tijs Verkoyen",
- "email": "akismet@verkoyen.eu",
- "role": "Developer"
- }
- ],
- "description": "Akismet is a wrapper-class to communicate with the Akismet API.",
- "homepage": "https://github.com/tijsverkoyen/Akismet"
- }
-]
+ {
+ "name": "tijsverkoyen/akismet",
+ "version": "1.1.1",
+ "version_normalized": "1.1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/Akismet.git",
+ "reference": "6f7987fe181fd0fddbc9832f2ddeaf088425c83f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/Akismet/zipball/6f7987fe181fd0fddbc9832f2ddeaf088425c83f",
+ "reference": "6f7987fe181fd0fddbc9832f2ddeaf088425c83f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "php": ">=5.2.0"
+ },
+ "time": "2016-07-19T13:50:18+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "akismet@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "Akismet is a wrapper-class to communicate with the Akismet API.",
+ "homepage": "https://github.com/tijsverkoyen/Akismet",
+ "install-path": "../tijsverkoyen/akismet"
+ }
+ ],
+ "dev": true
+}
diff --git a/app/vendor/composer/installed.php b/app/vendor/composer/installed.php
new file mode 100644
index 0000000..1ac16ff
--- /dev/null
+++ b/app/vendor/composer/installed.php
@@ -0,0 +1,60 @@
+
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '892dc79d4abe4d0139868de4b440739906564564',
+ 'name' => 'chevereto/chevereto-free',
+ ),
+ 'versions' =>
+ array (
+ 'chevereto/chevereto-free' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '892dc79d4abe4d0139868de4b440739906564564',
+ ),
+ 'jbroadway/urlify' =>
+ array (
+ 'pretty_version' => '1.1.3-stable',
+ 'version' => '1.1.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '37fe4e7680a1c8cd68ac43a27dac7ef4be476300',
+ ),
+ 'mobiledetect/mobiledetectlib' =>
+ array (
+ 'pretty_version' => '2.8.34',
+ 'version' => '2.8.34.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '6f8113f57a508494ca36acbcfa2dc2d923c7ed5b',
+ ),
+ 'phpmailer/phpmailer' =>
+ array (
+ 'pretty_version' => 'v6.1.7',
+ 'version' => '6.1.7.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0',
+ ),
+ 'tijsverkoyen/akismet' =>
+ array (
+ 'pretty_version' => '1.1.1',
+ 'version' => '1.1.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '6f7987fe181fd0fddbc9832f2ddeaf088425c83f',
+ ),
+ ),
+);
diff --git a/app/vendor/composer/platform_check.php b/app/vendor/composer/platform_check.php
new file mode 100644
index 0000000..b9728b4
--- /dev/null
+++ b/app/vendor/composer/platform_check.php
@@ -0,0 +1,23 @@
+= 50500)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 5.5.0". You are running ' . PHP_VERSION . '.';
+}
+
+$missingExtensions = array();
+extension_loaded('ctype') || $missingExtensions[] = 'ctype';
+extension_loaded('curl') || $missingExtensions[] = 'curl';
+extension_loaded('filter') || $missingExtensions[] = 'filter';
+
+if ($missingExtensions) {
+ $issues[] = 'Your Composer dependencies require the following PHP extensions to be installed: ' . implode(', ', $missingExtensions);
+}
+
+if ($issues) {
+ echo 'Composer detected issues in your platform:' . "\n\n" . implode("\n", $issues);
+ exit(104);
+}
diff --git a/app/vendor/phpmailer/phpmailer/VERSION b/app/vendor/phpmailer/phpmailer/VERSION
index 3af67b5..cb6b1ff 100644
--- a/app/vendor/phpmailer/phpmailer/VERSION
+++ b/app/vendor/phpmailer/phpmailer/VERSION
@@ -1 +1 @@
-6.1.6
\ No newline at end of file
+6.1.7
\ No newline at end of file
diff --git a/app/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php b/app/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php
index 4408e63..c78237e 100644
--- a/app/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php
+++ b/app/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php
@@ -19,8 +19,8 @@ $PHPMAILER_LANG['invalid_address'] = 'Felaktig adress: ';
$PHPMAILER_LANG['provide_address'] = 'Du måste ange minst en mottagares e-postadress.';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fel: Följande mottagare är felaktig: ';
-$PHPMAILER_LANG['signing'] = 'Signerings fel: ';
+$PHPMAILER_LANG['signing'] = 'Signeringsfel: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() misslyckades.';
-$PHPMAILER_LANG['smtp_error'] = 'SMTP server fel: ';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP serverfel: ';
$PHPMAILER_LANG['variable_set'] = 'Kunde inte definiera eller återställa variabel: ';
$PHPMAILER_LANG['extension_missing'] = 'Tillägg ej tillgängligt: ';
diff --git a/app/vendor/phpmailer/phpmailer/src/PHPMailer.php b/app/vendor/phpmailer/phpmailer/src/PHPMailer.php
index ed14d7c..2d4156f 100644
--- a/app/vendor/phpmailer/phpmailer/src/PHPMailer.php
+++ b/app/vendor/phpmailer/phpmailer/src/PHPMailer.php
@@ -441,6 +441,8 @@ class PHPMailer
* Only supported in `mail` and `sendmail` transports, not in SMTP.
*
* @var bool
+ *
+ * @deprecated 6.0.0 PHPMailer isn't a mailing list manager!
*/
public $SingleTo = false;
@@ -745,7 +747,7 @@ class PHPMailer
*
* @var string
*/
- const VERSION = '6.1.6';
+ const VERSION = '6.1.7';
/**
* Error severity: message only, continue processing.
@@ -1307,7 +1309,7 @@ class PHPMailer
$patternselect = static::$validator;
}
if (is_callable($patternselect)) {
- return $patternselect($address);
+ return call_user_func($patternselect, $address);
}
//Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) {
@@ -2975,7 +2977,6 @@ class PHPMailer
if ('' === $name) {
$name = $filename;
}
-
if (!$this->validateEncoding($encoding)) {
throw new Exception($this->lang('encoding') . $encoding);
}
@@ -3990,7 +3991,8 @@ class PHPMailer
* @param string $message HTML message string
* @param string $basedir Absolute path to a base directory to prepend to relative paths to images
* @param bool|callable $advanced Whether to use the internal HTML to text converter
- * or your own custom converter @return string $message The transformed message Body
+ * or your own custom converter
+ * @return string The transformed message body
*
* @throws Exception
*
@@ -4114,7 +4116,7 @@ class PHPMailer
public function html2text($html, $advanced = false)
{
if (is_callable($advanced)) {
- return $advanced($html);
+ return call_user_func($advanced, $html);
}
return html_entity_decode(
diff --git a/app/vendor/phpmailer/phpmailer/src/POP3.php b/app/vendor/phpmailer/phpmailer/src/POP3.php
index 7d4c88f..9a3b07c 100644
--- a/app/vendor/phpmailer/phpmailer/src/POP3.php
+++ b/app/vendor/phpmailer/phpmailer/src/POP3.php
@@ -45,7 +45,7 @@ class POP3
*
* @var string
*/
- const VERSION = '6.1.6';
+ const VERSION = '6.1.7';
/**
* Default POP3 port number.
diff --git a/app/vendor/phpmailer/phpmailer/src/SMTP.php b/app/vendor/phpmailer/phpmailer/src/SMTP.php
index aa55551..6b0b73d 100644
--- a/app/vendor/phpmailer/phpmailer/src/SMTP.php
+++ b/app/vendor/phpmailer/phpmailer/src/SMTP.php
@@ -34,7 +34,7 @@ class SMTP
*
* @var string
*/
- const VERSION = '6.1.6';
+ const VERSION = '6.1.7';
/**
* SMTP line break constant.
@@ -311,12 +311,6 @@ class SMTP
*/
public function connect($host, $port = null, $timeout = 30, $options = [])
{
- static $streamok;
- //This is enabled by default since 5.0.0 but some providers disable it
- //Check this once and cache the result
- if (null === $streamok) {
- $streamok = function_exists('stream_socket_client');
- }
// Clear errors to avoid confusion
$this->setError('');
// Make sure we are __not__ connected
@@ -335,12 +329,48 @@ class SMTP
(count($options) > 0 ? var_export($options, true) : 'array()'),
self::DEBUG_CONNECTION
);
+
+ $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options);
+
+ if ($this->smtp_conn === false) {
+ //Error info already set inside `getSMTPConnection()`
+ return false;
+ }
+
+ $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
+
+ // Get any announcement
+ $this->last_reply = $this->get_lines();
+ $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
+
+ return true;
+ }
+
+ /**
+ * Create connection to the SMTP server.
+ *
+ * @param string $host SMTP server IP or host name
+ * @param int $port The port number to connect to
+ * @param int $timeout How long to wait for the connection to open
+ * @param array $options An array of options for stream_context_create()
+ *
+ * @return false|resource
+ */
+ protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = [])
+ {
+ static $streamok;
+ //This is enabled by default since 5.0.0 but some providers disable it
+ //Check this once and cache the result
+ if (null === $streamok) {
+ $streamok = function_exists('stream_socket_client');
+ }
+
$errno = 0;
$errstr = '';
if ($streamok) {
$socket_context = stream_context_create($options);
set_error_handler([$this, 'errorHandler']);
- $this->smtp_conn = stream_socket_client(
+ $connection = stream_socket_client(
$host . ':' . $port,
$errno,
$errstr,
@@ -356,7 +386,7 @@ class SMTP
self::DEBUG_CONNECTION
);
set_error_handler([$this, 'errorHandler']);
- $this->smtp_conn = fsockopen(
+ $connection = fsockopen(
$host,
$port,
$errno,
@@ -365,8 +395,9 @@ class SMTP
);
restore_error_handler();
}
+
// Verify we connected properly
- if (!is_resource($this->smtp_conn)) {
+ if (!is_resource($connection)) {
$this->setError(
'Failed to connect to server',
'',
@@ -381,22 +412,19 @@ class SMTP
return false;
}
- $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
+
// SMTP server can take longer to respond, give longer timeout for first read
// Windows does not have support for this timeout function
if (strpos(PHP_OS, 'WIN') !== 0) {
- $max = (int) ini_get('max_execution_time');
+ $max = (int)ini_get('max_execution_time');
// Don't bother if unlimited
if (0 !== $max && $timeout > $max) {
@set_time_limit($timeout);
}
- stream_set_timeout($this->smtp_conn, $timeout, 0);
+ stream_set_timeout($connection, $timeout, 0);
}
- // Get any announcement
- $announce = $this->get_lines();
- $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
- return true;
+ return $connection;
}
/**
@@ -1166,13 +1194,40 @@ class SMTP
$selW = null;
while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
//Must pass vars in here as params are by reference
- if (!stream_select($selR, $selW, $selW, $this->Timelimit)) {
+ //solution for signals inspired by https://github.com/symfony/symfony/pull/6540
+ set_error_handler([$this, 'errorHandler']);
+ $n = stream_select($selR, $selW, $selW, $this->Timelimit);
+ restore_error_handler();
+
+ if ($n === false) {
+ $message = $this->getError()['detail'];
+
+ $this->edebug(
+ 'SMTP -> get_lines(): select failed (' . $message . ')',
+ self::DEBUG_LOWLEVEL
+ );
+
+ //stream_select returns false when the `select` system call is interrupted by an incoming signal, try the select again
+ if (stripos($message, 'interrupted system call') !== false) {
+ $this->edebug(
+ 'SMTP -> get_lines(): retrying stream_select',
+ self::DEBUG_LOWLEVEL
+ );
+ $this->setError('');
+ continue;
+ }
+
+ break;
+ }
+
+ if (!$n) {
$this->edebug(
'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',
self::DEBUG_LOWLEVEL
);
break;
}
+
//Deliberate noise suppression - errors are handled afterwards
$str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
$this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
diff --git a/composer.lock b/composer.lock
index 18d630f..a06d489 100644
--- a/composer.lock
+++ b/composer.lock
@@ -61,6 +61,10 @@
"url",
"urlify"
],
+ "support": {
+ "issues": "https://github.com/jbroadway/urlify/issues",
+ "source": "https://github.com/jbroadway/urlify/tree/1.1.3-stable"
+ },
"time": "2019-06-13T18:30:56+00:00"
},
{
@@ -113,20 +117,24 @@
"mobile detector",
"php mobile detect"
],
+ "support": {
+ "issues": "https://github.com/serbanghita/Mobile-Detect/issues",
+ "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.34"
+ },
"time": "2019-09-18T18:44:20+00:00"
},
{
"name": "phpmailer/phpmailer",
- "version": "v6.1.6",
+ "version": "v6.1.7",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3"
+ "reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
- "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
+ "reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
"shasum": ""
},
"require": {
@@ -175,13 +183,17 @@
}
],
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "support": {
+ "issues": "https://github.com/PHPMailer/PHPMailer/issues",
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.1.7"
+ },
"funding": [
{
"url": "https://github.com/synchro",
"type": "github"
}
],
- "time": "2020-05-27T12:24:03+00:00"
+ "time": "2020-07-14T18:50:27+00:00"
},
{
"name": "tijsverkoyen/akismet",
@@ -220,6 +232,10 @@
],
"description": "Akismet is a wrapper-class to communicate with the Akismet API.",
"homepage": "https://github.com/tijsverkoyen/Akismet",
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/Akismet/issues",
+ "source": "https://github.com/tijsverkoyen/Akismet/tree/master"
+ },
"time": "2016-07-19T13:50:18+00:00"
}
],
@@ -231,5 +247,5 @@
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
- "plugin-api-version": "1.1.0"
+ "plugin-api-version": "2.0.0"
}
diff --git a/importing.php b/importing.php
new file mode 100644
index 0000000..e0359f1
--- /dev/null
+++ b/importing.php
@@ -0,0 +1,52 @@
+
+
+
+ Copyright (C) Rodolfo Berrios A. All rights reserved.
+
+ BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
+ http://chevereto.com/license
+
+ --------------------------------------------------------------------- */
+
+define('access', 'cli');
+
+$isCron = getenv('IS_CRON');
+if (!$isCron) {
+ header('HTTP/1.0 403 Forbidden');
+ die("403 Forbidden\n");
+}
+$threadID = getenv('THREAD_ID');
+if (!$threadID) {
+ die("Missing thread id (int)\n");
+}
+if (!include_once('app/loader.php')) {
+ die("Can't find app/loader.php\n");
+}
+do {
+ try {
+ CHV\Import::refresh();
+ $jobs = CHV\Import::autoJobs();
+ if (!$jobs) {
+ echo "No jobs left.\n";
+ die(0);
+ }
+ $id = $jobs[0]['import_id'];
+ $import = new CHV\Import();
+ $import->id = $id;
+ $import->thread = (int) $threadID;
+ $import->process();
+ echo "Processed job id #$id\n";
+ $loop++;
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ die(255);
+ }
+} while (CHV\isSafeToExecute());
+echo "--\nLooped $loop times ~ /dashboard/bulk for stats \n";
+die(0);
diff --git a/importing/.htaccess b/importing/.htaccess
new file mode 100644
index 0000000..2fdb79b
--- /dev/null
+++ b/importing/.htaccess
@@ -0,0 +1 @@
+SetHandler default-handler
\ No newline at end of file