Forked from Chevereto v3.10.5
This commit is contained in:
rodolfoberrios 2018-04-17 18:25:26 -03:00
parent 349e09d504
commit b5eaccf6c7
120 changed files with 12284 additions and 8614 deletions

View file

@ -18,12 +18,12 @@ Paid edition includes all features (storages, banners, likes, followers, social
| Item | Free | Paid |
|---------------------------------------------- |----------------- |------------------------ |
| Updates | Each 6 months | Monthly |
| Features delay | 6 months | Zero |
| Features delay | +6 months | Zero |
| One click system update | Yes | Yes |
| Upload plugin | Yes | Yes |
| Tech support | No | Yes |
| External storage support | No | Yes |
| Manage banners | No | Yes |
| Upload plugin | No | Yes |
| Likes + Followers | No | Yes |
| Facebook, Twitter, Google and VK signup | No | Yes |

View file

@ -1,6 +1,6 @@
<?php
define('G_APP_NAME', 'Chevereto Free');
define('G_APP_VERSION', '1.0.9');
define('G_APP_VERSION', '1.0.10');
define('G_APP_GITHUB_OWNER', 'Chevereto');
define('G_APP_GITHUB_REPO', 'Chevereto-Free');
define('G_APP_GITHUB_REPO_URL', 'https://github.com/' . G_APP_GITHUB_OWNER . '/' . G_APP_GITHUB_REPO);

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-05-26 16:57+0000',
'PO-Revision-Date' => '2017-05-26 16:57+0000',
'POT-Creation-Date' => '2017-10-01 18:12+0000',
'PO-Revision-Date' => '2017-10-01 18:12+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'cs',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Plugin",
],
"Plugin route" => [
0 => "Směrování Pluginu",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Toto aktivujte, aby jste zobrazili instrukce pluginu na %u. Odkaz na tyto pokyny bude přidán do nabídky %s.Toto nastavení nemá vliv na administrátory.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Toto použijte pro nastavení vlastní URL adresy pro %p. Upozorňujeme, že musíte v této URL adrese ručně zkopírovat %s.",
],
"Invalid email" => [
0 => "Neplatný e-mail",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Probíhá aktualizace",
],
"An error occurred. Please try again later." => [
0 => "Došlo k chybě. Prosím zkuste opakovat akci později.",
],
"Missing %s file" => [
0 => "Chybějící %s soubor",
],
@ -180,9 +189,6 @@ $translation_table = [
"Trending" => [
0 => "Trendy",
],
"Popular" => [
0 => "Populární",
],
"Top users" => [
0 => "Top uživatelé",
],
@ -195,6 +201,9 @@ $translation_table = [
"Most viewed" => [
0 => "Nejprohlíženější",
],
"Popular" => [
0 => "Populární",
],
"Most liked" => [
0 => "Nejoblíbenější",
],
@ -328,7 +337,7 @@ $translation_table = [
0 => "zobrazit na %s",
],
"We use our own and third party cookies to improve your browsing experience and our services. If you continue using our website is understood that you accept this cookie policy." => [
0 => "Používáme vlastní a cookie třetích stran s cílem zlepšit váš komfort při prohlížení a používání našich služeb. Chcete-li pokračovat v používání našich webových stránek, je nutné, že přijmete tuto cookie politiku.",
0 => "Za účelem vylepšení vašeho komfortu při prohlížení a užívání našich služeb používáme cookies. Používáním našich stránek s tímto souhlasíte.",
],
"You have been forbidden to use this website." => [
0 => "Máte zakázáno používat tuto webovou stránku.",
@ -600,6 +609,9 @@ $translation_table = [
"Before main title (%s)" => [
0 => "Před hlavním názvem (%s)",
],
"After call to action (%s)" => [
0 => "Po \"call to action\" (%s)",
],
"After cover (%s)" => [
0 => "Po titulním obrázku (%s)",
],
@ -753,6 +765,12 @@ $translation_table = [
"Invalid homepage style" => [
0 => "Neplatný styl domovské stránky",
],
"Invalid homepage call to action button color" => [
0 => "Neplatný příkaz tlačítka akce.",
],
"Invalid homepage call to action functionality" => [
0 => "Neplatný příkaz.",
],
"Invalid title" => [
0 => "Neplatný název",
],
@ -804,6 +822,9 @@ $translation_table = [
"Can't map %m to an existing folder (%f)" => [
0 => "%m nelze namapovat do existující složky (%f)",
],
"Can't map %m to an existing route (%r)" => [
0 => "Nelze namapovat %m na existující trasu (%r)",
],
"Can't map %m to %r (username collision)" => [
0 => "%m nelze namapovat k %r (kolize uživatelského jména)",
],
@ -861,12 +882,12 @@ $translation_table = [
"Direct links" => [
0 => "Přímé odkazy",
],
"Image URL" => [
0 => "URL obrázku",
],
"Image link" => [
0 => "Odkaz obrázku",
],
"Image URL" => [
0 => "URL obrázku",
],
"Thumbnail URL" => [
0 => "URL miniatury",
],
@ -975,6 +996,12 @@ $translation_table = [
"Mail error" => [
0 => "Chyba e-mailu.",
],
"Upload images" => [
0 => "Nahrát obrázky",
],
"Upload plugin" => [
0 => "Plugin pro nahrávání",
],
"Image search results for %s" => [
0 => "Výsledky vyhledávání obrázku pro výraz %s",
],
@ -1029,6 +1056,9 @@ $translation_table = [
"Create account" => [
0 => "Vytvořit účet",
],
"Upload" => [
0 => "Nahrát",
],
"%s's Images" => [
0 => "%s Obrázků",
],
@ -1068,9 +1098,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Oznámení (%s)",
],
"Upload" => [
0 => "Nahrát",
],
"Sign in with another account" => [
0 => "Přihlásit se pomocí jiného účtu",
],
@ -1173,27 +1200,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "Můžeš také %i nebo %u.",
],
"browse from your device" => [
0 => "procházet z vašeho zařízení",
],
"take a picture" => [
0 => "pořídit fotku",
],
"You can also %i, %c or %u." => [
0 => "Můžete také %i, %c nebo %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Upravte nebo změňte velikost libovolného obrázku kliknutím na náhled obrázku",
],
"Edit or resize any image by touching the image preview" => [
0 => "Upravte nebo změňte velikost libovolného obrázku dotykem na náhled obrázku",
"Edit any image by touching the image preview" => [
0 => "Upravte jakýkoli snímek tím, že se dotknete náhledu obrázku",
],
"your computer" => [
0 => "vašeho počítače",
],
"image URLs" => [
0 => "URL adresy obrázků",
],
"You can keep adding more images from %i or from %u." => [
0 => "Můžete přidat další obrázky z %i nebo z %u.",
"You can add more images from %i or %u." => [
0 => "Můžete přidat další obrázky z %i nebo %u.",
],
"your device" => [
0 => "vašeho zařízení",
],
"You can add more images from %i, %c or %u." => [
0 => "Můžete přidat další obrázky z %i, %c nebo %u.",
],
"Uploading %q %o" => [
0 => "Nahrávání %q %o",
],
@ -1209,6 +1242,12 @@ $translation_table = [
"Uploaded content added to %s." => [
0 => "Nahraný obsah byl přidán do %s.",
],
"You can %c with the content just uploaded or %m." => [
0 => "Můžete %c s právě nahraným obsahem nebo %m.",
],
"You can %c with the content just uploaded." => [
0 => "Můžete %c s právě nahraným obsahem.",
],
"create a new album" => [
0 => "vytvořit nové album",
],
@ -1221,6 +1260,9 @@ $translation_table = [
"sign in" => [
0 => "přihlásit se",
],
"You can %s or %l to save this content into your account." => [
0 => "Můžete použít %s nebo %l pro uložení tohoto obsahu do vašeho účtu.",
],
"No %s have been uploaded" => [
0 => "Žádné %s nebyly nahrány",
],
@ -1257,8 +1299,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Zkontrolujte <a data-modal=\"simple\" data-target=\"failed-upload-result\">chybovou zprávu</a> kde se dozvíte více informací.",
],
"max" => [
0 => "max",
"reset" => [
0 => "resetovat",
],
"close" => [
0 => "zavřít",
@ -1266,6 +1308,9 @@ $translation_table = [
"copy" => [
0 => "kopírovat",
],
"insert" => [
0 => "vložit",
],
"Edit" => [
0 => "Uprav",
],
@ -1365,12 +1410,27 @@ $translation_table = [
"BBCode full" => [
0 => "BBKód plné velikosti obrázku",
],
"BBCode full linked" => [
0 => "Plný odkaz do diskuzního fóra.",
],
"BBCode medium linked" => [
0 => "Kód do fóra se střední zmenšeninou obrázku a odkazem.",
],
"BBCode thumbnail linked" => [
0 => "miniatura obrázku s odkazem na originál",
],
"Markdown full" => [
0 => "Markdown kód plné velikosti obrázku",
],
"Markdown full linked" => [
0 => "Markdown kód plné velikosti obrázku s odkazem",
],
"Markdown medium linked" => [
0 => "Markdown kód střední velikosti velikosti obrázku",
],
"Markdown thumbnail linked" => [
0 => "Markdown kód náhledu obrázku s odkazem",
],
"All these words" => [
0 => "Všechna tato slova",
],
@ -1512,6 +1572,36 @@ $translation_table = [
"Service name" => [
0 => "Název služby",
],
"Identity URL" => [
0 => "Adresa URL Identity (Identity URL)",
],
"Identity API endpoint" => [
0 => "Koncový bod API Identity (Identity API endpoint)",
],
"API endpoint for OpenStack identity" => [
0 => "Koncový bod API OpenStack identity (API endpoint for OpenStack identity)",
],
"Storage region" => [
0 => "Region úložiště (Storage region)",
],
"Container" => [
0 => "Kontejner (Container)",
],
"Storage container" => [
0 => "Kontejner úložiště (Storage container)",
],
"Tenant id" => [
0 => "ID Nájemce (Tenant id)",
],
"Tenant id (account id)" => [
0 => "ID účtu nájemce (Tenant id)",
],
"Tenant name" => [
0 => "Jméno nájemce (Tenant name)",
],
"Tenant name (account name)" => [
0 => "uživatelský účet",
],
"Hostname or IP of the storage server" => [
0 => "Hostname nebo IP serveru s úložištěm.",
],
@ -1584,9 +1674,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Zde se nenachází nic k zobrazení.",
],
"Upload images" => [
0 => "Nahrát obrázky",
],
"Edit image details" => [
0 => "Upravit detaily obrázku",
],
@ -1647,6 +1734,9 @@ $translation_table = [
"Select" => [
0 => "Vybrat",
],
"Toggle unsafe flag" => [
0 => "Označit obrázek jako nevhodný",
],
"The requested page was not found." => [
0 => "Požadovaná stránka nebyla nalezena.",
],
@ -1692,6 +1782,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Zaslat instrukce znova.",
],
"An error occurred. Please try again later." => [
0 => "Došlo k chybě. Prosím zkuste opakovat akci později.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "E-mail s instrukcemi k resetování vašeho hesla jsme již odeslali. Pokud vám nedorazil pak si prosím zkontrolujte vaši složku se spamem.",
],
@ -1938,6 +2031,9 @@ $translation_table = [
"Select %s to open the page or link in a new window." => [
0 => "Zvolte %s pro otevření stránky nebo odkazu v novém okně.",
],
"Link rel attribute" => [
0 => "\"REL\" atribut odkazu",
],
"Only alphanumerics, hyphens and whitespaces" => [
0 => "Pouze alfanumerické znaky, pomlčky a prázné mezery",
],
@ -1989,6 +2085,12 @@ $translation_table = [
"Number of simultaneous upload threads (parallel uploads)" => [
0 => "Počet vláken použitých při nahrávání (souběžné nahrávání více souborů)",
],
"Redirect on single upload" => [
0 => "Přesměrování na jednotlivé nahrání",
],
"Enable this if you want to redirect to image page on single upload." => [
0 => "Povolte tuto funkci, pokud chcete přesměrovat na stránku s obrázky při jednotlivém nahrávání.",
],
"Enable duplicate uploads" => [
0 => "Povolit duplicitní nahrávání",
],
@ -2094,6 +2196,9 @@ $translation_table = [
"Warning: Can't write in %s" => [
0 => "Výstraha: Nemůžu zapisovat do %s",
],
"Watermark user toggles" => [
0 => "Přepínač vodoznaku uživatele",
],
"Enable watermark on guest uploads" => [
0 => "Povolit vodoznak pro soubory nahrané hostem",
],
@ -2103,6 +2208,9 @@ $translation_table = [
"Enable watermark on admin uploads" => [
0 => "Povolit vodoznak pro soubory nahrané administrátorem",
],
"Watermark file toggles" => [
0 => "Přepínač vodoznaku souboru",
],
"Enable watermark on GIF image uploads" => [
0 => "Povolit vodoznak při nahrávání GIF obrázků",
],
@ -2202,6 +2310,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Povolte, pokud chcete povolit uživatelům registraci.",
],
"Enable user content delete" => [
0 => "Povolit smazání obsahu uživatele",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Zapněte tuto funkci, pokud chcete uživatelům povolit smazat vlastní obsah. Toto nastavení nemá vliv na správce.",
],
"Minimum age required" => [
0 => "Požadavek na minimální věk",
],
@ -2496,6 +2610,9 @@ $translation_table = [
"Landing page" => [
0 => "Vstupní stránka",
],
"Route explore" => [
0 => "Prozkoumejte trasu",
],
"Select the homepage style. To customize it further edit app/themes/%s/views/index.php" => [
0 => "Vyberte styl domovské obrazovky. Pro přispůsobení stylu jej upravte v app/themes/%s/views/index.php",
],
@ -2523,6 +2640,12 @@ $translation_table = [
"Paragraph" => [
0 => "Odstavec",
],
"Call to action button color" => [
0 => "Barva tlačítka \"Call to action\"",
],
"Enable this to use outline style for the homepage call to action button." => [
0 => "Zapněte, pokud chcete aktivovat rámeček kolem tlačítka akce na titulce",
],
"Open URL" => [
0 => "Otevřít URL adresu",
],
@ -2535,6 +2658,9 @@ $translation_table = [
"A relative URL like %r will be mapped to %l" => [
0 => "Relativní URL jako %r bude namapována na %l",
],
"This will be added inside the call to action <a> tag. Leave it blank to use the default contents." => [
0 => "Toto bude přidáno uvnitř výzvy k akci <a> tagu. Zanechte prázdné pro použití výchozího obsahu.",
],
"User IDs" => [
0 => "ID uživatele(ů)",
],
@ -2556,6 +2682,12 @@ $translation_table = [
"Enable this to show a notice on top warning you about new available system updates." => [
0 => "Povolte, pokud chcete zobrazit oznámení při dostupné aktualizaci Chevereta.",
],
"Minify code" => [
0 => "Minimalizovat kód",
],
"Enable this if you want to auto minify CSS and JS code." => [
0 => "Zapněte pokud chcete minimalizovat kód CSS",
],
"Maintenance" => [
0 => "Mód údržby",
],
@ -2592,6 +2724,9 @@ $translation_table = [
"To configure the debug level check the <a %s>debug documentation</a>. Default level is \"Error log\" (1)." => [
0 => "Pro nastavení úrovně ladění si prohlédněte <a %s>debug documentation</a>. Výchozí hodnota je \"Error log\" (1).",
],
"Routing allows you to customize default route binds on the fly. Only alphanumeric, hyphen and underscore characters are allowed. Check out our %s if you want to override or add new routes." => [
0 => "Směrování umožňuje přizpůsobit výchozí vazby trasy v reálném čase. Povoleny jsou pouze alfanumerické znaky, pomlčky a znaky podtržítka. Podívejte se na naši %s, pokud chcete přepsat nebo přidat nové trasy.",
],
"Image routing" => [
0 => "Směrování obrázku",
],
@ -2739,6 +2874,12 @@ $translation_table = [
"You need a <a href=\"%s\" target=\"_blank\">reCAPTCHA key</a> for this." => [
0 => "Potřebujete <a href=\"%s\" target=\"_blank\">reCAPTCHA klíč</a>.",
],
"%s site key" => [
0 => "%s kód stránky",
],
"%s secret key" => [
0 => "%s tajný kód",
],
"reCAPTCHA threshold" => [
0 => "reCAPTCHA threshold (práh)",
],
@ -2751,6 +2892,9 @@ $translation_table = [
"Disqus API works with %s." => [
0 => "Disqus API pracuje s %s.",
],
"%s public key" => [
0 => "%s veřejný kód",
],
"Comment code" => [
0 => "Kód komentáře",
],
@ -2859,6 +3003,51 @@ $translation_table = [
"Send" => [
0 => "Odeslat",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Přidejte funkci nahrávání obrázků na své webové stránky, blog nebo fórum nainstalováním pluginu pro nahrávání. Tato funkce poskytuje možnost nahrávání obrázků z libovolné webové stránky tím, že zde umístí tlačítko, které umožní vašim uživatelům přímo odesílat obrázky do naší služby a automaticky zpracuje a vytvoří kódy potřebné pro vkládání. Všechny funkce zahrnují například funkci přetáhni a pusť, vzdálené nahrávání, změnu velikosti obrázků a další.",
],
"Supported software" => [
0 => "Podporovaný software",
],
"supported software" => [
0 => "podporovaný software",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "Plugin funguje na libovolné webové stránce s uživatelsky upravitelným obsahem a pro %sv, umístí tlačítko pro nahrání, které bude odpovídat panelu nástrojů pro cílový editor, takže není potřeba další přizpůsobení.",
],
"Add it to your website" => [
0 => "Přidejte je na své webové stránky",
],
"options" => [
0 => "možnosti",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Zkopírujte a vložte kód pluginu do kódu HTML vašich stránek (nejlépe v sekci hlavičky webu). Existuje spousta %o, aby to lépe vyhovovalo vašim potřebám.",
],
"Basic options" => [
0 => "Základní možnosti",
],
"Color palette" => [
0 => "Paleta barev",
],
"Button color scheme" => [
0 => "Barevné schéma tlačítka",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Kódy pro sdílení, které budou automaticky vloženy do pole editoru",
],
"After" => [
0 => "Po",
],
"Before" => [
0 => "Před",
],
"Advanced options" => [
0 => "Pokročilé možnosti",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "Plugin má velkou sadu dalších možností, které umožňují úplné přizpůsobení. Můžete použít vlastní HTML, CSS, vlastní paletu barev, nastavit pozorovatele a další. Zkontrolujte %d a zdroj pluginu, abyste získali lepší představu o těchto pokročilých možnostech.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "Nemáte oprávnění k prohlížení této stránky nebo odkaz ze kterého jste se zde dostali již expiroval.",
],
@ -3120,6 +3309,9 @@ $translation_table = [
"Update now" => [
0 => "Aktualizovat nyní",
],
"This website is running latest %s version" => [
0 => "Tato webová stránka používá nejnovější verzi %s",
],
"Clipboard image" => [
0 => "Kopírovat obrázek do schránky",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-05-23 17:56+0000',
'PO-Revision-Date' => '2017-05-23 17:56+0000',
'POT-Creation-Date' => '2017-10-01 18:12+0000',
'PO-Revision-Date' => '2017-10-01 18:12+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'de',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Plugin",
],
"Plugin route" => [
0 => "Plugin-Route",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Aktivieren, um Anweisungen für Plugins auf %u anzuzeigen. Eine Verlinkung zu den Anweisungen wird zum %s Menü hinzugefügt. Diese Einstellung betrifft keine Administratoren.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Nutzen Sie diese Funktion, um eine benutzerdefinierte URL für %p zu setzen. Beachten Sie bitte, dass %s manuell in der URL geändert werden muss.",
],
"Invalid email" => [
0 => "Ungültige E-Mail-Adresse",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Update in Arbeit...",
],
"An error occurred. Please try again later." => [
0 => "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.",
],
"Missing %s file" => [
0 => "Datei %s fehlt",
],
@ -168,9 +177,6 @@ $translation_table = [
"Trending" => [
0 => "Im Trend",
],
"Popular" => [
0 => "Beliebt",
],
"Top users" => [
0 => "Top-Benutzer",
],
@ -183,6 +189,9 @@ $translation_table = [
"Most viewed" => [
0 => "Meistgesehen",
],
"Popular" => [
0 => "Beliebt",
],
"Most liked" => [
0 => "Beliebt",
],
@ -845,12 +854,12 @@ $translation_table = [
"Direct links" => [
0 => "Direkt-Link",
],
"Image URL" => [
0 => "Originalbild-URL",
],
"Image link" => [
0 => "Betrachter-URL",
],
"Image URL" => [
0 => "Originalbild-URL",
],
"Thumbnail URL" => [
0 => "Vorschaubild-URL",
],
@ -959,6 +968,12 @@ $translation_table = [
"Mail error" => [
0 => "E-Mail Fehler",
],
"Upload images" => [
0 => "Bilder hochalden",
],
"Upload plugin" => [
0 => "Plugin hochladen",
],
"Image search results for %s" => [
0 => "Bild-Suchergebnisse für %s",
],
@ -1013,6 +1028,9 @@ $translation_table = [
"Create account" => [
0 => "Konto erstellen",
],
"Upload" => [
0 => "Upload",
],
"%s's Images" => [
0 => "%ss Bilder",
],
@ -1052,9 +1070,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Anmerkungen (%s)",
],
"Upload" => [
0 => "Upload",
],
"Sign in with another account" => [
0 => "Mit externen Diensten anmelden",
],
@ -1157,27 +1172,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "Sie können auch %i oder %u.",
],
"browse from your device" => [
0 => "Durchsuchen Sie Ihr Gerät",
],
"take a picture" => [
0 => "ein Foto aufnehmen",
],
"You can also %i, %c or %u." => [
0 => "Sie können auch %i, %c oder %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Bearbeiten oder skalieren Sie ein Bild, in dem Sie auf die Vorschau klicken",
],
"Edit or resize any image by touching the image preview" => [
0 => "Bearbeiten oder skalieren Sie ein Bild, in dem Sie die Vorschau berühren",
"Edit any image by touching the image preview" => [
0 => "Bearbeiten Sie ein Bild, in dem Sie die Vorschau berühren",
],
"your computer" => [
0 => "Ihr Computer",
],
"image URLs" => [
0 => "Bild URLs",
],
"You can keep adding more images from %i or from %u." => [
"You can add more images from %i or %u." => [
0 => "Sie können mehr Bilder von %i oder %u hinzufügen.",
],
"your device" => [
0 => "Ihre Gerät",
],
"You can add more images from %i, %c or %u." => [
0 => "Sie können mehr Bilder von %i, %c oder %u hinzufügen.",
],
"Uploading %q %o" => [
0 => "Lade %q %o hoch",
],
@ -1250,8 +1271,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Überprüfen Sie den <a data-modal=\"simple\" data-target=\"failed-upload-result\">Fehlerbericht</a> für mehr Informationen.",
],
"max" => [
0 => "Maximal",
"reset" => [
0 => "Zurücksetzen",
],
"close" => [
0 => "Schließen",
@ -1259,6 +1280,9 @@ $translation_table = [
"copy" => [
0 => "Kopieren",
],
"insert" => [
0 => "Einfügen",
],
"Edit" => [
0 => "Bearbeiten",
],
@ -1620,9 +1644,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Keine Inhalte vorhanden.",
],
"Upload images" => [
0 => "Bilder hochalden",
],
"Edit image details" => [
0 => "Bearbeite Bilddetails",
],
@ -1731,6 +1752,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Anweisungen erneut senden",
],
"An error occurred. Please try again later." => [
0 => "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Es wurde bereits eine E-Mail mit Anweisungen an die hinterlegte E-Mail-Adresse versendet. Falls Sie keine E-Mail erhalten haben, sollten Sie Ihren Junk- oder Spam-Filter überprüfen.",
],
@ -2256,6 +2280,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Aktivieren, falls Benutzern die Registrierung erlaubt sein soll.",
],
"Enable user content delete" => [
0 => "Löschen von Nutzerinhalten aktivieren",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Aktivieren, falls Nutzern erlaubt werden soll, ihre eigenen Inhalte zu löschen. Diese Einstellung hat keine Auswirkung auf Administratoren.",
],
"Minimum age required" => [
0 => "Mindestalter erforderlich",
],
@ -2964,6 +2994,63 @@ $translation_table = [
"Send" => [
0 => "Senden",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Ermöglichen Sie das Hochladen von Bildern auf Ihre Internetseite, Ihren Blog oder Ihr Forum, indem Sie das Upload-Plugin installieren. Es ermöglicht das Hochladen von Bildern über einen zusätzlichen Button der Ihren Nutzern erlaubt, Bilder direkt über diesen Service hochzuladen. Das Plugin verwaltet automatisch die Codes, die für ein Einfügen der Bilder notwendig sind. Der Funktionsumfang umfasst Drag & Drop, Remote Uploads, Änderungen der Bildgröße und vieles mehr.",
],
"Supported software" => [
0 => "Unterstützte Software",
],
"supported software" => [
0 => "Unterstützte Software",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "Das Plugin arbeitet auf jeder Internetseite, die über editierbare Inhalte verfügt. Im Fall von %sv wird ein Upload-Button platziert, der sich an die Editor-Toolbar ohne weitere Anpassungen anpasst.",
],
"Add it to your website" => [
0 => "Zu Ihrer Internetseite hinzufügen",
],
"options" => [
0 => "Optionen",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Kopieren Sie den Plugin-Code und fügen SIe ihn in den HTML-Code Ihrer Internetseite ein (vorzugsweise immerhalb des Head-Bereichs). Es gibt viele %o um den Code an Ihre Bedürfnisse anzupassen.",
],
"Basic options" => [
0 => "Grundoptionen",
],
"Color palette" => [
0 => "Farbpalette",
],
"Button color scheme" => [
0 => "Button-Farbschema",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Eingebette Codes, die automatisch in die Editor-Box eingefügt werden.",
],
"Sibling selector" => [
0 => "Geschwister-Selektor",
],
"Sibling element selector where to place the button next to" => [
0 => "Bestimmt, an welchem Geschwister-Element der Button platziert wird.",
],
"Sibling position" => [
0 => "Geschwister-Position",
],
"After" => [
0 => "Nach",
],
"Before" => [
0 => "Vorher",
],
"Position relative to sibling element" => [
0 => "Bestimmt die Position relativ zum Geschwister-Element",
],
"Advanced options" => [
0 => "Erweiterte Einstellungen",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "Das Plugin hat eine breite Auswahl an weiteren Einstellungen die eine vollständige Anpassung an die eigenen Bedürfnisse erlauben. Sie können benutzerdefinierte HTML-Codes, CSS, eigene Farbpaletten und Beobachter und vieles mehr festlegen. Prüfen Sie %d und den Quellcode des Plugins, um ein bessers Verständnis von diesen Optionen zu erhalten.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "Sie haben entweder keine Berechtigung zum Anzeigen der Seite oder der aufgerufene Link ist nicht mehr gültig.",
],

View file

@ -1,15 +1,15 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'Chevereto V3',
'POT-Creation-Date' => '2017-05-18 17:07-0400',
'PO-Revision-Date' => '2017-05-18 17:07-0400',
'POT-Creation-Date' => '2017-09-22 03:16-0300',
'PO-Revision-Date' => '2017-09-22 03:16-0300',
'Last-Translator' => 'Rodolfo Berríos <inbox@rodolfoberrios.com>',
'Language-Team' => '',
'Language' => 'e',
'MIME-Version' => '1.0',
'Content-Type' => 'text/plain; charset=UTF-8',
'Content-Transfer-Encoding' => '8bit',
'X-Generator' => 'Poedit 2.0.2',
'X-Generator' => 'Poedit 2.0.4',
'X-Poedit-Basepath' => '.',
'Plural-Forms' => 'nplurals=2; plural=(n != 1);',
'X-Poedit-KeywordsList' => '_s;_se;_n:1,2;_ne:1,2;PF.fn._s;PF.fn._n:1,2',

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-05-23 17:56+0000',
'PO-Revision-Date' => '2017-05-23 17:56+0000',
'POT-Creation-Date' => '2017-09-23 17:30+0000',
'PO-Revision-Date' => '2017-09-23 17:30+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'es',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Complemento",
],
"Plugin route" => [
0 => "Ruta de complemento",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Habilita esto para mostrar las instrucciones del complemento en %u. Un enlace a estas instrucciones será añadido al menu %s. Esta configuración no afecta a los administradores.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Usa esto para establecer una URL personalizada para %p. Ten en cuenta que necesitarás replicar manualmente %s en esta URL.",
],
"Invalid email" => [
0 => "Email inválido",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Actualización en progreso",
],
"An error occurred. Please try again later." => [
0 => "Ha ocurrido un error. Por favor inténtalo más tarde.",
],
"Missing %s file" => [
0 => "Falta archivo %s",
],
@ -168,9 +177,6 @@ $translation_table = [
"Trending" => [
0 => "Tendencia",
],
"Popular" => [
0 => "Popular",
],
"Top users" => [
0 => "Usuarios top",
],
@ -183,6 +189,9 @@ $translation_table = [
"Most viewed" => [
0 => "Más visto",
],
"Popular" => [
0 => "Popular",
],
"Most liked" => [
0 => "Más me gusta",
],
@ -845,12 +854,12 @@ $translation_table = [
"Direct links" => [
0 => "Enlaces directos",
],
"Image URL" => [
0 => "URL imagen",
],
"Image link" => [
0 => "Enlace a la imagen",
],
"Image URL" => [
0 => "URL imagen",
],
"Thumbnail URL" => [
0 => "URL miniatura",
],
@ -959,6 +968,12 @@ $translation_table = [
"Mail error" => [
0 => "Error en mail",
],
"Upload images" => [
0 => "Subir imágenes",
],
"Upload plugin" => [
0 => "Complemento de subida",
],
"Image search results for %s" => [
0 => "Resultados de búsqueda de imagen para %s",
],
@ -1013,6 +1028,9 @@ $translation_table = [
"Create account" => [
0 => "Crear cuenta",
],
"Upload" => [
0 => "Subir",
],
"%s's Images" => [
0 => "Imágenes de %s",
],
@ -1052,9 +1070,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Avisos (%s)",
],
"Upload" => [
0 => "Subir",
],
"Sign in with another account" => [
0 => "Entrar con otra cuenta",
],
@ -1157,27 +1172,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "También puedes %i o %u.",
],
"browse from your device" => [
0 => "explorar desde tu dispositivo",
],
"take a picture" => [
0 => "tomar una foto",
],
"You can also %i, %c or %u." => [
0 => "También puedes %i, %c o %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Edita o redimensiona cualquier imagen haciendo click en la previsualización",
],
"Edit or resize any image by touching the image preview" => [
0 => "Edita o redimensiona cualquier imagen tocando la previsualización",
"Edit any image by touching the image preview" => [
0 => "Edita cualquier imagen tocando la previsualización",
],
"your computer" => [
0 => "tu computadora",
],
"image URLs" => [
0 => "URLs de imagen",
],
"You can keep adding more images from %i or from %u." => [
0 => "Puedes seguir añadiendo más imágenes desde %i o desde %u.",
"You can add more images from %i or %u." => [
0 => "Puedes añadir más imágenes desde %i o %u.",
],
"your device" => [
0 => "tu dispositivo",
],
"You can add more images from %i, %c or %u." => [
0 => "Puedes añadir más imágenes desde %i, %c o %u.",
],
"Uploading %q %o" => [
0 => "Subiendo %q %o",
],
@ -1250,8 +1271,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Revisa el <a data-modal=\"simple\" data-target=\"failed-upload-result\">reporte de error</a> para más información.",
],
"max" => [
0 => "máximo",
"reset" => [
0 => "reiniciar",
],
"close" => [
0 => "cerrar",
@ -1259,6 +1280,9 @@ $translation_table = [
"copy" => [
0 => "copiar",
],
"insert" => [
0 => "insertar",
],
"Edit" => [
0 => "Editar",
],
@ -1620,9 +1644,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "No hay nada que mostrar aquí.",
],
"Upload images" => [
0 => "Subir imágenes",
],
"Edit image details" => [
0 => "Editar detalles de la imagen",
],
@ -1731,6 +1752,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Re-enviar instrucciones",
],
"An error occurred. Please try again later." => [
0 => "Ha ocurrido un error. Por favor inténtalo más tarde.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Un email a %s ha sido enviado con instrucciones para activar tu cuenta. Si no recibes las instrucciones revisa en tu carpeta de correo no deseado.",
],
@ -1864,7 +1888,7 @@ $translation_table = [
0 => "Permite navegar imágenes de manera aleatoria.",
],
"Likes" => [
0 => "Gustados",
0 => "Me gusta",
],
"Allows users to like content and populate \"Most liked\" listings." => [
0 => "Permite a los usuarios gustar contenido y generar listados con lo \"Más gustado\".",
@ -2256,6 +2280,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Habilita esto si deseas permitir el registro de cuentas de usuario.",
],
"Enable user content delete" => [
0 => "Habilitar eliminación de contenido de usuario",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Habilita esto si deseas permitir que los usuarios eliminen su contenido propio. Esta configuración no afecta a los administradores.",
],
"Minimum age required" => [
0 => "Edad mínima requerida",
],
@ -2964,6 +2994,63 @@ $translation_table = [
"Send" => [
0 => "Enviar",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Agrega subida de imágenes a tu sitio web, blog o foro instalando nuestro complemento de subida. Proporciona subida de imágenes a cualquier sitio web mediante la colocación de un botón que permitirá a tus usuarios cargar directamente imágenes a nuestro servicio y se encargará automáticamente de los códigos necesarios para la inserción. Todas las características incluidas como arrastrar y soltar, subida remota, redimensionamiento de imágenes y mucho más.",
],
"Supported software" => [
0 => "Software soportado",
],
"supported software" => [
0 => "software soportado",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "El complemento funciona en cualquier sitio web con contenido editable por el usuario y para el %sv, colocará un botón de subida que coincidirá con la barra de herramientas del editor de destino, por lo que no se necesita personalización adicional.",
],
"Add it to your website" => [
0 => "Añadir a su sitio web",
],
"options" => [
0 => "opciones",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Copia y pega el código del complemento en código HTML de tu sitio web (preferiblemente dentro de la cabecera). Hay un montón de %o para que se adapte mejor a tus necesidades.",
],
"Basic options" => [
0 => "Opciones básicas",
],
"Color palette" => [
0 => "Paleta de color",
],
"Button color scheme" => [
0 => "Esquema de colores del botón",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Códigos de inserción que se insertarán automáticamente en el cuadro del editor",
],
"Sibling selector" => [
0 => "Selector hermano",
],
"Sibling element selector where to place the button next to" => [
0 => "Selector de elemento hermano donde poner el botón",
],
"Sibling position" => [
0 => "Posición hermano",
],
"After" => [
0 => "Después",
],
"Before" => [
0 => "Antes",
],
"Position relative to sibling element" => [
0 => "Posición relativa al elemento hermano",
],
"Advanced options" => [
0 => "Opciones avanzadas",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "El complemento tiene un gran conjunto de opciones adicionales que permiten personalización completa. Puedes utilizar HTML personalizado, CSS, paleta de colores propia, establecer observadores y mucho más. Comprueba la %d y la fuente del complemento para obtener una mejor idea de estas opciones avanzadas.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "No tienes permiso para acceder a esta página o el enlace a expirado.",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-06-21 18:28+0000',
'PO-Revision-Date' => '2017-06-21 18:28+0000',
'POT-Creation-Date' => '2017-10-01 18:12+0000',
'PO-Revision-Date' => '2017-10-01 18:12+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'fi',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Liitännäinen",
],
"Plugin route" => [
0 => "Liitännäisen ohjaus",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Ota käyttään liitännäisen ohjeet %u. Ohjeet tulee näkymään %s valikossa. Tämä asetus ei vaikuta ylläpitäjiin.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Aseta kustomoitu URL %p. Huomioi, että sinun tulee käsin kopioida se %s URL:iin.",
],
"Invalid email" => [
0 => "Virheellinen sähköpostiosoite",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Päivitys käynnissä",
],
"An error occurred. Please try again later." => [
0 => "Virhe havaittu. Yritä myöhemmin uudelleen.",
],
"Missing %s file" => [
0 => "Puuttuva %s tiedosto",
],
@ -168,9 +177,6 @@ $translation_table = [
"Trending" => [
0 => "Nousussa",
],
"Popular" => [
0 => "Suosittu",
],
"Top users" => [
0 => "Suosituimmat käyttäjät",
],
@ -183,6 +189,9 @@ $translation_table = [
"Most viewed" => [
0 => "Katsotuimmat",
],
"Popular" => [
0 => "Suosittu",
],
"Most liked" => [
0 => "Suosituimmat",
],
@ -413,7 +422,7 @@ $translation_table = [
0 => "Tuki",
],
"Need help? Go to %s and you will get help quickly." => [
0 => "Tarvitsetko apua? Mene %s ja saat apua nopeasti.",
0 => "Tarvitsetko apua? %s -sivustolta saat apua nopeasti.",
],
"PHP version" => [
0 => "PHP-versio",
@ -845,12 +854,12 @@ $translation_table = [
"Direct links" => [
0 => "Suorat linkit",
],
"Image URL" => [
0 => "Kuvan osoite",
],
"Image link" => [
0 => "Kuvan linkki",
],
"Image URL" => [
0 => "Kuvan osoite",
],
"Thumbnail URL" => [
0 => "Kuvakkeen osoite",
],
@ -959,6 +968,12 @@ $translation_table = [
"Mail error" => [
0 => "Sähköpostivirhe",
],
"Upload images" => [
0 => "Lataa kuvia",
],
"Upload plugin" => [
0 => "Kuvien lataus liitännäinen",
],
"Image search results for %s" => [
0 => "Kuvahaun tulokset %s",
],
@ -1013,6 +1028,9 @@ $translation_table = [
"Create account" => [
0 => "Rekisteröidy",
],
"Upload" => [
0 => "Lähetä",
],
"%s's Images" => [
0 => "Käyttäjän %s kuvat",
],
@ -1052,9 +1070,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Ilmoitukset (%s)",
],
"Upload" => [
0 => "Lähetä",
],
"Sign in with another account" => [
0 => "Kirjaudu tilillä",
],
@ -1065,7 +1080,7 @@ $translation_table = [
0 => "Käyttäjänimi tai sähköpostiosoite",
],
"Keep me logged in" => [
0 => "Pidä minut kirjautuneena",
0 => "Pysy kirjautuneena",
],
"Don't have an account? <a href='%s'>Sign up</a> now." => [
0 => "Ei tunnusta? <a href='%s'>Rekisteröidy</a> nyt.",
@ -1157,27 +1172,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "Voit myös %i tai %u.",
],
"browse from your device" => [
0 => "selaa laitteesta",
],
"take a picture" => [
0 => "ota kuva",
],
"You can also %i, %c or %u." => [
0 => "Voit myös %i, %c tai %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Muokkaa tai muuta kuvan kokoa osoittamalla kuvan esikatselua",
],
"Edit or resize any image by touching the image preview" => [
0 => "Muokkaa tai muuta kuvan kokoa osoittamalla kuvan esikatselua",
"Edit any image by touching the image preview" => [
0 => "Muokkaa kuvaa koskettamalla kuvan esikatselua",
],
"your computer" => [
0 => "tietokoneesi",
],
"image URLs" => [
0 => "kuvan osoite",
],
"You can keep adding more images from %i or from %u." => [
0 => "Voit lisätä enemmän kuvia %i tai %u.",
"You can add more images from %i or %u." => [
0 => "Voit lisätä kuvia %i tai %u.",
],
"your device" => [
0 => "laitteesi",
],
"You can add more images from %i, %c or %u." => [
0 => "Voit lisätä kuvia %i, %c tai %u.",
],
"Uploading %q %o" => [
0 => "Ladataan %q %o",
],
@ -1185,7 +1206,7 @@ $translation_table = [
0 => "valmis",
],
"The queue is being uploaded, it should take just a few seconds to complete." => [
0 => "Ladataan kuvia, pitäisi kestää vielä hetki.",
0 => "Ladataan kuvia, kestää vielä hetken.",
],
"Upload complete" => [
0 => "Lähettäminen valmis",
@ -1250,8 +1271,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Katso <a data-modal=\"simple\" data-target=\"failed-upload-result\">virheraportti</a> saadaksesi lisätietoja.",
],
"max" => [
0 => "maksimi",
"reset" => [
0 => "nollaa",
],
"close" => [
0 => "sulje",
@ -1259,6 +1280,9 @@ $translation_table = [
"copy" => [
0 => "kopioi",
],
"insert" => [
0 => "lisää",
],
"Edit" => [
0 => "Muokkaa",
],
@ -1620,9 +1644,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Täällä ei ole mitään nähtävää.",
],
"Upload images" => [
0 => "Lataa kuvia",
],
"Edit image details" => [
0 => "Muokkaa kuvan tietoja",
],
@ -1731,6 +1752,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Lähetä ohjeet uudelleen",
],
"An error occurred. Please try again later." => [
0 => "Virhe havaittu. Yritä myöhemmin uudelleen.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Teille on lähetetty sähköpostiviesti josta löydätte tarkemmat ohjeet salasanan vaihtamiseen. Jos et saanut sähköpostiviestiä, tarkista roskapostit.",
],
@ -2256,6 +2280,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Salli käyttäjien rekisteröityä palveluun.",
],
"Enable user content delete" => [
0 => "Salli käyttäjien poistaa sisältöä",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Salli käyttäjien poistaa omaa sisältöään palvelusta. Tämä asetus ei vaikuta ylläpitäjiin.",
],
"Minimum age required" => [
0 => "Vähimmäisikä vaaditaan",
],
@ -2964,6 +2994,63 @@ $translation_table = [
"Send" => [
0 => "Lähetä",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Lisää kuvien lataus mahdollisuus verkkosivuille, blogiin tai foorumille asentamalla liitännäinen. Tämä lisää painikkeen sivuille mahdollistaen kuvien lataamisen palvelimelle ja hoitaa automaattisesti kaiken taustalla. Kaikki toiminnot saatavilla mm. kuvien lataaminen raahaamalla ja tiputtamalla, etälataus sekä kuvien kokojen automaattinen muuttaminen.",
],
"Supported software" => [
0 => "Tuetut alustat",
],
"supported software" => [
0 => "tuetut alustat",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "Tämä liitännäinen toimii millä tahansa verkkosivulla, jolla käyttäjä voi muokata sisältöä. %sv latauspainike tulee näkymään automaattisesti työkalupalkissa ja ylimääräisiä muokkauksia ei siis tarvitse tehdä.",
],
"Add it to your website" => [
0 => "Asentaminen",
],
"options" => [
0 => "asetuksia",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Sijoita liitännäisen koodi verkkosivun HTML-koodiin (mieluiten head-osion sisään). Liitännäiseen löytyy paljon %o, joilla voit muokata sen paremmin tarpeisiisi.",
],
"Basic options" => [
0 => "Asetukset",
],
"Color palette" => [
0 => "Väripaletti",
],
"Button color scheme" => [
0 => "Painikkeiden väriteema",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Upotuskoodit, jotka tulevat automaattisesti muokkauslaatikkoon",
],
"Sibling selector" => [
0 => "Sisarvalikko",
],
"Sibling element selector where to place the button next to" => [
0 => "Sisarelementin valitsin, johon sijoitetaan vieressä oleva painike",
],
"Sibling position" => [
0 => "Sisarelementin sijainti",
],
"After" => [
0 => "Jälkeen",
],
"Before" => [
0 => "Ennen",
],
"Position relative to sibling element" => [
0 => "Asema sisarelementtiin nähden",
],
"Advanced options" => [
0 => "Edistyneet asetukset",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "Tähän liitännäiseen on paljon edistyneitä muokkausasetuksia. Voit muokata mm. HTML, CSS, värejä, asettaa tarkkailijoita yms. Lue liitännäisen %d saadaksesi paremman käsityksen edistyneistä asetuksista.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "Sinulla ei ole oikeutta tälle sivulle tai linkkisi on vanhentunut.",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-05-23 17:56+0000',
'PO-Revision-Date' => '2017-05-23 17:56+0000',
'POT-Creation-Date' => '2017-09-23 17:30+0000',
'PO-Revision-Date' => '2017-09-23 17:30+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'it',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Plugin",
],
"Plugin route" => [
0 => "Percorso Plugin",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Abilita questo per visualizzare le istruzioni del plugin a %u. Un link a queste istruzioni verrà aggiunto al menu %s. Questa impostazione non riguarda gli amministratori.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Utilizza questo per impostare una URL personalizzato per %p. Tieni presente che devi replicare manualmente %s in questa URL.",
],
"Invalid email" => [
0 => "Indirizzo email non valido",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Aggiornamento in corso...",
],
"An error occurred. Please try again later." => [
0 => "Si è verificato un errore. Riprova più tardi.",
],
"Missing %s file" => [
0 => "File %s non trovato",
],
@ -168,9 +177,6 @@ $translation_table = [
"Trending" => [
0 => "Argomenti",
],
"Popular" => [
0 => "Popolare",
],
"Top users" => [
0 => "Utenti top",
],
@ -183,6 +189,9 @@ $translation_table = [
"Most viewed" => [
0 => "Più viste",
],
"Popular" => [
0 => "Popolare",
],
"Most liked" => [
0 => "Più piaciute",
],
@ -845,12 +854,12 @@ $translation_table = [
"Direct links" => [
0 => "Link diretti",
],
"Image URL" => [
0 => "Immagine originale",
],
"Image link" => [
0 => "Pagina immagine",
],
"Image URL" => [
0 => "Immagine originale",
],
"Thumbnail URL" => [
0 => "Immagine in miniatura",
],
@ -959,6 +968,12 @@ $translation_table = [
"Mail error" => [
0 => "Errore email",
],
"Upload images" => [
0 => "Carica immagini",
],
"Upload plugin" => [
0 => "Caricare plugin",
],
"Image search results for %s" => [
0 => "Risultati della ricerca immagine per %s",
],
@ -1013,6 +1028,9 @@ $translation_table = [
"Create account" => [
0 => "Crea un account",
],
"Upload" => [
0 => "Carica",
],
"%s's Images" => [
0 => "Immagini di %s",
],
@ -1052,9 +1070,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Avvisi (%s)",
],
"Upload" => [
0 => "Carica",
],
"Sign in with another account" => [
0 => "Accedi con un account diverso",
],
@ -1157,27 +1172,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "È inoltre possibile %i o %u.",
],
"browse from your device" => [
0 => "esplorare dal tuo dispositivo",
],
"take a picture" => [
0 => "Fai una foto",
],
"You can also %i, %c or %u." => [
0 => "Puoi anche %i, %c o %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Modificare o ridimensionare un immagine cliccando l'immagine di anteprima",
],
"Edit or resize any image by touching the image preview" => [
0 => "Modificare o ridimensionare un'immagine toccando l'immagine di anteprima",
"Edit any image by touching the image preview" => [
0 => "Modifica qualsiasi immagine toccando l'anteprima dell'immagine",
],
"your computer" => [
0 => "il tuo computer",
],
"image URLs" => [
0 => "URL immagini",
],
"You can keep adding more images from %i or from %u." => [
0 => "È possibile continuare ad aggiungere altre immagini da %i oppure da %u.",
"You can add more images from %i or %u." => [
0 => "È possibile aggiungere altre immagini %i o %u.",
],
"your device" => [
0 => "il tuo dispositivo",
],
"You can add more images from %i, %c or %u." => [
0 => "È possibile aggiungere altre immagini %i, %c o %u.",
],
"Uploading %q %o" => [
0 => "Caricamento %q %o",
],
@ -1250,8 +1271,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Controlla il <a data-modal=\"simple\" data-target=\"failed-upload-result\">rapporto di errore</a> per ulteriori informazioni.",
],
"max" => [
0 => "Massimo",
"reset" => [
0 => "azzerare",
],
"close" => [
0 => "chiudi",
@ -1259,6 +1280,9 @@ $translation_table = [
"copy" => [
0 => "copia",
],
"insert" => [
0 => "inserire",
],
"Edit" => [
0 => "Modifica",
],
@ -1620,9 +1644,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Non c'è niente da mostrare qui.",
],
"Upload images" => [
0 => "Carica immagini",
],
"Edit image details" => [
0 => "Modifica dettagli immagini",
],
@ -1731,6 +1752,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Invia di nuovo le istruzioni",
],
"An error occurred. Please try again later." => [
0 => "Si è verificato un errore. Riprova più tardi.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Ti abbiamo già inviata una email con le indicazioni per reimpostare la password. Se non la hai ricevuta, verifica anche nelle cartelle spam o posta indesiderata.",
],
@ -2256,6 +2280,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Attiva questa opzione per consentire all'utente di registrarsi al sito",
],
"Enable user content delete" => [
0 => "Abilita l'eliminazione dei contenuti utente",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Abilitare questa opzione se si desidera consentire agli utenti di eliminare i propri contenuti. Questa impostazione non riguarda gli amministratori.",
],
"Minimum age required" => [
0 => "Età minima richiesta",
],
@ -2964,6 +2994,63 @@ $translation_table = [
"Send" => [
0 => "Invia",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Aggiungi l'upload dell'immagine al tuo sito web, blog o forum installando il nostro plug-in per il caricamento. Fornisce l'upload di immagini a qualsiasi sito web posizionando un pulsante che permetterà agli utenti di caricare direttamente immagini al nostro servizio e gestirà automaticamente i codici necessari per l'inserimento. Tutte le funzioni incluse come trascinamento, rilascio remoto, ridimensionamento delle immagini e altro ancora.",
],
"Supported software" => [
0 => "Software supportato",
],
"supported software" => [
0 => "Software supportato",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "Il plugin funziona in qualsiasi sito web con contenuti modificabili dall'utente e per %sv, metterà un pulsante di caricamento che corrisponderà alla barra degli strumenti dell'editor di destinazione in modo che non sia necessaria alcuna personalizzazione aggiuntiva.",
],
"Add it to your website" => [
0 => "Aggiungilo al tuo sito web",
],
"options" => [
0 => "opzioni",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Copia e incolla il codice plug-in nel codice HTML del tuo sito web (preferibilmente all'interno della sezione di testa). Ci sono molti %o per adattarla meglio alle tue esigenze.",
],
"Basic options" => [
0 => "Opzioni di base",
],
"Color palette" => [
0 => "Palette dei colori",
],
"Button color scheme" => [
0 => "Schema colore dei pulsanti",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Incorpora i codici che verranno inseriti automaticamente nella casella di testo",
],
"Sibling selector" => [
0 => "Selettore",
],
"Sibling element selector where to place the button next to" => [
0 => "Selettore di elementi di sintonia in cui posizionare il pulsante accanto",
],
"Sibling position" => [
0 => "Posizione del Selettore",
],
"After" => [
0 => "Dopo",
],
"Before" => [
0 => "Prima",
],
"Position relative to sibling element" => [
0 => "Posizione relativa all'elemento del selettore",
],
"Advanced options" => [
0 => "Opzioni avanzate",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "Il plugin dispone di un vasto set di opzioni aggiuntive che consentono una completa personalizzazione. È possibile utilizzare HTML personalizzato, CSS, la propria tavolozza di colori, impostare gli osservatori e altro ancora. Controlla la %d e la fonte plugin per avere un'idea migliore di queste opzioni avanzate.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "Attenzione Tu non hai i permessi per accedere a questa pagina o il link oppure è scaduto.",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-05-23 17:56+0000',
'PO-Revision-Date' => '2017-05-23 17:56+0000',
'POT-Creation-Date' => '2017-09-23 17:30+0000',
'PO-Revision-Date' => '2017-09-23 17:30+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'ja',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(0); return ($index < 1) ? $index : 1 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "プラグイン",
],
"Plugin route" => [
0 => "プラグインルート",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "%uでプラグインの説明を表示する。これらの説明は、メニューに%sを追加します。この設定は管理者には影響しません。",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "%pのカスタムURLをセットするのに使用。手動でこのURLを%sで複製してください。",
],
"Invalid email" => [
0 => "有効なメールアドレスではありません。",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "進行中の更新",
],
"An error occurred. Please try again later." => [
0 => "エラーが発生しました。後ほど、再度お試し下さい。",
],
"Missing %s file" => [
0 => "ファイル: %s が見つかりません。",
],
@ -162,9 +171,6 @@ $translation_table = [
"Trending" => [
0 => "流行",
],
"Popular" => [
0 => "人気",
],
"Top users" => [
0 => "トップユーザ",
],
@ -177,6 +183,9 @@ $translation_table = [
"Most viewed" => [
0 => "閲覧順",
],
"Popular" => [
0 => "人気",
],
"Most liked" => [
0 => "もっともいいね!されている",
],
@ -831,12 +840,12 @@ $translation_table = [
"Direct links" => [
0 => "ダイレクトリンク",
],
"Image URL" => [
0 => "画像URL",
],
"Image link" => [
0 => "画像へのリンク",
],
"Image URL" => [
0 => "画像URL",
],
"Thumbnail URL" => [
0 => "サムネイルURL",
],
@ -945,6 +954,12 @@ $translation_table = [
"Mail error" => [
0 => "メールでエラーが発生しました。",
],
"Upload images" => [
0 => "画像をアップロード",
],
"Upload plugin" => [
0 => "プラグインをアップロード",
],
"Image search results for %s" => [
0 => "%sの検索結果",
],
@ -999,6 +1014,9 @@ $translation_table = [
"Create account" => [
0 => "アカウント作成",
],
"Upload" => [
0 => "アップロード",
],
"%s's Images" => [
0 => "%sさんの画像",
],
@ -1038,9 +1056,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "通知 (%s)",
],
"Upload" => [
0 => "アップロード",
],
"Sign in with another account" => [
0 => "別のアカウントでサインイン",
],
@ -1143,27 +1158,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "%iまたは%uすることもできます。",
],
"browse from your device" => [
0 => "デバイスを見る",
],
"take a picture" => [
0 => "写真を撮影",
],
"You can also %i, %c or %u." => [
0 => "%i, %c または、 %uから",
],
"Edit or resize any image by clicking the image preview" => [
0 => "画像のプレビューをクリックして編集または画像をリサイズ",
],
"Edit or resize any image by touching the image preview" => [
0 => "画像のプレビューをタップして編集または画像をリサイズ",
"Edit any image by touching the image preview" => [
0 => "プレビューをタッチして編集",
],
"your computer" => [
0 => "あなたのコンピュータ",
],
"image URLs" => [
0 => "画像のURL",
],
"You can keep adding more images from %i or from %u." => [
0 => "%iまたは%uからさらに画像を追加することができます。",
"You can add more images from %i or %u." => [
0 => "%u、または、%iから画像を追加することができます。",
],
"your device" => [
0 => "あなたのデバイス",
],
"You can add more images from %i, %c or %u." => [
0 => "%i、%c または %uから画像を追加することができます。",
],
"Uploading %q %o" => [
0 => "アップロード中 %q %o",
],
@ -1236,8 +1257,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "詳しくは<a data-modal=\"simple\" data-target=\"failed-upload-result\">エラーレポート</a>をご覧下さい。",
],
"max" => [
0 => "最大",
"reset" => [
0 => "リセット",
],
"close" => [
0 => "閉じる",
@ -1245,6 +1266,9 @@ $translation_table = [
"copy" => [
0 => "コピー",
],
"insert" => [
0 => "挿入",
],
"Edit" => [
0 => "編集",
],
@ -1605,9 +1629,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "表示するものはありません。",
],
"Upload images" => [
0 => "画像をアップロード",
],
"Edit image details" => [
0 => "画像の詳細の編集",
],
@ -1716,6 +1737,9 @@ $translation_table = [
"Resend instructions" => [
0 => "手順を再送信",
],
"An error occurred. Please try again later." => [
0 => "エラーが発生しました。後ほど、再度お試し下さい。",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "パスワードのリセットの手順をメールで送信しました。届いていない場合には、迷惑メールフォルダをチェックして下さい。",
],
@ -2241,6 +2265,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "ゲストに新規アカウントの登録を許可する場合に有効にしてください。",
],
"Enable user content delete" => [
0 => "ユーザーのコンテンツの消去を許可",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "ユーザーに自分のコンテンツの削除を許可する。この設定は管理者には影響しません。",
],
"Minimum age required" => [
0 => "最低年齢の要求",
],
@ -2949,6 +2979,63 @@ $translation_table = [
"Send" => [
0 => "送信",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "このアップロードプラグインのインストールされている、Webサイト、ブログ、またはフォーラムから画像をアップロードして追加する。画像の追加に必要なコードを自動で扱うボタンの設置されたWebサイトへ画像をアップロードします。ドラッグドロップやリモートアップロード、画像のリサイズなどの機能も全てふくまれています。",
],
"Supported software" => [
0 => "サポートするソフトウェア",
],
"supported software" => [
0 => "サポートするソフトウェア",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "プラグインは、ユーザーがコンテンツを編集可能なWebサイトや%sの編集用エディタに特別なカスタマイズなしで、画像のアップロートボタンを追加します。",
],
"Add it to your website" => [
0 => "あなたのWebサイトへ追加",
],
"options" => [
0 => "オプション",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "WebサイトのHTMLへコードをコピーして貼りつけます(head内が最適です)。豊富な%oが合わせます。",
],
"Basic options" => [
0 => "基本オプション",
],
"Color palette" => [
0 => "カラーパレット",
],
"Button color scheme" => [
0 => "ボタン色スキーマ",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "エディターボックスに自動でコードを埋め込む",
],
"Sibling selector" => [
0 => "兄弟セレクター",
],
"Sibling element selector where to place the button next to" => [
0 => "ボタンの隣の兄弟セレクター",
],
"Sibling position" => [
0 => "兄弟ポジション",
],
"After" => [
0 => "アフター",
],
"Before" => [
0 => "ビフォー",
],
"Position relative to sibling element" => [
0 => "兄弟エレメントとrelativeに",
],
"Advanced options" => [
0 => "追加オプション",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "プラグインには、フルカスタマイズするための豊富な追加オプションセットがあります。カスタムHTML,カスタムCSS、カラーパレットなどが使えます。追加オプションセットを使いこなすには、%dか、プラグインのソースを参照してください。",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "このページにアクセスする権利がないか、または、期限切れのリンクです。",
],

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-06-21 18:28+0000',
'PO-Revision-Date' => '2017-06-21 18:28+0000',
'POT-Creation-Date' => '2017-10-13 22:04+0000',
'PO-Revision-Date' => '2017-10-13 22:04+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'nl',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Plugin",
],
"Plugin route" => [
0 => "Plugin route",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Schakel dit in om de plugin instructies op %u te tonen. Een link naar deze instructies wordt toegevoegd aan het %s menu. Deze instelling is niet van toepassing voor beheerders.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Gebruik dit om een eigen URL in te schakelen voor %p. Let op dat het noodzakelijk is om handmatig %s toe te voegen in deze URL.",
],
"Invalid email" => [
0 => "Ongeldig e-mailadres",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Bezig met bijwerken",
],
"An error occurred. Please try again later." => [
0 => "Er is een fout opgetreden. Probeer het later nog eens.",
],
"Missing %s file" => [
0 => "Missende %s bestand",
],
@ -168,9 +177,6 @@ $translation_table = [
"Trending" => [
0 => "Trending",
],
"Popular" => [
0 => "Populair",
],
"Top users" => [
0 => "Topgebruikers",
],
@ -183,6 +189,9 @@ $translation_table = [
"Most viewed" => [
0 => "Meest bekeken",
],
"Popular" => [
0 => "Populair",
],
"Most liked" => [
0 => "meest geliked",
],
@ -359,7 +368,7 @@ $translation_table = [
0 => "Bevestiging nodig voor %s",
],
"Welcome to %s" => [
0 => "Welkom bij %s",
0 => "Welkom bij %s.",
],
"Passwords don't match" => [
0 => "Wachtwoorden komen niet overeen",
@ -845,12 +854,12 @@ $translation_table = [
"Direct links" => [
0 => "Directe link",
],
"Image URL" => [
0 => "Afbeelding URL",
],
"Image link" => [
0 => "Afbeelding link",
],
"Image URL" => [
0 => "Afbeelding URL",
],
"Thumbnail URL" => [
0 => "Thumbnail URL",
],
@ -959,6 +968,12 @@ $translation_table = [
"Mail error" => [
0 => "Mail fout",
],
"Upload images" => [
0 => "Upload afbeeldingen",
],
"Upload plugin" => [
0 => "Upload plugin",
],
"Image search results for %s" => [
0 => "Zoekresultaten afbeelding voor %s",
],
@ -1013,6 +1028,9 @@ $translation_table = [
"Create account" => [
0 => "Maak een account",
],
"Upload" => [
0 => "Upload",
],
"%s's Images" => [
0 => "%s's Afbeeldingen",
],
@ -1052,9 +1070,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Mededelingen (%s)",
],
"Upload" => [
0 => "Upload",
],
"Sign in with another account" => [
0 => "Met een ander account inloggen",
],
@ -1104,22 +1119,22 @@ $translation_table = [
0 => "Wij hebben een aanvraag ontvangen om het volgende e-mailadres <a href=\"%u\">%n</a> te wijzigen op %w.",
],
"To complete the process you must <a href=\"%s\">activate your email</a>." => [
0 => "Om uw e-mailadres te activeren klikt u op <a href=\"%s\">deze link</a>.",
0 => "Om jouw e-mailadres te activeren, klik op <a href=\"%s\">deze link</a>.",
],
"Alternatively you can copy and paste the URL into your browser: <a href=\"%s\">%s</a>" => [
0 => "U kunt ook deze link in uw adresbalk plakken: <a href=\"%s\">%s</a>",
0 => "Je kunt ook deze link in uw adresbalk plakken: <a href=\"%s\">%s</a>",
],
"If you didn't intend this just ignore this message." => [
0 => "Heeft u niet om dit bericht gevraagd dan kun je deze negeren.",
0 => "Heb je niet om dit bericht gevraagd, dan kun je dit bericht negeren.",
],
"This request was made from IP: %s" => [
0 => "Deze aanvraag is gemaakt vanaf IP adres: %s",
0 => "Deze aanvraag is gedaan vanaf IP adres: %s",
],
"We received a request to register the %n account at %w." => [
0 => "Wij hebben een aanvraag ontvangen om het account %n te registreren op %w.",
],
"To complete the process you must <a href=\"%s\">activate your account</a>." => [
0 => "Om uw account te activeren klikt u op <a href=\"%s\">deze link</a>.",
0 => "Om jouw account te activeren, klik op <a href=\"%s\">deze link</a>.",
],
"We received a request to reset the password for your <a href=\"%u\">%n</a> account." => [
0 => "Wij hebben een aanvraag ontvangen om het wachtwoord <a href=\"%u\">%n</a> te wijzigen.",
@ -1128,10 +1143,10 @@ $translation_table = [
0 => "Om uw wachtwoord te wijzigen <a href=\"%s\">volgt u deze link</a>.",
],
"Hi %n, welcome to %w" => [
0 => "Hallo %n, welkom bij %w",
0 => "Hallo %n, welkom bij %w.",
],
"Now that your account is ready you can enjoy uploading your images, creating albums and setting the privacy of your content as well as many more cool things that you will discover." => [
0 => "Nu dat je account klaar is, kun je foto's gaan uploaden, albums aanmaken , krijg je de mogelijkheid om de privacy-instellingen te kiezen voor je foto's en kun je verder nog veel meer leuke dingen gaan ontdekken.",
0 => "Nu je account klaar is, kun je foto's gaan uploaden, albums aanmaken , krijg je de mogelijkheid om de privacy-instellingen te kiezen voor je foto's en kun je verder nog veel meer leuke dingen gaan ontdekken.",
],
"By the way, here is you very own awesome profile page: <a href=\"%u\">%n</a>. Go ahead and customize it, its yours!." => [
0 => "Hier is jouw eigen profiel: <a href=\"%u\">%n</a>. Ga nu snel aan de slag en maak deze meer persoonlijk.",
@ -1157,27 +1172,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "Je kunt ook %i of %u.",
],
"browse from your device" => [
0 => "vanaf uw toestel bladeren",
],
"take a picture" => [
0 => "neem een foto",
],
"You can also %i, %c or %u." => [
0 => "Je kunt ook %i, %c of %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Bewerk of pas formaat aan van de afbeelding door op de voorvertoning te klikken",
],
"Edit or resize any image by touching the image preview" => [
0 => "Bewerk of pas formaat aan van de afbeelding door de voorvertoning aan te raken",
"Edit any image by touching the image preview" => [
0 => "Bewerk iedere afbeelding door het voorbeeld aan te raken",
],
"your computer" => [
0 => "jouw computer",
],
"image URLs" => [
0 => "afbeelding URLs",
],
"You can keep adding more images from %i or from %u." => [
0 => "Je kunt meer afbeeldingen toe blijven voegen vanaf %i of middels %u.",
"You can add more images from %i or %u." => [
0 => "Je kunt meer afbeeldingen toevoegen vanaf %i of %u.",
],
"your device" => [
0 => "jouw apparaat",
],
"You can add more images from %i, %c or %u." => [
0 => "Je kunt meer afbeeldingen toevoegen vanaf %i, %c of %u.",
],
"Uploading %q %o" => [
0 => "Uploading %q %o",
],
@ -1250,8 +1271,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Zie het <a data-modal=\"simple\" data-target=\"failed-upload-result\">foutrapport</a> voor meer informatie!",
],
"max" => [
0 => "max",
"reset" => [
0 => "reset",
],
"close" => [
0 => "sluiten",
@ -1259,6 +1280,9 @@ $translation_table = [
"copy" => [
0 => "Kopieër",
],
"insert" => [
0 => "invoegen",
],
"Edit" => [
0 => "Bewerken",
],
@ -1620,9 +1644,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Er is hier niets te zien",
],
"Upload images" => [
0 => "Upload afbeeldingen",
],
"Edit image details" => [
0 => "Afbeelding bewerken",
],
@ -1663,7 +1684,7 @@ $translation_table = [
0 => "Bevestig verwijderen",
],
"Do you really want to remove this content? This can't be undone." => [
0 => "Wilt u deze inhoud echt verwijderen? Dit kan ongedaan gemaakt worden.",
0 => "Wilt u deze inhoud echt verwijderen? Dit kan niet ongedaan gemaakt worden.",
],
"Do you really want to remove all the selected content? This can't be undone." => [
0 => "Wilt u deze selectie echt verwijderen? Dit kan niet ongedaan gemaakt worden.",
@ -1731,6 +1752,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Instructies opnieuw verzenden",
],
"An error occurred. Please try again later." => [
0 => "Er is een fout opgetreden. Probeer het later nog eens.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Een eerdere e-mail is verstuurd met instructies om uw wachtwoord te resetten. Indien u deze niet heeft ontvangen, controleer dan uw spam-folder.",
],
@ -2044,7 +2068,7 @@ $translation_table = [
0 => "Schakel dit in indien u het uploaden van van dubbele afbeeldingen vanaf hetzelfde IP wilt toestaan binnen 24 uur. Deze instelling heeft geen invloed op beheerders.",
],
"Enable expirable uploads" => [
0 => "Sta tijd geboden uploads toe",
0 => "Sta tijd gebonden uploads toe",
],
"Enable this if you want to allow uploads with an automatic delete option." => [
0 => "Schakel dit in om uploads met automatisch verwijderen toe te staan.",
@ -2095,7 +2119,7 @@ $translation_table = [
0 => "Opslagwijze",
],
"Datefolders" => [
0 => "Datumfolders",
0 => "Datummappen",
],
"Direct" => [
0 => "Direct",
@ -2256,6 +2280,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Schakel dit in om registraties toe te staan",
],
"Enable user content delete" => [
0 => "Sta gebruikers toe hun inhoud te verwijderen",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Schakel dit in om gebruikers zelf hun eigen inhoud te verwijderen. Deze instelling heeft geen invloed op de beheerders.",
],
"Minimum age required" => [
0 => "Vereiste minimum leeftijd",
],
@ -2964,6 +2994,63 @@ $translation_table = [
"Send" => [
0 => "Verstuur.",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Voeg het uploaden van afbeeldingen toe aan jouw website, blog of forum door onze upload plugin te installeren. Het biedt het uploaden van afbeeldingen naar elke website door een knop te plaatsen waarmee jouw gebruikers direct afbeeldingen kunnen uploaden naar onze service en het zal automatisch de codes verwerken die nodig zijn voor het invoegen. Alle functies zijn inbegrepen, zoals slepen en neerzetten, uploaden op afstand, beeldvergroting en nog veel meer.",
],
"Supported software" => [
0 => "Ondersteunde software",
],
"supported software" => [
0 => "ondersteunde software",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "De plugin werkt in elke website met een gebruiker aanpasbare inhoud en voor %sv, het zal een upload knop plaatsen die overeenkomt met de doel editor werkbalk zodat er geen extra aanpassing nodig is.",
],
"Add it to your website" => [
0 => "Toevoegen aan jouw website",
],
"options" => [
0 => "opties",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Kopieer en plak de plugin code in jouw website HTML-code (bij voorkeur in de kopsectie). Er zijn tal van %o om het beter op jouw behoeften af te stemmen.",
],
"Basic options" => [
0 => "Basis opties",
],
"Color palette" => [
0 => "Kleurenpalet",
],
"Button color scheme" => [
0 => "Knop kleurstelling",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Ingebedde codes die automatisch in het reactievak worden geplaatst",
],
"Sibling selector" => [
0 => "Zuster keuzeschakelaar",
],
"Sibling element selector where to place the button next to" => [
0 => "Keuzeschakelaar van het zuster element waar de knop naast geplaatst moet worden",
],
"Sibling position" => [
0 => "Zusterpositie",
],
"After" => [
0 => "Na",
],
"Before" => [
0 => "Voor",
],
"Position relative to sibling element" => [
0 => "Relatieve positie tot het zuster element",
],
"Advanced options" => [
0 => "Geavanceerde opties",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "De plugin heeft een grote set extra opties die volledige aanpassing mogelijk maken. Je kunt aangepaste HTML, CSS, eigen kleurenpalet, waarnemers en meer gebruiken. Controleer de %d en plugin bron om een beter beeld te krijgen van deze geavanceerde opties.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "U heeft geen toegang tot deze pagina of de link is verlopen.",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-06-08 12:42+0000',
'PO-Revision-Date' => '2017-06-08 12:42+0000',
'POT-Creation-Date' => '2017-10-11 19:51+0000',
'PO-Revision-Date' => '2017-10-11 19:51+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'pt_BR',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n != 1)); return ($index < 2) ? $index : 2 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Plugin",
],
"Plugin route" => [
0 => "Rota do plugin",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Ative para mostrar instruções do plugin no %u. Um link para as instruções será adicionado para o %s menu. Esta opção não afeta administradores.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Use isto para definir uma URL customizada para %p. Por favor, note que você precisa replicar manualmente %s nessa URL.",
],
"Invalid email" => [
0 => "E-mail inválido",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Atualização em progresso",
],
"An error occurred. Please try again later." => [
0 => "Ocorreu um erro. Por favor, tente novamente mais tarde.",
],
"Missing %s file" => [
0 => "Faltando %s arquivo",
],
@ -94,7 +103,7 @@ $translation_table = [
0 => "Aviso: Esse conteúdo é privado, mas qualquer pessoa com o link pode ver.",
],
"Note: This content is password protected. Remember to pass the content password to share." => [
0 => "Aviso: Esse conteúdo é protegido por senha, lembre-se de passar a senha para compartilhar o mesmo.",
0 => "Aviso: Esse conteúdo é protegido por senha, lembre-se de passar a senha para compartilhar o conteúdo.",
],
"Note: This content is private. Change privacy to \"public\" to share." => [
0 => "Aviso: Este conteúdo é privado. Mude a privacidade para \"público\" para o compartilhar.",
@ -168,9 +177,6 @@ $translation_table = [
"Trending" => [
0 => "Tendências",
],
"Popular" => [
0 => "Populares",
],
"Top users" => [
0 => "Principais usuários",
],
@ -183,6 +189,9 @@ $translation_table = [
"Most viewed" => [
0 => "Mais vistas",
],
"Popular" => [
0 => "Populares",
],
"Most liked" => [
0 => "Mais curtidas",
],
@ -199,8 +208,8 @@ $translation_table = [
0 => "Pessoas",
],
"Image" => [
0 => "imagem",
1 => "imagens",
0 => "Imagem",
1 => "Imagens",
],
"Album" => [
0 => "Álbum",
@ -257,10 +266,10 @@ $translation_table = [
1 => "segundos",
],
"%s ago" => [
0 => "á %s atrás",
0 => "a %s atrás",
],
"moments ago" => [
0 => "á momentos atrás",
0 => "a momentos atrás",
],
"System notification" => [
0 => "Notificação do sistema",
@ -317,7 +326,7 @@ $translation_table = [
0 => "Esta página não existe",
],
"Forgot password?" => [
0 => "Você esqueceu sua senha?",
0 => "Esqueceu sua senha?",
],
"Reset password" => [
0 => "Redefinir senha",
@ -356,10 +365,10 @@ $translation_table = [
0 => "Mude a sua senha em %s",
],
"Confirmation required at %s" => [
0 => "Confirmação necessária no %s",
0 => "Confirme sua conta na %s",
],
"Welcome to %s" => [
0 => "Bem-vindo ao %s",
0 => "Bem-vindo a %s",
],
"Passwords don't match" => [
0 => "As senhas não coincidem",
@ -845,12 +854,12 @@ $translation_table = [
"Direct links" => [
0 => "Links Diretos",
],
"Image URL" => [
0 => "URL da imagem",
],
"Image link" => [
0 => "Link da imagem",
],
"Image URL" => [
0 => "URL da imagem",
],
"Thumbnail URL" => [
0 => "URL Thumbnail",
],
@ -959,6 +968,12 @@ $translation_table = [
"Mail error" => [
0 => "Erro de correio",
],
"Upload images" => [
0 => "Enviar imagens",
],
"Upload plugin" => [
0 => "Plugin de Upload",
],
"Image search results for %s" => [
0 => "Resultados de imagens contendo %s",
],
@ -1013,6 +1028,9 @@ $translation_table = [
"Create account" => [
0 => "Criar conta",
],
"Upload" => [
0 => "Enviar",
],
"%s's Images" => [
0 => "Imagens de %s",
],
@ -1037,6 +1055,9 @@ $translation_table = [
"%n (%u) on %w" => [
0 => "%n (%u) em %w",
],
"Discovery" => [
0 => "Descubra",
],
"Close" => [
0 => "Fechar",
],
@ -1049,9 +1070,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Notificações (%s)",
],
"Upload" => [
0 => "Enviar",
],
"Sign in with another account" => [
0 => "Entre com outra conta",
],
@ -1065,7 +1083,7 @@ $translation_table = [
0 => "Mantenha-me conectado",
],
"Don't have an account? <a href='%s'>Sign up</a> now." => [
0 => "Não tem uma conta? <a href='%s'> Registre-se </a> agora.",
0 => "Você não tem uma conta? <a href='%s'> Registre-se </a> agora.",
],
"Sign up with another account" => [
0 => "Entrar através de outra conta",
@ -1104,7 +1122,7 @@ $translation_table = [
0 => "Para completar o processo, você deve <a href=\"%s\">ativar aqui o seu e-mail</a>.",
],
"Alternatively you can copy and paste the URL into your browser: <a href=\"%s\">%s</a>" => [
0 => "Poderá também optar por copiar e colar o seguinte URL no seu browser: <a href=\"%s\">%s</a>",
0 => "Você pode também pode optar por copiar e colar a seguinte URL no seu navegador: <a href=\"%s\">%s</a>",
],
"If you didn't intend this just ignore this message." => [
0 => "Se não pretendia fazer isto, ignore esta mensagem.",
@ -1113,65 +1131,74 @@ $translation_table = [
0 => "Este pedido foi feito apartir do IP: %s",
],
"We received a request to register the %n account at %w." => [
0 => "Recebemos um pedido para registar a conta %n no site %w.",
0 => "Recebemos o seu pedido para registar sua conta %n na %w.",
],
"To complete the process you must <a href=\"%s\">activate your account</a>." => [
0 => "Para completar o processo, você deve <a href=\"%s\"> ativar a sua conta </a>.",
],
"We received a request to reset the password for your <a href=\"%u\">%n</a> account." => [
0 => "Recebemos um pedido para redefinir a senha da sua conta <a href=\"%u\">%n</a>.",
0 => "Recebemos um pedido para redefinir a senha da sua conta na <a href=\"%u\">%n</a>.",
],
"To reset your password <a href=\"%s\">follow this link</a>." => [
0 => "Para redefinir sua senha <a href=\"%s\">Clique neste link</a>.",
0 => "Para redefinir sua senha <a href=\"%s\">clique neste link</a>.",
],
"Hi %n, welcome to %w" => [
0 => "Olá %n, seja bem-vindo ao %w",
0 => "Olá %n, seja bem-vindo a %w.",
],
"Now that your account is ready you can enjoy uploading your images, creating albums and setting the privacy of your content as well as many more cool things that you will discover." => [
0 => "Agora que a sua conta está ativada, você poderá desfrutar do envio de imagens, criar álbuns e definir a sua privacidade, bem como partilhar as suas imagens nos mais variados locais.",
],
"By the way, here is you very own awesome profile page: <a href=\"%u\">%n</a>. Go ahead and customize it, its yours!." => [
0 => "Aliás, aqui está a sua fantástica página de perfil: <a href=\"%u\">%n</a>. Vá até la e edite-a a seu gosto. É toda sua!",
0 => "Aliás, aqui está a sua fantástica página de perfil: <a href=\"%u\">%n</a>. Vá até lá e edite-a a seu gosto. Ela é toda sua!",
],
"Thank you for joining" => [
0 => "Obrigado por se juntar a nós",
],
"This email was sent from %w %u" => [
0 => "Este e-mail foi enviado por %w %u",
0 => "Este e-mail foi enviado pelo sistema automático da %w %u",
],
"Drag and drop or paste images here to upload" => [
0 => "Cole araste ou solte aqui para enviar imagens",
0 => "Cole, araste ou solte aqui para enviar imagens",
],
"Select the images to upload" => [
0 => "Selecionar as imagens para envio",
],
"browse from your computer" => [
0 => "Procure no seu computador",
0 => "procurar no seu computador",
],
"add image URLs" => [
0 => "Adicionar URLs de imagens",
0 => "adicionar imagens pela URL",
],
"You can also %i or %u." => [
0 => "Você também pode %i ou %u.",
],
"browse from your device" => [
0 => "procurar no seu computador",
],
"take a picture" => [
0 => "tire uma foto",
],
"You can also %i, %c or %u." => [
0 => "Você também pode %i, %c ou %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Edite ou redimensione qualquer imagem clicando na visualização da imagem",
],
"Edit or resize any image by touching the image preview" => [
"Edit any image by touching the image preview" => [
0 => "Edite ou redimensione qualquer imagem tocando na visualização da imagem",
],
"your computer" => [
0 => "seu computador",
],
"You can keep adding more images from %i or from %u." => [
0 => "Você pode continuar adicionando mais imagens de %i ou de %u.",
"You can add more images from %i or %u." => [
0 => "Você pode adicionar mais imagens de %i ou de %u.",
],
"your device" => [
0 => "seu dispositivo",
],
"You can add more images from %i, %c or %u." => [
0 => "Você pode continuar adicionando mais imagens de %i, %c ou %u.",
],
"Uploading %q %o" => [
0 => "Enviando %q %o",
],
@ -1179,7 +1206,7 @@ $translation_table = [
0 => "completo",
],
"The queue is being uploaded, it should take just a few seconds to complete." => [
0 => "A fila está sendo enviada, deve levar apenas alguns segundos para ser concluída.",
0 => "Suas imagens estão sendo enviadas, deve levar apenas alguns segundos para o envio ser totalmente concluído.",
],
"Upload complete" => [
0 => "Envio completo",
@ -1244,8 +1271,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Verifique o <a data-modal=\"simple\" data-target=\"failed-upload-result\">relatório de erro</a> para mais informações.",
],
"max" => [
0 => "máximo",
"reset" => [
0 => "resetar",
],
"close" => [
0 => "fechar",
@ -1253,6 +1280,9 @@ $translation_table = [
"copy" => [
0 => "copiar",
],
"insert" => [
0 => "insira",
],
"Edit" => [
0 => "Editar",
],
@ -1302,7 +1332,7 @@ $translation_table = [
0 => "Breve descrição desta imagem",
],
"Add image URLs" => [
0 => "Adicionar URLs de imagem",
0 => "Adicionar imagens pela URL",
],
"Add the image URLs here" => [
0 => "Adicione os URLs de imagem aqui",
@ -1602,9 +1632,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Não há nada para ver aqui.",
],
"Upload images" => [
0 => "Enviar imagens",
],
"Edit image details" => [
0 => "Editar os detalhes da imagem",
],
@ -1708,11 +1735,14 @@ $translation_table = [
0 => "Adicionar e-mail",
],
"An email with instructions to reset your password has been sent to the registered email address. If you don't receive the instructions try checking your junk or spam filters." => [
0 => "Um e-mail com instruções para redefinir sua senha foi enviado para o endereço de e-mail de registo. Se não receber as instruções verifique a sua pasta de correio não solicitado/spam/Lixo.",
0 => "Um e-mail com instruções para redefinir sua senha foi enviado para o endereço de e-mail da sua conta. Se você não receber as instruções verifique a sua pasta de spam ou lixeira.",
],
"Resend instructions" => [
0 => "Reenviar instruções",
],
"An error occurred. Please try again later." => [
0 => "Ocorreu um erro. Por favor, tente novamente mais tarde.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Um email anterior foi enviado com instruções para redefinir a sua palavra passe. Se não recebeu as instruções verifique a sua pasta de correio não solicitado/spam/Lixo.",
],
@ -1723,7 +1753,7 @@ $translation_table = [
0 => "Enviar",
],
"Your password has been changed. You can now try logging in using your new password." => [
0 => "A sua senha foi alterada, Agora você pode iniciar sessão com a sua nova senha.",
0 => "A sua senha foi alterada com sucesso. Agora você pode iniciar sessão com a sua nova senha.",
],
"Login now" => [
0 => "Entrar agora",
@ -1738,13 +1768,13 @@ $translation_table = [
0 => "%d caracteres mínimos",
],
"Enter your new password" => [
0 => "introduza a nova senha",
0 => "Introduza sua nova senha",
],
"Confirm password" => [
0 => "Confirme a nova senha",
0 => "Confirme sua senha",
],
"Re-enter your new password" => [
0 => "Re-digite a nova senha",
0 => "Digite novamente a sua nova senha",
],
"An email to %s has been sent with instructions to activate your account. If you don't receive the instructions try checking your junk or spam filters." => [
0 => "Um e-mail para %s foi enviado com instruções para ativar sua conta. Se você não receber as instruções tente verificar os seus filtros de spam ou caixa de spam.",
@ -2061,6 +2091,9 @@ $translation_table = [
"Maximum upload file size" => [
0 => "Tamanho máximo do arquivo para envio",
],
"Maximum size allowed by server is %s. This limit is capped by %u and %p (%f values)." => [
0 => "O tamanho máximo permitido pelo servidor é %s. Esse limite é limitado por %u e %p (valores %f).",
],
"Image path" => [
0 => "Caminho da imagem",
],
@ -2235,6 +2268,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Ative esta opção para permitir que os utilizadores possam registar-se.",
],
"Enable user content delete" => [
0 => "Ativar códigos embed (conteúdo)",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Ative isto se você deseja permitir que os usuários deletem o próprio conteúdo. Esta opção não afeta administradores.",
],
"Minimum age required" => [
0 => "Idade mínima",
],
@ -2364,6 +2403,9 @@ $translation_table = [
"Phone" => [
0 => "Telefone",
],
"Phablet" => [
0 => "Phablet",
],
"Tablet" => [
0 => "Tablet",
],
@ -2818,7 +2860,7 @@ $translation_table = [
0 => "Convidado",
],
"Added to %a and categorized in %c" => [
0 => "Adicionado á %a e categorizado em %c",
0 => "Adicionado a %a e categorizado em %c",
],
"Added to %s" => [
0 => "Adicionar a %s",
@ -2863,7 +2905,7 @@ $translation_table = [
0 => "Gerencie suas imagens, crie álbuns privados, personalize seu perfil e muito mais.",
],
"Enter your password" => [
0 => "Digite sua senha",
0 => "Digite a sua senha",
],
"You have been logged off %s. Hope to see you soon." => [
0 => "Você saiu da sua conta. Esperamos vê-lo novamente em breve.",
@ -2883,6 +2925,63 @@ $translation_table = [
"Send" => [
0 => "Enviar",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Adicione o upload da imagem ao seu site, blog ou fórum, instalando nosso plugin de upload. Ele fornece o upload de imagens para qualquer site, colocando um botão que permitirá que seus usuários enviem imagens diretamente para o nosso serviço e ele irá manipular automaticamente os códigos necessários para a inserção. Todos os recursos incluídos como arrastar e soltar, upload remoto, redimensionamento de imagem e muito mais.",
],
"Supported software" => [
0 => "Software suportado",
],
"supported software" => [
0 => "software suportado",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "O plugin funciona em qualquer site com conteúdo editável pelo usuário e para %sv, ele colocará um botão de upload que irá corresponder à barra de ferramentas do editor de destino para que não seja necessária nenhuma personalização adicional.",
],
"Add it to your website" => [
0 => "Adicione-o ao seu site",
],
"options" => [
0 => "opções",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Copie e cole o código do plugin no código HTML do seu site (de preferência dentro da seção principal). Há uma abundância de %o para adequá-lo melhor às suas necessidades.",
],
"Basic options" => [
0 => "Opções básicas",
],
"Color palette" => [
0 => "Paleta de cores",
],
"Button color scheme" => [
0 => "Esquema de cores do botão",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Códigos de incorporação que serão inseridos automaticamente na caixa de editor",
],
"Sibling selector" => [
0 => "Seletor Sibling",
],
"Sibling element selector where to place the button next to" => [
0 => "Onde colocar o botão perto do elemento Sibling",
],
"Sibling position" => [
0 => "Posição do Sibling",
],
"After" => [
0 => "Depois",
],
"Before" => [
0 => "Antes",
],
"Position relative to sibling element" => [
0 => "Posição relativa ao elemento Sibling",
],
"Advanced options" => [
0 => "Opções avançadas",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "O plugin possui um grande conjunto de opções adicionais que permitem a personalização completa. Você pode usar HTML, CSS, paleta de cores própria, configurar observadores e muito mais. Verifique o %d e a fonte do plugin para ter uma melhor ideia dessas opções avançadas.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "Ou você não tem permissão para acessar esta página ou o link expirou.",
],
@ -2956,16 +3055,16 @@ $translation_table = [
0 => "Nova senha",
],
"Confirm new password" => [
0 => "Confirmar nova senha",
0 => "Confirme sua nova senha",
],
"Add a password to be able to login using your username or email." => [
0 => "Adicionar uma senha para ser capaz de fazer login usando o seu nome de usuário ou e-mail.",
0 => "Adicione uma senha para ser poder fazer login usando o seu nome de usuário ou e-mail.",
],
"This user doesn't have a password. Add one using this form." => [
0 => "Este usuário não tem uma senha. Adicionar uma usando este formulário.",
0 => "Este usuário não tem uma senha. Adicione uma usando este formulário.",
],
"Re-enter your password" => [
0 => "Re-digite sua senha",
0 => "Digite novamente a sua senha",
],
"Upload new image" => [
0 => "Carregar nova imagem",
@ -3019,7 +3118,7 @@ $translation_table = [
0 => "Desconectar",
],
"Connect %s" => [
0 => "Conectar a %s",
0 => "Conectar ao %s",
],
"Button" => [
0 => "Botão",
@ -3142,6 +3241,9 @@ $translation_table = [
"Update now" => [
0 => "Atualizar agora",
],
"This website is running latest %s version" => [
0 => "O seu site está rodando a última versão do %s",
],
"Clipboard image" => [
0 => "Prancheta",
],
@ -3200,7 +3302,7 @@ $translation_table = [
0 => "Armazenamento editado com sucesso,",
],
"User added successfully." => [
0 => "Utilizador adicionado com sucesso.",
0 => "Usuário adicionado com sucesso.",
],
"The content has been moved." => [
0 => "O conteúdo foi movido.",

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-05-23 17:56+0000',
'PO-Revision-Date' => '2017-05-23 17:56+0000',
'POT-Creation-Date' => '2017-09-23 17:30+0000',
'PO-Revision-Date' => '2017-09-23 17:30+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'ru',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(($n%10==1 && $n%100!=11 ? (0) : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? (1) : (2)))); return ($index < 3) ? $index : 3 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "Плагин",
],
"Plugin route" => [
0 => "Маршрут плагина",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "Включите, чтобы показывать инструкцию по использованию плагина в %u. Ссылка на них будет добавлена в меню %s. Эта настройка не влияет на администраторов.",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "Установите собственный адрес для %p. Вам необходимо будет вручную указать в этом адресе %s.",
],
"Invalid email" => [
0 => "Неверный e-mail адрес",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "Выполняется обновление",
],
"An error occurred. Please try again later." => [
0 => "В процессе выполнения произошла ошибка. Пожалуйста попробуйте позже.",
],
"Missing %s file" => [
0 => "Отсутствует файл %s",
],
@ -174,9 +183,6 @@ $translation_table = [
"Trending" => [
0 => "В тренде",
],
"Popular" => [
0 => "Популярные",
],
"Top users" => [
0 => "Самые активные",
],
@ -189,6 +195,9 @@ $translation_table = [
"Most viewed" => [
0 => "Популярные",
],
"Popular" => [
0 => "Популярные",
],
"Most liked" => [
0 => "Избранные",
],
@ -859,12 +868,12 @@ $translation_table = [
"Direct links" => [
0 => "Прямые ссылки",
],
"Image URL" => [
0 => "Прямая ссылка",
],
"Image link" => [
0 => "Оригинал",
],
"Image URL" => [
0 => "Прямая ссылка",
],
"Thumbnail URL" => [
0 => "Миниатюра",
],
@ -973,6 +982,12 @@ $translation_table = [
"Mail error" => [
0 => "Ошибка электронной почты",
],
"Upload images" => [
0 => "Загрузить изображения",
],
"Upload plugin" => [
0 => "Загрузить плагин",
],
"Image search results for %s" => [
0 => "Результаты поиска изображений по запросу %s",
],
@ -1027,6 +1042,9 @@ $translation_table = [
"Create account" => [
0 => "Зарегистрироваться",
],
"Upload" => [
0 => "Загрузка",
],
"%s's Images" => [
0 => "Изображения %s",
],
@ -1066,9 +1084,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "Уведомления (%s)",
],
"Upload" => [
0 => "Загрузка",
],
"Sign in with another account" => [
0 => "Войти через",
],
@ -1171,27 +1186,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "Вы также можете %i или %u.\n",
],
"browse from your device" => [
0 => "обзор изображений с устройства",
],
"take a picture" => [
0 => "сделать фото",
],
"You can also %i, %c or %u." => [
0 => "Вы также можете %i, %c или %u.",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Нажмите на миниатюру, чтобы отредактировать изображение или изменить его размер",
],
"Edit or resize any image by touching the image preview" => [
0 => "Дотроньтесь до миниатюры, чтобы отредактировать изображение или изменить его размер",
"Edit any image by touching the image preview" => [
0 => "Отредактируйте изображение касанием окна предпросмотра.",
],
"your computer" => [
0 => "вашего компьютера",
],
"image URLs" => [
0 => "ссылки на изображения",
],
"You can keep adding more images from %i or from %u." => [
"You can add more images from %i or %u." => [
0 => "Вы можете добавить изображения с %i или %u.",
],
"your device" => [
0 => "вашего устройства",
],
"You can add more images from %i, %c or %u." => [
0 => "Вы можете добавить изображения с %i, %c или %u.",
],
"Uploading %q %o" => [
0 => "Загружается %q %o",
],
@ -1264,8 +1285,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "Проверьте <a data-modal=\"simple\" data-target=\"failed-upload-result\">отчет об ошибках</a> для получения более подробной информации.",
],
"max" => [
0 => "макс.",
"reset" => [
0 => "сброс",
],
"close" => [
0 => "закрыть",
@ -1273,6 +1294,9 @@ $translation_table = [
"copy" => [
0 => "копировать",
],
"insert" => [
0 => "вставить",
],
"Edit" => [
0 => "Редактировать",
],
@ -1635,9 +1659,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "Нет элементов для отображения.",
],
"Upload images" => [
0 => "Загрузить изображения",
],
"Edit image details" => [
0 => "Редактировать изображение",
],
@ -1746,6 +1767,9 @@ $translation_table = [
"Resend instructions" => [
0 => "Повторить отправку инструкций",
],
"An error occurred. Please try again later." => [
0 => "В процессе выполнения произошла ошибка. Пожалуйста попробуйте позже.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "Вам уже было отправлено сообщение с инструкциями по сбросу пароля. Если вы не получили сообщения, проверьте папку Спам.",
],
@ -2271,6 +2295,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "Включите, чтобы разрешить регистрацию пользователей.",
],
"Enable user content delete" => [
0 => "Разрешить пользователям удаление содержимого",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "Включите, чтобы позволить пользователям удалять свое содержимое. Эта настройка не влияет на администраторов.",
],
"Minimum age required" => [
0 => "Минимальный возраст посетителя",
],
@ -2979,6 +3009,63 @@ $translation_table = [
"Send" => [
0 => "Отправить",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "Добавьте возможность загружать изображение на ваш сайт, блог или форум установив наш плагин. Он предоставляет возможность загружать изображение путем установки кнопки, которая позволит вашим пользователям напрямую загружать изображения на наш сервис и автоматически предоставит коды для вставки. Плагин включает все возможности, такие как загрузка через перетаскивание, удаленная загрузка, изменение размера изображений и другие.",
],
"Supported software" => [
0 => "Поддерживаемое ПО",
],
"supported software" => [
0 => "поддерживаемое ПО",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "Плагин работает на любом сайте с редактируемым содержимым и для %s, он размещает кнопку рядом с панелью управления редактором, что позволит избежать необходимости внесения дополнительных изменений.",
],
"Add it to your website" => [
0 => "Добавить на сайт",
],
"options" => [
0 => "настройки",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "Вставьте код плагина в HTML-код вашего сайта (желательно в раздел head). Плагин имеет множество %o для лучшей интеграции с вашим сайтом.",
],
"Basic options" => [
0 => "Основные настройки",
],
"Color palette" => [
0 => "Палитра цветов",
],
"Button color scheme" => [
0 => "Цветовая схема кнопки",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "Коды для встраивания, которые будут автоматически вставлены в редактор",
],
"Sibling selector" => [
0 => "Селектор элемента",
],
"Sibling element selector where to place the button next to" => [
0 => "Селектор элемента, рядом с котором будет размещена кнопка",
],
"Sibling position" => [
0 => "Позиция элемента",
],
"After" => [
0 => "После",
],
"Before" => [
0 => "Перед",
],
"Position relative to sibling element" => [
0 => "Позиция относительно элемента",
],
"Advanced options" => [
0 => "Дополнительные настройки",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "Плагин имеет большое число дополнительных настроек позволяющих осуществить бесшовную интеграцию с вашим проектом. Вы можете задать собственный HTML, CSS, собственную палитру цветов, устанавливать наблюдатели за изменениями и многое другое. Более подробную информацию об этих дополнительных настройках вы можете посмотреть в исходном коде плагина или в %d.",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "У вас нет прав на доступ к данной странице или ссылка устарела.",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2015-04-13 17:55+0000',
'PO-Revision-Date' => '2015-04-13 17:55+0000',
'POT-Creation-Date' => '2017-07-10 19:51+0000',
'PO-Revision-Date' => '2017-07-10 19:51+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'sv',
@ -27,6 +27,9 @@ $translation_table = [
"Invalid password" => [
0 => "Felaktigt lösenord",
],
"Invalid website mode" => [
0 => "Okänt webbplatsläge",
],
"From email address" => [
0 => "Avsändarens email",
],
@ -39,23 +42,171 @@ $translation_table = [
"Recipient for contact form and system alerts." => [
0 => "Mottagare för kontaktformuläret samt systemmeddelanden",
],
"Website mode" => [
0 => "Webbplatsläge",
],
"You can switch the website mode anytime." => [
0 => "Du kan byta hemsidans läge närsomhelst.",
],
"Community" => [
0 => "Gemenskap",
],
"Personal" => [
0 => "Personligt",
],
"Update in progress" => [
0 => "Uppdatering pågår",
],
"An error occurred. Please try again later." => [
0 => "Något gick fel, vänligen prova igen senare.",
],
"Missing %s file" => [
0 => "Saknad %s fil",
],
"Invalid license info" => [
0 => "Ogiltig licensinformation",
],
"Invalid license key" => [
0 => "Ogiltig licensnyckel",
],
"Can't save file" => [
0 => "Kan inte spara fil",
],
"Can't download %s" => [
0 => "Kan inte ladda ned %s",
],
"Can't extract %s" => [
0 => "Kan inte extrahera %s",
],
"Can't create %s directory - %e" => [
0 => "Kan inte skapa %s register - %e",
],
"Can't update %s file - %e" => [
0 => "Kan inte uppdatera %s fil - %e",
],
"Untitled" => [
0 => "Ingen titel",
0 => "Namnlös",
],
"%s's images" => [
0 => "%s's bilder",
],
"Private upload" => [
0 => "Privat uppladdning",
"Note: This content is private but anyone with the link will be able to see this." => [
0 => "Notera: Detta innehåll är privat men kan ses av alla som har länken.",
],
"Note: This content is password protected. Remember to pass the content password to share." => [
0 => "Notera: Detta innehåll är lösenordsskyddat. Kom ihåg att dela lösenordet med andra om du vill att de ska kunna se det.",
],
"Note: This content is private. Change privacy to \"public\" to share." => [
0 => "Notera: Detta innehåll är privat, ändra sekretess till \"publikt\" för att dela.",
],
"Private" => [
0 => "Privat",
],
"Public" => [
0 => "Publikt",
],
"Me" => [
0 => "Jag",
],
"Link" => [
0 => "Länk",
],
"Password" => [
0 => "Lösenord",
],
"view" => [
0 => "visning",
1 => "visningar",
],
"After %n %t" => [
0 => "Efter %n %t",
],
"Don't autodelete" => [
0 => "Radera inte automatiskt",
],
"minute" => [
0 => "minut",
1 => "minuter",
],
"hour" => [
0 => "timme",
1 => "timmar",
],
"day" => [
0 => "dag",
1 => "dagar",
],
"Duplicated upload" => [
0 => "Duplicerad uppladdning",
],
"Error storing file in external storage server" => [
0 => "Fel vid lagring av fil i extern lagringsserver",
],
"External storage has failed" => [
0 => "Extern lagring misslyckad",
],
"Private upload" => [
0 => "Privat uppladdning",
],
"Upload switched to local storage" => [
0 => "Uppladdning flyttad till lokalt lagringsutrymme",
],
"like" => [
0 => "Gilla",
1 => "gillar",
],
"image" => [
0 => "bild",
1 => "bilder",
],
"Recent" => [
0 => "Nyliga",
],
"Trending" => [
0 => "Trendar",
],
"Popular" => [
0 => "Populärt",
],
"Top users" => [
0 => "Aktivaste användarna",
],
"Most recent" => [
0 => "Nyast",
],
"Oldest" => [
0 => "Äldst",
],
"Most viewed" => [
0 => "Flest visningar",
],
"Most liked" => [
0 => "Mest gillad",
],
"Explore" => [
0 => "Bläddra",
],
"Animated" => [
0 => "GIFar",
],
"Search" => [
0 => "Sök",
],
"People" => [
0 => "Gillar",
],
"Image" => [
0 => "Bild",
1 => "Bilder",
],
"Album" => [
0 => "Album",
1 => "Album",
],
"User" => [
0 => "Användare",
1 => "Användare",
],
"year" => [
0 => "år",
1 => "år",
@ -68,18 +219,6 @@ $translation_table = [
0 => "vecka",
1 => "veckor",
],
"day" => [
0 => "dag",
1 => "dagar",
],
"hour" => [
0 => "timme",
1 => "timmar",
],
"minute" => [
0 => "minut",
1 => "minuter",
],
"second" => [
0 => "sekund",
1 => "sekunder",
@ -90,9 +229,21 @@ $translation_table = [
"moments ago" => [
0 => "alldeles nyss",
],
"Dashboard" => [
0 => "Kontrollpanel",
],
"Website is in maintenance mode. To revert this setting go to <a href=\"%s\">Dashboard > Settings</a>." => [
0 => "Hemsidan är i underhållsläge. För att ångra denna inställning, gå till <a href=\"%s\">Instrumentpanel > Inställningar</a>.",
],
"Feel free to browse and discover all my shared images and albums." => [
0 => "Välkommen att se och upptäcka alla mina delade bilder och album.",
],
"That page doesn't exist" => [
0 => "Sidan existerar inte",
],
"Forgot password?" => [
0 => "Glömt lösenord?",
],
"Reset password" => [
0 => "Återställ lösenord",
],
@ -144,18 +295,12 @@ $translation_table = [
"Check the errors in the form to continue." => [
0 => "Kontrollera felen innan du går vidare.",
],
"Most recent" => [
0 => "Nyast",
],
"Oldest" => [
0 => "Äldst",
],
"Most viewed" => [
0 => "Flest visningar",
],
"Share" => [
0 => "Dela",
],
"Embed codes" => [
0 => "Inbäddningskoder",
],
"Full info" => [
0 => "Full info",
],
@ -198,9 +343,6 @@ $translation_table = [
"Disabled" => [
0 => "Inaktiverat",
],
"Max. upload size" => [
0 => "Max uppladdningsstorlek",
],
"Max. post size" => [
0 => "Max. poststorlek",
],
@ -214,6 +356,9 @@ $translation_table = [
"Memory limit" => [
0 => "Minnesgräns",
],
"Links" => [
0 => "Länkar",
],
"Website" => [
0 => "Hemsida",
],
@ -256,6 +401,18 @@ $translation_table = [
"search content" => [
0 => "Sök innehåll",
],
"Before comments" => [
0 => "Före kommentarer",
],
"Image page" => [
0 => "Bild sida",
],
"Album page" => [
0 => "Album sida",
],
"User profile page" => [
0 => "Användarprofil sida",
],
"Invalid website name" => [
0 => "Ogiltigt namn på hemsidan",
],
@ -265,9 +422,6 @@ $translation_table = [
"Invalid timezone" => [
0 => "Ogiltig tidszon",
],
"Invalid value" => [
0 => "Ogiltigt värde",
],
"Invalid upload storage mode" => [
0 => "Ogiltig uppladdning till lagringsläge",
],
@ -280,12 +434,12 @@ $translation_table = [
"Invalid thumb height" => [
0 => "Ogiltig tumnagelhöjd",
],
"Invalid medium width" => [
0 => "Fel bredd på medium",
],
"Invalid theme" => [
0 => "Ogiltigt tema",
],
"Invalid value" => [
0 => "Ogiltigt värde",
],
"Invalid user id" => [
0 => "Okänd användar ID",
],
@ -298,9 +452,6 @@ $translation_table = [
"Invalid SMTP security" => [
0 => "Fel SMTP-säkerhet",
],
"Invalid website mode" => [
0 => "Okänt webbplatsläge",
],
"Invalid website content privacy mode" => [
0 => "Ogiltig webbplatsinnehåll privat läge",
],
@ -316,21 +467,9 @@ $translation_table = [
"Invalid SMTP username" => [
0 => "Felaktigt SMTP användarnamn",
],
"Top users" => [
0 => "Aktivaste användarna",
],
"Dashboard" => [
0 => "Kontrollpanel",
],
"Explore" => [
0 => "Bläddra",
],
"About" => [
0 => "Om",
],
"Embed codes" => [
0 => "Inbäddningskoder",
],
"Image ID" => [
0 => "Bild ID",
],
@ -343,6 +482,21 @@ $translation_table = [
"%s images" => [
0 => "%s bilder",
],
"Direct links" => [
0 => "Direktlänkar",
],
"Image URL" => [
0 => "Direktlänk",
],
"Image link" => [
0 => "Bildlänk",
],
"Thumbnail URL" => [
0 => "Liten miniatyrbild",
],
"Medium URL" => [
0 => "Medelstor miniatyrbild",
],
"Login needed" => [
0 => "Inloggning krävs",
],
@ -367,8 +521,26 @@ $translation_table = [
"Logged out" => [
0 => "Utloggad",
],
"Search" => [
0 => "Sök",
"General questions/comments" => [
0 => "General questions/comments",
],
"DMCA complaint" => [
0 => "DMCA",
],
"Invalid name" => [
0 => "Ogiltigt namn",
],
"Invalid message" => [
0 => "Ogiltigt meddelande",
],
"Invalid subject" => [
0 => "Ogiltigt ämne",
],
"Invalid reCAPTCHA" => [
0 => "Ogiltig reCAPTCHA",
],
"Mail error" => [
0 => "E-postfel",
],
"Account" => [
0 => "Konto",
@ -376,18 +548,12 @@ $translation_table = [
"Profile" => [
0 => "Profil",
],
"Password" => [
0 => "Lösenord",
],
"Linked accounts" => [
0 => "Länkade konton",
],
"An email has been sent to %s with instructions to activate this email" => [
0 => "Ett email har skickats till %s med instruktioner.",
],
"Invalid name" => [
0 => "Ogiltigt namn",
],
"Invalid website" => [
0 => "Ogiltig hemsida",
],
@ -421,6 +587,9 @@ $translation_table = [
"%s's Albums" => [
0 => "%s's Album",
],
"Results for" => [
0 => "Resultat för",
],
"Random" => [
0 => "Slumpvald",
],
@ -454,21 +623,15 @@ $translation_table = [
"By signing up you agree to our <a href=\"%s\">Terms of service</a>" => [
0 => "Genom att registrera dig accepterar du våra <a href=\"%s\">villkor</a>",
],
"loading" => [
0 => "laddar",
],
"My Profile" => [
0 => "Min profil",
],
"Sign out" => [
0 => "Logga ut",
],
"Terms of service" => [
0 => "Villkor",
],
"Privacy" => [
0 => "Sekretess",
],
"Contact" => [
0 => "Kontakt",
],
"We received a request to change the email of your <a href=\"%u\">%n</a> account at %w." => [
0 => "We received a request to change the email of your <a href=\"%u\">%n</a> account at %w.",
],
@ -508,84 +671,18 @@ $translation_table = [
"This email was sent from %w %u" => [
0 => "Detta mail skickades från %w %u",
],
"General questions/comments" => [
0 => "General questions/comments",
],
"DMCA complaint" => [
0 => "DMCA",
],
"Invalid message" => [
0 => "Ogiltigt meddelande",
],
"Invalid subject" => [
0 => "Ogiltigt ämne",
],
"Invalid reCAPTCHA" => [
0 => "Ogiltig reCAPTCHA",
],
"Mail error" => [
0 => "E-postfel",
],
"Message sent" => [
0 => "Meddelande skickat",
],
"We will be in touch soon." => [
0 => "Vi hör av oss snart.",
],
"If you want to send a message fill the form below." => [
0 => "Om du vill skicka ett meddelande vänligen fyll i formuläret nedanför.",
],
"Name" => [
0 => "Namn",
],
"Your name" => [
0 => "Ditt namn",
],
"Your email address" => [
0 => "Din e-postadress",
],
"Subject" => [
0 => "Ämne",
],
"Message" => [
0 => "Meddelande",
],
"Send message" => [
0 => "Skicka meddelande",
],
"cancel" => [
0 => "avbryt",
],
"Drag and drop images here to upload" => [
0 => "Dra och släpp bilder här för att ladda upp",
],
"Select the images to upload" => [
0 => "Välj bilder att ladda upp",
],
"You can also <a data-trigger=\"anywhere-upload-input\">browse from your computer</a> or <a data-modal=\"form\" data-target=\"anywhere-upload-paste-url\">add image URLs</a>." => [
0 => "Du kan också <a data-trigger=\"anywhere-upload-input\">ladda upp från din dator</a> eller <a data-modal=\"form\" data-target=\"anywhere-upload-paste-url\">ange en URL till bilden</a>.",
],
"Uploading <span data-text=\"queue-size\">0</span> <span data-text=\"queue-objects\">images</span>" => [
0 => "Laddar upp <span data-text=\"queue-size\">0</span> <span data-text=\"queue-objects\">bilder</span>",
],
"The queue is being uploaded. It will take just a few seconds to complete." => [
0 => "Kön håller på att laddas upp. Det tar bara några sekunder innan det är klart.",
],
"Upload complete" => [
0 => "Uppladdning klar",
],
"Content added to <a data-text=\"upload-target\" data-link=\"upload-target\" href=\"%s\">public stream</a>. You can <a data-modal=\"form\" data-target=\"form-uploaded-create-album\">create an album</a> or <a data-modal=\"form\" data-target=\"form-uploaded-move-album\">move the <span data-text=\"queue-objects\">images</span></a> to an existing album." => [
0 => "Innehåll har lagts till i <a data-text=\"upload-target\" data-link=\"upload-target\" href=\"%s\">den publika bildströmmen</a>. Du kan <a data-modal=\"form\" data-target=\"form-uploaded-create-album\">Skapa ett album</a> eller <a data-modal=\"form\" data-target=\"form-uploaded-move-album\">Flytta <span data-text=\"queue-objects\">bilder</span></a> till ett existerande album.",
],
"You can <a href=\"%s\">create an account</a> or <a href=\"%l\">sign in</a> to save future uploads in your account." => [
0 => "Du kan <a href=\"%s\">skapa ett konto</a> eller <a href=\"%l\">logga in</a> för att spara dina uppladdningar till ditt konto.",
],
"No <span data-text=\"queue-objects\">images</span> have been uploaded" => [
0 => "Inga <span data-text=\"queue-objects\">bilder</span> har laddats upp.",
],
"Some errors have occured and the system couldn't process your request." => [
0 => "Det blev ett fel och systemet kunde inte hantera din begärda åtgärd.",
],
"Category" => [
0 => "Kategori",
],
"Select category" => [
0 => "Välj kategori",
],
@ -598,6 +695,9 @@ $translation_table = [
"Uploading" => [
0 => "Laddar upp",
],
"cancel" => [
0 => "avbryt",
],
"cancel remaining" => [
0 => "avbryt kvarvarande",
],
@ -616,6 +716,21 @@ $translation_table = [
"close" => [
0 => "stäng",
],
"Edit" => [
0 => "Redigera",
],
"optional" => [
0 => "valfritt",
],
"Flag as unsafe" => [
0 => "Markera som osäkert",
],
"Description" => [
0 => "Beskrivning",
],
"Brief description of this image" => [
0 => "Kort beskrivning av bilden",
],
"Add image URLs" => [
0 => "Lägg till URL till bild",
],
@ -641,24 +756,12 @@ $translation_table = [
0 => "album",
1 => "album",
],
"Links" => [
0 => "Länkar",
],
"Viewer links" => [
0 => "Kortlänkar",
],
"Direct links" => [
0 => "Direktlänkar",
],
"HTML Codes" => [
0 => "HTML-kod",
],
"HTML embed" => [
0 => "HTML-inbäddning",
],
"HTML original linked" => [
0 => "HTML-länk till originalet",
],
"HTML medium linked" => [
0 => "HTML-länk mediumstor",
],
@ -668,50 +771,29 @@ $translation_table = [
"BBCodes" => [
0 => "BBCodes",
],
"BBCode embed" => [
0 => "BBCode inbäddad",
],
"BBCode original linked" => [
0 => "BBCode originallänk",
],
"BBCode medium linked" => [
0 => "BBCode mellanstor link",
],
"BBCode thumbnail linked" => [
0 => "BBCode länk miniatyrbild",
],
"Category" => [
0 => "Kategori",
],
"Album name" => [
0 => "Albumnamn",
],
"Untitled album" => [
0 => "Namnlöst album",
],
"move to existing album" => [
0 => "flytta till befintligt album",
],
"Album description" => [
0 => "Album beskrivning",
],
"optional" => [
0 => "valfritt",
],
"Album Privacy" => [
0 => "Sekretess album",
],
"Who can view this content" => [
0 => "Vem kan se detta innehåll",
],
"Public" => [
0 => "Publikt",
],
"Private (just me)" => [
0 => "Privat (bara jag)",
],
"No category" => [
0 => "Ingen kategori",
"Name" => [
0 => "Namn",
],
"Category name" => [
0 => "Kategori namn",
@ -722,21 +804,12 @@ $translation_table = [
"Category URL key" => [
0 => "Kategori URL nyckel",
],
"Description" => [
0 => "Beskrivning",
],
"Flag as unsafe" => [
0 => "Markera som osäkert",
],
"Brief description of this image" => [
0 => "Kort beskrivning av bilden",
"Message" => [
0 => "Meddelande",
],
"Existing album" => [
0 => "Existerande album",
],
"private" => [
0 => "privat",
],
"create new album" => [
0 => "Skapa nytt album",
],
@ -746,15 +819,12 @@ $translation_table = [
"Load more" => [
0 => "Ladda mer",
],
"Previous" => [
0 => "Föregående",
],
"Next" => [
0 => "Nästa",
],
"Select all" => [
0 => "Välj alla",
],
"Clear selection" => [
0 => "Plocka bort val",
],
"Action" => [
0 => "Funktion",
],
@ -764,21 +834,9 @@ $translation_table = [
"Delete" => [
0 => "Radera",
],
"Clear selection" => [
0 => "Plocka bort val",
],
"To use all the features of this site you must be logged in. If you don't have an account you can <a href=\"%s\">sign up</a> right now." => [
0 => "För att använda alla funktioner på denna webbplats måste du logga in. Om du inte har ett konto kan du <a href=\"%s\">skapa ett nu</a>.",
],
"forgot?" => [
0 => "Glömt?",
],
"Link" => [
0 => "Länk",
],
"Note: This content is private. Change privacy to \"public\" to share." => [
0 => "Notera: Detta innehåll är privat, ändra sekretess till \"publikt\" för att dela.",
],
"There's nothing to show here." => [
0 => "Finns inget att visa här",
],
@ -806,21 +864,12 @@ $translation_table = [
"Do you really want to remove all the selected content? This can't be undone." => [
0 => "Vill du verkligen radera dessa valda delar? Detta kan inte ångras.",
],
"Uploaded by guest to Public" => [
0 => "Uppladdat av gäst till Publikt",
],
"From %s" => [
0 => "Från %s",
],
"From %a by %u" => [
0 => "Från %a av %u",
],
"Select" => [
0 => "Markera",
],
"Edit" => [
0 => "Redigera",
],
"The requested page was not found." => [
0 => "Den begärda sidan kunde inte hittas",
],
@ -854,6 +903,9 @@ $translation_table = [
"A confirmation link will be sent to this email with details to activate your account." => [
0 => "En aktiveringslänk kommer skickas till mailen.",
],
"Your email address" => [
0 => "Din e-postadress",
],
"Add email" => [
0 => "Lägg till e-postadress",
],
@ -863,9 +915,6 @@ $translation_table = [
"Resend instructions" => [
0 => "Skicka instruktioner igen",
],
"An error occurred. Please try again later." => [
0 => "Något gick fel, vänligen prova igen senare.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters.",
],
@ -899,12 +948,6 @@ $translation_table = [
"Re-enter your new password" => [
0 => "Skriv in lösenordet igen",
],
"An email to %s has been sent with instructions to activate your account.n\\If you don't receive the instructions try checking your junk or spam filters." => [
0 => "Ett e-postmeddelande har skickats till %s med instruktioner om hur du aktiverar ditt konto. Har du inte fått något inom ett par minuter så kan du kolla igenom dina spamfilter.",
],
"Enter the email address that you used to create your account to continue." => [
0 => "Ange den e-postadress du använde när du registrerade dig för att fortsätta.",
],
"This content is private" => [
0 => "Detta innehåll är privat",
],
@ -917,14 +960,6 @@ $translation_table = [
"Album link" => [
0 => "Länk till album",
],
"Image" => [
0 => "Bild",
1 => "Bilder",
],
"User" => [
0 => "Användare",
1 => "Användare",
],
"Disk used" => [
0 => "Använt utrymme",
],
@ -958,14 +993,8 @@ $translation_table = [
"Select region" => [
0 => "Välj region",
],
"Enable this if you want to allow the explore page." => [
0 => "Aktivera detta om du vill tillåta bläddringssidan.",
],
"Website mode" => [
0 => "Webbplatsläge",
],
"Private" => [
0 => "Privat",
"User ID" => [
0 => "Användar-ID",
],
"Content privacy mode" => [
0 => "Innehåll privat läge",
@ -991,12 +1020,6 @@ $translation_table = [
"Enable this if you want to allow non registered users to upload." => [
0 => "Aktivera detta om du vill tillåta icke registrerade användare att ladda upp.",
],
"Max. filesize" => [
0 => "Max filstorlek",
],
"Max. allowed filesize. (Max allowed by server is %s)" => [
0 => "Max tillåtna filstorlek. (Max tillåtet av servern är %s)",
],
"Image path" => [
0 => "Sökväg för bild",
],
@ -1024,24 +1047,12 @@ $translation_table = [
"Original" => [
0 => "Original",
],
"Mixed" => [
0 => "Mixad",
],
"\"Original\" will try to keep the image source name while \"Random\" will generate a random name. \"Mixed\" is a combination of both methods." => [
0 => "\"Original\" kommer att försöka behålla det ursprungliga namnet, mendans \"Slumpvald\" genererar ett slumpmässigt namn. \"Mixad\" är en kombination av båda.",
],
"Thumb size" => [
0 => "Storlek på miniatyrbild",
],
"Thumbnails will be fixed to this size." => [
0 => "Miniatyrbilder kommer att fastställas till den här storleken.",
],
"Medium size" => [
0 => "Medium storlek",
],
"Height will be automatic calculated." => [
0 => "Storleken beräknas automatiskt.",
],
"Enable this to put a logo or anything you want in image uploads." => [
0 => "Aktivera denna för att lägga till en logotyp eller vad du vill i bilduppladdning.",
],
@ -1051,9 +1062,6 @@ $translation_table = [
"Watermark image" => [
0 => "Vattenmärkningsbild",
],
"Watermark image to use. Must be a PNG." => [
0 => "Bild att använda vid vattenmärkning. Måste vara i PNG format.",
],
"Watermark position" => [
0 => "Position för vattenmärkning",
],
@ -1189,20 +1197,11 @@ $translation_table = [
"Put your custom JS code here. It will be placed as <script> just before the closing </head> tag." => [
0 => "Sätt in din anpassade JS kod här. Den kommer att läggas till inom <script> precis före </head> taggen.",
],
"After listing (homepage)" => [
0 => "Efter listning (startsida)",
"Do you really want to delete this image? This can't be undone." => [
0 => "Vill du verkligen radera bilden? Kan ej ångras.",
],
"Before comments" => [
0 => "Före kommentarer",
],
"Image page" => [
0 => "Bild sida",
],
"Album page" => [
0 => "Album sida",
],
"User profile page" => [
0 => "Användarprofil sida",
"Delete image" => [
0 => "Radera bild",
],
"Crypt salt" => [
0 => "Crypt salt",
@ -1210,12 +1209,6 @@ $translation_table = [
"This is the salt used to convert numeric ID to alphanumeric. It was generated on install." => [
0 => "This is the salt used to convert numeric ID to alphanumeric. It was generated on install.",
],
"Error reporting" => [
0 => "Felhantering",
],
"Enable this if you need to debug PHP errors." => [
0 => "Aktivera detta om du vill debugga PHP-fel",
],
"Default language" => [
0 => "Standardspråk",
],
@ -1285,12 +1278,6 @@ $translation_table = [
"Google client secret" => [
0 => "Google client secret",
],
"reCAPTCHA public key" => [
0 => "reCAPTCHA public key",
],
"reCAPTCHA private key" => [
0 => "reCAPTCHA private key",
],
"reCAPTCHA threshold" => [
0 => "reCAPTCHA threshold",
],
@ -1306,9 +1293,6 @@ $translation_table = [
"Google Analytics or anything you want. It will be added to the theme footer." => [
0 => "Google Analytics eller det du vill använda kommer att läggas till i footern på temat.",
],
"Enable this if you are using Cloudflare." => [
0 => "Aktivera detta om du använder Cloudflare.",
],
"API v1 key" => [
0 => "API nyckel v1",
],
@ -1321,12 +1305,6 @@ $translation_table = [
"Guest" => [
0 => "Gäst",
],
"Do you really want to delete this image? This can't be undone." => [
0 => "Vill du verkligen radera bilden? Kan ej ångras.",
],
"Delete image" => [
0 => "Radera bild",
],
"Added to %s" => [
0 => "Tillagt i %s",
],
@ -1345,33 +1323,6 @@ $translation_table = [
"In this album" => [
0 => "I detta album",
],
"Image links" => [
0 => "Bildlänkar",
],
"Image URL" => [
0 => "Direktlänk",
],
"Image link" => [
0 => "Bildlänk",
],
"Thumbnail URL" => [
0 => "Liten miniatyrbild",
],
"Medium URL" => [
0 => "Medelstor miniatyrbild",
],
"Image embed codes" => [
0 => "Inbäddningskoder",
],
"Linked image" => [
0 => "Länkad bild",
],
"Linked medium" => [
0 => "Länkad medium",
],
"Linked thumbnail" => [
0 => "Länkad tumnagel",
],
"Upload and share your images." => [
0 => "Ladda upp och dela dina bilder.",
],
@ -1390,18 +1341,12 @@ $translation_table = [
"You either don't have permission to access this page or the link has expired." => [
0 => "Du har inte tillåtelse att besöka denna sida, alternativt har länken dött.",
],
"Results for" => [
0 => "Resultat för",
],
"Do you really want to delete this user? This can't be undone." => [
0 => "Vill du verkligen radera denna användare? Går ej att ångra.",
],
"Delete user" => [
0 => "Radera användare",
],
"User ID" => [
0 => "Användar-ID",
],
"Register date" => [
0 => "Blev medlem",
],
@ -1450,9 +1395,6 @@ $translation_table = [
"Re-enter your password" => [
0 => "Ange ditt lösenord igen",
],
"loading" => [
0 => "laddar",
],
"Upload new image" => [
0 => "Ladda upp ny bild",
],
@ -1543,6 +1485,9 @@ $translation_table = [
"Image edited successfully." => [
0 => "Bilden har ändrats.",
],
"private" => [
0 => "privat",
],
"Album edited successfully." => [
0 => "Albumet har ändrats.",
],

View file

@ -1,8 +1,8 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2017-06-21 18:28+0000',
'PO-Revision-Date' => '2017-06-21 18:28+0000',
'POT-Creation-Date' => '2017-10-10 10:31+0000',
'PO-Revision-Date' => '2017-10-10 10:31+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'zh_CN',
@ -18,6 +18,18 @@ $translation_plural = array (
'function' => '$index = (int)(0); return ($index < 1) ? $index : 1 - 1;',
);
$translation_table = [
"Plugin" => [
0 => "插件",
],
"Plugin route" => [
0 => "上传插件",
],
"Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators." => [
0 => "启用此功能可在%u页面显示插件说明。这些说明的链接将添加到%s菜单中。此设置不会影响管理员。",
],
"Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL." => [
0 => "使用它来设置%p的自定义URL。请注意您需要手动复制此URL中的%s。",
],
"Invalid email" => [
0 => "无效的电子邮箱",
],
@ -57,9 +69,6 @@ $translation_table = [
"Update in progress" => [
0 => "正在更新",
],
"An error occurred. Please try again later." => [
0 => "发生错误. 请稍后再试.",
],
"Missing %s file" => [
0 => "缺少 %s 文件",
],
@ -162,9 +171,6 @@ $translation_table = [
"Trending" => [
0 => "热门",
],
"Popular" => [
0 => "最爱",
],
"Top users" => [
0 => "所有用户",
],
@ -177,6 +183,9 @@ $translation_table = [
"Most viewed" => [
0 => "最热门的",
],
"Popular" => [
0 => "最爱",
],
"Most liked" => [
0 => "最喜欢的",
],
@ -691,7 +700,7 @@ $translation_table = [
0 => "无效的用户ID",
],
"Invalid email mode" => [
0 => "无效的电子邮件方式",
0 => "无效的电子邮件地址",
],
"Invalid SMTP port" => [
0 => "无效的SMTP端口",
@ -796,7 +805,7 @@ $translation_table = [
0 => "无法保存页面内容: %s.",
],
"Following" => [
0 => "关注",
0 => "关注",
],
"About" => [
0 => "关于",
@ -831,12 +840,12 @@ $translation_table = [
"Direct links" => [
0 => "直接(源文件)链接",
],
"Image URL" => [
0 => "图片URL链接",
],
"Image link" => [
0 => "图片链接",
],
"Image URL" => [
0 => "图片URL链接",
],
"Thumbnail URL" => [
0 => "缩略图URL链接",
],
@ -945,6 +954,12 @@ $translation_table = [
"Mail error" => [
0 => "邮件错误",
],
"Upload images" => [
0 => "上传图片",
],
"Upload plugin" => [
0 => "上传插件",
],
"Image search results for %s" => [
0 => "图片搜索结果 %s",
],
@ -999,6 +1014,9 @@ $translation_table = [
"Create account" => [
0 => "注册账户",
],
"Upload" => [
0 => "上传",
],
"%s's Images" => [
0 => "%s 的图片",
],
@ -1038,9 +1056,6 @@ $translation_table = [
"Notices (%s)" => [
0 => "通知 (%s)",
],
"Upload" => [
0 => "上传",
],
"Sign in with another account" => [
0 => "登录您的帐户",
],
@ -1143,27 +1158,33 @@ $translation_table = [
"You can also %i or %u." => [
0 => "你也可以%i或者%u。",
],
"browse from your device" => [
0 => "浏览您的计算机",
],
"take a picture" => [
0 => "拍照",
],
"Edit or resize any image by clicking the image preview" => [
0 => "编辑或通过点击图像预览调整图像大小",
"You can also %i, %c or %u." => [
0 => "你也可以%i,%c或者%u.",
],
"Edit or resize any image by touching the image preview" => [
0 => "编辑或通过触摸图像预览调整图像大小",
"Edit or resize any image by clicking the image preview" => [
0 => "通过点击图像预览来编辑或调整任意图像的大小",
],
"Edit any image by touching the image preview" => [
0 => "通过点击图像预览来调整任意图像",
],
"your computer" => [
0 => "您的计算机",
],
"image URLs" => [
0 => "图片网址",
],
"You can keep adding more images from %i or from %u." => [
0 => "您可以从 %i 或从 %u 添加更多的图片。",
"You can add more images from %i or %u." => [
0 => "你可以从%i或者%u添加更多的图片.",
],
"your device" => [
0 => "你的设备",
],
"You can add more images from %i, %c or %u." => [
0 => "你可以从%i,%c或者%u添加更多的图片.",
],
"Uploading %q %o" => [
0 => "上传 %q %o",
],
@ -1177,13 +1198,13 @@ $translation_table = [
0 => "上传完毕",
],
"Uploaded content added to %s." => [
0 => "图片添加到 %s.",
0 => "图片已经添加到 %s.",
],
"You can %c with the content just uploaded or %m." => [
0 => "您可以 %c或 %m到现有的相册.",
0 => "您可以将刚刚上传的图片 %c或 %m.",
],
"You can %c with the content just uploaded." => [
0 => "您可以 %c到现有的相册.",
0 => "您可以将刚刚上传的图片 %c.",
],
"create a new album" => [
0 => "创建相册",
@ -1236,8 +1257,8 @@ $translation_table = [
"Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information." => [
0 => "检查 <a data-modal=\"simple\" data-target=\"failed-upload-result\">错误报告</a> 更多信息.",
],
"max" => [
0 => "最多",
"reset" => [
0 => "重置",
],
"close" => [
0 => "关闭",
@ -1245,6 +1266,9 @@ $translation_table = [
"copy" => [
0 => "复制",
],
"insert" => [
0 => "插入",
],
"Edit" => [
0 => "编辑",
],
@ -1605,9 +1629,6 @@ $translation_table = [
"There's nothing to show here." => [
0 => "没有要显示的内容",
],
"Upload images" => [
0 => "上传图片",
],
"Edit image details" => [
0 => "编辑图片",
],
@ -1716,6 +1737,9 @@ $translation_table = [
"Resend instructions" => [
0 => "重新发送",
],
"An error occurred. Please try again later." => [
0 => "发生错误. 请稍后再试.",
],
"A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters." => [
0 => "刚才的电子邮件已发送和说明重置您的密码. 如果您没有收到邮件, 请尝试检查您的垃圾邮件或垃圾邮件过滤器.",
],
@ -2241,6 +2265,12 @@ $translation_table = [
"Enable this if you want to allow users to signup." => [
0 => "启用它代表您允许用户自行注册账号.",
],
"Enable user content delete" => [
0 => "用户内容删除",
],
"Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators." => [
0 => "如果要允许用户删除自己的内容,请启用此功能。 此设置不会影响管理员。",
],
"Minimum age required" => [
0 => "最低年龄要求",
],
@ -2832,6 +2862,12 @@ $translation_table = [
"Comments API" => [
0 => "评论 API",
],
"Disqus API works with %s." => [
0 => "Disqus API 适用于 %s.",
],
"Disqus shortname" => [
0 => "Disqus 短名称",
],
"%s public key" => [
0 => "%s 公共密钥",
],
@ -2943,6 +2979,63 @@ $translation_table = [
"Send" => [
0 => "发送",
],
"Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more." => [
0 => "通过安装我们的上传插件,将图像上传到您的网站,博客或论坛。 它提供图像上传到任何网站,放置一个按钮,将允许您的用户直接上传图像到我们的服务,它将自动处理插入所需的代码。 所有功能包括拖放,远程上传,图像调整大小等。",
],
"Supported software" => [
0 => "支持的软件",
],
"supported software" => [
0 => "支持的软件",
],
"The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed." => [
0 => "该插件适用于具有用户可编辑内容的任何网站,对于%sv它将放置一个与目标编辑器工具栏匹配的上传按钮因此不需要额外的自定义。",
],
"Add it to your website" => [
0 => "将其添加到您的网站",
],
"options" => [
0 => "options",
],
"Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs." => [
0 => "将插件代码复制并粘贴到您的网站HTML代码中最好在头部内。 这里有很多%o来使其更加满足你的需求。",
],
"Basic options" => [
0 => "基本选项",
],
"Color palette" => [
0 => "调色板",
],
"Button color scheme" => [
0 => "按钮配色方案",
],
"Embed codes that will be auto-inserted in editor box" => [
0 => "嵌入代码将自动插入到编辑框中",
],
"Sibling selector" => [
0 => "Sibling选择器",
],
"Sibling element selector where to place the button next to" => [
0 => "Sibling元素选择器的旁边放置按钮",
],
"Sibling position" => [
0 => "Sibling顺序",
],
"After" => [
0 => "",
],
"Before" => [
0 => "",
],
"Position relative to sibling element" => [
0 => "相对于sibling元素的位置",
],
"Advanced options" => [
0 => "高级选项",
],
"The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options." => [
0 => "该插件具有大量附加选项,允许完全自定义。 您可以使用自定义HTMLCSS自己的调色板设置监控服务等。 查找%d和插件源以更好地了解这些高级选项。",
],
"You either don't have permission to access this page or the link has expired." => [
0 => "您没有权限访问此网页或链接已过期.",
],

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-05-26 16:57+0000\n"
"PO-Revision-Date: 2017-05-26 16:57+0000\n"
"POT-Creation-Date: 2017-10-01 18:12+0000\n"
"PO-Revision-Date: 2017-10-01 18:12+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: cs\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
msgid "Plugin"
msgstr "Plugin"
msgid "Plugin route"
msgstr "Směrování Pluginu"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Toto aktivujte, aby jste zobrazili instrukce pluginu na %u. Odkaz na tyto pokyny bude přidán do nabídky %s.Toto nastavení nemá vliv na administrátory."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Toto použijte pro nastavení vlastní URL adresy pro %p. Upozorňujeme, že musíte v této URL adrese ručně zkopírovat %s."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Osobní"
msgid "Update in progress"
msgstr "Probíhá aktualizace"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Došlo k chybě. Prosím zkuste opakovat akci později."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -282,9 +281,6 @@ msgstr "Nedávné"
msgid "Trending"
msgstr "Trendy"
msgid "Popular"
msgstr "Populární"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Top uživatelé"
@ -320,6 +316,9 @@ msgstr "Nejstarší"
msgid "Most viewed"
msgstr "Nejprohlíženější"
msgid "Popular"
msgstr "Populární"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -518,7 +517,7 @@ msgstr "zobrazit na %s"
#: ../../../app/lib/functions.render.php:303
msgid "We use our own and third party cookies to improve your browsing experience and our services. If you continue using our website is understood that you accept this cookie policy."
msgstr "Používáme vlastní a cookie třetích stran s cílem zlepšit váš komfort při prohlížení a používání našich služeb. Chcete-li pokračovat v používání našich webových stránek, je nutné, že přijmete tuto cookie politiku."
msgstr "Za účelem vylepšení vašeho komfortu při prohlížení a užívání našich služeb používáme cookies. Používáním našich stránek s tímto souhlasíte."
#: ../../../app/loader.php:180
msgid "You have been forbidden to use this website."
@ -1028,6 +1027,10 @@ msgstr "domovská stránka"
msgid "Before main title (%s)"
msgstr "Před hlavním názvem (%s)"
#, php-format
msgid "After call to action (%s)"
msgstr "Po \"call to action\" (%s)"
#, php-format
msgid "After cover (%s)"
msgstr "Po titulním obrázku (%s)"
@ -1236,6 +1239,14 @@ msgstr "Neplatný režim bezpečnosti stránky"
msgid "Invalid homepage style"
msgstr "Neplatný styl domovské stránky"
#: ../../../app/routes/route.dashboard.php:697
msgid "Invalid homepage call to action button color"
msgstr "Neplatný příkaz tlačítka akce."
#: ../../../app/routes/route.dashboard.php:702
msgid "Invalid homepage call to action functionality"
msgstr "Neplatný příkaz."
#: ../../../app/routes/route.dashboard.php:708
msgid "Invalid title"
msgstr "Neplatný název"
@ -1301,6 +1312,9 @@ msgstr "Max. povoleno %s"
msgid "Can't map %m to an existing folder (%f)"
msgstr "%m nelze namapovat do existující složky (%f)"
msgid "Can't map %m to an existing route (%r)"
msgstr "Nelze namapovat %m na existující trasu (%r)"
msgid "Can't map %m to %r (username collision)"
msgstr "%m nelze namapovat k %r (kolize uživatelského jména)"
@ -1385,14 +1399,14 @@ msgstr "Obrázek %i hostován v %w"
msgid "Direct links"
msgstr "Přímé odkazy"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "URL obrázku"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Odkaz obrázku"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "URL obrázku"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "URL miniatury"
@ -1559,6 +1573,12 @@ msgstr "Zpráva byla odeslána. Budeme Vás brzy kontaktovat."
msgid "Mail error"
msgstr "Chyba e-mailu."
msgid "Upload images"
msgstr "Nahrát obrázky"
msgid "Upload plugin"
msgstr "Plugin pro nahrávání"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1643,6 +1663,11 @@ msgstr "Pro možnost používat tuto webovou stránku vám musí být alespoň %
msgid "Create account"
msgstr "Vytvořit účet"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Nahrát"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1706,11 +1731,6 @@ msgstr "Náhodně"
msgid "Notices (%s)"
msgstr "Oznámení (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Nahrát"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1914,27 +1934,33 @@ msgstr "přidat URL adresy obrázků"
msgid "You can also %i or %u."
msgstr "Můžeš také %i nebo %u."
msgid "browse from your device"
msgstr "procházet z vašeho zařízení"
msgid "take a picture"
msgstr "pořídit fotku"
msgid "You can also %i, %c or %u."
msgstr "Můžete také %i, %c nebo %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Upravte nebo změňte velikost libovolného obrázku kliknutím na náhled obrázku"
msgid "Edit or resize any image by touching the image preview"
msgstr "Upravte nebo změňte velikost libovolného obrázku dotykem na náhled obrázku"
msgid "Edit any image by touching the image preview"
msgstr "Upravte jakýkoli snímek tím, že se dotknete náhledu obrázku"
msgid "your computer"
msgstr "vašeho počítače"
msgid "image URLs"
msgstr "URL adresy obrázků"
msgid "You can keep adding more images from %i or from %u."
msgstr "Můžete přidat další obrázky z %i nebo z %u."
msgid "You can add more images from %i or %u."
msgstr "Můžete přidat další obrázky z %i nebo %u."
msgid "your device"
msgstr "vašeho zařízení"
msgid "You can add more images from %i, %c or %u."
msgstr "Můžete přidat další obrázky z %i, %c nebo %u."
msgid "Uploading %q %o"
msgstr "Nahrávání %q %o"
@ -1953,6 +1979,13 @@ msgstr "Nahrávání dokončeno"
msgid "Uploaded content added to %s."
msgstr "Nahraný obsah byl přidán do %s."
msgid "You can %c with the content just uploaded or %m."
msgstr "Můžete %c s právě nahraným obsahem nebo %m."
#, php-format
msgid "You can %c with the content just uploaded."
msgstr "Můžete %c s právě nahraným obsahem."
msgid "create a new album"
msgstr "vytvořit nové album"
@ -1965,6 +1998,9 @@ msgstr "vytvořit účet"
msgid "sign in"
msgstr "přihlásit se"
msgid "You can %s or %l to save this content into your account."
msgstr "Můžete použít %s nebo %l pro uložení tohoto obsahu do vašeho účtu."
#, php-format
msgid "No %s have been uploaded"
msgstr "Žádné %s nebyly nahrány"
@ -2022,9 +2058,8 @@ msgstr "dozvědět se více"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Zkontrolujte <a data-modal=\"simple\" data-target=\"failed-upload-result\">chybovou zprávu</a> kde se dozvíte více informací."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "max"
msgid "reset"
msgstr "resetovat"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2033,6 +2068,9 @@ msgstr "zavřít"
msgid "copy"
msgstr "kopírovat"
msgid "insert"
msgstr "vložit"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2209,6 +2247,10 @@ msgstr "do fóra (BBCode)"
msgid "BBCode full"
msgstr "BBKód plné velikosti obrázku"
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:54
msgid "BBCode full linked"
msgstr "Plný odkaz do diskuzního fóra."
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:59
msgid "BBCode medium linked"
msgstr "Kód do fóra se střední zmenšeninou obrázku a odkazem."
@ -2217,6 +2259,22 @@ msgstr "Kód do fóra se střední zmenšeninou obrázku a odkazem."
msgid "BBCode thumbnail linked"
msgstr "miniatura obrázku s odkazem na originál"
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:74
msgid "Markdown full"
msgstr "Markdown kód plné velikosti obrázku"
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:79
msgid "Markdown full linked"
msgstr "Markdown kód plné velikosti obrázku s odkazem"
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:84
msgid "Markdown medium linked"
msgstr "Markdown kód střední velikosti velikosti obrázku"
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:89
msgid "Markdown thumbnail linked"
msgstr "Markdown kód náhledu obrázku s odkazem"
#: ../../../app/themes/Peafowl/snippets/form_advanced_search.php:6
msgid "All these words"
msgstr "Všechna tato slova"
@ -2414,6 +2472,46 @@ msgstr "Google Cloud JSON klíč"
msgid "Service name"
msgstr "Název služby"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:84
msgid "Identity URL"
msgstr "Adresa URL Identity (Identity URL)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:85
msgid "Identity API endpoint"
msgstr "Koncový bod API Identity (Identity API endpoint)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:85
msgid "API endpoint for OpenStack identity"
msgstr "Koncový bod API OpenStack identity (API endpoint for OpenStack identity)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:97
msgid "Storage region"
msgstr "Region úložiště (Storage region)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:100
msgid "Container"
msgstr "Kontejner (Container)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:101
msgid "Storage container"
msgstr "Kontejner úložiště (Storage container)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:104
msgid "Tenant id"
msgstr "ID Nájemce (Tenant id)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:105
msgid "Tenant id (account id)"
msgstr "ID účtu nájemce (Tenant id)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:108
msgid "Tenant name"
msgstr "Jméno nájemce (Tenant name)"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:109
msgid "Tenant name (account name)"
msgstr "uživatelský účet"
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:115
msgid "Hostname or IP of the storage server"
msgstr "Hostname nebo IP serveru s úložištěm."
@ -2529,9 +2627,6 @@ msgstr "Aby jste mohli používat všechny funkce, musíte být přihlášen(a).
msgid "There's nothing to show here."
msgstr "Zde se nenachází nic k zobrazení."
msgid "Upload images"
msgstr "Nahrát obrázky"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2628,6 +2723,11 @@ msgstr "od %u"
msgid "Select"
msgstr "Vybrat"
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_admin_tools.php:7
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:7
msgid "Toggle unsafe flag"
msgstr "Označit obrázek jako nevhodný"
#: ../../../app/themes/Peafowl/views/404.php:7
msgid "The requested page was not found."
msgstr "Požadovaná stránka nebyla nalezena."
@ -2704,6 +2804,20 @@ msgstr "E-mail s instrukcemi jak resetovat vaše heslo byl právě odeslán na e
msgid "Resend instructions"
msgstr "Zaslat instrukce znova."
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Došlo k chybě. Prosím zkuste opakovat akci později."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "E-mail s instrukcemi k resetování vašeho hesla jsme již odeslali. Pokud vám nedorazil pak si prosím zkontrolujte vaši složku se spamem."
@ -3057,6 +3171,10 @@ msgstr "Atribut cíle odkazu"
msgid "Select %s to open the page or link in a new window."
msgstr "Zvolte %s pro otevření stránky nebo odkazu v novém okně."
#: ../../../app/themes/Peafowl/views/dashboard.php:566
msgid "Link rel attribute"
msgstr "\"REL\" atribut odkazu"
#: ../../../app/themes/Peafowl/views/dashboard.php:567
#: ../../../app/themes/Peafowl/views/dashboard.php:574
msgid "Only alphanumerics, hyphens and whitespaces"
@ -3125,6 +3243,12 @@ msgstr "Počet vláken pro nahrávání"
msgid "Number of simultaneous upload threads (parallel uploads)"
msgstr "Počet vláken použitých při nahrávání (souběžné nahrávání více souborů)"
msgid "Redirect on single upload"
msgstr "Přesměrování na jednotlivé nahrání"
msgid "Enable this if you want to redirect to image page on single upload."
msgstr "Povolte tuto funkci, pokud chcete přesměrovat na stránku s obrázky při jednotlivém nahrávání."
msgid "Enable duplicate uploads"
msgstr "Povolit duplicitní nahrávání"
@ -3258,6 +3382,10 @@ msgstr "Aktivuj pokud chceš vložit logo nebo cokoliv jiného do nahrávaných
msgid "Warning: Can't write in %s"
msgstr "Výstraha: Nemůžu zapisovat do %s"
#: ../../../app/themes/Peafowl/views/dashboard.php:767
msgid "Watermark user toggles"
msgstr "Přepínač vodoznaku uživatele"
#: ../../../app/themes/Peafowl/views/dashboard.php:770
msgid "Enable watermark on guest uploads"
msgstr "Povolit vodoznak pro soubory nahrané hostem"
@ -3270,6 +3398,10 @@ msgstr "Povolit vodoznak pro soubory nahrané uživatelem"
msgid "Enable watermark on admin uploads"
msgstr "Povolit vodoznak pro soubory nahrané administrátorem"
#: ../../../app/themes/Peafowl/views/dashboard.php:786
msgid "Watermark file toggles"
msgstr "Přepínač vodoznaku souboru"
#: ../../../app/themes/Peafowl/views/dashboard.php:789
msgid "Enable watermark on GIF image uploads"
msgstr "Povolit vodoznak při nahrávání GIF obrázků"
@ -3403,6 +3535,12 @@ msgstr "Povolit registrace"
msgid "Enable this if you want to allow users to signup."
msgstr "Povolte, pokud chcete povolit uživatelům registraci."
msgid "Enable user content delete"
msgstr "Povolit smazání obsahu uživatele"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Zapněte tuto funkci, pokud chcete uživatelům povolit smazat vlastní obsah. Toto nastavení nemá vliv na správce."
msgid "Minimum age required"
msgstr "Požadavek na minimální věk"
@ -3803,6 +3941,10 @@ msgstr "Styl"
msgid "Landing page"
msgstr "Vstupní stránka"
#: ../../../app/themes/Peafowl/views/dashboard.php:1396
msgid "Route explore"
msgstr "Prozkoumejte trasu"
#: ../../../app/themes/Peafowl/views/dashboard.php:1401
#, php-format
msgid "Select the homepage style. To customize it further edit app/themes/%s/views/index.php"
@ -3842,6 +3984,14 @@ msgstr "Toto bude přidáno dovnitř %s tagu domovské stránky. Ponechte pole p
msgid "Paragraph"
msgstr "Odstavec"
#: ../../../app/themes/Peafowl/views/dashboard.php:1452
msgid "Call to action button color"
msgstr "Barva tlačítka \"Call to action\""
#: ../../../app/themes/Peafowl/views/dashboard.php:1479
msgid "Enable this to use outline style for the homepage call to action button."
msgstr "Zapněte, pokud chcete aktivovat rámeček kolem tlačítka akce na titulce"
#: ../../../app/themes/Peafowl/views/dashboard.php:1488
msgid "Open URL"
msgstr "Otevřít URL adresu"
@ -3858,6 +4008,10 @@ msgstr "Zadat absolutní nebo relativní URL"
msgid "A relative URL like %r will be mapped to %l"
msgstr "Relativní URL jako %r bude namapována na %l"
#: ../../../app/themes/Peafowl/views/dashboard.php:1507
msgid "This will be added inside the call to action <a> tag. Leave it blank to use the default contents."
msgstr "Toto bude přidáno uvnitř výzvy k akci <a> tagu. Zanechte prázdné pro použití výchozího obsahu."
#: ../../../app/themes/Peafowl/views/dashboard.php:1513
msgid "User IDs"
msgstr "ID uživatele(ů)"
@ -3880,6 +4034,14 @@ msgstr "Zobrazení oznámení o dostupné aktualizaci Chevereta"
msgid "Enable this to show a notice on top warning you about new available system updates."
msgstr "Povolte, pokud chcete zobrazit oznámení při dostupné aktualizaci Chevereta."
#: ../../../app/themes/Peafowl/views/dashboard.php:1570
msgid "Minify code"
msgstr "Minimalizovat kód"
#: ../../../app/themes/Peafowl/views/dashboard.php:1576
msgid "Enable this if you want to auto minify CSS and JS code."
msgstr "Zapněte pokud chcete minimalizovat kód CSS"
#: ../../../app/themes/Peafowl/views/dashboard.php:1579
msgid "Maintenance"
msgstr "Mód údržby"
@ -3930,6 +4092,10 @@ msgstr "Vytisknout a protokolovat chyby"
msgid "To configure the debug level check the <a %s>debug documentation</a>. Default level is \"Error log\" (1)."
msgstr "Pro nastavení úrovně ladění si prohlédněte <a %s>debug documentation</a>. Výchozí hodnota je \"Error log\" (1)."
#, php-format
msgid "Routing allows you to customize default route binds on the fly. Only alphanumeric, hyphen and underscore characters are allowed. Check out our %s if you want to override or add new routes."
msgstr "Směrování umožňuje přizpůsobit výchozí vazby trasy v reálném čase. Povoleny jsou pouze alfanumerické znaky, pomlčky a znaky podtržítka. Podívejte se na naši %s, pokud chcete přepsat nebo přidat nové trasy."
msgid "Image routing"
msgstr "Směrování obrázku"
@ -4125,6 +4291,14 @@ msgstr "VK client secret"
msgid "You need a <a href=\"%s\" target=\"_blank\">reCAPTCHA key</a> for this."
msgstr "Potřebujete <a href=\"%s\" target=\"_blank\">reCAPTCHA klíč</a>."
#, php-format
msgid "%s site key"
msgstr "%s kód stránky"
#, php-format
msgid "%s secret key"
msgstr "%s tajný kód"
#: ../../../app/themes/Peafowl/views/dashboard.php:1986
msgid "reCAPTCHA threshold"
msgstr "reCAPTCHA threshold (práh)"
@ -4140,6 +4314,10 @@ msgstr "API komentářů"
msgid "Disqus API works with %s."
msgstr "Disqus API pracuje s %s."
#, php-format
msgid "%s public key"
msgstr "%s veřejný kód"
#: ../../../app/themes/Peafowl/views/dashboard.php:1997
msgid "Comment code"
msgstr "Kód komentáře"
@ -4293,6 +4471,54 @@ msgstr "Pro pokračování zadejte prosím vaše heslo."
msgid "Send"
msgstr "Odeslat"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Přidejte funkci nahrávání obrázků na své webové stránky, blog nebo fórum nainstalováním pluginu pro nahrávání. Tato funkce poskytuje možnost nahrávání obrázků z libovolné webové stránky tím, že zde umístí tlačítko, které umožní vašim uživatelům přímo odesílat obrázky do naší služby a automaticky zpracuje a vytvoří kódy potřebné pro vkládání. Všechny funkce zahrnují například funkci přetáhni a pusť, vzdálené nahrávání, změnu velikosti obrázků a další."
msgid "Supported software"
msgstr "Podporovaný software"
msgid "supported software"
msgstr "podporovaný software"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "Plugin funguje na libovolné webové stránce s uživatelsky upravitelným obsahem a pro %sv, umístí tlačítko pro nahrání, které bude odpovídat panelu nástrojů pro cílový editor, takže není potřeba další přizpůsobení."
msgid "Add it to your website"
msgstr "Přidejte je na své webové stránky"
msgid "options"
msgstr "možnosti"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Zkopírujte a vložte kód pluginu do kódu HTML vašich stránek (nejlépe v sekci hlavičky webu). Existuje spousta %o, aby to lépe vyhovovalo vašim potřebám."
msgid "Basic options"
msgstr "Základní možnosti"
msgid "Color palette"
msgstr "Paleta barev"
msgid "Button color scheme"
msgstr "Barevné schéma tlačítka"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Kódy pro sdílení, které budou automaticky vloženy do pole editoru"
msgid "After"
msgstr "Po"
msgid "Before"
msgstr "Před"
msgid "Advanced options"
msgstr "Pokročilé možnosti"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "Plugin má velkou sadu dalších možností, které umožňují úplné přizpůsobení. Můžete použít vlastní HTML, CSS, vlastní paletu barev, nastavit pozorovatele a další. Zkontrolujte %d a zdroj pluginu, abyste získali lepší představu o těchto pokročilých možnostech."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "Nemáte oprávnění k prohlížení této stránky nebo odkaz ze kterého jste se zde dostali již expiroval."
@ -4666,6 +4892,10 @@ msgstr "Je k dispozici aktualizace pro váš systém. Můžete ji automaticky st
msgid "Update now"
msgstr "Aktualizovat nyní"
#, javascript-format
msgid "This website is running latest %s version"
msgstr "Tato webová stránka používá nejnovější verzi %s"
#: ../../../app/lib/chevereto.js:2112 ../../../app/lib/chevereto.min.js:101
msgid "Clipboard image"
msgstr "Kopírovat obrázek do schránky"

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-05-23 17:56+0000\n"
"PO-Revision-Date: 2017-05-23 17:56+0000\n"
"POT-Creation-Date: 2017-10-01 18:12+0000\n"
"PO-Revision-Date: 2017-10-01 18:12+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: de\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Plugin"
msgstr "Plugin"
msgid "Plugin route"
msgstr "Plugin-Route"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Aktivieren, um Anweisungen für Plugins auf %u anzuzeigen. Eine Verlinkung zu den Anweisungen wird zum %s Menü hinzugefügt. Diese Einstellung betrifft keine Administratoren."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Nutzen Sie diese Funktion, um eine benutzerdefinierte URL für %p zu setzen. Beachten Sie bitte, dass %s manuell in der URL geändert werden muss."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Privat-Modus"
msgid "Update in progress"
msgstr "Update in Arbeit..."
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -270,9 +269,6 @@ msgstr "Aktuell"
msgid "Trending"
msgstr "Im Trend"
msgid "Popular"
msgstr "Beliebt"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Top-Benutzer"
@ -308,6 +304,9 @@ msgstr "Älteste"
msgid "Most viewed"
msgstr "Meistgesehen"
msgid "Popular"
msgstr "Beliebt"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -1372,14 +1371,14 @@ msgstr "Bild %i gespeichert in %w"
msgid "Direct links"
msgstr "Direkt-Link"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Originalbild-URL"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Betrachter-URL"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Originalbild-URL"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "Vorschaubild-URL"
@ -1546,6 +1545,12 @@ msgstr "Nachricht gesendet. Wir werden in Kürze mit Ihnen Kontakt aufnehmen!"
msgid "Mail error"
msgstr "E-Mail Fehler"
msgid "Upload images"
msgstr "Bilder hochalden"
msgid "Upload plugin"
msgstr "Plugin hochladen"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1630,6 +1635,11 @@ msgstr "Sie müssen mindestens %s Jahre alt sein, um diese Seite zu nutzen ."
msgid "Create account"
msgstr "Konto erstellen"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Upload"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1693,11 +1703,6 @@ msgstr "Zufall-Modus"
msgid "Notices (%s)"
msgstr "Anmerkungen (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Upload"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1901,27 +1906,33 @@ msgstr "Image-URLs hinzufügen"
msgid "You can also %i or %u."
msgstr "Sie können auch %i oder %u."
msgid "browse from your device"
msgstr "Durchsuchen Sie Ihr Gerät"
msgid "take a picture"
msgstr "ein Foto aufnehmen"
msgid "You can also %i, %c or %u."
msgstr "Sie können auch %i, %c oder %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Bearbeiten oder skalieren Sie ein Bild, in dem Sie auf die Vorschau klicken"
msgid "Edit or resize any image by touching the image preview"
msgstr "Bearbeiten oder skalieren Sie ein Bild, in dem Sie die Vorschau berühren"
msgid "Edit any image by touching the image preview"
msgstr "Bearbeiten Sie ein Bild, in dem Sie die Vorschau berühren"
msgid "your computer"
msgstr "Ihr Computer"
msgid "image URLs"
msgstr "Bild URLs"
msgid "You can keep adding more images from %i or from %u."
msgid "You can add more images from %i or %u."
msgstr "Sie können mehr Bilder von %i oder %u hinzufügen."
msgid "your device"
msgstr "Ihre Gerät"
msgid "You can add more images from %i, %c or %u."
msgstr "Sie können mehr Bilder von %i, %c oder %u hinzufügen."
msgid "Uploading %q %o"
msgstr "Lade %q %o hoch"
@ -2019,9 +2030,8 @@ msgstr "Mehr erfahren"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Überprüfen Sie den <a data-modal=\"simple\" data-target=\"failed-upload-result\">Fehlerbericht</a> für mehr Informationen."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "Maximal"
msgid "reset"
msgstr "Zurücksetzen"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2030,6 +2040,9 @@ msgstr "Schließen"
msgid "copy"
msgstr "Kopieren"
msgid "insert"
msgstr "Einfügen"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2584,9 +2597,6 @@ msgstr "Um alle Funktionen dieser Seite nutzen zu können, müssen Sie angemelde
msgid "There's nothing to show here."
msgstr "Keine Inhalte vorhanden."
msgid "Upload images"
msgstr "Bilder hochalden"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2764,6 +2774,20 @@ msgstr "Es wurde eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts a
msgid "Resend instructions"
msgstr "Anweisungen erneut senden"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Es wurde bereits eine E-Mail mit Anweisungen an die hinterlegte E-Mail-Adresse versendet. Falls Sie keine E-Mail erhalten haben, sollten Sie Ihren Junk- oder Spam-Filter überprüfen."
@ -3481,6 +3505,12 @@ msgstr "Registrierung aktivieren"
msgid "Enable this if you want to allow users to signup."
msgstr "Aktivieren, falls Benutzern die Registrierung erlaubt sein soll."
msgid "Enable user content delete"
msgstr "Löschen von Nutzerinhalten aktivieren"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Aktivieren, falls Nutzern erlaubt werden soll, ihre eigenen Inhalte zu löschen. Diese Einstellung hat keine Auswirkung auf Administratoren."
msgid "Minimum age required"
msgstr "Mindestalter erforderlich"
@ -4438,6 +4468,66 @@ msgstr "Bitte geben Sie das Passwort ein, um fortzufahren."
msgid "Send"
msgstr "Senden"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Ermöglichen Sie das Hochladen von Bildern auf Ihre Internetseite, Ihren Blog oder Ihr Forum, indem Sie das Upload-Plugin installieren. Es ermöglicht das Hochladen von Bildern über einen zusätzlichen Button der Ihren Nutzern erlaubt, Bilder direkt über diesen Service hochzuladen. Das Plugin verwaltet automatisch die Codes, die für ein Einfügen der Bilder notwendig sind. Der Funktionsumfang umfasst Drag & Drop, Remote Uploads, Änderungen der Bildgröße und vieles mehr."
msgid "Supported software"
msgstr "Unterstützte Software"
msgid "supported software"
msgstr "Unterstützte Software"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "Das Plugin arbeitet auf jeder Internetseite, die über editierbare Inhalte verfügt. Im Fall von %sv wird ein Upload-Button platziert, der sich an die Editor-Toolbar ohne weitere Anpassungen anpasst."
msgid "Add it to your website"
msgstr "Zu Ihrer Internetseite hinzufügen"
msgid "options"
msgstr "Optionen"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Kopieren Sie den Plugin-Code und fügen SIe ihn in den HTML-Code Ihrer Internetseite ein (vorzugsweise immerhalb des Head-Bereichs). Es gibt viele %o um den Code an Ihre Bedürfnisse anzupassen."
msgid "Basic options"
msgstr "Grundoptionen"
msgid "Color palette"
msgstr "Farbpalette"
msgid "Button color scheme"
msgstr "Button-Farbschema"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Eingebette Codes, die automatisch in die Editor-Box eingefügt werden."
msgid "Sibling selector"
msgstr "Geschwister-Selektor"
msgid "Sibling element selector where to place the button next to"
msgstr "Bestimmt, an welchem Geschwister-Element der Button platziert wird."
msgid "Sibling position"
msgstr "Geschwister-Position"
msgid "After"
msgstr "Nach"
msgid "Before"
msgstr "Vorher"
msgid "Position relative to sibling element"
msgstr "Bestimmt die Position relativ zum Geschwister-Element"
msgid "Advanced options"
msgstr "Erweiterte Einstellungen"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "Das Plugin hat eine breite Auswahl an weiteren Einstellungen die eine vollständige Anpassung an die eigenen Bedürfnisse erlauben. Sie können benutzerdefinierte HTML-Codes, CSS, eigene Farbpaletten und Beobachter und vieles mehr festlegen. Prüfen Sie %d und den Quellcode des Plugins, um ein bessers Verständnis von diesen Optionen zu erhalten."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "Sie haben entweder keine Berechtigung zum Anzeigen der Seite oder der aufgerufene Link ist nicht mehr gültig."

BIN
app/content/languages/en.mo Normal file

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-05-23 17:56+0000\n"
"PO-Revision-Date: 2017-05-23 17:56+0000\n"
"POT-Creation-Date: 2017-09-23 17:30+0000\n"
"PO-Revision-Date: 2017-09-23 17:30+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: es\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Plugin"
msgstr "Complemento"
msgid "Plugin route"
msgstr "Ruta de complemento"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Habilita esto para mostrar las instrucciones del complemento en %u. Un enlace a estas instrucciones será añadido al menu %s. Esta configuración no afecta a los administradores."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Usa esto para establecer una URL personalizada para %p. Ten en cuenta que necesitarás replicar manualmente %s en esta URL."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Personal"
msgid "Update in progress"
msgstr "Actualización en progreso"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ha ocurrido un error. Por favor inténtalo más tarde."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -270,9 +269,6 @@ msgstr "Reciente"
msgid "Trending"
msgstr "Tendencia"
msgid "Popular"
msgstr "Popular"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Usuarios top"
@ -308,6 +304,9 @@ msgstr "Más antiguo"
msgid "Most viewed"
msgstr "Más visto"
msgid "Popular"
msgstr "Popular"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -1372,14 +1371,14 @@ msgstr "Imagen %i alojada en %w"
msgid "Direct links"
msgstr "Enlaces directos"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "URL imagen"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Enlace a la imagen"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "URL imagen"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "URL miniatura"
@ -1546,6 +1545,12 @@ msgstr "Mensaje enviado. Nos pondremos en contacto pronto."
msgid "Mail error"
msgstr "Error en mail"
msgid "Upload images"
msgstr "Subir imágenes"
msgid "Upload plugin"
msgstr "Complemento de subida"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1630,6 +1635,11 @@ msgstr "Debes tener al menos %s años para usar este sitio web."
msgid "Create account"
msgstr "Crear cuenta"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Subir"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1693,11 +1703,6 @@ msgstr "Aleatorio"
msgid "Notices (%s)"
msgstr "Avisos (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Subir"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1901,27 +1906,33 @@ msgstr "agregar URLs de imagen"
msgid "You can also %i or %u."
msgstr "También puedes %i o %u."
msgid "browse from your device"
msgstr "explorar desde tu dispositivo"
msgid "take a picture"
msgstr "tomar una foto"
msgid "You can also %i, %c or %u."
msgstr "También puedes %i, %c o %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Edita o redimensiona cualquier imagen haciendo click en la previsualización"
msgid "Edit or resize any image by touching the image preview"
msgstr "Edita o redimensiona cualquier imagen tocando la previsualización"
msgid "Edit any image by touching the image preview"
msgstr "Edita cualquier imagen tocando la previsualización"
msgid "your computer"
msgstr "tu computadora"
msgid "image URLs"
msgstr "URLs de imagen"
msgid "You can keep adding more images from %i or from %u."
msgstr "Puedes seguir añadiendo más imágenes desde %i o desde %u."
msgid "You can add more images from %i or %u."
msgstr "Puedes añadir más imágenes desde %i o %u."
msgid "your device"
msgstr "tu dispositivo"
msgid "You can add more images from %i, %c or %u."
msgstr "Puedes añadir más imágenes desde %i, %c o %u."
msgid "Uploading %q %o"
msgstr "Subiendo %q %o"
@ -2019,9 +2030,8 @@ msgstr "conocer más"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Revisa el <a data-modal=\"simple\" data-target=\"failed-upload-result\">reporte de error</a> para más información."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "máximo"
msgid "reset"
msgstr "reiniciar"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2030,6 +2040,9 @@ msgstr "cerrar"
msgid "copy"
msgstr "copiar"
msgid "insert"
msgstr "insertar"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2584,9 +2597,6 @@ msgstr "Debes ingresar para usar todas las características de este sitio. Si no
msgid "There's nothing to show here."
msgstr "No hay nada que mostrar aquí."
msgid "Upload images"
msgstr "Subir imágenes"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2764,6 +2774,20 @@ msgstr "Un email con instrucciones para restablecer tu contraseña ha sido envia
msgid "Resend instructions"
msgstr "Re-enviar instrucciones"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ha ocurrido un error. Por favor inténtalo más tarde."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Un email a %s ha sido enviado con instrucciones para activar tu cuenta. Si no recibes las instrucciones revisa en tu carpeta de correo no deseado."
@ -2957,7 +2981,7 @@ msgid "Enables to browse images randomly."
msgstr "Permite navegar imágenes de manera aleatoria."
msgid "Likes"
msgstr "Gustados"
msgstr "Me gusta"
msgid "Allows users to like content and populate \"Most liked\" listings."
msgstr "Permite a los usuarios gustar contenido y generar listados con lo \"Más gustado\"."
@ -3481,6 +3505,12 @@ msgstr "Habilitar registros"
msgid "Enable this if you want to allow users to signup."
msgstr "Habilita esto si deseas permitir el registro de cuentas de usuario."
msgid "Enable user content delete"
msgstr "Habilitar eliminación de contenido de usuario"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Habilita esto si deseas permitir que los usuarios eliminen su contenido propio. Esta configuración no afecta a los administradores."
msgid "Minimum age required"
msgstr "Edad mínima requerida"
@ -4438,6 +4468,66 @@ msgstr "Por favor introduce tu contraseña para continuar."
msgid "Send"
msgstr "Enviar"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Agrega subida de imágenes a tu sitio web, blog o foro instalando nuestro complemento de subida. Proporciona subida de imágenes a cualquier sitio web mediante la colocación de un botón que permitirá a tus usuarios cargar directamente imágenes a nuestro servicio y se encargará automáticamente de los códigos necesarios para la inserción. Todas las características incluidas como arrastrar y soltar, subida remota, redimensionamiento de imágenes y mucho más."
msgid "Supported software"
msgstr "Software soportado"
msgid "supported software"
msgstr "software soportado"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "El complemento funciona en cualquier sitio web con contenido editable por el usuario y para el %sv, colocará un botón de subida que coincidirá con la barra de herramientas del editor de destino, por lo que no se necesita personalización adicional."
msgid "Add it to your website"
msgstr "Añadir a su sitio web"
msgid "options"
msgstr "opciones"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Copia y pega el código del complemento en código HTML de tu sitio web (preferiblemente dentro de la cabecera). Hay un montón de %o para que se adapte mejor a tus necesidades."
msgid "Basic options"
msgstr "Opciones básicas"
msgid "Color palette"
msgstr "Paleta de color"
msgid "Button color scheme"
msgstr "Esquema de colores del botón"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Códigos de inserción que se insertarán automáticamente en el cuadro del editor"
msgid "Sibling selector"
msgstr "Selector hermano"
msgid "Sibling element selector where to place the button next to"
msgstr "Selector de elemento hermano donde poner el botón"
msgid "Sibling position"
msgstr "Posición hermano"
msgid "After"
msgstr "Después"
msgid "Before"
msgstr "Antes"
msgid "Position relative to sibling element"
msgstr "Posición relativa al elemento hermano"
msgid "Advanced options"
msgstr "Opciones avanzadas"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "El complemento tiene un gran conjunto de opciones adicionales que permiten personalización completa. Puedes utilizar HTML personalizado, CSS, paleta de colores propia, establecer observadores y mucho más. Comprueba la %d y la fuente del complemento para obtener una mejor idea de estas opciones avanzadas."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "No tienes permiso para acceder a esta página o el enlace a expirado."

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-06-21 18:28+0000\n"
"PO-Revision-Date: 2017-06-21 18:28+0000\n"
"POT-Creation-Date: 2017-10-01 18:12+0000\n"
"PO-Revision-Date: 2017-10-01 18:12+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: fi\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Plugin"
msgstr "Liitännäinen"
msgid "Plugin route"
msgstr "Liitännäisen ohjaus"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Ota käyttään liitännäisen ohjeet %u. Ohjeet tulee näkymään %s valikossa. Tämä asetus ei vaikuta ylläpitäjiin."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Aseta kustomoitu URL %p. Huomioi, että sinun tulee käsin kopioida se %s URL:iin."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Henkilökohtainen"
msgid "Update in progress"
msgstr "Päivitys käynnissä"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Virhe havaittu. Yritä myöhemmin uudelleen."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -270,9 +269,6 @@ msgstr "Viimeaikainen"
msgid "Trending"
msgstr "Nousussa"
msgid "Popular"
msgstr "Suosittu"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Suosituimmat käyttäjät"
@ -308,6 +304,9 @@ msgstr "Vanhimmat"
msgid "Most viewed"
msgstr "Katsotuimmat"
msgid "Popular"
msgstr "Suosittu"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -701,7 +700,7 @@ msgstr "Tuki"
#, php-format
msgid "Need help? Go to %s and you will get help quickly."
msgstr "Tarvitsetko apua? Mene %s ja saat apua nopeasti."
msgstr "Tarvitsetko apua? %s -sivustolta saat apua nopeasti."
#: ../../../app/routes/route.dashboard.php:169
msgid "PHP version"
@ -1372,14 +1371,14 @@ msgstr "Kuva %i yläpidetty %w"
msgid "Direct links"
msgstr "Suorat linkit"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Kuvan osoite"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Kuvan linkki"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Kuvan osoite"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "Kuvakkeen osoite"
@ -1546,6 +1545,12 @@ msgstr "Viesti lähetetty. Olemme sinuun yhteydessä pian."
msgid "Mail error"
msgstr "Sähköpostivirhe"
msgid "Upload images"
msgstr "Lataa kuvia"
msgid "Upload plugin"
msgstr "Kuvien lataus liitännäinen"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1630,6 +1635,11 @@ msgstr "Sinun tulee olla vähintään %s vuotta vanha käyttääksesi sivustoa."
msgid "Create account"
msgstr "Rekisteröidy"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Lähetä"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1693,11 +1703,6 @@ msgstr "Satunnainen"
msgid "Notices (%s)"
msgstr "Ilmoitukset (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Lähetä"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1751,7 +1756,7 @@ msgstr "Käyttäjänimi tai sähköpostiosoite"
#: ../../../app/themes/Peafowl/snippets/modal_login.php:23
#: ../../../app/themes/Peafowl/views/login.php:53
msgid "Keep me logged in"
msgstr "Pidä minut kirjautuneena"
msgstr "Pysy kirjautuneena"
#: ../../../app/themes/Peafowl/header.php:301
#, php-format
@ -1901,27 +1906,33 @@ msgstr "lisää kuvan osoite"
msgid "You can also %i or %u."
msgstr "Voit myös %i tai %u."
msgid "browse from your device"
msgstr "selaa laitteesta"
msgid "take a picture"
msgstr "ota kuva"
msgid "You can also %i, %c or %u."
msgstr "Voit myös %i, %c tai %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Muokkaa tai muuta kuvan kokoa osoittamalla kuvan esikatselua"
msgid "Edit or resize any image by touching the image preview"
msgstr "Muokkaa tai muuta kuvan kokoa osoittamalla kuvan esikatselua"
msgid "Edit any image by touching the image preview"
msgstr "Muokkaa kuvaa koskettamalla kuvan esikatselua"
msgid "your computer"
msgstr "tietokoneesi"
msgid "image URLs"
msgstr "kuvan osoite"
msgid "You can keep adding more images from %i or from %u."
msgstr "Voit lisätä enemmän kuvia %i tai %u."
msgid "You can add more images from %i or %u."
msgstr "Voit lisätä kuvia %i tai %u."
msgid "your device"
msgstr "laitteesi"
msgid "You can add more images from %i, %c or %u."
msgstr "Voit lisätä kuvia %i, %c tai %u."
msgid "Uploading %q %o"
msgstr "Ladataan %q %o"
@ -1930,7 +1941,7 @@ msgid "complete"
msgstr "valmis"
msgid "The queue is being uploaded, it should take just a few seconds to complete."
msgstr "Ladataan kuvia, pitäisi kestää vielä hetki."
msgstr "Ladataan kuvia, kestää vielä hetken."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:32
msgid "Upload complete"
@ -2019,9 +2030,8 @@ msgstr "lue lisää"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Katso <a data-modal=\"simple\" data-target=\"failed-upload-result\">virheraportti</a> saadaksesi lisätietoja."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "maksimi"
msgid "reset"
msgstr "nollaa"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2030,6 +2040,9 @@ msgstr "sulje"
msgid "copy"
msgstr "kopioi"
msgid "insert"
msgstr "lisää"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2584,9 +2597,6 @@ msgstr "Käyttääksesi kaikkia ominaisuuksia, sinun täytyy olla kirjautunut si
msgid "There's nothing to show here."
msgstr "Täällä ei ole mitään nähtävää."
msgid "Upload images"
msgstr "Lataa kuvia"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2764,6 +2774,20 @@ msgstr "Teille on lähetetty sähköpostiviesti josta löydätte tarkemmat ohjee
msgid "Resend instructions"
msgstr "Lähetä ohjeet uudelleen"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Virhe havaittu. Yritä myöhemmin uudelleen."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Teille on lähetetty sähköpostiviesti josta löydätte tarkemmat ohjeet salasanan vaihtamiseen. Jos et saanut sähköpostiviestiä, tarkista roskapostit."
@ -3481,6 +3505,12 @@ msgstr "Salli rekisteröitymiset"
msgid "Enable this if you want to allow users to signup."
msgstr "Salli käyttäjien rekisteröityä palveluun."
msgid "Enable user content delete"
msgstr "Salli käyttäjien poistaa sisältöä"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Salli käyttäjien poistaa omaa sisältöään palvelusta. Tämä asetus ei vaikuta ylläpitäjiin."
msgid "Minimum age required"
msgstr "Vähimmäisikä vaaditaan"
@ -4438,6 +4468,66 @@ msgstr "Anna salasana jatkaaksesi."
msgid "Send"
msgstr "Lähetä"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Lisää kuvien lataus mahdollisuus verkkosivuille, blogiin tai foorumille asentamalla liitännäinen. Tämä lisää painikkeen sivuille mahdollistaen kuvien lataamisen palvelimelle ja hoitaa automaattisesti kaiken taustalla. Kaikki toiminnot saatavilla mm. kuvien lataaminen raahaamalla ja tiputtamalla, etälataus sekä kuvien kokojen automaattinen muuttaminen."
msgid "Supported software"
msgstr "Tuetut alustat"
msgid "supported software"
msgstr "tuetut alustat"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "Tämä liitännäinen toimii millä tahansa verkkosivulla, jolla käyttäjä voi muokata sisältöä. %sv latauspainike tulee näkymään automaattisesti työkalupalkissa ja ylimääräisiä muokkauksia ei siis tarvitse tehdä."
msgid "Add it to your website"
msgstr "Asentaminen"
msgid "options"
msgstr "asetuksia"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Sijoita liitännäisen koodi verkkosivun HTML-koodiin (mieluiten head-osion sisään). Liitännäiseen löytyy paljon %o, joilla voit muokata sen paremmin tarpeisiisi."
msgid "Basic options"
msgstr "Asetukset"
msgid "Color palette"
msgstr "Väripaletti"
msgid "Button color scheme"
msgstr "Painikkeiden väriteema"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Upotuskoodit, jotka tulevat automaattisesti muokkauslaatikkoon"
msgid "Sibling selector"
msgstr "Sisarvalikko"
msgid "Sibling element selector where to place the button next to"
msgstr "Sisarelementin valitsin, johon sijoitetaan vieressä oleva painike"
msgid "Sibling position"
msgstr "Sisarelementin sijainti"
msgid "After"
msgstr "Jälkeen"
msgid "Before"
msgstr "Ennen"
msgid "Position relative to sibling element"
msgstr "Asema sisarelementtiin nähden"
msgid "Advanced options"
msgstr "Edistyneet asetukset"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "Tähän liitännäiseen on paljon edistyneitä muokkausasetuksia. Voit muokata mm. HTML, CSS, värejä, asettaa tarkkailijoita yms. Lue liitännäisen %d saadaksesi paremman käsityksen edistyneistä asetuksista."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "Sinulla ei ole oikeutta tälle sivulle tai linkkisi on vanhentunut."

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-05-23 17:56+0000\n"
"PO-Revision-Date: 2017-05-23 17:56+0000\n"
"POT-Creation-Date: 2017-09-23 17:30+0000\n"
"PO-Revision-Date: 2017-09-23 17:30+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: it\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Plugin"
msgstr "Plugin"
msgid "Plugin route"
msgstr "Percorso Plugin"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Abilita questo per visualizzare le istruzioni del plugin a %u. Un link a queste istruzioni verrà aggiunto al menu %s. Questa impostazione non riguarda gli amministratori."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Utilizza questo per impostare una URL personalizzato per %p. Tieni presente che devi replicare manualmente %s in questa URL."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Personale"
msgid "Update in progress"
msgstr "Aggiornamento in corso..."
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Si è verificato un errore. Riprova più tardi."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -270,9 +269,6 @@ msgstr "Recente"
msgid "Trending"
msgstr "Argomenti"
msgid "Popular"
msgstr "Popolare"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Utenti top"
@ -308,6 +304,9 @@ msgstr "Più vecchie"
msgid "Most viewed"
msgstr "Più viste"
msgid "Popular"
msgstr "Popolare"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -1372,14 +1371,14 @@ msgstr "Immagine %i ospitata in %w"
msgid "Direct links"
msgstr "Link diretti"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Immagine originale"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Pagina immagine"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Immagine originale"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "Immagine in miniatura"
@ -1546,6 +1545,12 @@ msgstr "Messaggio inviato. Sarai ricontattato il prima possibile."
msgid "Mail error"
msgstr "Errore email"
msgid "Upload images"
msgstr "Carica immagini"
msgid "Upload plugin"
msgstr "Caricare plugin"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1630,6 +1635,11 @@ msgstr "L'utilizzo di questo sito web è vietato ai minori di %s anni."
msgid "Create account"
msgstr "Crea un account"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Carica"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1693,11 +1703,6 @@ msgstr "Casuale"
msgid "Notices (%s)"
msgstr "Avvisi (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Carica"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1901,27 +1906,33 @@ msgstr "aggiungi URL immagini"
msgid "You can also %i or %u."
msgstr "È inoltre possibile %i o %u."
msgid "browse from your device"
msgstr "esplorare dal tuo dispositivo"
msgid "take a picture"
msgstr "Fai una foto"
msgid "You can also %i, %c or %u."
msgstr "Puoi anche %i, %c o %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Modificare o ridimensionare un immagine cliccando l'immagine di anteprima"
msgid "Edit or resize any image by touching the image preview"
msgstr "Modificare o ridimensionare un'immagine toccando l'immagine di anteprima"
msgid "Edit any image by touching the image preview"
msgstr "Modifica qualsiasi immagine toccando l'anteprima dell'immagine"
msgid "your computer"
msgstr "il tuo computer"
msgid "image URLs"
msgstr "URL immagini"
msgid "You can keep adding more images from %i or from %u."
msgstr "È possibile continuare ad aggiungere altre immagini da %i oppure da %u."
msgid "You can add more images from %i or %u."
msgstr "È possibile aggiungere altre immagini %i o %u."
msgid "your device"
msgstr "il tuo dispositivo"
msgid "You can add more images from %i, %c or %u."
msgstr "È possibile aggiungere altre immagini %i, %c o %u."
msgid "Uploading %q %o"
msgstr "Caricamento %q %o"
@ -2019,9 +2030,8 @@ msgstr "Scopri di più"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Controlla il <a data-modal=\"simple\" data-target=\"failed-upload-result\">rapporto di errore</a> per ulteriori informazioni."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "Massimo"
msgid "reset"
msgstr "azzerare"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2030,6 +2040,9 @@ msgstr "chiudi"
msgid "copy"
msgstr "copia"
msgid "insert"
msgstr "inserire"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2584,9 +2597,6 @@ msgstr "Per utilizzare tutte le funzionalità di questo sito devi collegarti. Se
msgid "There's nothing to show here."
msgstr "Non c'è niente da mostrare qui."
msgid "Upload images"
msgstr "Carica immagini"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2764,6 +2774,20 @@ msgstr "Ti abbiamo inviata una email all'indirizzo email registrato con le indic
msgid "Resend instructions"
msgstr "Invia di nuovo le istruzioni"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Si è verificato un errore. Riprova più tardi."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Ti abbiamo già inviata una email con le indicazioni per reimpostare la password. Se non la hai ricevuta, verifica anche nelle cartelle spam o posta indesiderata."
@ -3481,6 +3505,12 @@ msgstr "Attiva registrazione utenti"
msgid "Enable this if you want to allow users to signup."
msgstr "Attiva questa opzione per consentire all'utente di registrarsi al sito"
msgid "Enable user content delete"
msgstr "Abilita l'eliminazione dei contenuti utente"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Abilitare questa opzione se si desidera consentire agli utenti di eliminare i propri contenuti. Questa impostazione non riguarda gli amministratori."
msgid "Minimum age required"
msgstr "Età minima richiesta"
@ -4438,6 +4468,66 @@ msgstr "Si prega di inserire la password per continuare"
msgid "Send"
msgstr "Invia"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Aggiungi l'upload dell'immagine al tuo sito web, blog o forum installando il nostro plug-in per il caricamento. Fornisce l'upload di immagini a qualsiasi sito web posizionando un pulsante che permetterà agli utenti di caricare direttamente immagini al nostro servizio e gestirà automaticamente i codici necessari per l'inserimento. Tutte le funzioni incluse come trascinamento, rilascio remoto, ridimensionamento delle immagini e altro ancora."
msgid "Supported software"
msgstr "Software supportato"
msgid "supported software"
msgstr "Software supportato"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "Il plugin funziona in qualsiasi sito web con contenuti modificabili dall'utente e per %sv, metterà un pulsante di caricamento che corrisponderà alla barra degli strumenti dell'editor di destinazione in modo che non sia necessaria alcuna personalizzazione aggiuntiva."
msgid "Add it to your website"
msgstr "Aggiungilo al tuo sito web"
msgid "options"
msgstr "opzioni"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Copia e incolla il codice plug-in nel codice HTML del tuo sito web (preferibilmente all'interno della sezione di testa). Ci sono molti %o per adattarla meglio alle tue esigenze."
msgid "Basic options"
msgstr "Opzioni di base"
msgid "Color palette"
msgstr "Palette dei colori"
msgid "Button color scheme"
msgstr "Schema colore dei pulsanti"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Incorpora i codici che verranno inseriti automaticamente nella casella di testo"
msgid "Sibling selector"
msgstr "Selettore"
msgid "Sibling element selector where to place the button next to"
msgstr "Selettore di elementi di sintonia in cui posizionare il pulsante accanto"
msgid "Sibling position"
msgstr "Posizione del Selettore"
msgid "After"
msgstr "Dopo"
msgid "Before"
msgstr "Prima"
msgid "Position relative to sibling element"
msgstr "Posizione relativa all'elemento del selettore"
msgid "Advanced options"
msgstr "Opzioni avanzate"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "Il plugin dispone di un vasto set di opzioni aggiuntive che consentono una completa personalizzazione. È possibile utilizzare HTML personalizzato, CSS, la propria tavolozza di colori, impostare gli osservatori e altro ancora. Controlla la %d e la fonte plugin per avere un'idea migliore di queste opzioni avanzate."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "Attenzione Tu non hai i permessi per accedere a questa pagina o il link oppure è scaduto."

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-05-23 17:56+0000\n"
"PO-Revision-Date: 2017-05-23 17:56+0000\n"
"POT-Creation-Date: 2017-09-23 17:30+0000\n"
"PO-Revision-Date: 2017-09-23 17:30+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: ja\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "Plugin"
msgstr "プラグイン"
msgid "Plugin route"
msgstr "プラグインルート"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "%uでプラグインの説明を表示する。これらの説明は、メニューに%sを追加します。この設定は管理者には影響しません。"
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "%pのカスタムURLをセットするのに使用。手動でこのURLを%sで複製してください。"
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "個人"
msgid "Update in progress"
msgstr "進行中の更新"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "エラーが発生しました。後ほど、再度お試し下さい。"
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -264,9 +263,6 @@ msgstr "最新"
msgid "Trending"
msgstr "流行"
msgid "Popular"
msgstr "人気"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "トップユーザ"
@ -302,6 +298,9 @@ msgstr "古い順"
msgid "Most viewed"
msgstr "閲覧順"
msgid "Popular"
msgstr "人気"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -1358,14 +1357,14 @@ msgstr "%wでホストされている画像%i"
msgid "Direct links"
msgstr "ダイレクトリンク"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "画像URL"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "画像へのリンク"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "画像URL"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "サムネイルURL"
@ -1532,6 +1531,12 @@ msgstr "メッセージを送信しました。まもなく私どもから連絡
msgid "Mail error"
msgstr "メールでエラーが発生しました。"
msgid "Upload images"
msgstr "画像をアップロード"
msgid "Upload plugin"
msgstr "プラグインをアップロード"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1616,6 +1621,11 @@ msgstr "このサイトを利用するには、あなたが%s歳以上である
msgid "Create account"
msgstr "アカウント作成"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "アップロード"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1679,11 +1689,6 @@ msgstr "ランダム"
msgid "Notices (%s)"
msgstr "通知 (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "アップロード"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1887,27 +1892,33 @@ msgstr "画像のURLを追加"
msgid "You can also %i or %u."
msgstr "%iまたは%uすることもできます。"
msgid "browse from your device"
msgstr "デバイスを見る"
msgid "take a picture"
msgstr "写真を撮影"
msgid "You can also %i, %c or %u."
msgstr "%i, %c または、 %uから"
msgid "Edit or resize any image by clicking the image preview"
msgstr "画像のプレビューをクリックして編集または画像をリサイズ"
msgid "Edit or resize any image by touching the image preview"
msgstr "画像のプレビューをタップして編集または画像をリサイズ"
msgid "Edit any image by touching the image preview"
msgstr "プレビューをタッチして編集"
msgid "your computer"
msgstr "あなたのコンピュータ"
msgid "image URLs"
msgstr "画像のURL"
msgid "You can keep adding more images from %i or from %u."
msgstr "%iまたは%uからさらに画像を追加することができます。"
msgid "You can add more images from %i or %u."
msgstr "%u、または、%iから画像を追加することができます。"
msgid "your device"
msgstr "あなたのデバイス"
msgid "You can add more images from %i, %c or %u."
msgstr "%i、%c または %uから画像を追加することができます。"
msgid "Uploading %q %o"
msgstr "アップロード中 %q %o"
@ -2005,9 +2016,8 @@ msgstr "もっと詳しく"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "詳しくは<a data-modal=\"simple\" data-target=\"failed-upload-result\">エラーレポート</a>をご覧下さい。"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "最大"
msgid "reset"
msgstr "リセット"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2016,6 +2026,9 @@ msgstr "閉じる"
msgid "copy"
msgstr "コピー"
msgid "insert"
msgstr "挿入"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2569,9 +2582,6 @@ msgstr "このサイトの機能を全て利用するためには、ログイン
msgid "There's nothing to show here."
msgstr "表示するものはありません。"
msgid "Upload images"
msgstr "画像をアップロード"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2749,6 +2759,20 @@ msgstr "パスワードのリセット方法を登録されているメールア
msgid "Resend instructions"
msgstr "手順を再送信"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "エラーが発生しました。後ほど、再度お試し下さい。"
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "パスワードのリセットの手順をメールで送信しました。届いていない場合には、迷惑メールフォルダをチェックして下さい。"
@ -3466,6 +3490,12 @@ msgstr "新規アカウントの登録を有効にする"
msgid "Enable this if you want to allow users to signup."
msgstr "ゲストに新規アカウントの登録を許可する場合に有効にしてください。"
msgid "Enable user content delete"
msgstr "ユーザーのコンテンツの消去を許可"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "ユーザーに自分のコンテンツの削除を許可する。この設定は管理者には影響しません。"
msgid "Minimum age required"
msgstr "最低年齢の要求"
@ -4423,6 +4453,66 @@ msgstr "続けるにはパスワードを入力してください。"
msgid "Send"
msgstr "送信"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "このアップロードプラグインのインストールされている、Webサイト、ブログ、またはフォーラムから画像をアップロードして追加する。画像の追加に必要なコードを自動で扱うボタンの設置されたWebサイトへ画像をアップロードします。ドラッグドロップやリモートアップロード、画像のリサイズなどの機能も全てふくまれています。"
msgid "Supported software"
msgstr "サポートするソフトウェア"
msgid "supported software"
msgstr "サポートするソフトウェア"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "プラグインは、ユーザーがコンテンツを編集可能なWebサイトや%sの編集用エディタに特別なカスタマイズなしで、画像のアップロートボタンを追加します。"
msgid "Add it to your website"
msgstr "あなたのWebサイトへ追加"
msgid "options"
msgstr "オプション"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "WebサイトのHTMLへコードをコピーして貼りつけます(head内が最適です)。豊富な%oが合わせます。"
msgid "Basic options"
msgstr "基本オプション"
msgid "Color palette"
msgstr "カラーパレット"
msgid "Button color scheme"
msgstr "ボタン色スキーマ"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "エディターボックスに自動でコードを埋め込む"
msgid "Sibling selector"
msgstr "兄弟セレクター"
msgid "Sibling element selector where to place the button next to"
msgstr "ボタンの隣の兄弟セレクター"
msgid "Sibling position"
msgstr "兄弟ポジション"
msgid "After"
msgstr "アフター"
msgid "Before"
msgstr "ビフォー"
msgid "Position relative to sibling element"
msgstr "兄弟エレメントとrelativeに"
msgid "Advanced options"
msgstr "追加オプション"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "プラグインには、フルカスタマイズするための豊富な追加オプションセットがあります。カスタムHTML,カスタムCSS、カラーパレットなどが使えます。追加オプションセットを使いこなすには、%dか、プラグインのソースを参照してください。"
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "このページにアクセスする権利がないか、または、期限切れのリンクです。"

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-06-21 18:28+0000\n"
"PO-Revision-Date: 2017-06-21 18:28+0000\n"
"POT-Creation-Date: 2017-10-13 22:04+0000\n"
"PO-Revision-Date: 2017-10-13 22:04+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: nl\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Plugin"
msgstr "Plugin"
msgid "Plugin route"
msgstr "Plugin route"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Schakel dit in om de plugin instructies op %u te tonen. Een link naar deze instructies wordt toegevoegd aan het %s menu. Deze instelling is niet van toepassing voor beheerders."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Gebruik dit om een eigen URL in te schakelen voor %p. Let op dat het noodzakelijk is om handmatig %s toe te voegen in deze URL."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Persoonlijk"
msgid "Update in progress"
msgstr "Bezig met bijwerken"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Er is een fout opgetreden. Probeer het later nog eens."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -270,9 +269,6 @@ msgstr "Recent"
msgid "Trending"
msgstr "Trending"
msgid "Popular"
msgstr "Populair"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Topgebruikers"
@ -308,6 +304,9 @@ msgstr "Oudste"
msgid "Most viewed"
msgstr "Meest bekeken"
msgid "Popular"
msgstr "Populair"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -601,7 +600,7 @@ msgstr "Bevestiging nodig voor %s"
#: ../../../app/routes/route.signup.php:216
#, php-format
msgid "Welcome to %s"
msgstr "Welkom bij %s"
msgstr "Welkom bij %s."
#: ../../../app/routes/route.account.php:360
#: ../../../app/routes/route.settings.php:327
@ -1372,14 +1371,14 @@ msgstr "Afbeelding %i gehost in %w"
msgid "Direct links"
msgstr "Directe link"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Afbeelding URL"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Afbeelding link"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Afbeelding URL"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "Thumbnail URL"
@ -1546,6 +1545,12 @@ msgstr "Bericht verzonden. We nemen zo spoedig mogelijk contact op."
msgid "Mail error"
msgstr "Mail fout"
msgid "Upload images"
msgstr "Upload afbeeldingen"
msgid "Upload plugin"
msgstr "Upload plugin"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1630,6 +1635,11 @@ msgstr "U moet minimaal %s jaar oud zijn om deze website te gebruiken."
msgid "Create account"
msgstr "Maak een account"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Upload"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1693,11 +1703,6 @@ msgstr "Willekeurig"
msgid "Notices (%s)"
msgstr "Mededelingen (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Upload"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1824,27 +1829,27 @@ msgstr "Wij hebben een aanvraag ontvangen om het volgende e-mailadres <a href=\"
#: ../../../app/themes/Peafowl/mails/account-change-email.php:6
#, php-format
msgid "To complete the process you must <a href=\"%s\">activate your email</a>."
msgstr "Om uw e-mailadres te activeren klikt u op <a href=\"%s\">deze link</a>."
msgstr "Om jouw e-mailadres te activeren, klik op <a href=\"%s\">deze link</a>."
#: ../../../app/themes/Peafowl/mails/account-change-email.php:8
#: ../../../app/themes/Peafowl/mails/account-confirm.php:8
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:8
#, php-format
msgid "Alternatively you can copy and paste the URL into your browser: <a href=\"%s\">%s</a>"
msgstr "U kunt ook deze link in uw adresbalk plakken: <a href=\"%s\">%s</a>"
msgstr "Je kunt ook deze link in uw adresbalk plakken: <a href=\"%s\">%s</a>"
#: ../../../app/themes/Peafowl/mails/account-change-email.php:10
#: ../../../app/themes/Peafowl/mails/account-confirm.php:10
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:10
msgid "If you didn't intend this just ignore this message."
msgstr "Heeft u niet om dit bericht gevraagd dan kun je deze negeren."
msgstr "Heb je niet om dit bericht gevraagd, dan kun je dit bericht negeren."
#: ../../../app/themes/Peafowl/mails/account-change-email.php:12
#: ../../../app/themes/Peafowl/mails/account-confirm.php:12
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:12
#, php-format
msgid "This request was made from IP: %s"
msgstr "Deze aanvraag is gemaakt vanaf IP adres: %s"
msgstr "Deze aanvraag is gedaan vanaf IP adres: %s"
#: ../../../app/themes/Peafowl/mails/account-confirm.php:4
msgid "We received a request to register the %n account at %w."
@ -1853,7 +1858,7 @@ msgstr "Wij hebben een aanvraag ontvangen om het account %n te registreren op %w
#: ../../../app/themes/Peafowl/mails/account-confirm.php:6
#, php-format
msgid "To complete the process you must <a href=\"%s\">activate your account</a>."
msgstr "Om uw account te activeren klikt u op <a href=\"%s\">deze link</a>."
msgstr "Om jouw account te activeren, klik op <a href=\"%s\">deze link</a>."
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:4
msgid "We received a request to reset the password for your <a href=\"%u\">%n</a> account."
@ -1866,11 +1871,11 @@ msgstr "Om uw wachtwoord te wijzigen <a href=\"%s\">volgt u deze link</a>."
#: ../../../app/themes/Peafowl/mails/account-welcome.php:4
msgid "Hi %n, welcome to %w"
msgstr "Hallo %n, welkom bij %w"
msgstr "Hallo %n, welkom bij %w."
#: ../../../app/themes/Peafowl/mails/account-welcome.php:6
msgid "Now that your account is ready you can enjoy uploading your images, creating albums and setting the privacy of your content as well as many more cool things that you will discover."
msgstr "Nu dat je account klaar is, kun je foto's gaan uploaden, albums aanmaken , krijg je de mogelijkheid om de privacy-instellingen te kiezen voor je foto's en kun je verder nog veel meer leuke dingen gaan ontdekken."
msgstr "Nu je account klaar is, kun je foto's gaan uploaden, albums aanmaken , krijg je de mogelijkheid om de privacy-instellingen te kiezen voor je foto's en kun je verder nog veel meer leuke dingen gaan ontdekken."
#: ../../../app/themes/Peafowl/mails/account-welcome.php:8
msgid "By the way, here is you very own awesome profile page: <a href=\"%u\">%n</a>. Go ahead and customize it, its yours!."
@ -1901,27 +1906,33 @@ msgstr "voeg afbeeldingen URL's toe"
msgid "You can also %i or %u."
msgstr "Je kunt ook %i of %u."
msgid "browse from your device"
msgstr "vanaf uw toestel bladeren"
msgid "take a picture"
msgstr "neem een foto"
msgid "You can also %i, %c or %u."
msgstr "Je kunt ook %i, %c of %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Bewerk of pas formaat aan van de afbeelding door op de voorvertoning te klikken"
msgid "Edit or resize any image by touching the image preview"
msgstr "Bewerk of pas formaat aan van de afbeelding door de voorvertoning aan te raken"
msgid "Edit any image by touching the image preview"
msgstr "Bewerk iedere afbeelding door het voorbeeld aan te raken"
msgid "your computer"
msgstr "jouw computer"
msgid "image URLs"
msgstr "afbeelding URLs"
msgid "You can keep adding more images from %i or from %u."
msgstr "Je kunt meer afbeeldingen toe blijven voegen vanaf %i of middels %u."
msgid "You can add more images from %i or %u."
msgstr "Je kunt meer afbeeldingen toevoegen vanaf %i of %u."
msgid "your device"
msgstr "jouw apparaat"
msgid "You can add more images from %i, %c or %u."
msgstr "Je kunt meer afbeeldingen toevoegen vanaf %i, %c of %u."
msgid "Uploading %q %o"
msgstr "Uploading %q %o"
@ -2019,9 +2030,8 @@ msgstr "Meer informatie"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Zie het <a data-modal=\"simple\" data-target=\"failed-upload-result\">foutrapport</a> voor meer informatie!"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "max"
msgid "reset"
msgstr "reset"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2030,6 +2040,9 @@ msgstr "sluiten"
msgid "copy"
msgstr "Kopieër"
msgid "insert"
msgstr "invoegen"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2584,9 +2597,6 @@ msgstr "Om alle functies van deze site te gebruiken moet u ingelogd zijn. Indien
msgid "There's nothing to show here."
msgstr "Er is hier niets te zien"
msgid "Upload images"
msgstr "Upload afbeeldingen"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2646,7 +2656,7 @@ msgstr "Bevestig verwijderen"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:107
msgid "Do you really want to remove this content? This can't be undone."
msgstr "Wilt u deze inhoud echt verwijderen? Dit kan ongedaan gemaakt worden."
msgstr "Wilt u deze inhoud echt verwijderen? Dit kan niet ongedaan gemaakt worden."
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:111
msgid "Do you really want to remove all the selected content? This can't be undone."
@ -2764,6 +2774,20 @@ msgstr "Een e-mail met instructies om uw wachtwoord te resetten is verstuurd naa
msgid "Resend instructions"
msgstr "Instructies opnieuw verzenden"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Er is een fout opgetreden. Probeer het later nog eens."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Een eerdere e-mail is verstuurd met instructies om uw wachtwoord te resetten. Indien u deze niet heeft ontvangen, controleer dan uw spam-folder."
@ -3203,7 +3227,7 @@ msgstr "Schakel dit in indien u het uploaden van van dubbele afbeeldingen vanaf
#: ../../../app/themes/Peafowl/views/dashboard.php:649
msgid "Enable expirable uploads"
msgstr "Sta tijd geboden uploads toe"
msgstr "Sta tijd gebonden uploads toe"
#: ../../../app/themes/Peafowl/views/dashboard.php:655
msgid "Enable this if you want to allow uploads with an automatic delete option."
@ -3267,7 +3291,7 @@ msgstr "Opslagwijze"
#: ../../../app/themes/Peafowl/views/dashboard.php:704
msgid "Datefolders"
msgstr "Datumfolders"
msgstr "Datummappen"
#: ../../../app/themes/Peafowl/views/dashboard.php:704
msgid "Direct"
@ -3481,6 +3505,12 @@ msgstr "Schakel registraties in"
msgid "Enable this if you want to allow users to signup."
msgstr "Schakel dit in om registraties toe te staan"
msgid "Enable user content delete"
msgstr "Sta gebruikers toe hun inhoud te verwijderen"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Schakel dit in om gebruikers zelf hun eigen inhoud te verwijderen. Deze instelling heeft geen invloed op de beheerders."
msgid "Minimum age required"
msgstr "Vereiste minimum leeftijd"
@ -4438,6 +4468,66 @@ msgstr "Voer het wachtwoord in om verder te gaan."
msgid "Send"
msgstr "Verstuur."
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Voeg het uploaden van afbeeldingen toe aan jouw website, blog of forum door onze upload plugin te installeren. Het biedt het uploaden van afbeeldingen naar elke website door een knop te plaatsen waarmee jouw gebruikers direct afbeeldingen kunnen uploaden naar onze service en het zal automatisch de codes verwerken die nodig zijn voor het invoegen. Alle functies zijn inbegrepen, zoals slepen en neerzetten, uploaden op afstand, beeldvergroting en nog veel meer."
msgid "Supported software"
msgstr "Ondersteunde software"
msgid "supported software"
msgstr "ondersteunde software"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "De plugin werkt in elke website met een gebruiker aanpasbare inhoud en voor %sv, het zal een upload knop plaatsen die overeenkomt met de doel editor werkbalk zodat er geen extra aanpassing nodig is."
msgid "Add it to your website"
msgstr "Toevoegen aan jouw website"
msgid "options"
msgstr "opties"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Kopieer en plak de plugin code in jouw website HTML-code (bij voorkeur in de kopsectie). Er zijn tal van %o om het beter op jouw behoeften af te stemmen."
msgid "Basic options"
msgstr "Basis opties"
msgid "Color palette"
msgstr "Kleurenpalet"
msgid "Button color scheme"
msgstr "Knop kleurstelling"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Ingebedde codes die automatisch in het reactievak worden geplaatst"
msgid "Sibling selector"
msgstr "Zuster keuzeschakelaar"
msgid "Sibling element selector where to place the button next to"
msgstr "Keuzeschakelaar van het zuster element waar de knop naast geplaatst moet worden"
msgid "Sibling position"
msgstr "Zusterpositie"
msgid "After"
msgstr "Na"
msgid "Before"
msgstr "Voor"
msgid "Position relative to sibling element"
msgstr "Relatieve positie tot het zuster element"
msgid "Advanced options"
msgstr "Geavanceerde opties"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "De plugin heeft een grote set extra opties die volledige aanpassing mogelijk maken. Je kunt aangepaste HTML, CSS, eigen kleurenpalet, waarnemers en meer gebruiken. Controleer de %d en plugin bron om een beter beeld te krijgen van deze geavanceerde opties."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "U heeft geen toegang tot deze pagina of de link is verlopen."

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-06-08 12:42+0000\n"
"PO-Revision-Date: 2017-06-08 12:42+0000\n"
"POT-Creation-Date: 2017-10-11 19:51+0000\n"
"PO-Revision-Date: 2017-10-11 19:51+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: pt_BR\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Plugin"
msgstr "Plugin"
msgid "Plugin route"
msgstr "Rota do plugin"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Ative para mostrar instruções do plugin no %u. Um link para as instruções será adicionado para o %s menu. Esta opção não afeta administradores."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Use isto para definir uma URL customizada para %p. Por favor, note que você precisa replicar manualmente %s nessa URL."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Pessoal"
msgid "Update in progress"
msgstr "Atualização em progresso"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ocorreu um erro. Por favor, tente novamente mais tarde."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -151,7 +150,7 @@ msgid "Note: This content is private but anyone with the link will be able to se
msgstr "Aviso: Esse conteúdo é privado, mas qualquer pessoa com o link pode ver."
msgid "Note: This content is password protected. Remember to pass the content password to share."
msgstr "Aviso: Esse conteúdo é protegido por senha, lembre-se de passar a senha para compartilhar o mesmo."
msgstr "Aviso: Esse conteúdo é protegido por senha, lembre-se de passar a senha para compartilhar o conteúdo."
#: ../../../app/themes/Peafowl/snippets/modal_share.php:14
#: ../../../app/themes/Peafowl/views/album.php:74
@ -270,9 +269,6 @@ msgstr "Recentes"
msgid "Trending"
msgstr "Tendências"
msgid "Popular"
msgstr "Populares"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Principais usuários"
@ -308,6 +304,9 @@ msgstr "Mais antigas"
msgid "Most viewed"
msgstr "Mais vistas"
msgid "Popular"
msgstr "Populares"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -341,8 +340,8 @@ msgstr "Pessoas"
#: ../../../app/themes/Peafowl/views/dashboard.php:22
msgid "Image"
msgid_plural "Images"
msgstr[0] "imagem"
msgstr[1] "imagens"
msgstr[0] "Imagem"
msgstr[1] "Imagens"
#: ../../../app/themes/Peafowl/snippets/form_move_existing_album.php:3
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:8
@ -432,11 +431,11 @@ msgstr[1] "segundos"
#: ../../../app/lib/functions.php:67
#, php-format
msgid "%s ago"
msgstr "á %s atrás"
msgstr "a %s atrás"
#: ../../../app/lib/functions.php:67
msgid "moments ago"
msgstr "á momentos atrás"
msgstr "a momentos atrás"
msgid "System notification"
msgstr "Notificação do sistema"
@ -519,7 +518,7 @@ msgstr "Esta página não existe"
#: ../../../app/themes/Peafowl/views/login.php:41
#: ../../../app/themes/Peafowl/views/settings.php:299
msgid "Forgot password?"
msgstr "Você esqueceu sua senha?"
msgstr "Esqueceu sua senha?"
#: ../../../app/routes/route.account.php:73
#: ../../../app/themes/Peafowl/views/account/password-reset.php:8
@ -595,13 +594,13 @@ msgstr "Mude a sua senha em %s"
#: ../../../app/routes/route.signup.php:193
#, php-format
msgid "Confirmation required at %s"
msgstr "Confirmação necessária no %s"
msgstr "Confirme sua conta na %s"
#: ../../../app/routes/route.account.php:342
#: ../../../app/routes/route.signup.php:216
#, php-format
msgid "Welcome to %s"
msgstr "Bem-vindo ao %s"
msgstr "Bem-vindo a %s"
#: ../../../app/routes/route.account.php:360
#: ../../../app/routes/route.settings.php:327
@ -1372,14 +1371,14 @@ msgstr "Imagem %i salva em %w"
msgid "Direct links"
msgstr "Links Diretos"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "URL da imagem"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Link da imagem"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "URL da imagem"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "URL Thumbnail"
@ -1546,6 +1545,12 @@ msgstr "A mensagem foi enviada. Nós entraremos em contato em breve."
msgid "Mail error"
msgstr "Erro de correio"
msgid "Upload images"
msgstr "Enviar imagens"
msgid "Upload plugin"
msgstr "Plugin de Upload"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1630,6 +1635,11 @@ msgstr "Você deve ter ao menos %s anos para usar o site."
msgid "Create account"
msgstr "Criar conta"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Enviar"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1670,6 +1680,9 @@ msgstr "%n (%u) álbuns sobre %w"
msgid "%n (%u) on %w"
msgstr "%n (%u) em %w"
msgid "Discovery"
msgstr "Descubra"
#: ../../../app/themes/Peafowl/header.php:222
msgid "Close"
msgstr "Fechar"
@ -1690,11 +1703,6 @@ msgstr "Aleatório"
msgid "Notices (%s)"
msgstr "Notificações (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Enviar"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1753,7 +1761,7 @@ msgstr "Mantenha-me conectado"
#: ../../../app/themes/Peafowl/header.php:301
#, php-format
msgid "Don't have an account? <a href='%s'>Sign up</a> now."
msgstr "Não tem uma conta? <a href='%s'> Registre-se </a> agora."
msgstr "Você não tem uma conta? <a href='%s'> Registre-se </a> agora."
#: ../../../app/themes/Peafowl/header.php:328
msgid "Sign up with another account"
@ -1828,7 +1836,7 @@ msgstr "Para completar o processo, você deve <a href=\"%s\">ativar aqui o seu e
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:8
#, php-format
msgid "Alternatively you can copy and paste the URL into your browser: <a href=\"%s\">%s</a>"
msgstr "Poderá também optar por copiar e colar o seguinte URL no seu browser: <a href=\"%s\">%s</a>"
msgstr "Você pode também pode optar por copiar e colar a seguinte URL no seu navegador: <a href=\"%s\">%s</a>"
#: ../../../app/themes/Peafowl/mails/account-change-email.php:10
#: ../../../app/themes/Peafowl/mails/account-confirm.php:10
@ -1845,7 +1853,7 @@ msgstr "Este pedido foi feito apartir do IP: %s"
#: ../../../app/themes/Peafowl/mails/account-confirm.php:4
msgid "We received a request to register the %n account at %w."
msgstr "Recebemos um pedido para registar a conta %n no site %w."
msgstr "Recebemos o seu pedido para registar sua conta %n na %w."
#: ../../../app/themes/Peafowl/mails/account-confirm.php:6
#, php-format
@ -1854,16 +1862,16 @@ msgstr "Para completar o processo, você deve <a href=\"%s\"> ativar a sua conta
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:4
msgid "We received a request to reset the password for your <a href=\"%u\">%n</a> account."
msgstr "Recebemos um pedido para redefinir a senha da sua conta <a href=\"%u\">%n</a>."
msgstr "Recebemos um pedido para redefinir a senha da sua conta na <a href=\"%u\">%n</a>."
#: ../../../app/themes/Peafowl/mails/account-password-reset.php:6
#, php-format
msgid "To reset your password <a href=\"%s\">follow this link</a>."
msgstr "Para redefinir sua senha <a href=\"%s\">Clique neste link</a>."
msgstr "Para redefinir sua senha <a href=\"%s\">clique neste link</a>."
#: ../../../app/themes/Peafowl/mails/account-welcome.php:4
msgid "Hi %n, welcome to %w"
msgstr "Olá %n, seja bem-vindo ao %w"
msgstr "Olá %n, seja bem-vindo a %w."
#: ../../../app/themes/Peafowl/mails/account-welcome.php:6
msgid "Now that your account is ready you can enjoy uploading your images, creating albums and setting the privacy of your content as well as many more cool things that you will discover."
@ -1871,7 +1879,7 @@ msgstr "Agora que a sua conta está ativada, você poderá desfrutar do envio de
#: ../../../app/themes/Peafowl/mails/account-welcome.php:8
msgid "By the way, here is you very own awesome profile page: <a href=\"%u\">%n</a>. Go ahead and customize it, its yours!."
msgstr "Aliás, aqui está a sua fantástica página de perfil: <a href=\"%u\">%n</a>. Vá até la e edite-a a seu gosto. É toda sua!"
msgstr "Aliás, aqui está a sua fantástica página de perfil: <a href=\"%u\">%n</a>. Vá até lá e edite-a a seu gosto. Ela é toda sua!"
#: ../../../app/themes/Peafowl/mails/account-welcome.php:10
msgid "Thank you for joining"
@ -1879,43 +1887,52 @@ msgstr "Obrigado por se juntar a nós"
#: ../../../app/themes/Peafowl/mails/footer.php:3
msgid "This email was sent from %w %u"
msgstr "Este e-mail foi enviado por %w %u"
msgstr "Este e-mail foi enviado pelo sistema automático da %w %u"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:13
msgid "Drag and drop or paste images here to upload"
msgstr "Cole araste ou solte aqui para enviar imagens"
msgstr "Cole, araste ou solte aqui para enviar imagens"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:14
msgid "Select the images to upload"
msgstr "Selecionar as imagens para envio"
msgid "browse from your computer"
msgstr "Procure no seu computador"
msgstr "procurar no seu computador"
msgid "add image URLs"
msgstr "Adicionar URLs de imagens"
msgstr "adicionar imagens pela URL"
msgid "You can also %i or %u."
msgstr "Você também pode %i ou %u."
msgid "browse from your device"
msgstr "procurar no seu computador"
msgid "take a picture"
msgstr "tire uma foto"
msgid "You can also %i, %c or %u."
msgstr "Você também pode %i, %c ou %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Edite ou redimensione qualquer imagem clicando na visualização da imagem"
msgid "Edit or resize any image by touching the image preview"
msgid "Edit any image by touching the image preview"
msgstr "Edite ou redimensione qualquer imagem tocando na visualização da imagem"
msgid "your computer"
msgstr "seu computador"
msgid "You can keep adding more images from %i or from %u."
msgstr "Você pode continuar adicionando mais imagens de %i ou de %u."
msgid "You can add more images from %i or %u."
msgstr "Você pode adicionar mais imagens de %i ou de %u."
msgid "your device"
msgstr "seu dispositivo"
msgid "You can add more images from %i, %c or %u."
msgstr "Você pode continuar adicionando mais imagens de %i, %c ou %u."
msgid "Uploading %q %o"
msgstr "Enviando %q %o"
@ -1924,7 +1941,7 @@ msgid "complete"
msgstr "completo"
msgid "The queue is being uploaded, it should take just a few seconds to complete."
msgstr "A fila está sendo enviada, deve levar apenas alguns segundos para ser concluída."
msgstr "Suas imagens estão sendo enviadas, deve levar apenas alguns segundos para o envio ser totalmente concluído."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:32
msgid "Upload complete"
@ -2013,9 +2030,8 @@ msgstr "Saber mais"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Verifique o <a data-modal=\"simple\" data-target=\"failed-upload-result\">relatório de erro</a> para mais informações."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "máximo"
msgid "reset"
msgstr "resetar"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2024,6 +2040,9 @@ msgstr "fechar"
msgid "copy"
msgstr "copiar"
msgid "insert"
msgstr "insira"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2128,7 +2147,7 @@ msgstr "Breve descrição desta imagem"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:206
msgid "Add image URLs"
msgstr "Adicionar URLs de imagem"
msgstr "Adicionar imagens pela URL"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:208
msgid "Add the image URLs here"
@ -2562,9 +2581,6 @@ msgstr "Para usar todos os recursos do nosso site, você deve entrar na sua cont
msgid "There's nothing to show here."
msgstr "Não há nada para ver aqui."
msgid "Upload images"
msgstr "Enviar imagens"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2735,13 +2751,27 @@ msgstr "Adicionar e-mail"
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:15
msgid "An email with instructions to reset your password has been sent to the registered email address. If you don't receive the instructions try checking your junk or spam filters."
msgstr "Um e-mail com instruções para redefinir sua senha foi enviado para o endereço de e-mail de registo. Se não receber as instruções verifique a sua pasta de correio não solicitado/spam/Lixo."
msgstr "Um e-mail com instruções para redefinir sua senha foi enviado para o endereço de e-mail da sua conta. Se você não receber as instruções verifique a sua pasta de spam ou lixeira."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:16
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:26
msgid "Resend instructions"
msgstr "Reenviar instruções"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ocorreu um erro. Por favor, tente novamente mais tarde."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Um email anterior foi enviado com instruções para redefinir a sua palavra passe. Se não recebeu as instruções verifique a sua pasta de correio não solicitado/spam/Lixo."
@ -2761,7 +2791,7 @@ msgstr "Enviar"
#: ../../../app/themes/Peafowl/views/account/password-reset.php:15
msgid "Your password has been changed. You can now try logging in using your new password."
msgstr "A sua senha foi alterada, Agora você pode iniciar sessão com a sua nova senha."
msgstr "A sua senha foi alterada com sucesso. Agora você pode iniciar sessão com a sua nova senha."
#: ../../../app/themes/Peafowl/views/account/password-reset.php:16
msgid "Login now"
@ -2787,17 +2817,17 @@ msgstr "%d caracteres mínimos"
#: ../../../app/themes/Peafowl/views/account/password-reset.php:29
#: ../../../app/themes/Peafowl/views/settings.php:306
msgid "Enter your new password"
msgstr "introduza a nova senha"
msgstr "Introduza sua nova senha"
#: ../../../app/themes/Peafowl/views/account/password-reset.php:34
#: ../../../app/themes/Peafowl/views/settings.php:328
msgid "Confirm password"
msgstr "Confirme a nova senha"
msgstr "Confirme sua senha"
#: ../../../app/themes/Peafowl/views/account/password-reset.php:35
#: ../../../app/themes/Peafowl/views/settings.php:312
msgid "Re-enter your new password"
msgstr "Re-digite a nova senha"
msgstr "Digite novamente a sua nova senha"
#: ../../../app/themes/Peafowl/views/account/resend-activation.php:12
#, php-format
@ -3224,6 +3254,9 @@ msgstr "Habilite esta se você quiser permitir que cada usuário configure como
msgid "Maximum upload file size"
msgstr "Tamanho máximo do arquivo para envio"
msgid "Maximum size allowed by server is %s. This limit is capped by %u and %p (%f values)."
msgstr "O tamanho máximo permitido pelo servidor é %s. Esse limite é limitado por %u e %p (valores %f)."
#: ../../../app/themes/Peafowl/views/dashboard.php:695
msgid "Image path"
msgstr "Caminho da imagem"
@ -3456,6 +3489,12 @@ msgstr "Ativar as inscrições"
msgid "Enable this if you want to allow users to signup."
msgstr "Ative esta opção para permitir que os utilizadores possam registar-se."
msgid "Enable user content delete"
msgstr "Ativar códigos embed (conteúdo)"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Ative isto se você deseja permitir que os usuários deletem o próprio conteúdo. Esta opção não afeta administradores."
msgid "Minimum age required"
msgstr "Idade mínima"
@ -3626,6 +3665,10 @@ msgstr "Aqui você pode definir quantas colunas são usados com base em ca
msgid "Phone"
msgstr "Telefone"
#: ../../../app/themes/Peafowl/views/dashboard.php:1147
msgid "Phablet"
msgstr "Phablet"
#: ../../../app/themes/Peafowl/views/dashboard.php:1151
msgid "Tablet"
msgstr "Tablet"
@ -4240,7 +4283,7 @@ msgstr "Convidado"
#: ../../../app/themes/Peafowl/views/image.php:136
msgid "Added to %a and categorized in %c"
msgstr "Adicionado á %a e categorizado em %c"
msgstr "Adicionado a %a e categorizado em %c"
#: ../../../app/themes/Peafowl/views/image.php:138
#, php-format
@ -4308,7 +4351,7 @@ msgstr "Gerencie suas imagens, crie álbuns privados, personalize seu perfil e m
#: ../../../app/themes/Peafowl/views/login.php:40
#: ../../../app/themes/Peafowl/views/settings.php:323
msgid "Enter your password"
msgstr "Digite sua senha"
msgstr "Digite a sua senha"
#: ../../../app/themes/Peafowl/views/logout.php:12
#, php-format
@ -4332,6 +4375,66 @@ msgstr "Por favor, digite sua senha para continuar."
msgid "Send"
msgstr "Enviar"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Adicione o upload da imagem ao seu site, blog ou fórum, instalando nosso plugin de upload. Ele fornece o upload de imagens para qualquer site, colocando um botão que permitirá que seus usuários enviem imagens diretamente para o nosso serviço e ele irá manipular automaticamente os códigos necessários para a inserção. Todos os recursos incluídos como arrastar e soltar, upload remoto, redimensionamento de imagem e muito mais."
msgid "Supported software"
msgstr "Software suportado"
msgid "supported software"
msgstr "software suportado"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "O plugin funciona em qualquer site com conteúdo editável pelo usuário e para %sv, ele colocará um botão de upload que irá corresponder à barra de ferramentas do editor de destino para que não seja necessária nenhuma personalização adicional."
msgid "Add it to your website"
msgstr "Adicione-o ao seu site"
msgid "options"
msgstr "opções"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Copie e cole o código do plugin no código HTML do seu site (de preferência dentro da seção principal). Há uma abundância de %o para adequá-lo melhor às suas necessidades."
msgid "Basic options"
msgstr "Opções básicas"
msgid "Color palette"
msgstr "Paleta de cores"
msgid "Button color scheme"
msgstr "Esquema de cores do botão"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Códigos de incorporação que serão inseridos automaticamente na caixa de editor"
msgid "Sibling selector"
msgstr "Seletor Sibling"
msgid "Sibling element selector where to place the button next to"
msgstr "Onde colocar o botão perto do elemento Sibling"
msgid "Sibling position"
msgstr "Posição do Sibling"
msgid "After"
msgstr "Depois"
msgid "Before"
msgstr "Antes"
msgid "Position relative to sibling element"
msgstr "Posição relativa ao elemento Sibling"
msgid "Advanced options"
msgstr "Opções avançadas"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "O plugin possui um grande conjunto de opções adicionais que permitem a personalização completa. Você pode usar HTML, CSS, paleta de cores própria, configurar observadores e muito mais. Verifique o %d e a fonte do plugin para ter uma melhor ideia dessas opções avançadas."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "Ou você não tem permissão para acessar esta página ou o link expirou."
@ -4434,19 +4537,19 @@ msgstr "Nova senha"
#: ../../../app/themes/Peafowl/views/settings.php:311
msgid "Confirm new password"
msgstr "Confirmar nova senha"
msgstr "Confirme sua nova senha"
#: ../../../app/themes/Peafowl/views/settings.php:319
msgid "Add a password to be able to login using your username or email."
msgstr "Adicionar uma senha para ser capaz de fazer login usando o seu nome de usuário ou e-mail."
msgstr "Adicione uma senha para ser poder fazer login usando o seu nome de usuário ou e-mail."
#: ../../../app/themes/Peafowl/views/settings.php:319
msgid "This user doesn't have a password. Add one using this form."
msgstr "Este usuário não tem uma senha. Adicionar uma usando este formulário."
msgstr "Este usuário não tem uma senha. Adicione uma usando este formulário."
#: ../../../app/themes/Peafowl/views/settings.php:329
msgid "Re-enter your password"
msgstr "Re-digite sua senha"
msgstr "Digite novamente a sua senha"
#: ../../../app/themes/Peafowl/views/settings.php:352
#: ../../../app/themes/Peafowl/views/user.php:21
@ -4522,7 +4625,7 @@ msgstr "Desconectar"
#: ../../../app/themes/Peafowl/views/settings.php:423
#, php-format
msgid "Connect %s"
msgstr "Conectar a %s"
msgstr "Conectar ao %s"
#: ../../../app/themes/Peafowl/views/settings.php:446
msgid "Button"
@ -4703,6 +4806,10 @@ msgstr "Há uma atualização disponível para o seu sistema. Você pode fazer o
msgid "Update now"
msgstr "Atualizar agora"
#, javascript-format
msgid "This website is running latest %s version"
msgstr "O seu site está rodando a última versão do %s"
#: ../../../app/lib/chevereto.js:2112 ../../../app/lib/chevereto.min.js:101
msgid "Clipboard image"
msgstr "Prancheta"
@ -4788,7 +4895,7 @@ msgstr "Armazenamento editado com sucesso,"
#: ../../../app/lib/chevereto.js:3587 ../../../app/lib/chevereto.min.js:188
msgid "User added successfully."
msgstr "Utilizador adicionado com sucesso."
msgstr "Usuário adicionado com sucesso."
#: ../../../app/lib/chevereto.js:3764 ../../../app/lib/chevereto.js:3855
#: ../../../app/lib/chevereto.js:3938 ../../../app/lib/chevereto.js:3947

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-05-23 17:56+0000\n"
"PO-Revision-Date: 2017-05-23 17:56+0000\n"
"POT-Creation-Date: 2017-09-23 17:30+0000\n"
"PO-Revision-Date: 2017-09-23 17:30+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: ru\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
msgid "Plugin"
msgstr "Плагин"
msgid "Plugin route"
msgstr "Маршрут плагина"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "Включите, чтобы показывать инструкцию по использованию плагина в %u. Ссылка на них будет добавлена в меню %s. Эта настройка не влияет на администраторов."
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "Установите собственный адрес для %p. Вам необходимо будет вручную указать в этом адресе %s."
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "Частный"
msgid "Update in progress"
msgstr "Выполняется обновление"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "В процессе выполнения произошла ошибка. Пожалуйста попробуйте позже."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -276,9 +275,6 @@ msgstr "Новые"
msgid "Trending"
msgstr "В тренде"
msgid "Popular"
msgstr "Популярные"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Самые активные"
@ -314,6 +310,9 @@ msgstr "Старые"
msgid "Most viewed"
msgstr "Популярные"
msgid "Popular"
msgstr "Популярные"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -1386,14 +1385,14 @@ msgstr "Изображение %i расположенное в %w"
msgid "Direct links"
msgstr "Прямые ссылки"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Прямая ссылка"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "Оригинал"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "Прямая ссылка"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "Миниатюра"
@ -1560,6 +1559,12 @@ msgstr "Сообщение успешно отправлено. Мы ответ
msgid "Mail error"
msgstr "Ошибка электронной почты"
msgid "Upload images"
msgstr "Загрузить изображения"
msgid "Upload plugin"
msgstr "Загрузить плагин"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1644,6 +1649,11 @@ msgstr "Для использования данного сайта вам до
msgid "Create account"
msgstr "Зарегистрироваться"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Загрузка"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1707,11 +1717,6 @@ msgstr "Случайное"
msgid "Notices (%s)"
msgstr "Уведомления (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Загрузка"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1915,27 +1920,33 @@ msgstr "добавить ссылки на изображения"
msgid "You can also %i or %u."
msgstr "Вы также можете %i или %u.\n"
msgid "browse from your device"
msgstr "обзор изображений с устройства"
msgid "take a picture"
msgstr "сделать фото"
msgid "You can also %i, %c or %u."
msgstr "Вы также можете %i, %c или %u."
msgid "Edit or resize any image by clicking the image preview"
msgstr "Нажмите на миниатюру, чтобы отредактировать изображение или изменить его размер"
msgid "Edit or resize any image by touching the image preview"
msgstr "Дотроньтесь до миниатюры, чтобы отредактировать изображение или изменить его размер"
msgid "Edit any image by touching the image preview"
msgstr "Отредактируйте изображение касанием окна предпросмотра."
msgid "your computer"
msgstr "вашего компьютера"
msgid "image URLs"
msgstr "ссылки на изображения"
msgid "You can keep adding more images from %i or from %u."
msgid "You can add more images from %i or %u."
msgstr "Вы можете добавить изображения с %i или %u."
msgid "your device"
msgstr "вашего устройства"
msgid "You can add more images from %i, %c or %u."
msgstr "Вы можете добавить изображения с %i, %c или %u."
msgid "Uploading %q %o"
msgstr "Загружается %q %o"
@ -2033,9 +2044,8 @@ msgstr "подробнее"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "Проверьте <a data-modal=\"simple\" data-target=\"failed-upload-result\">отчет об ошибках</a> для получения более подробной информации."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "макс."
msgid "reset"
msgstr "сброс"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2044,6 +2054,9 @@ msgstr "закрыть"
msgid "copy"
msgstr "копировать"
msgid "insert"
msgstr "вставить"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2599,9 +2612,6 @@ msgstr "Вы должны войти, чтобы использовать все
msgid "There's nothing to show here."
msgstr "Нет элементов для отображения."
msgid "Upload images"
msgstr "Загрузить изображения"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2779,6 +2789,20 @@ msgstr "Инструкции по сбросу пароля были оправ
msgid "Resend instructions"
msgstr "Повторить отправку инструкций"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "В процессе выполнения произошла ошибка. Пожалуйста попробуйте позже."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "Вам уже было отправлено сообщение с инструкциями по сбросу пароля. Если вы не получили сообщения, проверьте папку Спам."
@ -3496,6 +3520,12 @@ msgstr "Включить регистрацию"
msgid "Enable this if you want to allow users to signup."
msgstr "Включите, чтобы разрешить регистрацию пользователей."
msgid "Enable user content delete"
msgstr "Разрешить пользователям удаление содержимого"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "Включите, чтобы позволить пользователям удалять свое содержимое. Эта настройка не влияет на администраторов."
msgid "Minimum age required"
msgstr "Минимальный возраст посетителя"
@ -4453,6 +4483,66 @@ msgstr "Пожалуйста, введите пароль и нажмите Ente
msgid "Send"
msgstr "Отправить"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "Добавьте возможность загружать изображение на ваш сайт, блог или форум установив наш плагин. Он предоставляет возможность загружать изображение путем установки кнопки, которая позволит вашим пользователям напрямую загружать изображения на наш сервис и автоматически предоставит коды для вставки. Плагин включает все возможности, такие как загрузка через перетаскивание, удаленная загрузка, изменение размера изображений и другие."
msgid "Supported software"
msgstr "Поддерживаемое ПО"
msgid "supported software"
msgstr "поддерживаемое ПО"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "Плагин работает на любом сайте с редактируемым содержимым и для %s, он размещает кнопку рядом с панелью управления редактором, что позволит избежать необходимости внесения дополнительных изменений."
msgid "Add it to your website"
msgstr "Добавить на сайт"
msgid "options"
msgstr "настройки"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "Вставьте код плагина в HTML-код вашего сайта (желательно в раздел head). Плагин имеет множество %o для лучшей интеграции с вашим сайтом."
msgid "Basic options"
msgstr "Основные настройки"
msgid "Color palette"
msgstr "Палитра цветов"
msgid "Button color scheme"
msgstr "Цветовая схема кнопки"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "Коды для встраивания, которые будут автоматически вставлены в редактор"
msgid "Sibling selector"
msgstr "Селектор элемента"
msgid "Sibling element selector where to place the button next to"
msgstr "Селектор элемента, рядом с котором будет размещена кнопка"
msgid "Sibling position"
msgstr "Позиция элемента"
msgid "After"
msgstr "После"
msgid "Before"
msgstr "Перед"
msgid "Position relative to sibling element"
msgstr "Позиция относительно элемента"
msgid "Advanced options"
msgstr "Дополнительные настройки"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "Плагин имеет большое число дополнительных настроек позволяющих осуществить бесшовную интеграцию с вашим проектом. Вы можете задать собственный HTML, CSS, собственную палитру цветов, устанавливать наблюдатели за изменениями и многое другое. Более подробную информацию об этих дополнительных настройках вы можете посмотреть в исходном коде плагина или в %d."
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "У вас нет прав на доступ к данной странице или ссылка устарела."

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2017-06-21 18:28+0000\n"
"PO-Revision-Date: 2017-06-21 18:28+0000\n"
"POT-Creation-Date: 2017-10-10 10:31+0000\n"
"PO-Revision-Date: 2017-10-10 10:31+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: zh_CN\n"
@ -11,6 +11,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "Plugin"
msgstr "插件"
msgid "Plugin route"
msgstr "上传插件"
#, php-format
msgid "Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators."
msgstr "启用此功能可在%u页面显示插件说明。这些说明的链接将添加到%s菜单中。此设置不会影响管理员。"
msgid "Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL."
msgstr "使用它来设置%p的自定义URL。请注意您需要手动复制此URL中的%s。"
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
@ -88,20 +101,6 @@ msgstr "个人"
msgid "Update in progress"
msgstr "正在更新"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "发生错误. 请稍后再试."
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
@ -264,9 +263,6 @@ msgstr "最近"
msgid "Trending"
msgstr "热门"
msgid "Popular"
msgstr "最爱"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "所有用户"
@ -302,6 +298,9 @@ msgstr "最旧的"
msgid "Most viewed"
msgstr "最热门的"
msgid "Popular"
msgstr "最爱"
#: ../../../app/routes/route.album.php:104
#: ../../../app/routes/route.category.php:72
#: ../../../app/routes/route.dashboard.php:1129
@ -1167,7 +1166,7 @@ msgstr "无效的用户ID"
#: ../../../app/routes/route.dashboard.php:652
msgid "Invalid email mode"
msgstr "无效的电子邮件方式"
msgstr "无效的电子邮件地址"
#: ../../../app/routes/route.dashboard.php:657
msgid "Invalid SMTP port"
@ -1310,7 +1309,7 @@ msgstr "无法保存页面内容: %s."
#: ../../../app/themes/Peafowl/views/user.php:74
#: ../../../app/themes/Peafowl/views/user.php:80
msgid "Following"
msgstr "关注"
msgstr "关注"
#: ../../../app/routes/route.image.php:120
#: ../../../app/themes/Peafowl/header.php:424
@ -1358,14 +1357,14 @@ msgstr "图片 %i 托管在 %w"
msgid "Direct links"
msgstr "直接(源文件)链接"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "图片URL链接"
#: ../../../app/themes/Peafowl/views/image.php:285
msgid "Image link"
msgstr "图片链接"
#: ../../../app/themes/Peafowl/views/image.php:279
msgid "Image URL"
msgstr "图片URL链接"
#: ../../../app/themes/Peafowl/views/image.php:291
msgid "Thumbnail URL"
msgstr "缩略图URL链接"
@ -1532,6 +1531,12 @@ msgstr "消息已发送. 我们将很快和您取得了联系."
msgid "Mail error"
msgstr "邮件错误"
msgid "Upload images"
msgstr "上传图片"
msgid "Upload plugin"
msgstr "上传插件"
#: ../../../app/routes/route.search.php:120
#, php-format
msgid "Image search results for %s"
@ -1616,6 +1621,11 @@ msgstr "你必须年满 %s 周岁才能继续访问这个网站."
msgid "Create account"
msgstr "注册账户"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "上传"
#: ../../../app/routes/route.user.php:84
#: ../../../app/themes/Peafowl/header.php:56
#: ../../../app/themes/Peafowl/views/index.php:46
@ -1679,11 +1689,6 @@ msgstr "随机"
msgid "Notices (%s)"
msgstr "通知 (%s)"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "上传"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
@ -1887,27 +1892,33 @@ msgstr "添加图像的URL"
msgid "You can also %i or %u."
msgstr "你也可以%i或者%u。"
msgid "browse from your device"
msgstr "浏览您的计算机"
msgid "take a picture"
msgstr "拍照"
msgid "Edit or resize any image by clicking the image preview"
msgstr "编辑或通过点击图像预览调整图像大小"
msgid "You can also %i, %c or %u."
msgstr "你也可以%i,%c或者%u."
msgid "Edit or resize any image by touching the image preview"
msgstr "编辑或通过触摸图像预览调整图像大小"
msgid "Edit or resize any image by clicking the image preview"
msgstr "通过点击图像预览来编辑或调整任意图像的大小"
msgid "Edit any image by touching the image preview"
msgstr "通过点击图像预览来调整任意图像"
msgid "your computer"
msgstr "您的计算机"
msgid "image URLs"
msgstr "图片网址"
msgid "You can keep adding more images from %i or from %u."
msgstr "您可以从 %i 或从 %u 添加更多的图片。"
msgid "You can add more images from %i or %u."
msgstr "你可以从%i或者%u添加更多的图片."
msgid "your device"
msgstr "你的设备"
msgid "You can add more images from %i, %c or %u."
msgstr "你可以从%i,%c或者%u添加更多的图片."
msgid "Uploading %q %o"
msgstr "上传 %q %o"
@ -1924,14 +1935,14 @@ msgstr "上传完毕"
#, php-format
msgid "Uploaded content added to %s."
msgstr "图片添加到 %s."
msgstr "图片已经添加到 %s."
msgid "You can %c with the content just uploaded or %m."
msgstr "您可以 %c或 %m到现有的相册."
msgstr "您可以将刚刚上传的图片 %c或 %m."
#, php-format
msgid "You can %c with the content just uploaded."
msgstr "您可以 %c到现有的相册."
msgstr "您可以将刚刚上传的图片 %c."
msgid "create a new album"
msgstr "创建相册"
@ -2005,9 +2016,8 @@ msgstr "了解更多"
msgid "Check the <a data-modal=\"simple\" data-target=\"failed-upload-result\">error report</a> for more information."
msgstr "检查 <a data-modal=\"simple\" data-target=\"failed-upload-result\">错误报告</a> 更多信息."
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:89
msgid "max"
msgstr "最多"
msgid "reset"
msgstr "重置"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
@ -2016,6 +2026,9 @@ msgstr "关闭"
msgid "copy"
msgstr "复制"
msgid "insert"
msgstr "插入"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
@ -2569,9 +2582,6 @@ msgstr "您必须登录才能使用所有的功能. 如果您还没有账号请
msgid "There's nothing to show here."
msgstr "没有要显示的内容"
msgid "Upload images"
msgstr "上传图片"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
@ -2749,6 +2759,20 @@ msgstr "这封关于重新设定密码的邮件已发送到您的邮箱. 如果
msgid "Resend instructions"
msgstr "重新发送"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "发生错误. 请稍后再试."
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:24
msgid "A previous email has been sent with instructions to reset your password. If you did not receive the instructions try checking your junk or spam filters."
msgstr "刚才的电子邮件已发送和说明重置您的密码. 如果您没有收到邮件, 请尝试检查您的垃圾邮件或垃圾邮件过滤器."
@ -3466,6 +3490,12 @@ msgstr "开放注册"
msgid "Enable this if you want to allow users to signup."
msgstr "启用它代表您允许用户自行注册账号."
msgid "Enable user content delete"
msgstr "用户内容删除"
msgid "Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."
msgstr "如果要允许用户删除自己的内容,请启用此功能。 此设置不会影响管理员。"
msgid "Minimum age required"
msgstr "最低年龄要求"
@ -4259,6 +4289,13 @@ msgstr "登陆失败多少次后显示验证码? 键入\"0\"零则始终显示
msgid "Comments API"
msgstr "评论 API"
#, php-format
msgid "Disqus API works with %s."
msgstr "Disqus API 适用于 %s."
msgid "Disqus shortname"
msgstr "Disqus 短名称"
#, php-format
msgid "%s public key"
msgstr "%s 公共密钥"
@ -4416,6 +4453,66 @@ msgstr "请输入您的密码以继续浏览."
msgid "Send"
msgstr "发送"
msgid "Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more."
msgstr "通过安装我们的上传插件,将图像上传到您的网站,博客或论坛。 它提供图像上传到任何网站,放置一个按钮,将允许您的用户直接上传图像到我们的服务,它将自动处理插入所需的代码。 所有功能包括拖放,远程上传,图像调整大小等。"
msgid "Supported software"
msgstr "支持的软件"
msgid "supported software"
msgstr "支持的软件"
#, php-format
msgid "The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed."
msgstr "该插件适用于具有用户可编辑内容的任何网站,对于%sv它将放置一个与目标编辑器工具栏匹配的上传按钮因此不需要额外的自定义。"
msgid "Add it to your website"
msgstr "将其添加到您的网站"
msgid "options"
msgstr "options"
#, php-format
msgid "Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs."
msgstr "将插件代码复制并粘贴到您的网站HTML代码中最好在头部内。 这里有很多%o来使其更加满足你的需求。"
msgid "Basic options"
msgstr "基本选项"
msgid "Color palette"
msgstr "调色板"
msgid "Button color scheme"
msgstr "按钮配色方案"
msgid "Embed codes that will be auto-inserted in editor box"
msgstr "嵌入代码将自动插入到编辑框中"
msgid "Sibling selector"
msgstr "Sibling选择器"
msgid "Sibling element selector where to place the button next to"
msgstr "Sibling元素选择器的旁边放置按钮"
msgid "Sibling position"
msgstr "Sibling顺序"
msgid "After"
msgstr "先"
msgid "Before"
msgstr "后"
msgid "Position relative to sibling element"
msgstr "相对于sibling元素的位置"
msgid "Advanced options"
msgstr "高级选项"
#, php-format
msgid "The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options."
msgstr "该插件具有大量附加选项,允许完全自定义。 您可以使用自定义HTMLCSS自己的调色板设置监控服务等。 查找%d和插件源以更好地了解这些高级选项。"
#: ../../../app/themes/Peafowl/views/request-denied.php:12
msgid "You either don't have permission to access this page or the link has expired."
msgstr "您没有权限访问此网页或链接已过期."

View file

@ -20,18 +20,18 @@ use G, Exception;
if(!defined('access') or !access) die('This file cannot be directly accessed.');
try {
if(!is_null(getSetting('chevereto_version_installed')) and !Login::getUser()['is_admin']) {
G\set_status_header(403);
die('Request denied. You must be an admin to be here.');
}
set_time_limit(600); // This could take up to 10 minutes...
if(function_exists('opcache_reset')) {
if(function_exists('opcache_reset')) {
opcache_reset(); // Try to flush OPCache
}
$doctitles = [
'connect' => 'Connect to the database',
'ready' => 'Ready to install',
@ -55,7 +55,7 @@ try {
$error = false;
$db_conn_error = "Can't connect to the target database. The server replied with this:<br>%s<br><br>Please fix your MySQL info.";
$settings_updates = [
'1.0.0' => [
'analytics_code' => NULL,
@ -237,6 +237,11 @@ try {
'1.0.9' => [
'auto_delete_guest_uploads' => NULL,
],
'1.0.10' => [
'enable_user_content_delete' => 1,
'enable_plugin_route' => 1,
'sdk_pup_url' => NULL,
],
];
// Settings that must be renamed from NAME to NEW NAME and DELETE old NAME
$settings_rename = [];
@ -256,13 +261,13 @@ try {
} catch(Exception $e) {
$is_2X = false;
}
/* Stats query from 3.7.0 up to 3.8.13 */
$stats_query_legacy = 'TRUNCATE TABLE `%table_prefix%stats`;
INSERT INTO `%table_prefix%stats` (stat_id, stat_date_gmt, stat_type) VALUES ("1", NULL, "total") ON DUPLICATE KEY UPDATE stat_type=stat_type;
UPDATE `%table_prefix%stats` SET
UPDATE `%table_prefix%stats` SET
stat_images = (SELECT IFNULL(COUNT(*),0) FROM `%table_prefix%images`),
stat_albums = (SELECT IFNULL(COUNT(*),0) FROM `%table_prefix%albums`),
stat_users = (SELECT IFNULL(COUNT(*),0) FROM `%table_prefix%users`),
@ -286,20 +291,20 @@ FROM (SELECT "date" AS stat_type, DATE(album_date_gmt) AS stat_date_gmt, COUNT(*
ON DUPLICATE KEY UPDATE stat_albums = sb.stat_albums;
UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image_views) FROM `%table_prefix%images` WHERE image_user_id = user_id GROUP BY user_id), "0");';
// Fulltext engine
if(G\settings_has_db_info()) {
$db = DB::getInstance();
$fulltext_engine = version_compare($db->getAttr(\PDO::ATTR_SERVER_VERSION), '5.6', '<') ? 'MyISAM' : 'InnoDB';
}
// settings.php contains db
if(G\settings_has_db_info() and !$_POST) {
// Chevereto already installed?
$installed_version = getSetting('chevereto_version_installed');
$maintenance = getSetting('maintenance');
// Get the setting rows from DB (to avoid overwrite)
$db_settings_keys = [];
try {
@ -308,28 +313,28 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
$db_settings_keys[] = $v['setting_name'];
}
} catch(Exception $e) {}
// Update procedure
if((!empty($db_settings_keys) && count($chv_initial_settings) !== count($db_settings_keys)) || (!is_null($installed_version) and version_compare(G_APP_VERSION, $installed_version, '>'))) {
if(!array_key_exists(G_APP_VERSION, $settings_updates)) {
die('Fatal error: app/install is outdated. You need to re-upload app/install folder with the one from Chevereto ' . G_APP_VERSION);
}
// Get database schema
$schema = [];
$raw_schema = DB::queryFetchAll('SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="'.G_APP_DB_NAME.'" AND TABLE_NAME LIKE "'. G\get_app_setting('db_table_prefix') .'%";');
foreach($raw_schema as $k => $v) {
$TABLE = preg_replace('#'.G\get_app_setting('db_table_prefix').'#i', '', strtolower($v['TABLE_NAME']), 1);
$COLUMN = $v['COLUMN_NAME'];
if(!array_key_exists($TABLE, $schema)) {
$schema[$TABLE] = [];
}
$schema[$TABLE][$COLUMN] = $v;
}
// Remove triggers
$triggers_to_remove = [
'album_insert',
@ -367,11 +372,11 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
}
}
}
// Get DB indexes
$DB_indexes = [];
$raw_indexes = DB::queryFetchAll('SELECT DISTINCT TABLE_NAME, INDEX_NAME, INDEX_TYPE FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = "'.G_APP_DB_NAME.'"');
foreach($raw_indexes as $k => $v) {
$TABLE = preg_replace('#'.G\get_app_setting('db_table_prefix').'#i', '', strtolower($v['TABLE_NAME']), 1);
$INDEX_NAME = $v['INDEX_NAME'];
@ -380,26 +385,26 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
}
$DB_indexes[$TABLE][$INDEX_NAME] = $v;
}
// Get needed KEY indexes (only for tables that already exists)
$CHV_indexes = [];
foreach(new \DirectoryIterator(CHV_APP_PATH_INSTALL . 'sql') as $fileInfo) {
if($fileInfo->isDot() or $fileInfo->isDir() or !array_key_exists($fileInfo->getBasename('.sql'), $schema)) continue;
if($fileInfo->isDot() or $fileInfo->isDir() or !array_key_exists($fileInfo->getBasename('.sql'), $schema)) continue;
$crate_table = file_get_contents(realpath($fileInfo->getPathname()));
if(preg_match_all('/KEY [`\(]+(\w+)/', $crate_table, $matches)) {
$CHV_indexes[$fileInfo->getBasename('.sql')] = $matches[1];
}
}
// Get database engines
$engines = [];
$raw_engines = DB::queryFetchAll('SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = "'.G_APP_DB_NAME.'"');
foreach($raw_engines as $k => $v) {
$TABLE = preg_replace('#'.G\get_app_setting('db_table_prefix').'#i', '', strtolower($v['TABLE_NAME']), 1);
$engines[$TABLE] = $v['ENGINE'];
}
// Set the right table schema changes per release
$update_table = [
'1.0.9' => [
@ -444,24 +449,24 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
],
]
];
$sql_update = [];
// Turn ON maintenance mode (if needed)
if(!$maintenance) {
$sql_update[] = "UPDATE `%table_prefix%settings` SET `setting_value` = 1 WHERE `setting_name` = 'maintenance';";
}
// SQLize the $update_table
$required_sql_files = [];
foreach($update_table as $version => $changes) {
foreach($changes as $table => $columns) {
if($table == 'query') continue;
$schema_table = $schema[$table];
$create_table = false;
// Create table if it doesn't exists
if(!array_key_exists($table, $schema) and !in_array($table, $required_sql_files)) {
@ -472,18 +477,18 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
$create_table = true;
}
}
// Missing table
if(!in_array($table, $required_sql_files) and $create_table) {
$sql_update[] = file_get_contents(CHV_APP_PATH_INSTALL . 'sql/'.$table.'.sql');
$required_sql_files[] = $table;
}
// If the table was added from scratch then skip the rest of the columns scheme
if(in_array($table, $required_sql_files)) {
continue;
}
// Is a table op..
if($columns['op']) {
switch($columns['op']) {
@ -497,13 +502,13 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
}
continue;
}
// Check the columns scheme
foreach($columns as $column => $column_meta) {
$query = NULL; // reset
$schema_column = $schema_table[$column];
switch($column_meta['op']) {
case 'MODIFY':
if(array_key_exists($column, $schema[$table]) and ($schema_column['COLUMN_TYPE'] !== $column_meta['type'] or (preg_match('/DEFAULT NULL/i', $column_meta['prop']) and $schema_column['IS_NULLABLE'] == 'NO'))) {
@ -518,7 +523,7 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
case 'ADD':
if(!array_key_exists($column, $schema[$table])) {
$query = '`%column` %type';
}
break;
}
@ -532,15 +537,15 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
}
}
}
if($changes['query']) {
if(version_compare($version, $installed_version, '>')) {
$sql_update[] = $changes['query'];
}
}
}
// Fix the missing KEY indexes
foreach($CHV_indexes as $table => $indexes) {
$field_prefix = DB::getFieldPrefix($table);
@ -551,17 +556,17 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
}
}
}
// Merge settings and version changes
$updates_stock = [];
foreach(array_merge($settings_updates, $update_table) as $k => $v) {
if($k == '3.0.0') continue;
$updates_stock[] = $k;
}
// Flat settings
$settings_flat = [];
// Settings workaround
foreach($updates_stock as $k) {
$sql = NULL; // reset the pointer
@ -582,14 +587,14 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
}
$settings_get = Settings::get();
// Deteled settings
foreach($settings_delete as $k) {
if(array_key_exists($k, $settings_get)) {
$sql_update[] = "DELETE FROM `%table_prefix%settings` WHERE `setting_name` = '" . $k . "';";
}
}
// Renamed settings (actually updated values + remove old one)
foreach($settings_rename as $k => $v) {
if(array_key_exists($k, $settings_get)) {
@ -598,7 +603,7 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
$sql_update[] = "UPDATE `%table_prefix%settings` SET `setting_value` = " . $value . " WHERE `setting_name` = '" . $v . "';" . "\n" . "DELETE FROM `%table_prefix%settings` WHERE `setting_name` = '" . $k . "';";
}
}
// Switched settings (as rename but with update of the old key)
foreach($settings_switch as $version => $keys) {
if(!version_compare($version, $installed_version, '>')) {
@ -616,23 +621,23 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
// Always update to the target version
$sql_update[] = 'UPDATE `%table_prefix%settings` SET `setting_value` = "' . G_APP_VERSION . '" WHERE `setting_name` = "chevereto_version_installed";';
// Revert maintenance (if needed)
if(!$maintenance) {
$sql_update[] = 'UPDATE `%table_prefix%settings` SET `setting_value` = 0 WHERE `setting_name` = "maintenance";';
}
$sql_update = join("\r\n", $sql_update);
// Replace the %table_storage% and %table_prefix% thing
$sql_update = strtr($sql_update, [
'%table_prefix%' => G\get_app_setting('db_table_prefix'),
'%table_engine%' => $fulltext_engine
]);
// Remove extra white spaces and line breaks
$sql_update = preg_replace('/[ \t]+/', ' ', preg_replace('/\s*$^\s*/m', "\n", $sql_update));
if(isset($_REQUEST['debug'])) {
G\debug($sql_update);
die();
@ -722,12 +727,12 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
$doing = 'ready';
}
@fclose($fh);
// Reset opcache in this file
if(function_exists('opcache_invalidate')) {
@opcache_invalidate($settings_file, TRUE);
@opcache_invalidate($settings_file, TRUE);
}
}
// Ready to install
@ -765,7 +770,7 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
if(!in_array($_POST['website_mode'], ['community', 'personal'])) {
$input_errors['website_mode'] = _s('Invalid website mode');
}
if(count($input_errors) > 0) {
$error = true;
$error_message = 'Please correct your data to continue.';
@ -778,11 +783,11 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
if($fileInfo->isDot() or $fileInfo->isDir()) continue;
$create_table[$fileInfo->getBasename('.sql')] = realpath($fileInfo->getPathname());
}
$install_sql = 'SET FOREIGN_KEY_CHECKS=0;' . "\n";
if($is_2X) {
// Need to sync this to avoid bad datefolder mapping due to MySQL time != PHP time
// In Chevereto v2.X date was TIMESTAMP and in v3.X is DATETIME
$DT = new \DateTime();
@ -835,19 +840,19 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
ADD INDEX `image_expiration_date_gmt` (`image_expiration_date_gmt`),
ADD INDEX `image_is_animated` (`image_is_animated`),
ENGINE=".$fulltext_engine.";
UPDATE `chv_images`
SET `image_date_gmt` = `image_date`,
`image_storage_mode` = CASE
WHEN `image_storage_id` IS NULL THEN 'datefolder'
WHEN `image_storage_id` = 0 THEN 'datefolder'
WHEN `image_storage_id` = 1 THEN 'old'
WHEN `image_storage_id` = 2 THEN 'direct'
WHEN `image_storage_id` IS NULL THEN 'datefolder'
WHEN `image_storage_id` = 0 THEN 'datefolder'
WHEN `image_storage_id` = 1 THEN 'old'
WHEN `image_storage_id` = 2 THEN 'direct'
END,
`image_storage_id` = NULL;
CREATE FULLTEXT INDEX searchindex ON `chv_images`(image_name, image_title, image_description, image_original_filename);
RENAME TABLE `chv_info` to `_chv_info`;
RENAME TABLE `chv_options` to `_chv_options`;
RENAME TABLE `chv_storages` to `_chv_storages`;";
@ -870,25 +875,25 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
'%table_engine%' => $fulltext_engine
]) . "\n\n";
}
// id padding for long faked public IDs
$chv_initial_settings['id_padding'] = $is_2X ? 0 : 5000;
if($_POST['website_mode'] == 'personal') {
$chv_initial_settings['website_mode'] = 'personal';
}
// Stats (since 3.7.0)
$install_sql .= strtr($stats_query_legacy, [
'%table_prefix%' => $table_prefix,
'%table_engine%' => $fulltext_engine
]);
if(isset($_REQUEST['debug'])) {
G\debug($install_sql);
die();
}
// Do the DB magic
$db = DB::getInstance();
$db->query($install_sql);
@ -914,22 +919,22 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
'timezone' => $chv_initial_settings['default_timezone']
]);
Login::addPassword($insert_admin, $_POST['password']);
// Add admin user as the personal mode guy
if($_POST['website_mode'] == 'personal') {
$db->update('settings', ['setting_value' => 'me'], ['setting_name' => 'website_mode_personal_routing']);
$db->update('settings', ['setting_value' => $insert_admin], ['setting_name' => 'website_mode_personal_uid']);
}
// Insert the email settings
$db->update('settings', ['setting_value' => $_POST['email_from_email']], ['setting_name' => 'email_from_email']);
$db->update('settings', ['setting_value' => $_POST['email_incoming_email']], ['setting_name' => 'email_incoming_email']);
$doing = 'finished';
}
} catch(Exception $e) {
$error = true;
$error_message = "Can't create admin user:<br>" . $e->getMessage();
$error_message = 'Installation error: ' . $e->getMessage();
}
}
@ -937,7 +942,7 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
break;
}
}
$doctitle = $doctitles[$doing].' - Chevereto ' . get_chevereto_version(true);
$system_template = CHV_APP_PATH_CONTENT_SYSTEM . 'template.php';
$install_template = CHV_APP_PATH_INSTALL . 'template/'.$doing.'.php';
@ -954,9 +959,9 @@ UPDATE `%table_prefix%users` SET user_content_views = COALESCE((SELECT SUM(image
if(!@require_once($system_template)) {
die("Can't find " . G\absolute_to_relative($system_template));
}
die(); // Terminate any remaining execution
} catch (Exception $e) {
G\exception_to_error($e);
}

View file

@ -14,6 +14,7 @@ CREATE TABLE `%table_prefix%albums` (
`album_likes` bigint(32) NOT NULL DEFAULT '0',
`album_views` bigint(32) NOT NULL DEFAULT '0',
PRIMARY KEY (`album_id`),
KEY `album_name` (`album_name`),
KEY `album_user_id` (`album_user_id`),
KEY `album_date_gmt` (`album_date_gmt`),
KEY `album_privacy` (`album_privacy`),

View file

@ -63,7 +63,7 @@ try {
]), TRUE);
$json_array['success'] = ['message' => 'OK']; // "success" is a Chevereto internal thing
} catch(Exception $e) {
throw new Exception(_s("An error occurred. Please try again later."), 400);
throw new Exception(sprintf('Fatal error: %s', $e->getMessage()) , 400);
}
break;
case 'download':

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,14 @@
$(function(){$(window).on("resize",function(){CHV.fn.uploader.boxSizer();if(typeof user_background_full_fix=="function"){user_background_full_fix();}
CHV.fn.bindSelectableItems();});if($("#home-cover, #maintenance-wrapper").exists()){var landing_src=$("#maintenance-wrapper").exists()?$("#maintenance-wrapper").css("background-image").slice(4,-1).replace(/^\"|\"$/g,""):$(".home-cover-img","#home-cover-slideshow").first().attr("data-src");function showHomeCover(){$("body").addClass("load");if(!$("#maintenance-wrapper").exists()){$(".home-cover-img","#home-cover-slideshow").first().css("background-image","url("+landing_src+")").addClass("animate-in--alt").removeAttr("data-src");}
CHV.fn.bindSelectableItems();});if(window.opener){$(window).on("load",function(e){window.opener.postMessage({id:window.name,requestAction:'postSettings'},"*");});$(window).on("message",function(e){var data=e.originalEvent.data;if(typeof data.id==typeof undefined||typeof data.settings==typeof undefined){return;}
if(window.name!==data.id){return;}
CHV.obj.opener.uploadPlugin[data.id]=data.settings;});}
if($("#home-cover, #maintenance-wrapper").exists()){var landing_src=$("#maintenance-wrapper").exists()?$("#maintenance-wrapper").css("background-image").slice(4,-1).replace(/^\"|\"$/g,""):$(".home-cover-img","#home-cover-slideshow").first().attr("data-src");function showHomeCover(){$("body").addClass("load");if(!$("#maintenance-wrapper").exists()){$(".home-cover-img","#home-cover-slideshow").first().css("background-image","url("+landing_src+")").addClass("animate-in--alt").removeAttr("data-src");}
setTimeout(function(){$("body").addClass("loaded");setTimeout(function(){showHomeSlideshow();},7000);},400*1.5);}
var showHomeSlideshowInterval=function(){setTimeout(function(){showHomeSlideshow();},8000);};function showHomeSlideshow(){var $image=$(".home-cover-img[data-src]","#home-cover-slideshow").first();var $images=$(".home-cover-img","#home-cover-slideshow");if($image.length==0){if($images.length==1)return;$images.first().removeClass("animate-in");$("#home-cover-slideshow").append($images.first());setTimeout(function(){$(".home-cover-img:last","#home-cover-slideshow").addClass("animate-in");},20);setTimeout(function(){$(".home-cover-img:not(:last)","#home-cover-slideshow").removeClass("animate-in");},4000);showHomeSlideshowInterval();}else{var src=$image.attr("data-src");$("<img/>").attr("src",src).on("load error",function(){$(this).remove();$image.css("background-image","url("+src+")").addClass("animate-in").removeAttr("data-src");setTimeout(function(){$(".home-cover-img:not(:last)","#home-cover-slideshow").removeClass("animate-end animate-in--alt");},2000);showHomeSlideshowInterval();});}}
if(landing_src){$("<img/>").attr("src",landing_src).on("load error",function(){$(this).remove();showHomeCover();});}else{showHomeCover();}}
var anywhere_upload=CHV.fn.uploader.selectors.root,anywhere_upload_queue=CHV.fn.uploader.selectors.queue,$anywhere_upload=$(anywhere_upload),$anywhere_upload_queue=$(anywhere_upload_queue);$(document).on("click","[data-action=top-bar-upload]",function(e){CHV.fn.uploader.toggle();});$("[data-action=close-upload]",$anywhere_upload).click(function(){if($anywhere_upload.is(":animated"))return;$("[data-action=top-bar-upload]","#top-bar").click();});$("[data-action=cancel-upload-remaining], [data-action=cancel-upload]",$anywhere_upload).click(function(){$("[data-action=cancel]",$anywhere_upload_queue).click();CHV.fn.uploader.isUploading=false;if(Object.size(CHV.fn.uploader.success.error)>0){CHV.fn.uploader.displayResults();return;}else{CHV.fn.uploader.reset();}});$(document).on("click","[data-action=upload-privacy]:not(disabled)",function(e){if(e.isDefaultPrevented())return;current_privacy=$(this).data("privacy");target_privacy=current_privacy=="public"?"private":"public";this_lock=$(".icon",this).data("lock");this_unlock=$(".icon",this).data("unlock");$(".icon",this).removeClass(this_lock+" "+this_unlock).addClass(current_privacy=="public"?this_lock:this_unlock);$(this).data("privacy",target_privacy);$("[data-action=upload-privacy-copy]").html($("[data-action=upload-privacy]").html());$upload_button=$("[data-action=upload]",$anywhere_upload);$upload_button.text($upload_button.data(target_privacy));$(this).tipTip("hide");});$(CHV.fn.uploader.selectors.file+", "+CHV.fn.uploader.selectors.camera).on("change",function(e){if(!$(CHV.fn.uploader.selectors.root).data("shown")){CHV.fn.uploader.toggle({callback:function(e){CHV.fn.uploader.add(e);}},e);}else{CHV.fn.uploader.add(e);}}).on("click",function(e){if($(this).data('login-needed')&&!PF.fn.is_user_logged()){return;}});function isFileTransfer(e){var e=e.originalEvent,isFileTransfer=false;if(e.dataTransfer.types){for(var i=0;i<e.dataTransfer.types.length;i++){if(e.dataTransfer.types[i]=="Files"){isFileTransfer=true;break;}}}
var anywhere_upload=CHV.fn.uploader.selectors.root,anywhere_upload_queue=CHV.fn.uploader.selectors.queue,$anywhere_upload=$(anywhere_upload),$anywhere_upload_queue=$(anywhere_upload_queue);$(document).on("click","[data-action=top-bar-upload]",function(e){if($("body").is("#upload"))return;CHV.fn.uploader.toggle();});$("[data-action=close-upload]",$anywhere_upload).click(function(){if($anywhere_upload.is(":animated"))return;$("[data-action=top-bar-upload]","#top-bar").click();});$("[data-action=reset-upload]",$anywhere_upload).click(function(){if(CHV.fn.uploader.isUploading){$("[data-action=cancel-upload-remaining], [data-action=cancel-upload]",$anywhere_upload).trigger("click");}
CHV.fn.uploader.reset();});$("[data-action=cancel-upload-remaining], [data-action=cancel-upload]",$anywhere_upload).click(function(){CHV.fn.uploader.isUploading=false;$("[data-action=cancel]",$anywhere_upload_queue).click();if(Object.size(CHV.fn.uploader.results.success)>0){console.log("DISPLAY CANCEL FORCED")
CHV.fn.uploader.displayResults();return;}else{CHV.fn.uploader.reset();}});$(document).on("click","[data-action=upload-privacy]:not(disabled)",function(e){if(e.isDefaultPrevented())return;current_privacy=$(this).data("privacy");target_privacy=current_privacy=="public"?"private":"public";this_lock=$(".icon",this).data("lock");this_unlock=$(".icon",this).data("unlock");$(".icon",this).removeClass(this_lock+" "+this_unlock).addClass(current_privacy=="public"?this_lock:this_unlock);$(this).data("privacy",target_privacy);$("[data-action=upload-privacy-copy]").html($("[data-action=upload-privacy]").html());$upload_button=$("[data-action=upload]",$anywhere_upload);$upload_button.text($upload_button.data(target_privacy));$(this).tipTip("hide");});$(CHV.fn.uploader.selectors.file+", "+CHV.fn.uploader.selectors.camera).on("change",function(e){if(!$(CHV.fn.uploader.selectors.root).data("shown")){CHV.fn.uploader.toggle({callback:function(e){CHV.fn.uploader.add(e);}},e);}else{CHV.fn.uploader.add(e);}}).on("click",function(e){if($(this).data('login-needed')&&!PF.fn.is_user_logged()){return;}});function isFileTransfer(e){var e=e.originalEvent,isFileTransfer=false;if(e.dataTransfer.types){for(var i=0;i<e.dataTransfer.types.length;i++){if(e.dataTransfer.types[i]=="Files"){isFileTransfer=true;break;}}}
return isFileTransfer;}
if($(CHV.fn.uploader.selectors.root).exists()){$("body").on({dragenter:function(e){e.preventDefault();if(!isFileTransfer(e)){return false;}
if(!$(CHV.fn.uploader.selectors.dropzone).exists()){$("body").append($('<div id="'+CHV.fn.uploader.selectors.dropzone.replace("#","")+'"/>').css({width:"100%",height:"100%",position:"fixed",zIndex:1000,left:0,top:0}));}}});$(document).on({dragover:function(e){e.preventDefault();if(!isFileTransfer(e)){return false;}
@ -22,7 +27,7 @@ $("#tiptip_holder").hide();$item.tipTip("destroy").remove();if(queue_height!==$q
if(!$("li",$anywhere_upload_queue).exists()){$("[data-group=upload-queue-ready], [data-group=upload-queue], [data-group=upload-queue-ready]",$anywhere_upload).css("display","");}
if(CHV.fn.uploader.files[id]&&typeof CHV.fn.uploader.files[id].xhr!=="undefined"){CHV.fn.uploader.files[id].xhr.abort();item_xhr_cancel=true;}
if(typeof CHV.fn.uploader.files[id]!==typeof undefined&&typeof CHV.fn.uploader.files[id].fromClipboard!==typeof undefined){var c_md5=CHV.fn.uploader.files[id].md5;var c_index=CHV.fn.uploader.clipboardImages.indexOf(c_md5);if(c_index>-1){CHV.fn.uploader.clipboardImages.splice(c_index,1);}}
delete CHV.fn.uploader.files[id];CHV.fn.uploader.queueSize();if(Object.size(CHV.fn.uploader.files)==0){if(!("success"in CHV.fn.uploader)||!("results"in CHV.fn.uploader)||(Object.size(CHV.fn.uploader.success.error)==0&&Object.size(CHV.fn.uploader.results.error)==0)){CHV.fn.uploader.reset();}}else{if(item_xhr_cancel){if($("li.waiting",$queue).first().length!==0){CHV.fn.uploader.upload($("li.waiting",$queue).first());}else if(Object.size(CHV.fn.uploader.success.error)!==0||Object.size(CHV.fn.uploader.results.error)!==0){CHV.fn.uploader.displayResults();}}}});$(document).on("click","[data-action=upload]",function(){$("[data-group=upload], [data-group=upload-queue-ready]",$anywhere_upload).hide();$("[data-group=uploading]",$anywhere_upload).show();CHV.fn.uploader.queueSize();CHV.fn.uploader.canAdd=false;$queue_items=$("li",$anywhere_upload_queue);$queue_items.addClass("uploading waiting");CHV.fn.uploader.timestamp=new Date().getTime();CHV.fn.uploader.upload($queue_items.first("li"));});if($("body#user").exists()){if(PF.obj.listing.query_string.page>1){var State=History.getState();if(State.data&&typeof State.data.scrollTop!=="undefined"){if($(window).scrollTop()!==State.data.scrollTop){$(window).scrollTop(State.data.scrollTop);}}else{var scrollTop=$("#background-cover").height()-160;$("html, body").animate({scrollTop:scrollTop},0);}}}
delete CHV.fn.uploader.files[id];CHV.fn.uploader.queueSize();if(Object.size(CHV.fn.uploader.files)==0){if(!("success"in CHV.fn.uploader)||!("results"in CHV.fn.uploader)||(Object.size(CHV.fn.uploader.results.success)==0&&Object.size(CHV.fn.uploader.results.error)==0)){CHV.fn.uploader.reset();}}else{if(item_xhr_cancel&&$("li.waiting",$queue).first().length!==0){CHV.fn.uploader.upload($("li.waiting",$queue).first());}}});$(document).on("click","[data-action=upload]",function(){$("[data-group=upload], [data-group=upload-queue-ready]",$anywhere_upload).hide();$anywhere_upload.removeClass('queueReady').addClass('queueUploading').find("[data-group=uploading]").show();CHV.fn.uploader.queueSize();CHV.fn.uploader.canAdd=false;$queue_items=$("li",$anywhere_upload_queue);$queue_items.addClass("uploading waiting");CHV.fn.uploader.timestamp=new Date().getTime();CHV.fn.uploader.upload($queue_items.first("li"));});if($("body#user").exists()){if(PF.obj.listing.query_string.page>1){var State=History.getState();if(State.data&&typeof State.data.scrollTop!=="undefined"){if($(window).scrollTop()!==State.data.scrollTop){$(window).scrollTop(State.data.scrollTop);}}else{var scrollTop=$("#background-cover").height()-160;$("html, body").animate({scrollTop:scrollTop},0);}}}
if($("#top-bar-shade").exists()&&$("#top-bar-shade").css("opacity")){$("#top-bar-shade").data("initial-opacity",Number($("#top-bar-shade").css("opacity")));}
if(PF.fn.isDevice('phone')){$("#top-bar-shade").css("opacity",1);}
$(window).on("scroll resize",function(){if(PF.fn.isDevice('phone')){$("#background-cover-src").css("transform","");$("#top-bar-shade").css("opacity",1);return;}
@ -35,7 +40,7 @@ if($("img",this).attr("width")>$(window).width()){$(this).css({width:"100%"});ne
$(this).addClass("cursor-zoom-out").css({width:new_width,height:(new_width/ratio)+"px"});}else{$(this).addClass("cursor-zoom-in").css($(this).data("dimentions"));}
e.preventDefault();}).on("contextmenu",CHV.obj.image_viewer.container,function(e){if(!CHV.obj.config.image.right_click){e.preventDefault();return false;}});$(document).on("click","[data-action=test-email]",function(e){e.preventDefault();var $email=$("input[name=test-email]");if($email.prop("disabled")){return;}
var $parent=$(this).closest(".input-label");var email=$email.val();if(!email.isEmail()){PF.fn.growl.expirable(PF.fn._s("Please provide a valid email address"));return;}
$email.prop("disabled",true);PF.fn.loading.inline($('.loading',$parent),{size:"small",valign:"middle"});$parent.find(".btn .text").hide();$.ajax({data:{action:"test",test:{object:"email"},email:email},cache:false}).complete(function(XHR){var response=XHR.responseJSON;$email.prop("disabled",false);$('.loading',$parent).empty();$parent.find(".btn .text").show();PF.fn.growl.call(response[response.status_code==200?"success":"error"].message);});});$(document).on("click",".list-item, [data-action=list-tools] [data-action]",function(e){var $this=$(e.target),$list_item=$this.closest(".list-item");if($list_item&&$list_item.find("[data-action=select]").exists()&&(e.ctrlKey||e.metaKey)&&e.altKey){CHV.fn.list_editor.toggleSelectItem($list_item,!$list_item.hasClass("selected"));e.preventDefault();e.stopPropagation();}});PF.fn.listing.ajax.callback=function(XHR){if(XHR.status!==200)return;CHV.fn.list_editor.listMassActionSet("select");};$(document).on("click","[data-action=list-select-all]",function(){CHV.fn.list_editor.selectItem($(".list-item:visible:not(.selected)"));CHV.fn.list_editor.listMassActionSet("clear");});$(document).on("click","[data-action=list-clear-all]",function(){PF.fn.close_pops();CHV.fn.list_editor.clearSelection();});$(document).on("click","[data-action=list-tools] [data-action]",function(e){if(e.isPropagationStopped())return false;var $this_list_item=$(this).closest(PF.obj.listing.selectors.list_item),$this_list_item_tools=$(this).closest("[data-action=list-tools]");var $this_icon,this_add_class,this_remove_class,this_label_text,dealing_with;if(typeof $this_list_item.data("type")!=="undefined"){dealing_with=$this_list_item.data("type");}else{console.log("Error: data-type not defined");return;}
$email.prop("disabled",true);PF.fn.loading.inline($('.loading',$parent),{size:"small",valign:"middle"});$parent.find(".btn .text").hide();$.ajax({data:{action:"test",test:{object:"email"},email:email},cache:false}).complete(function(XHR){var response=XHR.responseJSON;$email.prop("disabled",false);$('.loading',$parent).empty();$parent.find(".btn .text").show();PF.fn.growl.call(response[response.status_code==200?"success":"error"].message);});});$(document).on("click","[data-action=openerPostMessage]",function(e){if(!window.opener)return;e.preventDefault();var target_attr="data-action-target";var $target=$($(this).is("["+target_attr+"]")?$(this).attr(target_attr):this);var val=$target[$target.is(":input")?"val":"html"]();window.opener.postMessage({id:window.name,message:val},"*");});$(document).on("click",".list-item, [data-action=list-tools] [data-action]",function(e){var $this=$(e.target),$list_item=$this.closest(".list-item");if($list_item&&$list_item.find("[data-action=select]").exists()&&(e.ctrlKey||e.metaKey)&&e.altKey){CHV.fn.list_editor.toggleSelectItem($list_item,!$list_item.hasClass("selected"));e.preventDefault();e.stopPropagation();}});PF.fn.listing.ajax.callback=function(XHR){if(XHR.status!==200)return;CHV.fn.list_editor.listMassActionSet("select");};$(document).on("click","[data-action=list-select-all]",function(){CHV.fn.list_editor.selectItem($(".list-item:visible:not(.selected)"));CHV.fn.list_editor.listMassActionSet("clear");});$(document).on("click","[data-action=list-clear-all]",function(){PF.fn.close_pops();CHV.fn.list_editor.clearSelection();});$(document).on("click","[data-action=list-tools] [data-action]",function(e){if(e.isPropagationStopped())return false;var $this_list_item=$(this).closest(PF.obj.listing.selectors.list_item),$this_list_item_tools=$(this).closest("[data-action=list-tools]");var $this_icon,this_add_class,this_remove_class,this_label_text,dealing_with;if(typeof $this_list_item.data("type")!=="undefined"){dealing_with=$this_list_item.data("type");}else{console.log("Error: data-type not defined");return;}
switch($(this).data("action")){case"select":CHV.fn.list_editor.toggleSelectItem($this_list_item,!$this_list_item.hasClass("selected"));break;case"edit":var modal_source="[data-modal=form-edit-single]";switch(dealing_with){case"image":$("[name=form-image-title]",modal_source).attr("value",$this_list_item.data("title"));$("[name=form-image-description]",modal_source).html(PF.fn.htmlEncode($this_list_item.data("description")));$("[name=form-album-id]",modal_source).find("option").removeAttr("selected");$("[name=form-album-id]",modal_source).find("[value="+$this_list_item.data(dealing_with=="image"?"album-id":"id")+"]").attr("selected",true);$("[name=form-category-id]",modal_source).find("option").removeAttr("selected");$("[name=form-category-id]",modal_source).find("[value="+$this_list_item.data("category-id")+"]").attr("selected",true);$("[name=form-nsfw]",modal_source).attr("checked",$this_list_item.data("flag")=="unsafe");$("[name=form-album-name]",modal_source).attr("value","");$("[name=form-album-description]",modal_source).html("");$("[name=form-privacy]",modal_source).find("option").removeAttr("selected");break;case"album":$("[data-action=album-switch]",modal_source).remove();$("[name=form-album-name]",modal_source).attr("value",$this_list_item.data("name"));$("[name=form-album-description]",modal_source).html(PF.fn.htmlEncode($this_list_item.data("description")));$("[name=form-privacy]",modal_source).find("option").removeAttr("selected");$("[name=form-privacy]",modal_source).find("[value="+$this_list_item.data("privacy")+"]").attr("selected",true);if($this_list_item.data("privacy")=='password'){$("[data-combo-value=password]").show();$("[name=form-album-password]",modal_source).attr("value",$this_list_item.data("password"));}else{$("[data-combo-value=password]").hide();$("[name=form-album-password]",modal_source).attr("value","");}
break;}
PF.fn.modal.call({type:"html",template:$(modal_source).html(),ajax:{url:PF.obj.config.json_api,deferred:{success:function(XHR){CHV.fn.list_editor.updateItem("[data-id="+$this_list_item.data("id")+"]",XHR.responseJSON[dealing_with],"edit");}}},confirm:function(){var $modal=$(PF.obj.modal.selectors.root);if((dealing_with=="image"||dealing_with=="album")&&$("[data-content=form-new-album]",$modal).is(":visible")&&$("[name=form-album-name]",$modal).val()==""){PF.fn.growl.call(PF.fn._s("You must enter the album name."));$("[name=form-album-name]",$modal).highlight();return false;}
@ -92,18 +97,23 @@ $(document).on("click",".list-item a.image-container",function(e){var $parent=$(
return;});$(document).on("click",".list-item [data-action=load-image]",function(e){loadImageListing($(this));e.preventDefault();e.stopPropagation();return;});function loadImageListing($this){$this.addClass("list-item-play-gif--loading");var $parent=$this.closest(".list-item");var $imageContainer=$(".image-container",$parent);var $image=$("img",$imageContainer);var md=".md";var imageSrc=$image.attr("src");var mdIndex=imageSrc.lastIndexOf(md);var loadSrc=imageSrc.substr(0,mdIndex)+imageSrc.substr(mdIndex+md.length,imageSrc.length);$imageContainer.append($imageContainer.html());$load=$parent.find(".image-container img").eq(1).attr("src",loadSrc).addClass("hidden");$load.imagesLoaded(function(){$this.remove();$image.remove();$(this.elements).removeClass("hidden");});}
$(document).on("click","#album [data-tab=tab-codes]",function(){if(!PF.fn.is_user_logged()){return;}
var $loading=$(".content-listing-loading","#tab-codes");if(!$loading.exists()){return;}
var $embed_codes=$("#embed-codes");$.ajax({data:{action:"get-album-contents",albumid:CHV.obj.resource.id},cache:false}).always(function(XHR){PF.fn.loading.destroy($loading);CHV.fn.fillEmbedCodes(XHR.contents,"#tab-codes");$embed_codes.removeClass("soft-hidden");});});});if(typeof CHV=="undefined"){CHV={obj:{},fn:{},str:{}};}
CHV.obj.image_viewer={selector:"#image-viewer",container:"#image-viewer-container",navigation:".image-viewer-navigation",loading:"#image-viewer-loading",loader:"#image-viewer-loader",};CHV.obj.image_viewer.$container=$(CHV.obj.image_viewer.container);CHV.obj.image_viewer.$navigation=$(CHV.obj.image_viewer.navigation);CHV.obj.image_viewer.$loading=$(CHV.obj.image_viewer.loading);CHV.fn.system={checkUpdates:function(callback){$.ajax({url:CHEVERETO.api.get.info+'/',data:null,cache:false}).always(function(data,status,XHR){if(typeof callback=="function"){callback(XHR);}});}};CHV.fn.bindSelectableItems=function(){var el='content-listing-wrapper';if(!$("#"+el).exists()){$("[data-content=list-selection]").closest(".content-width").wrap("<div id='"+el+"' />");}
if(!$("[data-content=list-selection]").exists()||PF.fn.isDevice(["phone","phablet"])){return;}
$("#content-listing-wrapper").selectable({filter:PF.obj.listing.selectors.list_item,cancel:".content-empty, .header, #tab-share, #tab-full-info, .viewer-title, .header-link, .top-bar, .content-listing-pagination *, #fullscreen-modal, #top-user, #background-cover, .list-item-desc, .list-item-image-tools, [data-action=load-image], #tab-codes",delay:5,selecting:function(event,ui){var $this=$(ui.selecting);var unselect=$this.hasClass("selected");CHV.fn.list_editor[(unselect?"unselect":"select")+"Item"]($this);},unselecting:function(event,ui){CHV.fn.list_editor.unselectItem($(ui.unselecting));}});};CHV.fn.isCachedImage=function(src){var image=new Image();image.src=src;return image.complete||image.width+image.height>0;};CHV.fn.viewerImageZoomClass=function(){if(CHV.obj.image_viewer.$container.hasClass("jscursor-zoom-in")){CHV.obj.image_viewer.$container.addClass("cursor-zoom-in").removeClass("jscursor-zoom-in");}};CHV.fn.viewerLoadImage=function(){if(CHV.obj.image_viewer.$loading.exists()){CHV.obj.image_viewer.$loading.removeClass("soft-hidden").css({zIndex:2});PF.fn.loading.inline(CHV.obj.image_viewer.$loading,{color:"white",size:"small",center:true,valign:true});CHV.obj.image_viewer.$loading.hide().fadeIn("slow");}
$(CHV.obj.image_viewer.loader).remove();CHV.obj.image_viewer.image.html=CHV.obj.image_viewer.$container.html();CHV.obj.image_viewer.$container.prepend($(CHV.obj.image_viewer.image.html).css({top:0,zIndex:0}));CHV.obj.image_viewer.$container.find("img").eq(0).css("zIndex",1);CHV.obj.image_viewer.$container.find("img").eq(1).attr("src",CHV.obj.image_viewer.image.url).css({width:"100%",height:"auto"});CHV.obj.image_viewer.$container.find("img").eq(1).imagesLoaded(function(){CHV.obj.image_viewer.$container.find("img").eq(1).css({width:"",height:""});CHV.obj.image_viewer.$container.find("img").eq(0).remove();PF.fn.loading.destroy(CHV.obj.image_viewer.$loading);});};CHV.obj.embed_tpl={};CHV.obj.topBar={transparencyScrollToggle:function(){var Y=$(window).scrollTop();$("#top-bar")[(Y>0?"remove":"add")+"Class"]("transparent");}};CHV.obj.uploaderReset={isUploading:false,canAdd:true,queueStatus:"ready",uploadThreads:0,uploadParsedIds:[],uploadProcessedIds:[],files:{},results:{success:{},error:{}},toggleWorking:0,filesAddId:0,clipboardImages:[],};CHV.fn.uploader={selectors:{root:"#anywhere-upload",shown:".upload-box--show",queue:"#anywhere-upload-queue",queue_complete:".queue-complete",queue_item:".queue-item",close_cancel:"[data-button=close-cancel]",file:"#anywhere-upload-input",camera:"#anywhere-upload-input-camera",upload_item_template:"#anywhere-upload-item-template",item_progress_bar:"[data-content=progress-bar]",item_progress_percent:"[data-text=progress-percent]",failed_result:"[data-content=failed-upload-result]",fullscreen_mask:"#fullscreen-uploader-mask",dropzone:"#uploader-dropzone",paste:"#anywhere-upload-paste",input:"[data-action=anywhere-upload-input]",},toggle:function(options,args){this.queueSize();var $switch=$("[data-action=top-bar-upload]",".top-bar");var show=!$(CHV.fn.uploader.selectors.root).data("shown");var options=$.extend({callback:null,reset:true},options);PF.fn.growl.close(true);PF.fn.close_pops();if(this.toggleWorking==1||$(CHV.fn.uploader.selectors.root).is(":animated")||CHV.fn.uploader.isUploading||($switch.data('login-needed')&&!PF.fn.is_user_logged()))return;this.toggleWorking=1;var animation={time:500,easing:null,};var callbacks=function(){if(!show&&options.reset){CHV.fn.uploader.reset();}
var $embed_codes=$("#embed-codes");$.ajax({data:{action:"get-album-contents",albumid:CHV.obj.resource.id},cache:false}).always(function(XHR){PF.fn.loading.destroy($loading);CHV.fn.fillEmbedCodes(XHR.contents,"#tab-codes");$embed_codes.removeClass("soft-hidden");});});if($("body").is("#upload")){CHV.fn.uploader.toggle({show:true});}});if(typeof CHV=="undefined"){CHV={obj:{},fn:{},str:{}};}
if(window.opener){CHV.obj.opener={uploadPlugin:{}};}
CHV.obj.image_viewer={selector:"#image-viewer",container:"#image-viewer-container",navigation:".image-viewer-navigation",loading:"#image-viewer-loading",loader:"#image-viewer-loader",};CHV.obj.image_viewer.$container=$(CHV.obj.image_viewer.container);CHV.obj.image_viewer.$navigation=$(CHV.obj.image_viewer.navigation);CHV.obj.image_viewer.$loading=$(CHV.obj.image_viewer.loading);CHV.fn.system={checkUpdates:function(callback){$.ajax({url:CHEVERETO.api.get.info+'/',data:null,cache:false}).always(function(data,status,XHR){if(typeof callback=="function"){callback(XHR);}});}};CHV.fn.bindSelectableItems=function(){var el='content-listing-wrapper';var sel="#"+el;if(!$(sel).exists()){$("[data-content=list-selection]").closest(".content-width").wrap("<div id='"+el+"' />");}else if($(sel).hasClass("ui-selectable")){$(sel).selectable("destroy");}
if(!$("[data-content=list-selection]").exists()){return;}
$("html.device-nonmobile "+sel).selectable({filter:PF.obj.listing.selectors.list_item,cancel:".content-empty, .header, #tab-share, #tab-full-info, .viewer-title, .header-link, .top-bar, .content-listing-pagination *, #fullscreen-modal, #top-user, #background-cover, .list-item-desc, .list-item-image-tools, [data-action=load-image], #tab-codes",delay:5,selecting:function(event,ui){var $this=$(ui.selecting);var unselect=$this.hasClass("selected");CHV.fn.list_editor[(unselect?"unselect":"select")+"Item"]($this);},unselecting:function(event,ui){CHV.fn.list_editor.unselectItem($(ui.unselecting));}});};CHV.fn.isCachedImage=function(src){var image=new Image();image.src=src;return image.complete||image.width+image.height>0;};CHV.fn.viewerImageZoomClass=function(){if(CHV.obj.image_viewer.$container.hasClass("jscursor-zoom-in")){CHV.obj.image_viewer.$container.addClass("cursor-zoom-in").removeClass("jscursor-zoom-in");}};CHV.fn.viewerLoadImage=function(){if(CHV.obj.image_viewer.$loading.exists()){CHV.obj.image_viewer.$loading.removeClass("soft-hidden").css({zIndex:2});PF.fn.loading.inline(CHV.obj.image_viewer.$loading,{color:"white",size:"small",center:true,valign:true});CHV.obj.image_viewer.$loading.hide().fadeIn("slow");}
$(CHV.obj.image_viewer.loader).remove();CHV.obj.image_viewer.image.html=CHV.obj.image_viewer.$container.html();CHV.obj.image_viewer.$container.prepend($(CHV.obj.image_viewer.image.html).css({top:0,zIndex:0}));CHV.obj.image_viewer.$container.find("img").eq(0).css("zIndex",1);CHV.obj.image_viewer.$container.find("img").eq(1).attr("src",CHV.obj.image_viewer.image.url).css({width:"100%",height:"auto"});CHV.obj.image_viewer.$container.find("img").eq(1).imagesLoaded(function(){CHV.obj.image_viewer.$container.find("img").eq(1).css({width:"",height:""});CHV.obj.image_viewer.$container.find("img").eq(0).remove();PF.fn.loading.destroy(CHV.obj.image_viewer.$loading);});};CHV.obj.embed_tpl={};CHV.obj.topBar={transparencyScrollToggle:function(){var Y=$(window).scrollTop();$("#top-bar")[(Y>0?"remove":"add")+"Class"]("transparent");}};CHV.obj.uploaderReset={isUploading:false,canAdd:true,queueStatus:"ready",uploadThreads:0,uploadParsedIds:[],uploadProcessedIds:[],files:{},results:{success:{},error:{}},toggleWorking:0,filesAddId:0,clipboardImages:[],};CHV.fn.uploader={selectors:{root:"#anywhere-upload",show:".upload-box--show",queue:"#anywhere-upload-queue",queue_complete:".queue-complete",queue_item:".queue-item",close_cancel:"[data-button=close-cancel]",file:"#anywhere-upload-input",camera:"#anywhere-upload-input-camera",upload_item_template:"#anywhere-upload-item-template",item_progress_bar:"[data-content=progress-bar]",item_progress_percent:"[data-text=progress-percent]",failed_result:"[data-content=failed-upload-result]",fullscreen_mask:"#fullscreen-uploader-mask",dropzone:"#uploader-dropzone",paste:"#anywhere-upload-paste",input:"[data-action=anywhere-upload-input]",},toggle:function(options,args){this.queueSize();var $switch=$("[data-action=top-bar-upload]",".top-bar");var show=!$(CHV.fn.uploader.selectors.root).data("shown");var options=$.extend({callback:null,reset:true},options);if(typeof options.show!==typeof undefined&&options.show){show=true;}
PF.fn.growl.close(true);PF.fn.close_pops();if(this.toggleWorking==1||$(CHV.fn.uploader.selectors.root).is(":animated")||CHV.fn.uploader.isUploading||($switch.data('login-needed')&&!PF.fn.is_user_logged()))return;this.toggleWorking=1;var animation={time:500,easing:null,};var callbacks=function(){if(!show&&options.reset){CHV.fn.uploader.reset();}
if(PF.obj.follow_scroll.$node.exists()){PF.obj.follow_scroll.$node.removeClass("fixed");PF.obj.follow_scroll.set();}
PF.fn.topMenu.hide();if(typeof options.callback=="function"){options.callback(args);}
CHV.fn.uploader.boxSizer();CHV.fn.uploader.toggleWorking=0;};$(CHV.fn.uploader.selectors.root)[(show?"add":"remove")+"Class"]("upload-box--show");if(show){$("html").data({"followed-scroll":$("html").hasClass("followed-scroll"),"top-bar-box-shadow-prevent":true}).removeClass("followed-scroll").addClass("top-bar-box-shadow-none");$("#top-bar").data({"stock_classes":$("#top-bar").attr("class")});$(".current[data-nav]",".top-bar").each(function(){if($(this).is("[data-action=top-bar-menu-full]"))return;$(this).removeClass("current").attr("data-current",1);});if(PF.fn.isDevice("mobile")){var $upload_heading=$(".upload-box-heading",$(CHV.fn.uploader.selectors.root));$upload_heading.css({position:"relative",top:0.5*($(window).height()-$upload_heading.height())+"px"});}
CHV.fn.uploader.focus(function(){setTimeout(function(){callbacks();if(PF.fn.isDevice(["phone","phablet"])){$("html").addClass("overflow-hidden");}},animation.time);});}else{$("[data-nav][data-current=1]",".top-bar").each(function(){$(this).addClass("current");});$(CHV.fn.uploader.selectors.fullscreen_mask).css({opacity:0});setTimeout(function(){$(CHV.fn.uploader.selectors.fullscreen_mask).remove();if($("html").data("followed-scroll")){$("html").addClass("followed-scroll");}},250);var _uploadBoxHeight=$(CHV.fn.uploader.selectors.root).outerHeight();var _uploadBoxPush=(_uploadBoxHeight-parseInt($(CHV.fn.uploader.selectors.root).data("initial-height")))+"px";$(CHV.fn.uploader.selectors.root).css({transform:"translate(0,-"+_uploadBoxPush+")"});setTimeout(function(){$("#top-bar").attr("class",$("#top-bar").data("stock_classes"));$("html").removeClass(($(".follow-scroll-wrapper.position-fixed").exists()?"":"top-bar-box-shadow-none"));},animation.time*1/3);setTimeout(function(){$(CHV.fn.uploader.selectors.root).css({top:""});if($("body#image").exists()){CHV.obj.topBar.transparencyScrollToggle();}
CHV.fn.uploader.boxSizer();CHV.fn.uploader.toggleWorking=0;};$(CHV.fn.uploader.selectors.root)[(show?"add":"remove")+"Class"](this.selectors.show.substring(1));if(show){if(!$("body").is("#upload")&&PF.fn.isDevice(["phone","phablet"])){$("html").addClass("overflow-hidden");}
$("html").data({"followed-scroll":$("html").hasClass("followed-scroll"),"top-bar-box-shadow-prevent":true}).removeClass("followed-scroll").addClass("top-bar-box-shadow-none");$("#top-bar").data({"stock_classes":$("#top-bar").attr("class")});$(".current[data-nav]",".top-bar").each(function(){if($(this).is("[data-action=top-bar-menu-full]"))return;$(this).removeClass("current").attr("data-current",1);});if(PF.fn.isDevice("mobile")){var $upload_heading=$(".upload-box-heading",$(CHV.fn.uploader.selectors.root));$upload_heading.css({position:"relative",top:0.5*($(window).height()-$upload_heading.height())+"px"});}
CHV.fn.uploader.focus(function(){setTimeout(function(){callbacks();},animation.time);});}else{$("[data-nav][data-current=1]",".top-bar").each(function(){$(this).addClass("current");});$(CHV.fn.uploader.selectors.fullscreen_mask).css({opacity:0});setTimeout(function(){$(CHV.fn.uploader.selectors.fullscreen_mask).remove();if($("html").data("followed-scroll")){$("html").addClass("followed-scroll");}},250);var _uploadBoxHeight=$(CHV.fn.uploader.selectors.root).outerHeight();var _uploadBoxPush=(_uploadBoxHeight-parseInt($(CHV.fn.uploader.selectors.root).data("initial-height")))+"px";$(CHV.fn.uploader.selectors.root).css({transform:"translate(0,-"+_uploadBoxPush+")"});setTimeout(function(){$("#top-bar").attr("class",$("#top-bar").data("stock_classes"));$("html").removeClass(($(".follow-scroll-wrapper.position-fixed").exists()?"":"top-bar-box-shadow-none"));},animation.time*1/3);setTimeout(function(){$(CHV.fn.uploader.selectors.root).css({top:""});if($("body#image").exists()){CHV.obj.topBar.transparencyScrollToggle();}
callbacks();$("html").removeClass("overflow-hidden").data({"top-bar-box-shadow-prevent":false});},animation.time);}
$(CHV.fn.uploader.selectors.root).data("shown",show);$switch.toggleClass("current").removeClass("opened");},reset:function(){$.extend(this,$.extend(true,{},CHV.obj.uploaderReset));$("li",this.selectors.queue).remove();$(this.selectors.root).height("").css({"overflow-y":"","overflow-x":""});$(this.selectors.queue).removeClass(this.selectors.queue_complete.substring(1));$(this.selectors.input,this.selectors.root).each(function(){$(this).prop("value",null);});$("[data-group=upload-result] textarea",this.selectors.root).prop("value","");$.each(['upload-queue-ready','uploading','upload-result','upload-queue-ready','upload-queue'],function(i,v){$("[data-group="+v+"]").hide();});$("[data-group=upload]",this.selectors.root).show();$("[name=upload-album-id]",this.selectors.root).prop("value",function(){var $selected=$("option[selected]",this);if($selected.exists()){return $selected.attr("value");}});$("[name=upload-category-id]",this.selectors.root).prop("value","");$("[name=upload-nsfw]",this.selectors.root).prop("checked",this.defaultChecked);$(this.selectors.close_cancel,this.selectors.root).hide().each(function(){if($(this).data("action")=="close-upload")$(this).show();});this.boxSizer(true);},focus:function(callback){if($(this.selectors.fullscreen_mask).exists())return;$("body").append($("<div/>",{id:(this.selectors.fullscreen_mask.replace("#","")),class:"fullscreen soft-black",}).css({top:PF.fn.isDevice("phone")?0:$(CHV.fn.uploader.selectors.root).data("top")}));setTimeout(function(){$(CHV.fn.uploader.selectors.fullscreen_mask).css({opacity:1});setTimeout(function(){if(typeof callback=="function"){callback();}},PF.fn.isDevice(["phone","phablet"])?0:250);},1);},boxSizer:function(forced){var shown=$(this.selectors.root).is(this.selectors.shown);var doit=shown||forced;if(shown){$("html")[(PF.fn.isDevice(["phone","phablet"])?"add":"remove")+"Class"]("overflow-hidden");}
if(!doit)return;$(this.selectors.root).height("");if($(this.selectors.root).height()>$(window).height()){$(this.selectors.root).height($(window).height()).css({"overflow-y":"scroll","overflow-x":"auto"});$("body").addClass("overflow-hidden");}else{$(this.selectors.root).css("overflow-y","");$("body").removeClass("overflow-hidden");}},pasteURL:function(){var urlvalues=$("[name=urls]","#fullscreen-modal").val();if(urlvalues){CHV.fn.uploader.add({},urlvalues);}},pasteImageHandler:function(e){if($(e.target).is(":input")){return;}
$(CHV.fn.uploader.selectors.root).data("shown",show);$switch.toggleClass("current").removeClass("opened");},reset:function(){$.extend(this,$.extend(true,{},CHV.obj.uploaderReset));$("li",this.selectors.queue).remove();$(this.selectors.root).height("").css({"overflow-y":"","overflow-x":""});$(this.selectors.queue).addClass('queueEmpty').removeClass(this.selectors.queue_complete.substring(1));$(this.selectors.input,this.selectors.root).each(function(){$(this).prop("value",null);});$("[data-group=upload-result] textarea",this.selectors.root).prop("value","");$.each(['upload-queue-ready','uploading','upload-result','upload-queue-ready','upload-queue'],function(i,v){$("[data-group="+v+"]").hide();});$("[data-group=upload]",this.selectors.root).show();$("[name=upload-album-id]",this.selectors.root).prop("value",function(){var $selected=$("option[selected]",this);if($selected.exists()){return $selected.attr("value");}});$(this.selectors.root).removeClass('queueCompleted queueReady queueHasResults').addClass('queueEmpty').attr("data-queue-size",0);$("[name=upload-category-id]",this.selectors.root).prop("value","");$("[name=upload-nsfw]",this.selectors.root).prop("checked",this.defaultChecked);this.boxSizer(true);},focus:function(callback){if($(this.selectors.fullscreen_mask).exists())return;if(!$("body").is("#upload")){$("body").append($("<div/>",{id:(this.selectors.fullscreen_mask.replace("#","")),class:"fullscreen soft-black",}).css({top:PF.fn.isDevice("phone")?0:$(CHV.fn.uploader.selectors.root).data("top")}));}
setTimeout(function(){if(!$("body").is("#upload")){$(CHV.fn.uploader.selectors.fullscreen_mask).css({opacity:1});}
setTimeout(function(){if(typeof callback=="function"){callback();}},PF.fn.isDevice(["phone","phablet"])?0:250);},1);},boxSizer:function(forced){var shown=$(this.selectors.root).is(this.selectors.show);var doit=shown||forced;if(shown&&!$("body").is("#upload")){$("html")[(PF.fn.isDevice(["phone","phablet"])?"add":"remove")+"Class"]("overflow-hidden");}
if(!doit)return;$(this.selectors.root).height("");if(!$("body").is("#upload")&&$(this.selectors.root).height()>$(window).height()){$(this.selectors.root).height($(window).height()).css({"overflow-y":"scroll","overflow-x":"auto"});$("body").addClass("overflow-hidden");}else{$(this.selectors.root).css("overflow-y","");$("body").removeClass("overflow-hidden");}},pasteURL:function(){var urlvalues=$("[name=urls]","#fullscreen-modal").val();if(urlvalues){CHV.fn.uploader.add({},urlvalues);}},pasteImageHandler:function(e){if($(e.target).is(":input")){return;}
if(typeof e.clipboardData!==typeof undefined&&e.clipboardData.items){var items=e.clipboardData.items;}else{setTimeout(function(){e.clipboardData={};e.clipboardData.items=[];$.each($("img",CHV.fn.uploader.$pasteCatcher),function(i,v){e.clipboardData.items.push(PF.fn.dataURItoBlob($(this).attr("src")));});$(CHV.fn.uploader.selectors.paste).html("");return CHV.fn.uploader.pasteImageHandler(e);},1);}
if(items){for(var i=0;i<items.length;i++){if(items[i].type.indexOf("image")!==-1){var file=items[i]instanceof Blob?items[i]:items[i].getAsFile();var reader=new FileReader();reader.onload=function(evt){var uploaderIsVisible=$(CHV.fn.uploader.selectors.root).data("shown");file.name=PF.fn._s('Clipboard image')+' '+PF.fn.getDateTime();var file_evt={originalEvent:{dataTransfer:{files:[file]},preventDefault:function(){},stopPropagation:function(){},clipboard:true,dataURL:evt.target.result,name:file.name}};if(!uploaderIsVisible){CHV.fn.uploader.toggle({callback:function(){CHV.fn.uploader.add(file_evt);}});}else{CHV.fn.uploader.add(file_evt);}};reader.readAsDataURL(file);}}}},add:function(e,urls){var md5;if(!this.canAdd){var e=e.originalEvent;e.preventDefault();e.stopPropagation();return false;}
$fileinput=$(this.selectors.file);$fileinput.replaceWith($fileinput=$fileinput.clone(true));var item_queue_template=$(this.selectors.upload_item_template).html();var files=[];if(typeof urls==typeof undefined){var e=e.originalEvent;e.preventDefault();e.stopPropagation();files=e.dataTransfer||e.target;files=$.makeArray(files.files);if(e.clipboard){md5=PF.fn.md5(e.dataURL);if($.inArray(md5,this.clipboardImages)!=-1){return null;}
@ -120,29 +130,27 @@ if(files.length==0){return;}}else{urls=urls.replace(/(<([^>]+)>)/g,'').replace(/
if($.isEmptyObject(this.files)){for(var i=0;i<files.length;i++){this.files[files[i].uid]=files[i];this.filesAddId++;}}else{var currentfiles=[];for(var key in this.files){if(typeof this.files[key]=="undefined"||typeof this.files[key]=="function")continue;currentfiles.push(encodeURI(this.files[key].name));}
files=$.map(files,function(file,i){if($.inArray(encodeURI(file.name),currentfiles)!=-1){return null;}
file.uid=CHV.fn.uploader.filesAddId+i;CHV.fn.uploader.filesAddId++;return file;});for(var i=0;i<files.length;i++){this.files[files[i].uid]=files[i];}}
$(this.selectors.queue,this.selectors.root).append(item_queue_template.repeat(files.length));$(this.selectors.queue+" "+this.selectors.queue_item+":not([data-id])",this.selectors.root).hide();$(this.selectors.close_cancel,this.selectors.root).hide().each(function(){if($(this).data("action")=="close-upload")$(this).show();});var failed_before=failed_files,failed_files=[],j=0,default_options={canvas:true,maxWidth:590};function CHVLoadImage(i){if(typeof i==typeof undefined){var i=0;}
$(this.selectors.queue,this.selectors.root).append(item_queue_template.repeat(files.length));$(this.selectors.queue+" "+this.selectors.queue_item+":not([data-id])",this.selectors.root).hide();var failed_before=failed_files,failed_files=[],j=0,default_options={canvas:true,maxWidth:590};function CHVLoadImage(i){if(typeof i==typeof undefined){var i=0;}
if(!(i in files)){PF.fn.loading.destroy("fullscreen");return;}
var file=files[i];$(CHV.fn.uploader.selectors.queue_item+":not([data-id]) .load-url",CHV.fn.uploader.selectors.queue)[typeof file.url!=="undefined"?"show":"remove"]();loadImage.parseMetaData(file.url?file.url:file,function(data){$(CHV.fn.uploader.selectors.queue_item+":not([data-id]) .preview:empty",CHV.fn.uploader.selectors.queue).first().closest("li").attr("data-id",file.uid);loadImage(file.url?file.url:file,function(img){++j;var $queue_item=$(CHV.fn.uploader.selectors.queue_item+"[data-id="+(file.uid)+"]",CHV.fn.uploader.selectors.queue);if(img.type==="error"){failed_files.push({uid:file.uid,name:file.name.truncate_middle()});}else{if(!$("[data-group=upload-queue]",CHV.fn.uploader.selectors.root).is(":visible")){$("[data-group=upload-queue]",CHV.fn.uploader.selectors.root).css("display","block");}
var mimetype="image/jpeg";if(typeof data.buffer!==typeof undefined){var buffer=(new Uint8Array(data.buffer)).subarray(0,4);var header="";for(var i=0;i<buffer.length;i++){header+=buffer[i].toString(16);}
var header_to_mime={'89504e47':'image/png','47494638':'image/gif','ffd8ffe0':'image/jpeg',};$.each(['ffd8ffe1','ffd8ffe2'],function(i,v){header_to_mime[v]=header_to_mime['ffd8ffe0'];});if(typeof header_to_mime[header]!==typeof undefined){mimetype=header_to_mime[header];}}
var title=null;if(typeof file.name!==typeof undefined){var basename=PF.fn.baseName(file.name);title=$.trim(basename.substring(0,100).capitalizeFirstLetter());}
CHV.fn.uploader.files[file.uid].parsedMeta={title:title,width:img.originalWidth,height:img.originalHeight,mimetype:mimetype,};$queue_item.show();$("[data-group=upload-queue-ready]",CHV.fn.uploader.selectors.root).show();$("[data-group=upload]",CHV.fn.uploader.selectors.root).hide();$queue_item.find(".load-url").remove();$queue_item.find(".preview").removeClass("soft-hidden").show().append(img);$img=$queue_item.find(".preview").find("img,canvas");$img.attr("class","canvas");queue_item_h=$queue_item.height();queue_item_w=$queue_item.width();var img_w=parseInt($img.attr("width"))||$img.width();var img_h=parseInt($img.attr("height"))||$img.height();var img_r=img_w/img_h;$img.hide();if(img_w>img_h||img_w==img_h){var queue_img_h=img_h<queue_item_h?img_h:queue_item_h;if(img_w>img_h){$img.height(queue_img_h).width(queue_img_h*img_r);}}
CHV.fn.uploader.files[file.uid].parsedMeta={title:title,width:img.originalWidth,height:img.originalHeight,mimetype:mimetype,};$queue_item.show();$(CHV.fn.uploader.selectors.root).addClass('queueReady').removeClass('queueEmpty');$("[data-group=upload-queue-ready]",CHV.fn.uploader.selectors.root).show();$("[data-group=upload]",CHV.fn.uploader.selectors.root).hide();$queue_item.find(".load-url").remove();$queue_item.find(".preview").removeClass("soft-hidden").show().append(img);$img=$queue_item.find(".preview").find("img,canvas");$img.attr("class","canvas");queue_item_h=$queue_item.height();queue_item_w=$queue_item.width();var img_w=parseInt($img.attr("width"))||$img.width();var img_h=parseInt($img.attr("height"))||$img.height();var img_r=img_w/img_h;$img.hide();if(img_w>img_h||img_w==img_h){var queue_img_h=img_h<queue_item_h?img_h:queue_item_h;if(img_w>img_h){$img.height(queue_img_h).width(queue_img_h*img_r);}}
if(img_w<img_h||img_w==img_h){var queue_img_w=img_w<queue_item_w?img_w:queue_item_w;if(img_w<img_h){$img.width(queue_img_w).height(queue_img_w/img_r);}}
if(img_w==img_h){$img.height(queue_img_h).width(queue_img_w);}
$img.css({marginTop:-$img.height()/2,marginLeft:-$img.width()/2}).show();CHV.fn.uploader.boxSizer();}
if(j==files.length){if(typeof failed_before!=="undefined"){failed_files=failed_files.concat(failed_before);}
PF.fn.loading.destroy("fullscreen");if(failed_files.length>0){var failed_message="";for(var i=0;i<failed_files.length;i++){failed_message+="<li>"+failed_files[i].name+"</li>";delete CHV.fn.uploader.files[failed_files[i].uid];console.log(failed_files)
console.log(CHV.fn.uploader.files)
$("li[data-id="+failed_files[i].uid+"]",CHV.fn.uploader.selectors.queue).find("[data-action=cancel]").click();}
PF.fn.loading.destroy("fullscreen");if(failed_files.length>0){var failed_message="";for(var i=0;i<failed_files.length;i++){failed_message+="<li>"+failed_files[i].name+"</li>";delete CHV.fn.uploader.files[failed_files[i].uid];$("li[data-id="+failed_files[i].uid+"]",CHV.fn.uploader.selectors.queue).find("[data-action=cancel]").click();}
PF.fn.modal.simple({title:PF.fn._s("Some files couldn't be added"),message:'<ul>'+failed_message+'</ul>'});}else{CHV.fn.uploader.focus();}
CHV.fn.uploader.boxSizer();}},$.extend({},default_options,{orientation:data.exif?data.exif.get("Orientation"):1}));setTimeout(function(){CHVLoadImage(i+1);},25);});}
PF.fn.loading.fullscreen();CHVLoadImage();this.queueSize();},queueSize:function(){$(this.selectors.root).attr("data-queue-size",Object.size(this.files));$("[data-text=queue-objects]",this.selectors.root).text(PF.fn._n("image","images",Object.size(this.files)));$("[data-text=queue-size]",this.selectors.root).text(Object.size(this.files));},queueProgress:function(e,id){var queue_size=Object.size(this.files);this.files[id].progress=e.loaded / e.total;var progress=0;for(var i=0;i<queue_size;i++){if(typeof this.files[i]==typeof undefined||!('progress'in this.files[i]))continue;progress+=this.files[i].progress;}
$("[data-text=queue-progress]",this.selectors.root).text(parseInt(100*progress / queue_size));},upload:function($queue_item){var id=$queue_item.data("id");var nextId=$queue_item.next().exists()?$queue_item.next().data("id"):false;if($.inArray(id,this.uploadParsedIds)!==-1){if($queue_item.next().exists()){console.log(">>>TOP TRIGGER NEXT WHICH IS "+$queue_item.next().data("id"))
this.upload($queue_item.next());}
$("[data-text=queue-progress]",this.selectors.root).text(parseInt(100*progress / queue_size));},upload:function($queue_item){var id=$queue_item.data("id");var nextId=$queue_item.next().exists()?$queue_item.next().data("id"):false;if($.inArray(id,this.uploadParsedIds)!==-1){if($queue_item.next().exists()){this.upload($queue_item.next());}
return;}
var self=this;this.uploadParsedIds.push(id);var f=this.files[id];var queue_is_url=typeof f.url!=="undefined";var source=queue_is_url?f.url:f;var hasForm=typeof f.formValues!==typeof undefined;if(typeof f=="undefined"){if($queue_item.next().exists()){this.upload($queue_item.next());}
var self=this;this.uploadParsedIds.push(id);var f=this.files[id];if(typeof f==typeof undefined){return;}
var queue_is_url=typeof f.url!==typeof undefined;var source=queue_is_url?f.url:f;var hasForm=typeof f.formValues!==typeof undefined;if(typeof f==typeof undefined){if($queue_item.next().exists()){this.upload($queue_item.next());}
return;}
$(this.selectors.close_cancel,this.selectors.root).hide().each(function(){if($(this).data("action")=="cancel-upload")$(this).show();});this.uploadThreads+=1;if(this.uploadThreads<CHV.obj.config.upload.threads&&nextId){this.upload($queue_item.next());}
this.uploadThreads+=1;if(this.uploadThreads<CHV.obj.config.upload.threads&&nextId){this.upload($queue_item.next());}
this.isUploading=true;var form=new FormData();var formData={source:null,type:queue_is_url?"url":"file",action:"upload",privacy:$("[data-privacy]",this.selectors.root).first().data("privacy"),timestamp:this.timestamp,auth_token:PF.obj.config.auth_token,category_id:$("[name=upload-category-id]",this.selectors.root).val()||null,nsfw:$("[name=upload-nsfw]",this.selectors.root).prop("checked")?1:0,album_id:$("[name=upload-album-id]",this.selectors.root).val()||null};if(queue_is_url){formData.source=source;}else{form.append("source",source,f.name);}
if(hasForm){$.each(f.formValues,function(i,v){formData[i.replace(/image_/g,"")]=v;});}
$.each(formData,function(i,v){if(v===null)return true;form.append(i,v);});this.files[id].xhr=new XMLHttpRequest();$queue_item.removeClass("waiting");$(".block.edit, .queue-item-button.edit",$queue_item).remove();if(!queue_is_url){this.files[id].xhr.upload.onprogress=function(e){if(e.lengthComputable){CHV.fn.uploader.queueProgress(e,id);percentComplete=parseInt((e.loaded / e.total)*100);$(CHV.fn.uploader.selectors.item_progress_percent,$queue_item).text(percentComplete);$(CHV.fn.uploader.selectors.item_progress_bar,$queue_item).width(100-percentComplete+"%");if(percentComplete==100){$(CHV.fn.uploader.selectors.item_progress_percent,$queue_item).text("");CHV.fn.uploader.itemLoading($queue_item);}}};}else{this.queueSize();this.queueProgress({loaded:1,total:1},id);this.itemLoading($queue_item);}
@ -151,20 +159,19 @@ JSONresponse.error.message=CHV.fn.uploader.files[id].name.truncate_middle()+" -
CHV.fn.uploader.results[this.status==200?"success":"error"][id]=JSONresponse;if(this.status!==200)is_error=true;}catch(err){is_error=true;var err_handle;if(typeof JSONresponse==typeof undefined){err_handle={status:500,statusText:"Internal server error"};}else{err_handle={status:400,statusText:JSONresponse.error.message};}
JSONresponse={status_code:err_handle.status,error:{message:CHV.fn.uploader.files[id].name.truncate_middle()+" - Server error ("+err_handle.statusText+")",code:err_handle.status,context:"XMLHttpRequest"},status_txt:err_handle.statusText};var error_key=Object.size(CHV.fn.uploader.results.error)+1;CHV.fn.uploader.results.error[error_key]=JSONresponse;}
$queue_item.addClass(!is_error?"completed":"failed");if(typeof JSONresponse.error!=="undefined"&&typeof JSONresponse.error.message!=="undefined"){$queue_item.attr("rel","tooltip").data("tiptip","top").attr("title",JSONresponse.error.message);PF.fn.bindtipTip($queue_item);}
if(self.uploadThreads<CHV.obj.config.upload.threads&&nextId){console.log(">>>GO FOR NEXT WHICH IS "+$queue_item.next().data("id"))
CHV.fn.uploader.upload($queue_item.next());$(CHV.fn.uploader.selectors.close_cancel,CHV.fn.uploader.selectors.root).hide().each(function(){if($(this).data("action")=="cancel-upload-remaining"){$(this).show();}});}
if(self.uploadThreads<CHV.obj.config.upload.threads&&nextId){CHV.fn.uploader.upload($queue_item.next());$(CHV.fn.uploader.selectors.root).addClass('queueHasResults');}
if(self.uploadProcessedIds.length==Object.size(self.files)){CHV.fn.uploader.displayResults();}
$(".done",$queue_item).fadeOut();}};this.files[id].xhr.open("POST",PF.obj.config.json_api,true);this.files[id].xhr.setRequestHeader("Accept","application/json");this.files[id].xhr.send(form);},itemLoading:function($queue_item){PF.fn.loading.inline($(".progress",$queue_item),{color:"#FFF",size:"normal",center:true,position:"absolute",shadow:true});$("[data-action=cancel], [data-action=edit]",$queue_item).hide();},displayResults:function(){CHV.fn.uploader.isUploading=false;var group_result="[data-group=upload-result][data-result=%RESULT%]",result_types=["error","mixed","success"],results={};for(var i=0;i<result_types.length;i++){results[result_types[i]]=group_result.replace("%RESULT%",result_types[i]);}
if(Object.size(this.results.error)>0){var error_files=[];for(var i in this.results.error){if(typeof this.results.error[i]!=="object")continue;console.log(this.results.error[i])
error_files[i]=this.results.error[i].error.message;}
if(error_files.length>0){$(this.selectors.failed_result).html("<li>"+error_files.join("</li><li>")+"</li>");}}else{$(results.error,this.selectors.root).hide();}
if(CHV.obj.config.upload.redirect_single_upload&&Object.size(this.results.success)==1&&Object.size(this.results.error)==0){window.location.href=this.results.success[0].image.url_viewer;return false;}
$("[data-text=queue-progress]",this.selectors.root).text(100);$("[data-group=uploading]",this.selectors.root).hide();$(this.selectors.close_cancel,this.selectors.root).hide().each(function(){if($(this).data("action")=="close-upload")$(this).show();});$(this.selectors.queue).addClass(this.selectors.queue_complete.substring(1));if(Object.size(this.results.success)>0&&$("[data-group=upload-result] textarea",this.selectors.root).exists()){CHV.fn.fillEmbedCodes(this.results.success,CHV.fn.uploader.selectors.root,"val");}
if(!window.opener&&CHV.obj.config.upload.redirect_single_upload&&Object.size(this.results.success)==1&&Object.size(this.results.error)==0){window.location.href=this.results.success[0].image.url_viewer;return false;}
$("[data-text=queue-progress]",this.selectors.root).text(100);$("[data-group=uploading]",this.selectors.root).hide();$(this.selectors.root).removeClass('queueUploading queueHasResults').addClass('queueCompleted');$(this.selectors.queue).addClass(this.selectors.queue_complete.substring(1));if(Object.size(this.results.success)>0&&$("[data-group=upload-result] textarea",this.selectors.root).exists()){CHV.fn.fillEmbedCodes(this.results.success,CHV.fn.uploader.selectors.root,"val");}
if(Object.size(this.results.success)>0&&Object.size(this.results.error)>0){$(results.mixed+", "+results.success,this.selectors.root).show();}else if(Object.size(this.results.success)>0){$(results.success,this.selectors.root).show();}else if(Object.size(this.results.error)>0){$(results.error,this.selectors.root).show();}
if($(results.success,this.selectors.root).is(":visible")){$(results.success,this.selectors.root).find("[data-group^=user], [data-group=guest]").hide();$(results.success,this.selectors.root).find("[data-group="+(PF.fn.is_user_logged()?"user":"guest")+"]").show();var firstKey=Object.keys(this.results.success)[0];if(typeof this.results.success[firstKey].image.album!=="undefined"){var albums=[];for(var key in this.results.success){var image=this.results.success[key].image;if(image.album&&!!image.album.id_encoded&&albums.indexOf(image.album.id_encoded)==-1){albums.push(image.album.id_encoded);}}
var targetAlbum={link:null,text:null};if(albums.length<=1){targetAlbum.link=this.results.success[firstKey].image.album.url;targetAlbum.text=this.results.success[firstKey].image.album.name;}else{targetAlbum.link=this.results.success[firstKey].image.user.url_albums;targetAlbum.text=PF.fn._s("%s's Albums",this.results.success[firstKey].image.user.name_short_html);}
$("[data-text=upload-target]",this.selectors.root).text(targetAlbum.text);$("[data-link=upload-target]",this.selectors.root).attr("href",targetAlbum.link);if(PF.fn.is_user_logged()){var show_user_stuff=albums.length>0?"album":"stream";$("[data-group=user-"+show_user_stuff+"]",this.selectors.root).show();}}}
this.boxSizer();this.queueStatus="done";}};$.extend(CHV.fn.uploader,$.extend(true,{},CHV.obj.uploaderReset));CHV.fn.fillEmbedCodes=function(elements,parent,fn){if(typeof fn=="undefined"){fn="val";}
this.boxSizer();this.queueStatus="done";if(window.opener&&typeof CHV.obj.opener.uploadPlugin[window.name]!==typeof undefined){$('[data-action="copy"]',this.selectors.root).remove();if(CHV.obj.opener.uploadPlugin[window.name].hasOwnProperty('autoInsert')&&CHV.obj.opener.uploadPlugin[window.name].autoInsert){var $target=$(':input[name="'+CHV.obj.opener.uploadPlugin[window.name].autoInsert+'"]',CHV.fn.uploader.selectors.root);var value=$target.val();if(value){window.opener.postMessage({id:window.name,message:value},"*");window.close();return;}}}else{$('[data-action="openerPostMessage"]',this.selectors.root).remove();}}};$.extend(CHV.fn.uploader,$.extend(true,{},CHV.obj.uploaderReset));CHV.fn.fillEmbedCodes=function(elements,parent,fn){if(typeof fn=="undefined"){fn="val";}
$.each(elements,function(key,value){if(typeof value==typeof undefined)return;var image=("id_encoded"in value)?value:value.image;if(!image.medium){image.medium={};var imageProp=["filename","name","width","height","extension","size","size_formatted","url"];for(var i=0;i<imageProp.length;i++){image.medium[imageProp[i]]=image[imageProp[i]];}}
var flatten_image=Object.flatten(image);$.each(CHV.obj.embed_tpl,function(key,value){$.each(value.options,function(k,v){var embed=v,$embed=$("textarea[name="+k+"]",parent),template=embed.template;for(var i in flatten_image){if(!flatten_image.hasOwnProperty(i)){continue;}
template=template.replace(new RegExp("%"+i.toUpperCase()+"%","g"),flatten_image[i]);}
@ -194,7 +201,7 @@ return true;},add:{submit:function(){var modal=PF.obj.modal.selectors.root;if(!C
PF.obj.modal.form_data={action:"add-ip_ban",ip_ban:{}};$.each(CHV.fn.ip_ban.formFields,function(i,v){if(v=="id")return;PF.obj.modal.form_data.ip_ban[v]=$("[name=form-ip_ban-"+v+"]",modal).val();});return true;},complete:{success:function(XHR){var ip_ban=XHR.responseJSON.ip_ban,list="[data-content=dashboard-ip_bans-list]",html=$("[data-content=ip_ban-dashboard-template]").html(),replaces={};if(typeof html!=="undefined"){$.each(ip_ban,function(i,v){html=html.replace(new RegExp("%"+i.toUpperCase()+"%","g"),v?v:"");});$(list).append(html);}
if(Object.size(CHV.obj.ip_bans)==0){CHV.obj.ip_bans={};}
CHV.obj.ip_bans[ip_ban.id]=ip_ban;$("[data-content=ban_uploader_ip]").hide();$("[data-content=banned_uploader_ip]").show();PF.fn.growl.call(PF.fn._s("IP %s banned.",ip_ban.ip));},error:function(XHR){var error=XHR.responseJSON.error;PF.fn.growl.call(PF.fn._s(error.message));}}},edit:{before:function(e){var $this=$(e.target),id=$this.data("ip_ban-id"),target=CHV.obj.ip_bans[id],modal_source="[data-modal="+$this.data("target")+"]";$.each(CHV.fn.ip_ban.formFields,function(i,v){var i="form-ip_ban-"+v,v=target[v],$input=$("[name="+i+"]",modal_source);if($input.is("textarea")){$input.html(PF.fn.htmlEncode(v));}else{$input.attr("value",v);}});},submit:function(){var modal=PF.obj.modal.selectors.root,id=$("[name=form-ip_ban-id]",modal).val();if(!CHV.fn.ip_ban.validateForm(id)){return false;}
PF.obj.modal.form_data={action:"edit",edit:"ip_ban",editing:{}};$.each(CHV.fn.ip_ban.formFields,function(i,v){PF.obj.modal.form_data.editing[v]=$("[name=form-ip_ban-"+v+"]",modal).val();});return true;},complete:{success:function(XHR){var ip_ban=XHR.responseJSON.ip_ban,parent="[data-content=ip_ban][data-ip_ban-id="+ip_ban.id+"]";$.each(ip_ban,function(i,v){$("[data-content=ip_ban-"+i+"]",parent).html(PF.fn.htmlEncode(v));});CHV.obj.ip_bans[ip_ban.id]=ip_ban;}}},delete:{before:function(e){var $this=$(e.target),id=$this.data("ip_ban-id"),ip_ban=CHV.obj.ip_bans[id];$this.attr("data-confirm",$this.attr("data-confirm").replace("%s",ip_ban.ip));},submit:function(id){PF.obj.modal.form_data={action:"delete",delete:"ip_ban",deleting:{id:id}};return true;},complete:{success:function(XHR){PF.fn.growl.expirable(PF.fn._s("IP ban successfully deleted."));var id=XHR.responseJSON.request.deleting.id;$("[data-content=ip_ban][data-ip_ban-id="+id+"]").remove();delete CHV.obj.ip_bans[id];}}}};CHV.fn.storage={formFields:["id","name","api_id","bucket","server","service","capacity","region","key","secret","url","account_id","account_name"],calling:false,validateForm:function(){var modal=PF.obj.modal.selectors.root,id=$("[name=form-storage-id]",modal).val(),submit=true;$.each($(":input",modal),function(i,v){if($(this).is(":hidden")){if($(this).attr("required")){$(this).removeAttr("required").attr("data-required",1);}}else{if($(this).attr("data-required")==1){$(this).attr("required","required");}}
PF.obj.modal.form_data={action:"edit",edit:"ip_ban",editing:{}};$.each(CHV.fn.ip_ban.formFields,function(i,v){PF.obj.modal.form_data.editing[v]=$("[name=form-ip_ban-"+v+"]",modal).val();});return true;},complete:{success:function(XHR){var ip_ban=XHR.responseJSON.ip_ban,parent="[data-content=ip_ban][data-ip_ban-id="+ip_ban.id+"]";$.each(ip_ban,function(i,v){$("[data-content=ip_ban-"+i+"]",parent).html(PF.fn.htmlEncode(v));});CHV.obj.ip_bans[ip_ban.id]=ip_ban;},error:function(XHR){var error=XHR.responseJSON.error;PF.fn.growl.call(PF.fn._s(error.message));}}},delete:{before:function(e){var $this=$(e.target),id=$this.data("ip_ban-id"),ip_ban=CHV.obj.ip_bans[id];$this.attr("data-confirm",$this.attr("data-confirm").replace("%s",ip_ban.ip));},submit:function(id){PF.obj.modal.form_data={action:"delete",delete:"ip_ban",deleting:{id:id}};return true;},complete:{success:function(XHR){PF.fn.growl.expirable(PF.fn._s("IP ban successfully deleted."));var id=XHR.responseJSON.request.deleting.id;$("[data-content=ip_ban][data-ip_ban-id="+id+"]").remove();delete CHV.obj.ip_bans[id];}}}};CHV.fn.storage={formFields:["id","name","api_id","bucket","server","service","capacity","region","key","secret","url","account_id","account_name"],calling:false,validateForm:function(){var modal=PF.obj.modal.selectors.root,id=$("[name=form-storage-id]",modal).val(),submit=true;$.each($(":input",modal),function(i,v){if($(this).is(":hidden")){if($(this).attr("required")){$(this).removeAttr("required").attr("data-required",1);}}else{if($(this).attr("data-required")==1){$(this).attr("required","required");}}
if($(this).is(":visible")&&$(this).val()==""&&$(this).attr("required")){$(this).highlight();submit=false;}});if(!submit){PF.fn.growl.call(PF.fn._s("Please fill all the required fields."));return false;}
var $storage_capacity=$("[name=form-storage-capacity]",modal),storage_capacity=$storage_capacity.val(),capacity_error_msg;if(storage_capacity!==""){if(/^[\d\.]+\s*[A-Za-z]{2}$/.test(storage_capacity)==false||typeof storage_capacity.getBytes()=="undefined"){capacity_error_msg=PF.fn._s("Invalid storage capacity value. Make sure to use a valid format.");}else if(typeof CHV.obj.storages[id]!=="undefined"&&storage_capacity.getBytes()<CHV.obj.storages[id].space_used){capacity_error_msg=PF.fn._s("Storage capacity can't be lower than its current usage (%s).",CHV.obj.storages[id].space_used.formatBytes());}
if(capacity_error_msg){PF.fn.growl.call(capacity_error_msg);$storage_capacity.highlight();return false;}}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -19,14 +19,14 @@ namespace CHV;
use G, Exception;
class Album {
public static function getSingle($id, $sumview=FALSE, $pretty=TRUE, $requester=NULL) {
$tables = DB::getTables();
$query = 'SELECT * FROM '.$tables['albums']."\n";
$joins = [
'LEFT JOIN '.$tables['users'].' ON '.$tables['albums'].'.album_user_id = '.$tables['users'].'.user_id'
];
if($requester) {
if(!is_array($requester)) {
$requester = User::getSingle($requester, 'id');
@ -35,21 +35,21 @@ class Album {
$joins[] = 'LEFT JOIN '.$tables['likes'].' ON '.$tables['likes'].'.like_content_type = "album" AND '.$tables['albums'].'.album_id = '.$tables['likes'].'.like_content_id AND '.$tables['likes'].'.like_user_id = ' . $requester['id'];
}
}
$query .= implode("\n", $joins) . "\n";
$query .= 'WHERE album_id=:album_id;'."\n";
if($sumview) {
$query .= 'UPDATE '.$tables['albums'].' SET album_views = album_views + 1 WHERE album_id=:album_id';
$query .= 'UPDATE '.$tables['albums'].' SET album_views = album_views + 1 WHERE album_id=:album_id';
}
try {
$db = DB::getInstance();
$db->query($query);
$db->bind(':album_id', $id);
$album_db = $db->fetchSingle();
if(!$album_db) return $album_db;
if($sumview) {
$album_db['album_views'] += 1;
// Track stats
@ -67,7 +67,7 @@ class Album {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function getMultiple($ids, $pretty=false) {
if(!is_array($ids)) {
$ids = func_get_args();
@ -77,20 +77,20 @@ class Album {
}
$ids = $aux;
}
if(count($ids) == 0) {
throw new AlbumException('Null ids provided in ' . __METHOD__, 100);
}
$tables = DB::getTables();
$query = 'SELECT * FROM '.$tables['albums']."\n";
$query = 'SELECT * FROM ' . $tables['albums'] . "\n";
$joins = array(
'LEFT JOIN '.$tables['users'].' ON '.$tables['albums'].'.album_user_id = '.$tables['users'].'.user_id'
);
$query .= implode("\n", $joins) . "\n";
$query .= 'WHERE album_id IN ('. join(',', $ids). ')' . "\n";
try {
$db = DB::getInstance();
$db->query($query);
@ -106,9 +106,9 @@ class Album {
} catch(Exception $e) {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function sumView($id, $album=[]) {
try {
if(!G\is_integer($id)) {
@ -128,17 +128,17 @@ class Album {
'value' => $increment,
'user_id' => $album['album_user_id'],
]);
$_SESSION['album_view_stock'][] = $id;
$_SESSION['album_view_stock'][] = $id;
} catch(Exception $e) {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function getUrl($album_id) {
return G\get_base_url(getSetting('route_album') . '/' . $album_id);
}
public static function insert($name, $user_id, $privacy='public', $description='', $password=NULL) {
if(!$user_id) {
throw new AlbumException('Missing $user_id', 100);
@ -146,23 +146,23 @@ class Album {
if($privacy == 'password' && !G\check_value($password)) {
throw new AlbumException('Missing album $password', 101);
}
// Handle flood
$flood = self::handleFlood();
if($flood) {
throw new AlbumException(strtr('Flood detected. You can only create %limit% albums per %time%', ['%limit%' => $flood['limit'], '%time%' => $flood['by']]), 130);
}
if(!$name) {
$name = _s('Untitled') . ' ' . G\datetime();
}
if(!in_array($privacy, array('public', 'private', 'password', 'private_but_link'))) {
$privacy = 'public';
}
G\nullify_string($description);
$album_array = [
'name' => $name,
'user_id' => $user_id,
@ -173,7 +173,7 @@ class Album {
'description' => $description,
'creation_ip' => G\get_client_ip()
];
try {
$insert = DB::insert('albums', $album_array);
// +1 on user
@ -190,18 +190,18 @@ class Album {
throw new AlbumException($e->getMessage(), 400);
}
}
// Move contents $from albums to another album
public static function moveContents($from, $to) {
if(!$from) { // Could be int or array (multiple)
throw new AlbumException('Expecting first parameter, '.gettype($from).' given in ' . __METHOD__, 100);
}
if(!$to) {
if(!$to) {
$to = NULL;
}
$ids = is_array($from) ? $from : array($from);
try {
@ -213,7 +213,7 @@ class Album {
$images_affected = $db->rowCount();
// Update the old and new albums to +ids
$db->query(
'UPDATE '.DB::getTable('albums').' SET album_image_count = 0 WHERE album_id IN ('.implode(',', $ids).');' .
'UPDATE '.DB::getTable('albums').' SET album_image_count = 0 WHERE album_id IN ('.implode(',', $ids).');' .
'UPDATE '.DB::getTable('albums').' SET album_image_count = album_image_count + '.$images_affected.' WHERE album_id=:album_id;'
);
$db->bind(':album_id', $to);
@ -226,27 +226,27 @@ class Album {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function addImage($album_id, $id) {
return self::addImages($album_id, array($id));
}
public static function addImages($album_id, $ids) {
// $album_id can be null.. Remember the user stream
if(!is_array($ids) or count($ids) == 0) {
throw new AlbumException('Expecting array values, '.gettype($values).' given in ' . __METHOD__, 100);
}
try {
// Get the images
$images = Image::getMultiple($ids, true);
// Get the albums
$albums = [];
foreach($images as $k => $v) {
if($v['album']['id'] and $v['album']['id'] !== $album_id) {
$album_k = $v['album']['id'];
@ -256,7 +256,7 @@ class Album {
$albums[$album_k][] = $v['id'];
}
}
$db = DB::getInstance();
$db->query('UPDATE `'.DB::getTable('images').'` SET `image_album_id`=:image_album_id WHERE `image_id` IN ('.implode(',', $ids).')');
$db->bind(':image_album_id', $album_id);
@ -282,9 +282,9 @@ class Album {
} catch(Exception $e) {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function update($id, $values) {
if(array_key_exists('description', $values)) {
G\nullify_string($values['description']);
@ -295,29 +295,29 @@ class Album {
throw new AlbumException($e->getMessage(), 400);
}
}
// Delete album, return the number of deleted images
public static function delete($id) {
try {
// Get the user id
$user_id = DB::get('albums', ['id' => $id])[0]['album_user_id'];
// Get album
$album = self::getSingle($id);
if(!$album) return false;
// Delete album, the easy part
$delete = DB::delete('albums', ['id' => $id]);
if(!$delete) return false;
// Delete album images
$db = DB::getInstance();
$db->query('SELECT image_id FROM ' . DB::getTable('images') . ' WHERE image_album_id=:image_album_id');
$db->bind(':image_album_id', $id);
$album_image_ids = $db->fetchAll();
// Delete the files
$images_deleted = 0;
foreach($album_image_ids as $k => $v) {
@ -325,15 +325,15 @@ class Album {
$images_deleted++;
}
}
// Update user
$user = User::getSingle($user_id, 'id');
$user_updated_counts = [
'album_count' => '-1',
'image_count' => '-' . $images_deleted
];
DB::increment('users', $user_updated_counts, ['id' => $user_id]);
DB::increment('users', $user_updated_counts, ['id' => $user_id]);
// Track stats
Stat::track([
'action' => 'delete',
@ -341,14 +341,14 @@ class Album {
'value' => '-1',
'date_gmt' => $album['date_gmt']
]);
return $images_deleted;
} catch(Exception $e) {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function deleteMultiple($ids) {
if(!is_array($ids)) {
throw new AlbumException('Expecting array argument, ' . gettype($ids) . ' given in ' . __METHOD__, 100);
@ -359,7 +359,7 @@ class Album {
}
return $affected;
}
public static function updateImageCount($id, $counter=1, $operator='+') {
try {
$query = 'UPDATE `'.DB::getTable('albums').'` SET `album_image_count` = ';
@ -378,7 +378,7 @@ class Album {
throw new AlbumException($e->getMessage(), 400);
}
}
public static function fill(&$album, &$user=[]) {
$album['id_encoded'] = $album['id'] ? encodeID($album['id']) : NULL;
if($user['id'] !== NULL) {
@ -387,6 +387,7 @@ class Album {
}
$album['url'] = $album['id'] == NULL ? User::getUrl($user['username']) : self::getUrl($album['id_encoded']);
}
$album['name_html'] = G\safe_html($album['name']);
if($album['privacy'] == NULL) {
$album['privacy'] = "public";
}
@ -404,7 +405,7 @@ class Album {
$album['privacy_notes'] = NULL;
break;
}
$private_str = _s('Private');
$privacy_to_label = [
'public' => _s('Public'),
@ -412,51 +413,51 @@ class Album {
'private_but_link' => $private_str . '/' . _s('Link'),
'password' => $private_str . '/' . _s('Password'),
];
$album['privacy_readable'] = $privacy_to_label[$album['privacy']];
$album['name_with_privacy_readable'] = $album['name'] . ' (' . $album['privacy_readable'] . ')';
$album['name_with_privacy_readable_html'] = G\safe_html($album['name_with_privacy_readable']);
$album['name_truncated'] = G\truncate($album['name'], 28);
$album['name_truncated_html'] = G\safe_html($album['name_truncated']);
if(!empty($user)) {
User::fill($user);
}
}
public static function formatArray($dbrow, $safe=FALSE) {
try {
$output = DB::formatRow($dbrow);
self::fill($output, $output['user']);
self::fill($output, $output['user']);
$output['views_label'] = _n('view', 'views', $output['views']);
$output['how_long_ago'] = time_elapsed_string($output['date_gmt']);
if($output['images_slice']) {
foreach($output['images_slice'] as $k => $v) {
$output['images_slice'][$k] = Image::formatArray($output['images_slice'][$k]);
$output['images_slice'][$k]['flag'] = $output['images_slice'][$k]['nsfw'] ? 'unsafe' : 'safe';
}
}
if($safe) {
unset($output['id'], $output['privacy_extra']);
unset($output['user']['id']);
}
return $output;
} catch(Excepton $e) {
throw new ImageException($e->getMessage(), 400);
}
}
public static function checkPassword($password, $user_password) {
return G\timing_safe_compare($password, $user_password);
}
public static function storeUserPasswordHash($album_id, $user_password) {
$_SESSION['password']['album'][$album_id] = password_hash($user_password, PASSWORD_BCRYPT);
}
public static function checkSessionPassword($album=[]) {
$user_password_hash = $_SESSION['password']['album'][$album['id']];
if(!isset($user_password_hash) || !password_verify($album['password'], $user_password_hash)) {
@ -465,32 +466,32 @@ class Album {
}
return TRUE;
}
// Handle album creation flood
protected static function handleFlood() {
$logged_user = Login::getUser();
if(!$logged_user or $logged_user['is_admin']) {
$logged_user = Login::getUser();
if(!$logged_user or $logged_user['is_admin']) {
return FALSE;
}
$flood_limit = [
'minute' => 20,
'hour' => 200,
'day' => 400,
'week' => 2000,
'month' => 10000
];
try {
$flood_limit = [
'minute' => 20,
'hour' => 200,
'day' => 400,
'week' => 2000,
'month' => 10000
];
try {
$db = DB::getInstance();
$flood_db = $db->queryFetchSingle(
"SELECT
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MINUTE), 1, NULL)) AS minute,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 HOUR), 1, NULL)) AS hour,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 DAY), 1, NULL)) AS day,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 WEEK), 1, NULL)) AS week,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MONTH), 1, NULL)) AS month
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MINUTE), 1, NULL)) AS minute,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 HOUR), 1, NULL)) AS hour,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 DAY), 1, NULL)) AS day,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 WEEK), 1, NULL)) AS week,
COUNT(IF(album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MONTH), 1, NULL)) AS month
FROM ".DB::getTable('albums')." WHERE album_user_id='" . $logged_user['id'] . "' AND album_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MONTH)");
} catch(Exception $e) {} // Silence
$is_flood = FALSE;
$flood_by = '';
foreach(['minute', 'hour', 'day', 'week', 'month'] as $v) {
@ -519,11 +520,11 @@ class Album {
}
return ['flood' => TRUE, 'limit' => $flood_limit[$flood_by], 'count' => $flood_db[$flood_by], 'by' => $flood_by];
}
return FALSE;
}
}
class AlbumException extends Exception {}
class AlbumException extends Exception {}

View file

@ -66,4 +66,4 @@ class Confirmation {
}
}
class ConfirmationException extends Exception {}
class ConfirmationException extends Exception {}

View file

@ -167,4 +167,4 @@ class DB extends G\DB {
}
class DBException extends Exception {}
class DBException extends Exception {}

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -24,28 +24,31 @@ class Ip_ban {
$args = array_merge([
'ip' => G\get_client_ip()
], $args);
$db = DB::getInstance();
$query = 'SELECT * FROM ' . DB::getTable('ip_bans') . ' WHERE ';
if($args['id']) {
$query = 'SELECT * FROM ' . DB::getTable('ip_bans') . ' WHERE ip_ban_id = :id';
$query .= 'ip_ban_id = :id;';
} else {
$query = 'SELECT * FROM ' . DB::getTable('ip_bans') . ' WHERE ip_ban_ip = :ip AND (ip_ban_expires_gmt > :now OR ip_ban_expires_gmt IS NULL) ORDER BY ip_ban_id DESC;';
$query .= ':ip LIKE ip_ban_ip AND (ip_ban_expires_gmt > :now OR ip_ban_expires_gmt IS NULL) ORDER BY ip_ban_id DESC;'; // wilcard are stored as % but displayed as *
}
$db->query($query);
if($args['id']) {
$db->bind(':id', $args['id']);
} else {
$db->bind(':ip', $args['ip']);
$db->bind(':now', G\datetimegmt());
}
$banned_ip = $db->fetchSingle();
if($banned_ip) {
$banned_ip = DB::formatRow($banned_ip, 'ip_ban');
return $banned_ip;
$ip_ban = $db->fetchSingle();
if($ip_ban) {
$ip_ban = DB::formatRow($ip_ban, 'ip_ban');
self::fill($ip_ban);
return $ip_ban;
} else {
return false;
}
@ -53,14 +56,16 @@ class Ip_ban {
throw new Ip_banException($e->getMessage(), 400);
}
}
public static function getAll() {
try {
$ip_bans_raw = DB::get('ip_bans', 'all');
$ip_bans = [];
if($ip_bans_raw) {
foreach($ip_bans_raw as $ip_ban) {
$ip_bans[$ip_ban['ip_ban_id']] = DB::formatRow($ip_ban, 'ip_ban');
$idx = $ip_ban['ip_ban_id'];
$ip_bans[$idx] = DB::formatRow($ip_ban, 'ip_ban');
self::fill($ip_bans[$idx]);
}
}
return $ip_bans;
@ -68,7 +73,7 @@ class Ip_ban {
throw new Ip_banException($e->getMessage(), 400);
}
}
public static function delete($args=[]) {
try {
return DB::delete('ip_bans', $args);
@ -76,23 +81,49 @@ class Ip_ban {
throw new Ip_banException($e->getMessage(), 400);
}
}
public static function update($where=[], $values=[]) {
try {
if($values['ip']) {
$values['ip'] = str_replace('*', '%', $values['ip']);
}
return DB::update('ip_bans', $values, $where);
} catch(Exception $e) {
throw new Ip_banException($e->getMessage(), 400);
}
}
public static function insert($args=[]) {
try {
$args['ip'] = str_replace('*', '%', $args['ip']);
return DB::insert('ip_bans', $args);
} catch(Exception $e) {
throw new Ip_banException($e->getMessage(), 400);
}
}
public static function fill(&$ip_ban) {
$ip_ban['ip'] = str_replace('%', '*', $ip_ban['ip']);
}
public static function validateIP($ip, $wilcards=TRUE) {
$validate = TRUE;
if($wilcards) {
$base_ip = str_replace('*', '0', $ip);
if(!G\is_valid_ip($ip) && !G\is_valid_ip($base_ip)) {
$validate = FALSE;
}
} else {
if(!G\is_valid_ip($ip)) {
$validate = FALSE;
}
}
if(!$validate) {
throw new Ip_banException('Invalid IP address');
}
return TRUE;
}
}
class Ip_banException extends Exception {}

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -19,78 +19,78 @@ namespace CHV;
use G, Exception;
class Listing {
protected static $valid_types = ['images', 'albums', 'users'];
protected static $valid_sort_types = ['date', 'size', 'views', 'id', 'image_count'];
protected static $valid_sort_types = ['date', 'size', 'views', 'id', 'image_count', 'name'];
// Set the type of list
public function setListing($listing) {
$this->listing = $listing;
}
// Sets the type of resource being listed
public function setType($type) {
$this->type = $type;
}
// Sets the offset (sql> LIMIT offset,limit)
public function setOffset($offset) {
$this->offset = intval($offset);
}
public function setParamsHidden($params) {
$this->params_hidden = $params;
}
// Sets the limit (sql> LIMIT offset,limit)
public function setLimit($limit) {
$this->limit = intval($limit);
}
public function setItemsPerPage($count) {
$this->items_per_page = intval($count);
}
// Sets the sort type (sql> SORT BY sort_type)
public function setSortType($sort_type) {
$this->sort_type = $sort_type == 'date' ? 'id' : $sort_type;
}
// Sets the sort order (sql> DESC | ASC)
public function setSortOrder($sort_order) {
$this->sort_order = $sort_order;
}
// Sets the WHERE clause
public function setWhere($where) {
$this->where = !empty($where) ? $where : NULL;
}
// Sets the owner id of the content, usefull to add privacy
public function setOwner($user_id) {
$this->owner = $user_id;
}
// Sets the user id of the request, usefull to add privacy
public function setRequester($user) {
$this->requester = $user;
}
// Sets the category
public function setCategory($category) {
$this->category = (int)$category;
}
// Sets the privacy layer of this listing
public function setPrivacy($privacy) {
$this->privacy = $privacy;
}
// Sets the tools available for this listing (only if applies)
public function setTools($tools=[]) {
$this->tools = $tools;
}
public function bind($param, $value, $type = null) {
$this->binds[] = array(
'param' => $param,
@ -98,11 +98,11 @@ class Listing {
'type' => $type
);
}
public function getTotals($bool) {
$this->get_totals = (bool) $bool;
}
/**
* Do the thing
* @Exeption 4xx
@ -112,13 +112,13 @@ class Listing {
$this->validateInput();
$tables = DB::getTables();
if(empty($this->requester)) {
$this->requester = Login::getUser();
} else if(!is_array($this->requester)) {
$this->requester = User::getSingle($this->requester, 'id');
}
$joins = [
// Get image + storage + parent album + user uploader
'images' => [
@ -132,11 +132,11 @@ class Listing {
'users' => 'LEFT JOIN '.$tables['users'].' ON '.$tables['albums'].'.album_user_id = '.$tables['users'].'.user_id'
]
];
if($this->type == 'users' && $this->sort_type == 'views') {
$this->sort_type = 'content_views';
}
// Params hidden handler. Introduced to avoid stupid route.json.php cloning
// Same level content clauses (it won't help to filter joined tables)
if(!is_null($this->params_hidden)) {
@ -159,12 +159,12 @@ class Listing {
// We are getting clauser!.. got it? nvm...
if(!empty($whereClauses)) {
$whereClauses = join(' AND ', $whereClauses);
$this->where = (empty($this->where) ? 'WHERE ' : ' AND ') . $whereClauses;
$this->where = (empty($this->where) ? 'WHERE ' : ($this->where . ' AND ')) . $whereClauses;
}
}
$type_singular = DB::getFieldPrefix($this->type);
// Attempt to add explicit clauses
if(!empty($this->where)) {
$where_clauses = explode(' ', str_ireplace('WHERE ', NULL, $this->where));
@ -174,7 +174,7 @@ class Listing {
$field_prefix = explode('_', $clause, 2)[0]; // field prefix (singular)
$table = DB::getTableFromFieldPrefix($field_prefix); // image -> chv_images
$table_prefix = G\get_app_setting('db_table_prefix');
$table_key = !empty($table_prefix) ? G\str_replace_first($table_prefix, NULL, $table) : $table;
$table_key = !empty($table_prefix) ? G\str_replace_first($table_prefix, NULL, $table) : $table;
if(array_key_exists($table_key, $tables)) {
$where_arr[] = $table . '.' . $clause;
} else {
@ -199,26 +199,31 @@ class Listing {
// Privacy layer
if(!$this->requester['is_admin'] && in_array($this->type, ['images', 'albums', 'users']) && ((!$this->owner || !$this->requester) || $this->owner !== $this->requester['id'])) {
if(empty($this->where)) {
$this->where = 'WHERE ';
} else {
$this->where .= ' AND ';
}
$nsfw_off = $this->requester ? !$this->requester['show_nsfw_listings'] : !getSetting('show_nsfw_in_listings');
switch($this->type) {
case 'images':
if($nsfw_off) {
$this->where .= $tables['images'].'.image_nsfw = 0 AND ';
$nsfw_off_clause = $tables['images'].'.image_nsfw = 0';
if($this->requester) {
$this->where .= '(' . $nsfw_off_clause . ' OR (' . $tables['images'] . '.image_nsfw = 1 AND ' . $tables['images'] . '.image_user_id = ' . $this->requester['id'] . ')) AND ';
} else {
$this->where .= $nsfw_off_clause . ' AND ';
}
}
break;
case 'users':
$this->where .= $tables['users'].'.user_is_private = 0';
break;
}
if($this->type !== 'users') {
if(getSetting('website_privacy_mode') == 'public' || $this->privacy == 'private_but_link' || getSetting('website_content_privacy_mode') == 'default') {
$this->where .= '(' . $tables['albums'].'.album_privacy NOT IN';
@ -231,24 +236,23 @@ class Listing {
$this->where .= (!$this->requester ? ' IS NULL' : '='.$this->requester['id']) . ')';
} else {
$injected_requester = !$this->requester['id'] ? 0 : $this->requester['id'];
$this->where .= '(' . $tables['albums'].'.album_user_id = '.$injected_requester;
$this->where .= '(' . $tables['albums'].'.album_user_id = '.$injected_requester;
$this->where .= $this->type == 'albums' ? ')' : (' OR ' . $tables['images'].'.image_user_id = '.$injected_requester . ')');
}
}
}
if(!empty($this->where)) {
$this->where = "\n" . $this->where;
}
$order_by = "\n" . 'ORDER BY ' . DB::getTableFromFieldPrefix($type_singular) . '.' . $type_singular . '_' . $this->sort_type . ' ' . strtoupper($this->sort_order);
$limit = "\n" . 'LIMIT ' . $this->offset . ',' . ($this->limit + 1);
$base_table = $tables[$this->type];
// Normal query
if(empty($joins[$this->type])) {
$query = 'SELECT * FROM ' . $base_table;
@ -267,7 +271,7 @@ class Listing {
reset($joins);
$join_tables = [key($joins)];
}
$join = NULL;
foreach($join_tables as $join_table) {
if(!empty($joins[$this->type][$join_table])) {
@ -275,27 +279,26 @@ class Listing {
unset($joins[$this->type][$join_table]);
}
}
// Get rid of the original Exif data (for listings)
$null_db = $this->type == 'images' ? ', NULL as image_original_exifdata ' : NULL;
$query = 'SELECT * ' . $null_db . 'FROM (SELECT * FROM ' . $base_table . $join . $this->where . $order_by . $limit . ') ' . $base_table;
if(!empty($joins[$this->type])) {
$query .= "\n" . implode("\n", $joins[$this->type]);
}
$query .= $order_by;
}
try {
$db = DB::getInstance();
$db->query($query);
if(is_array($this->binds)) {
foreach($this->binds as $bind) {
$db->bind($bind['param'], $bind['value'], $bind['type']);
}
}
$this->output = $db->fetchAll();
$this->output_count = $db->rowCount();
$this->has_page_next = $db->rowCount() > $this->limit;
@ -304,7 +307,7 @@ class Listing {
}
$this->output = G\safe_html($this->output);
$this->nsfw = FALSE;
$this->output_assoc = [];
$formatfn = 'CHV\\' . ucfirst(substr($this->type, 0, -1));
foreach($this->output as $k => $v) {
@ -314,18 +317,18 @@ class Listing {
$this->nsfw = TRUE;
}
}
$this->sfw = !$this->nsfw;
$this->has_page_prev = $this->offset > 0;
} catch(Exception $e) {
throw new ListingException($e->getMessage(), 400);
}
// Get album slices and stuff
if($this->type == 'albums' and $this->output) {
$album_slice_qry_tpl = 'SELECT * FROM ' . $tables['images'] . ' LEFT JOIN ' . $tables['storages'] . ' ON ' . $tables['images'] . '.image_storage_id = ' . $tables['storages'] . '.storage_id WHERE ' . $tables['images'] . '.image_album_id=%ALBUM_ID% ORDER BY ' . $tables['images'] . '.image_id ASC LIMIT 0,5';
$albums_slice_qry_arr = [];
$albums_mapping = [];
@ -340,9 +343,9 @@ class Listing {
// Album mapping
$albums_mapping[$album['album_id']] = $k;
}
$albums_slice_qry = '(' . implode(') ' . "\n" . 'UNION ALL ' . "\n" . '(', $albums_slice_qry_arr) . ')';
try {
$db->query($albums_slice_qry);
$albums_slice = $db->fetchAll();
@ -360,17 +363,9 @@ class Listing {
}
}
// Get user counts
/*if($this->type == 'users') {
if($this->sort_type == 'image_count') {
G\key_asort($this->output, 'user_image_count');
$this->output = $this->sort_order == 'desc' ? array_reverse($this->output) : $this->output;
}
}*/
}
public static function getTabs($args=[], $expanded=FALSE) {
$default = [
'list' => TRUE,
@ -381,9 +376,9 @@ class Listing {
'tools_available' => [],
];
$args = array_merge($default, $args);
// Fix some stuff
// Fix lazy basenames
if(strpos($args['basename'], G\get_base_url()) !== FALSE) {
$args['basename'] = G\str_replace_first(G\get_base_url(), NULL, $args['basename']);
$args['basename'] = G\str_replace_first(G\get_base_url() .'/', NULL, $args['basename']);
}
// Semantics -> trending | popular | recent
$semantics = [
@ -398,10 +393,10 @@ class Listing {
'sort' => 'views_desc',
],
];
// Criteria -> images | albums | users
// Criteria -> [CONTENT TABS]
$criterias = [
$criterias = [
'top-users' => [
'label' => _s('Top users'),
'sort' => 'image_count_desc',
@ -449,12 +444,12 @@ class Listing {
'albums' => [
'label' => _n('Album', 'Albums', 2),
'content' => 'albums',
],
],
];
$listings = array_merge($listings, $semantics);
$parameters = $listings[$args['listing']];
if(is_array($args['exclude_criterias'])) {
foreach($args['exclude_criterias'] as $exclude) {
if(array_key_exists($exclude, $criterias)) {
@ -462,10 +457,10 @@ class Listing {
}
}
}
// Content -> most recent | oldest | most viewed | most liked
// Content -> [CRITERIA TABS]
$contents = [
$contents = [
'images' => [
'label' => _n('Image', 'Images', 2),
],
@ -477,11 +472,10 @@ class Listing {
]
];
$i = 0;
$hasCurrent = FALSE;
$currentKey = NULL;
foreach(($parameters['content'] == 'all' ? $contents : ($parameters['semantic'] ? $semantics : $criterias)) as $k => $v) {
if($parameters['content'] == 'all') {
$content = $k;
$id = 'list-' . $args['listing'] . '-' . $content; // list-popular-images
@ -517,7 +511,7 @@ class Listing {
}
}
$query_append = ($basename ? '/' : NULL) . '?' . http_build_query($params);
$current = isset($args['REQUEST']['sort']) ? $args['REQUEST']['sort'] == $v['sort'] : FALSE;
if($i==0 && !$current) {
$current = !$args['REQUEST']['sort'];
@ -537,19 +531,23 @@ class Listing {
'type' => $content,
'url' => G\get_base_url($basename . $query_append)
];
if($args['tools_available'] && !G\Handler::getCond('allowed_to_delete_content') && array_key_exists('delete', $args['tools_available'])) {
unset($args['tools_available']['delete']);
}
if($args['tools_available'] == NULL) {
unset($tab['tools_available']);
}
if($args['params_hidden']) {
$tab['params_hidden'] = http_build_query($args['params_hidden']);
}
$tabs[] = $tab;
unset($id, $params, $basename, $query_append, $content, $current);
$i++;
}
if(is_null($currentKey)) {
if($parameters['content'] == 'all') {
foreach($tabs as $k => &$v) {
@ -564,36 +562,36 @@ class Listing {
$tabs[0]['current'] = TRUE;
}
}
if($expanded) {
return ['tabs' => $tabs, 'currentKey' => $currentKey];
}
return $tabs;
}
/**
* validate_input aka "first stage validation"
* This checks for valid input source data before exec
* @Exception 1XX
*/
protected function validateInput() {
self::setValidSortTypes();
if(empty($this->offset)) {
$this->offset = 0;
}
// Missing values
$check_missing = ['type', 'offset', 'limit', 'sort_type', 'sort_order'];
missing_values_to_exception($this, 'CHV\ListingException', $check_missing, 100);
// Validate type
if(!in_array($this->type, self::$valid_types)) {
throw new ListingException('Invalid $type "'.$this->type.'"', 110);
}
// Validate limits
if($this->offset == 0 && $this->limit == 0) {
throw new ListingException('$offset and $limit are equal to 0 (zero)', 120);
@ -601,56 +599,56 @@ class Listing {
if($this->offset < 0 || $this->limit < 0) {
throw new ListingException('Limit integrity violation', 121);
}
// Validate sort type
if(!in_array($this->sort_type, self::$valid_sort_types)) {
throw new ListingException('Invalid $sort_type "'.$this->sort_type.'"', 130);
}
// Validate sort order
if(!preg_match('/^(asc|desc)$/', $this->sort_order)) {
throw new ListingException('Invalid $sort_order "'.$this->sort_order.'"', 140);
}
}
// Handler for all those switcheable sort options (based on on/off settings)
protected static function setValidSortTypes() {
}
public function htmlOutput($tpl_list=NULL) {
if(!is_array($this->output)) {
return;
}
if(is_null($tpl_list)) {
$tpl_list = $this->type ?: 'images';
}
$directory = new \RecursiveDirectoryIterator(G_APP_PATH_THEME . 'tpl_list_item/');
$iterator = new \RecursiveIteratorIterator($directory);
$regex = new \RegexIterator($iterator, '/^.+\.php$/i', \RecursiveRegexIterator::GET_MATCH);
$filelist = array();
$list_item_template = [];
foreach($regex as $file) {
$filelist = array_merge($filelist, $file);
}
$list_item_template = array();
foreach($filelist as $file) {
$file = G\forward_slash($file);
$key = preg_replace('/\\.[^.\\s]{3,4}$/', '', str_replace(G_APP_PATH_THEME, "", $file));
$file = G\forward_slash($file[0]);
$key = preg_replace('/\\.[^.\\s]{3,4}$/', '', str_replace(G_APP_PATH_THEME, NULL, $file));
$override_file = G\str_replace_first(G_APP_PATH_THEME, G_APP_PATH_THEME . 'overrides/', $file);
if(is_readable($override_file)) {
$file = $override_file;
}
ob_start();
require($file);
$file_get_contents = ob_get_contents();
ob_end_clean();
$list_item_template[$key] = $file_get_contents;
}
$html_output = '';
$tpl_list = preg_replace('/s$/', '', $tpl_list);
foreach($this->output as $row) {
switch($tpl_list) {
case 'image':
@ -668,24 +666,24 @@ class Listing {
$Class = 'CHV\User';
break;
}
$item = $Class::formatArray($row);
$tools = $this->tools ?: NULL;
if(function_exists('get_peafowl_item_list')) {
$render = 'get_peafowl_item_list';
} else {
$render = 'CHV\Render\get_peafowl_item_list';
}
$html_output .= $render($tpl_list, $item, $list_item_template, Login::getUser()['id'], $tools);
}
return $html_output;
}
public static function getAlbumHtml($album_id, $template='user/albums') {
try {
$album = new Listing;
@ -702,35 +700,35 @@ class Listing {
throw new ListingException($e->getMessage(), 400);
}
}
public static function getParams($json_call=false) {
self::setValidSortTypes();
$items_per_page = getSetting('listing_items_per_page');
$listing_pagination_mode = getSetting('listing_pagination_mode');
$params = [];
$params['items_per_page'] = $items_per_page;
if(!$json_call and $listing_pagination_mode == 'endless') {
$params['page'] = max(intval($_REQUEST['page']), 1);
$params['limit'] = $params['items_per_page'] * $params['page'];
$params['offset'] = 0;
$params['offset'] = 0;
// Switch endless to classic if we are dealing with large listings (from GET)
if($params['limit'] > getSetting('listing_safe_count')) {
$listing_pagination_mode = 'classic';
Settings::setValue('listing_pagination_mode', $listing_pagination_mode );
}
}
if(isset($_REQUEST['pagination']) or $listing_pagination_mode == 'classic') { // Static single page display
$params['page'] = $_REQUEST['page'] ? intval($_REQUEST['page']) - 1 : 0;
$params['limit'] = $params['items_per_page'];
$params['offset'] = $params['page']*$params['limit'];
}
if($json_call) {
$params = array_merge($params, [
'page' => $_REQUEST['page'] ? $_REQUEST['page'] - 1 : 0,
@ -738,20 +736,20 @@ class Listing {
]);
$params['offset'] = $params['page'] * $params['limit'] + ($_REQUEST['offset'] ? $_REQUEST['offset'] : 0);
}
$default_sort = [
0 => 'date',
1 => 'desc'
];
preg_match('/(.*)_(asc|desc)/', $_REQUEST['sort'], $sort_matches);
$params['sort'] = array_slice($sort_matches, 1);
// Empty sort
if(count($params['sort']) !== 2) {
$params['sort'] = $default_sort;
}
// Check sort type
if(!in_array($params['sort'][0], self::$valid_sort_types)) {
$params['sort'][0] = $default_sort[0];
@ -760,11 +758,11 @@ class Listing {
if(!in_array($params['sort'][1], ['asc', 'desc'])) {
$params['sort'][1] = $default_sort[1];
}
return $params;
}
}
class ListingException extends Exception {}
class ListingException extends Exception {}

View file

@ -26,7 +26,7 @@ class Lock {
protected $api = 'default';
function __construct($lock=NULL) {
self::$path = CHV_APP_PATH_CONTENT . 'locks/';
self::$path = CHV_APP_PATH_CONTENT_LOCKS;
if(strlen($lock) > 0) {
$this->setLock($lock);
}
@ -152,7 +152,7 @@ class Lock {
}
break;
default:
if(!@unlink($lock_file)) {
if(file_exists($lock_file) && !@unlink($lock_file)) {
throw new LockException('Unable to destroy ' . $this->lock . ' lock in ' . $method);
}
break;

View file

@ -335,4 +335,4 @@ class Login {
}
class LoginException extends Exception {}
class LoginException extends Exception {}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -19,7 +19,7 @@ namespace CHV;
use G, Exception;
class Page {
static $table_fields = [
'url_key',
'type',
@ -35,7 +35,7 @@ class Page {
'attr_rel',
'sort_display'
];
public static function getSingle($var, $by='url_key') {
try {
$page = self::get([$by => $var], NULL, 1);
@ -44,7 +44,7 @@ class Page {
throw new PageException($e->getMessage(), 400);
}
}
public static function getAll($args=[], $sort=[]) {
try {
$page = self::get($args, $sort, NULL);
@ -53,7 +53,7 @@ class Page {
throw new PageException($e->getMessage(), 400);
}
}
public static function get($values, $sort=[], $limit=NULL) {
try {
$get = DB::get('pages', $values, 'AND', $sort, $limit);
@ -71,15 +71,15 @@ class Page {
throw new PageException($e->getMessage(), 400);
}
}
public static function getPath($var=NULL) {
return CHV_PATH_CONTENT_PAGES . (is_string($var) ? $var : NULL);
}
public static function getFields() {
return self::$table_fields;
}
public static function update($id, $values) {
try {
return DB::update('pages', $values, array('id'=>$id));
@ -87,17 +87,17 @@ class Page {
throw new PageException($e->getMessage(), 400);
}
}
public static function writePage($args=[]) {
if(!$args['file_path']) {
throw new PageException("Missing file_path argument", 100);
}
$file_path = self::getPath($args['file_path']);
$file_dirname = dirname($file_path);
$contents = !empty($args['contents']) ? $args['contents'] : NULL;
if(!is_dir($file_dirname)) {
$base_perms = fileperms(self::getPath());
$old_umask = umask(0);
@ -108,12 +108,12 @@ class Page {
throw new PageException(_s("Can't create %s destination dir", $file_dirname), 500);
}
}
// Skip empting an empty file
if(file_exists($file_path) and $contents == NULL and filesize($file_path) == 0) {
return TRUE;
}
$fh = @fopen($file_path, 'w');
if(!$fh or fwrite($fh, $contents) === FALSE) { // Ternary if the write is zero (null)
$st = FALSE;
@ -121,15 +121,15 @@ class Page {
$st = TRUE;
}
@fclose($fh);
if(!$st) {
throw new PageException(_s("Can't open %s for writing", $file_path), 501);
}
return TRUE;
}
public static function fill(&$page) {
$page['title_html'] = $page['title'];
$type_tr = [
@ -146,12 +146,12 @@ class Page {
'default' => 'default/',
'user' => NULL // base
];
$file_basename = $page['url_key'] . '.' . (G\get_app_setting('disable_php_pages') ? 'html' : 'php');
$file_basename = $page['url_key'] . '.php';
foreach($filepaths as $k => $v) {
if($k == 'default') {
//$file_basename = $page['url_key'] . '.php';
} else {
}
if(is_readable(self::getPath($v) . $file_basename)) {
$page['file_path'] = $v . $file_basename;
@ -186,13 +186,13 @@ class Page {
$page['title_html'] = '<span class="btn-icon ' . $page['icon'] . '"></span> ' . $page['title_html'];
}
}
// Format get row return
protected static function formatRowValues(&$values, $row=[]) {
$values = DB::formatRow(count($row) > 0 ? $row : $values);
self::fill($values);
}
public static function insert($values=[]) {
if(!is_array($values)) {
throw new PageException('Expecting array, '.gettype($values).' given in ' . __METHOD__, 100);
@ -203,7 +203,7 @@ class Page {
throw new PageException($e->getMessage(), 400);
}
}
public static function delete($page) {
try {
if(!is_array($page)) {

View file

@ -227,4 +227,4 @@ class Queue {
}
}
class QueueException extends Exception {}
class QueueException extends Exception {}

View file

@ -97,4 +97,4 @@ class Requestlog {
}
}
class RequestlogException extends Exception {}
class RequestlogException extends Exception {}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -19,15 +19,15 @@ namespace CHV;
use G, Exception;
class Search {
public static $excluded = ['storage', 'ip'];
public function __construct() {
$this->DBEngine = DB::queryFetchSingle("SHOW TABLE STATUS WHERE Name = '".DB::getTable('images')."';")['Engine'];
}
public function build() {
// Validate type
if(!in_array($this->type, ['images', 'albums', 'users'])) {
throw new SearchException("Invalid search type in ".__METHOD__, 100);
@ -45,10 +45,10 @@ class Search {
$this->q .= ' ' . (!is_null($v) ? $v.':' : '') . $this->request[$k];
}
}
// Clean q
$this->q = trim(preg_replace(['#\"+#', '#\'+#'], ['"', '\''], $this->q));
$search_op = $this->handleSearchOperators($this->q, $this->requester['is_admin'] == true);
// Make q pretty
@ -59,20 +59,20 @@ class Search {
if($this->q) {
$this->q = preg_replace('/\s+/', ' ', trim($this->q));
}
// Get the full text match query
$q_match = $this->q; // Note... Why MyISAM has issues with exclusions like -700 ?
$seach_binds = [];
foreach($search_op['named'] as $v) {
$q_match = trim(preg_replace('/\s+/', ' ', str_replace($v, '', $q_match)));
$op = explode(':', $v);
if(!in_array($op[0], ['category', 'ip', 'storage'])) {
continue;
}
switch($this->type) {
case 'images':
switch($op[0]) {
@ -80,16 +80,12 @@ class Search {
$search_op_wheres[] = 'category_url_key = :category';
$seach_binds[] = ['param' => ':category', 'value' => $op[1]];
break;
case 'ip':
// Validate input IP
/*if(!G\is_valid_ip($op[1])) {
continue;
}*/
$search_op_wheres[] = 'image_uploader_ip = :ip';
$search_op_wheres[] = 'image_uploader_ip LIKE REPLACE(:ip, "*", "%")';
$seach_binds[] = ['param' => ':ip', 'value' => G\str_replace_first('ip:', NULL, $this->q)];
break;
case 'storage':
if(!filter_var($op[1], FILTER_VALIDATE_INT) and !in_array($op[1], ['local', 'external'])) {
break;
@ -99,11 +95,11 @@ class Search {
'local' => 'IS NULL',
'external' => 'IS NOT NULL'
];
if(filter_var($op[1], FILTER_VALIDATE_INT)) {
$seach_binds[] = ['param' => ':storage_id', 'value' => $op[1]];
}
$search_op_wheres[] = 'image_storage_id ' . ($storage_operator_clause[$op[1]]);
break;
@ -118,10 +114,10 @@ class Search {
}
break;
}
}
if($q_match) {
$q_value = $q_match;
if($this->DBEngine == 'InnoDB') {
@ -129,13 +125,13 @@ class Search {
}
$seach_binds[] = ['param' => ':q', 'value' => $q_value];
}
$this->binds = $seach_binds;
$this->op = $search_op;
$wheres = NULL;
$q_replacement = $this->DBEngine == 'InnoDB' ? "':q'" : ':q';
switch($this->type) {
case 'images':
if($q_match) {
@ -149,39 +145,63 @@ class Search {
if(!$seach_binds) {
$wheres = 'WHERE album_id < 0';
} else {
$wheres = ($op[0] == 'ip' ? 'album_creation_ip = :ip' : 'WHERE MATCH(`album_name`,`album_description`) AGAINST(:q)');
$wheres = ($op[0] == 'ip' ? 'album_creation_ip LIKE REPLACE(:ip, "*", "%")' : 'WHERE MATCH(`album_name`,`album_description`) AGAINST(:q)');
}
break;
case 'users':
if(!$seach_binds) {
$wheres = 'WHERE user_id < 0';
} else {
$wheres = ($op[0] == 'ip' ? 'user_registration_ip = :ip' : 'WHERE MATCH(`user_name`,`user_username`) AGAINST(:q)');
if($op[0] == 'ip') {
$wheres = 'user_registration_ip LIKE REPLACE(:ip, "*", "%")';
} else {
$clauses = [
'name_username' => 'WHERE MATCH(`user_name`,`user_username`) AGAINST(:q)',
'email' => '`user_email` LIKE CONCAT("%", :q, "%")',
];
if($this->requester['is_admin']) {
$pos = strpos($this->q, '@');
if ($pos !== FALSE) {
if(preg_match_all('/\s+/', $this->q)) {
$wheres = $clauses['name_username'];
if($clauses['email']) {
$wheres .= ' OR ' . $clauses['email'];
}
} else {
$wheres = $clauses['email'];
}
} else {
$wheres = $clauses['name_username'];
}
} else {
$wheres = $clauses['name_username'];
}
}
}
break;
}
$this->wheres = $wheres;
$this->display = [
'type' => $this->type,
'type'=> $this->type,
'q' => $this->q,
'd' => strlen($this->q) >= 25 ? (substr($this->q, 0, 22) . '...') : $this->q,
];
}
protected function handleSearchOperators($q, $full=true) {
$return = [];
$operators = ['any' => [], 'exact_phrases' => [], 'excluded' => [], 'named' => []];
$raw_ops = [];
$raw_regex = [
'named' => '[\S]+\:[\S]+', // take all the like:this operators
'quoted'=> '-*[\"\']+.+[\"\']+', // take all the "quoted stuff" "like" "this, one"
'spaced'=> '\S+' // Take all the space separated stuff
];
foreach($raw_regex as $k => $v) {
if($k == 'spaced') {
$q = str_replace(',', '', $q); // Don't need commas
@ -212,9 +232,9 @@ class Search {
$q = trim(preg_replace('/\s+/', ' ', str_replace($v, '', $q)));
}
}
}
return $operators;
}

View file

@ -9,27 +9,27 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
--------------------------------------------------------------------- */
namespace CHV;
use G, Exception;
class Settings {
protected static $instance;
static $settings;
static $defaults;
public function __construct() {
try {
$settings = []; // init
try {
$db_settings = DB::get('settings', 'all', NULL, ['field' => 'name', 'order' => 'asc']);
foreach($db_settings as $k => $v) {
@ -53,7 +53,7 @@ class Settings {
$settings = [];
$defaults = [];
}
if(!$db_settings) {
//throw new Exception("Can't find any DB setting. Table seems to be empty.", 400);
}
@ -72,8 +72,12 @@ class Settings {
'upload_max_image_height'=> '0',
// 1.0.9
'enable_expirable_uploads' => NULL,
// 1.0.10
'enable_user_content_delete' => 0,
'enable_plugin_route' => 1,
'sdk_pup_url' => NULL,
];
// Default listing thing
$device_to_columns = [
'phone' => 1,
@ -85,14 +89,14 @@ class Settings {
foreach($device_to_columns as $k => $v) {
$injected['listing_columns_' . $k] = $v;
}
foreach($injected as $k => $v) {
if(!array_key_exists($k, $settings)) {
$settings[$k] = $v;
$defaults[$k] = $v;
}
}
// Fixed settings
if($settings['email_mode'] == 'phpmail') {
$settings['email_mode'] = 'mail';
@ -100,21 +104,21 @@ class Settings {
if(!in_array($settings['upload_medium_fixed_dimension'], ['width', 'height'])) {
$settings['upload_medium_fixed_dimension'] = 'width';
}
// Virtual settings
$settings['listing_device_to_columns'] = [];
foreach($device_to_columns as $k => $v) {
$settings['listing_device_to_columns'][$k] = $settings['listing_columns_' . $k];
}
$settings['listing_device_to_columns']['largescreen'] = $settings['listing_columns_desktop'];
// Chevereto demo only
if(!in_array($_SERVER['SERVER_NAME'], ['demo.chevereto.com'])) {
if($settings['twitter_account'] == 'chevereto') {
$settings['twitter_account'] = NULL;
}
}
// Harcoded settings
$settings = array_merge($settings, [
// Free tier
@ -127,8 +131,8 @@ class Settings {
'username_max_length' => 16,
'username_pattern' => '^[\w]{3,16}$',
'user_password_min_length' => 6,
'user_password_max_length' => 32,
'user_password_pattern' => '^.{6,32}$',
'user_password_max_length' => 128,
'user_password_pattern' => '^.{6,128}$',
'maintenance_image' => 'default/maintenance_cover.jpg',
'ip_whois_url' => 'https://ipinfo.io/%IP',
'available_button_colors' => ['blue', 'green', 'orange', 'red', 'grey', 'black', 'white', 'default'],
@ -146,7 +150,7 @@ class Settings {
if(!$settings['active_storage']) {
$settings['active_storage'] = NULL;
}
// '' -> NULL
foreach($settings as $k => &$v) {
G\nullify_string($v);
@ -156,14 +160,14 @@ class Settings {
G\nullify_string($v);
}
unset($v);
if($settings['theme_logo_height'] > 0) {
$settings['theme_logo_height'] = (int) $settings['theme_logo_height'];
}
// Injected things due to single user mode on
if($settings['website_mode'] == 'personal') {
if(array_key_exists('website_mode_personal_routing', $settings)) { // Single user routing workaround
if(is_null($settings['website_mode_personal_routing']) or $settings['website_mode_personal_routing'] == '/') {
$settings['website_mode_personal_routing'] = '/';
@ -171,7 +175,7 @@ class Settings {
$settings['website_mode_personal_routing'] = G\get_regex_match($settings['routing_regex'], '#', $settings['website_mode_personal_routing'], 1);
}
}
if(G\is_integer($settings['website_mode_personal_uid'], ['min' => 0])) {
foreach($settings['single_user_mode_on_disables'] as $k) {
$settings[$k] = false;
@ -179,11 +183,11 @@ class Settings {
} else {
$settings['website_mode'] = 'community';
}
$settings['enable_likes'] = FALSE;
$settings['enable_followers'] = FALSE;
}
// CTA fixings
if(is_null($settings['homepage_cta_fn'])) {
$settings['homepage_cta_fn'] = 'cta-upload';
@ -191,7 +195,7 @@ class Settings {
if($settings['homepage_cta_fn'] == 'cta-link' and !G\is_url($settings['homepage_cta_fn_extra'])) {
$settings['homepage_cta_fn_extra'] = G\get_regex_match($settings['routing_regex_path'], '#', $settings['homepage_cta_fn_extra'], 1);
}
// Disabled languages handle
if(!is_null($settings['languages_disable'])) {
$languages_disable = (array) explode(',', $settings['languages_disable']);
@ -200,27 +204,27 @@ class Settings {
$languages_disable = [];
}
$settings['languages_disable'] = $languages_disable;
self::$settings = $settings;
self::$defaults = $defaults;
} catch (Exception $e) {
throw new SettingsException($e->getMessage(), 400);
}
}
public static function getInstance() {
if(is_null(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
public static function getStatic($var) {
$instance = self::getInstance();
return $instance::$$var;
}
public static function get($key=NULL) {
$settings = self::getStatic('settings');
if(!is_null($key)) {
@ -229,11 +233,11 @@ class Settings {
return $settings;
}
}
public static function getType($val) {
return ($val===0 || $val===1) ? 'bool' : 'string';
}
public static function getDefaults($key=NULL) {
$defaults = self::getStatic('defaults');
if(!is_null($key)) {
@ -242,26 +246,26 @@ class Settings {
return $defaults;
}
}
public static function getDefault($key) {
return self::getDefaults($key);
}
public static function setValues($values) {
self::$settings = $values;
}
public static function setValue($key, $value) {
$settings = self::getStatic('settings');
self::$settings[$key] = $value ?: NULL;
}
/* Multi settings update [name => value]*/
public static function update($name_values) {
try {
$query = '';
$binds = [];
$query_tpl = 'UPDATE `' . DB::getTable('settings') . '` SET `setting_value` = %v WHERE `setting_name` = %k;' . "\n";
$query_tpl = 'UPDATE `' . DB::getTable('settings') . '` SET `setting_value` = %v WHERE `setting_name` = %k;' . "\n";
$i = 0;
foreach($name_values as $k => $v) {
$query .= strtr($query_tpl, ['%v' => ':v_' . $i, '%k' => ':n_' . $i]);
@ -284,7 +288,7 @@ class Settings {
throw new SettingsException($e->getMessage(), 400);
}
}
public static function getChevereto() {
$api = 'https://chevereto.com/api/';
return [
@ -305,4 +309,4 @@ class Settings {
}
class SettingsException extends Exception {}
class SettingsException extends Exception {}

View file

@ -78,6 +78,7 @@ class Stat {
$date = new \DateTime($args['date_gmt']);
$args['date_gmt'] = $date->format('Y-m-d');
} catch(Exception $e) {
//throw new StatException($e);
throw new StatException('Invalid date_gmt value in ' . __METHOD__, 106);
}
}
@ -174,6 +175,7 @@ class Stat {
'%disk_sum' => $disk_sum_value,
'%likes' => $args['likes'],
]);
try {
DB::queryExec($sql);
} catch(Exception $e) {
@ -183,4 +185,4 @@ class Stat {
}
}
class StatException extends Exception {}
class StatException extends Exception {}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -22,46 +22,46 @@ class Upload {
// filename => name.ext
// file => /full/path/to/name.ext
// name => name
public $source;
public $uploaded;
// Sets the type of resource being uploaded
public function setType($type) {
$this->type = $type;
}
// Set source
public function setSource($source) {
$this->source = $source;
$this->type = G\is_url($this->source) ? 'url' : 'file';
}
// Set destination
public function setDestination($destination) {
$this->destination = G\forward_slash($destination);
}
// Set storage
public function setStorageId($storage_id) {
$this->storage_id = is_numeric($storage_id) ? $storage_id : NULL;
}
// Set file basename
public function setFilename($name) {
$this->name = $name;
}
// Set options
public function setOptions($options) {
$this->options = $options;
}
// Set individual option
public function setOption($key, $value) {
$this->options[$key] = $value;
}
// Default options
public static function getDefaultOptions() {
return array(
@ -71,48 +71,48 @@ class Upload {
'allowed_formats' => self::getAvailableImageFormats(), // array
);
}
/**
* Do the thing
* @Exeption 4xx
*/
public function exec() {
// Merge options
$this->options = array_merge(self::getDefaultOptions(), (array) $this->options);
$this->validateInput(); // Exception 1
$this->fetchSource(); // Exception 2
$this->validateSourceFile(); // Exception 3
if(!is_array($this->options['allowed_formats'])) {
$this->options['allowed_formats'] = explode(',', $this->options['allowed_formats']);
}
// Save the source name
$this->source_name = G\get_filename_without_extension($this->type == "url" ? $this->source : $this->source["name"]);
// Set file extension
$this->extension = $this->source_image_fileinfo["extension"];
// Workaround the $name
if(!$this->name) {
$this->name = $this->source_name;
}
// Fix conflicting starting dots (some Apache installs)
$this->name = ltrim($this->name, '.');
// Fix file extension
if(G\get_file_extension($this->name) == $this->extension) {
$this->name = G\get_filename_without_extension($this->name);
}
// Set the fixed filename
$this->fixed_filename = preg_replace('/(.*)\.(th|md|original|lg)\.([\w]+)$/', '$1.$3', $this->name . '.' . $this->extension);
// Workaround for JPEG Exif data
if($this->extension == 'jpg' and array_key_exists('exif', $this->options)) {
$this->source_image_exif = NULL;
@ -133,7 +133,7 @@ class Upload {
}
}
}
/*
* Set uploaded_file
* Local storage uploads will be allocated at the target destination
@ -143,73 +143,73 @@ class Upload {
$this->source = [
'filename' => $this->source_filename, // file.ext
'name' => $this->source_name, // file
'name' => $this->source_name, // file
'image_exif' => $this->source_image_exif, // exif-data array
'fileinfo' => G\get_image_fileinfo($this->downstream), // fileinfo array
];
// Fix image orientation
if($this->source_image_exif and $this->source_image_exif["Orientation"]) {
$this->fixImageOrientation($this->downstream, $this->source_image_exif);
}
$uploaded = @rename($this->downstream, $this->uploaded_file);
@unlink($this->downstream);
if(file_exists($this->downstream)) {
error_log("Warning: temp file " . $this->downstream . "wasn't removed.");
}
if(!$uploaded) {
throw new UploadException("Can't move temp file to its destination", 400);
}
// For some PHP environments
if(!$this->storage_id) {
@chmod($this->uploaded_file, 0644);
}
$this->uploaded = array(
'file' => $this->uploaded_file,
'filename' => G\get_filename($this->uploaded_file),
'name' => G\get_filename_without_extension($this->uploaded_file),
'fileinfo' => G\get_image_fileinfo($this->uploaded_file)
);
}
// Get available (supported) extensions
public static function getAvailableImageFormats() {
$formats = Settings::get('upload_available_image_formats');
return explode(',', $formats);
}
// Failover since v3.8.12
public static function getEnabledImageFormats() {
return Image::getEnabledImageFormats();
}
/**
* validate_input aka "first stage validation"
* This checks for valid input source data
* @Exception 1XX
*/
protected function validateInput() {
$check_missing = ["type", "source", "destination"];
missing_values_to_exception($this, "CHV\UploadException", $check_missing, 100);
// Validate $type
if(!preg_match("/^(url|file)$/", $this->type)) {
throw new UploadException('Invalid $type "'.$this->type.'"', 110);
}
// Handle flood
$flood = self::handleFlood();
if($flood) {
throw new UploadException(strtr('Flood detected. You can only upload %limit% images per %time%', ['%limit%' => $flood['limit'], '%time%' => $flood['by']]), 130);
}
// Validate $source
if($this->type == 'file') {
if(count($this->source) < 5) { // Valid $_FILES ?
@ -220,59 +220,59 @@ class Upload {
throw new UploadException("Invalid image URL", 122);
}
}
// Validate $destination
if(!is_dir($this->destination)) { // Try to create the missing directory
$base_dir = G\add_ending_slash(G_ROOT_PATH . explode('/', preg_replace('#'.G_ROOT_PATH.'#', '', $this->destination, 1))[0]);
$base_perms = fileperms($base_dir);
$old_umask = umask(0);
$make_destination = mkdir($this->destination, $base_perms, true);
chmod($this->destination, $base_perms);
umask($old_umask);
if(!$make_destination) {
throw new UploadException('$destination '.$this->destination.' is not a dir', 130);
}
}
// Can read $destination dir?
if(!is_readable($this->destination)) {
throw new UploadException("Can't read target destination dir", 131);
}
// Can write $destination dir?
if(!is_writable($this->destination)) {
throw new UploadException("Can't write target destination dir", 132);
}
// Fix $destination trailing
$this->destination = G\add_ending_slash($this->destination);
}
/**
* Fetch the $source file
* @Exception 2XX
*/
protected function fetchSource() {
// Set the downstream file
// Set the downstream file
$this->downstream = @tempnam(sys_get_temp_dir(), 'chvtemp');
if(!$this->downstream || !@is_writable($this->downstream)) {
$this->downstream = @tempnam($this->destination, 'chvtemp');
if(!$this->downstream) {
throw new UploadException("Can't get a tempnam", 200);
}
}
if($this->type == 'file') {
if($this->source['error'] !== UPLOAD_ERR_OK) {
switch($this->source['error']) {
case UPLOAD_ERR_INI_SIZE: // 1
throw new UploadException('File too big', 201);
@ -296,7 +296,7 @@ class Upload {
throw new UploadException('The upload was stopped', 201);
break;
}
}
if(!@rename($this->source['tmp_name'], $this->downstream)) {
@ -312,9 +312,9 @@ class Upload {
}
$this->source_filename = basename($this->type == "file" ? $this->source["name"] : $this->source);
}
protected function fixImageOrientation($image_filename, $exif) {
if($exif['Orientation'] == 1) return;
switch($this->extension) {
@ -335,46 +335,46 @@ class Upload {
}
imagejpeg($image, $image_filename, 90);
}
/**
* validate_source_file aka "second stage validation"
* This checks for valid input source data
* @Exception 3XX
*/
protected function validateSourceFile() {
// Nothing to do here
if(!file_exists($this->downstream)) {
throw new UploadException("Can't fetch target upload source (downstream)", 300);
}
$this->source_image_fileinfo = G\get_image_fileinfo($this->downstream);
// file info?
if(!$this->source_image_fileinfo) {
throw new UploadException("Can't get target upload source info", 310);
}
// Valid image fileinto?
if($this->source_image_fileinfo['width'] == '' || $this->source_image_fileinfo['height'] == '') {
throw new UploadException("Invalid image", 311);
}
// Available image format?
if(!in_array($this->source_image_fileinfo['extension'], self::getAvailableImageFormats())) {
throw new UploadException("Unavailable image format", 313);
}
// Enabled image format?
if(!in_array($this->source_image_fileinfo['extension'], $this->options['allowed_formats'])) {
throw new UploadException(sprintf("Disabled image format (%s)", $this->source_image_fileinfo['extension']), 314);
}
// Mime
if(!$this->isValidImageMime($this->source_image_fileinfo["mime"])) {
throw new UploadException("Invalid image mimetype", 312);
}
// Size
if(!$this->options['max_size']) {
$this->options['max_size'] = self::getDefaultOptions()['max_size'];
@ -391,12 +391,12 @@ class Upload {
}
}
// Handle flood uploads
protected static function handleFlood() {
$logged_user = Login::getUser();
if(!getSetting('flood_uploads_protection') || $logged_user['is_admin']) {
return FALSE;
}
@ -417,7 +417,7 @@ class Upload {
COUNT(IF(image_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MONTH), 1, NULL)) AS month
FROM ".DB::getTable('images')." WHERE image_uploader_ip='".G\get_client_ip()."' AND image_date_gmt >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 MONTH)");
} catch(Exception $e) {} // Silence
$is_flood = FALSE;
$flood_by = '';
foreach(['minute', 'hour', 'day', 'week', 'month'] as $v) {
@ -427,7 +427,7 @@ class Upload {
break;
}
}
if($is_flood) {
if(getSetting('flood_uploads_notify') and !$_SESSION['flood_uploads_notify'][$flood_by]) {
try {
@ -445,20 +445,20 @@ class Upload {
$_SESSION['flood_uploads_notify'][$flood_by] = true;
} catch(Exception $e) {} // Silence
}
return ['flood' => TRUE, 'limit' => $flood_limit[$flood_by], 'count' => $flood_db[$flood_by], 'by' => $flood_by];
}
return FALSE;
}
protected function isValidImageMime($mime) {
return preg_match("@image/(gif|pjpeg|jpeg|png|x-png|bmp|x-ms-bmp|x-windows-bmp)$@", $mime);
}
protected function isValidNamingOption($string) {
return in_array($string, array("mixed", "random", "original"));
}
}
class UploadException extends Exception {}
class UploadException extends Exception {}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -27,40 +27,40 @@ class User {
return NULL;
}
$logins_db = Login::get(['user_id' => $user_db['user_id']]);
$logins_db_aux = [];
$logins_db_aux = [];
foreach($logins_db as $k => $v) {
$logins_db_aux[$v['login_type']] = DB::formatRow($v);
}
$user_db['user_login'] = $logins_db_aux;
// Count labels
foreach(['user_image_count', 'user_album_count'] as $v) {
if(is_null($user_db[$v]) or $user_db[$v] < 0) {
$user_db[$v] = 0;
}
}
if(!array_key_exists('user_following', $user_db)) {
$user_db['user_following'] = 0;
}
if(!array_key_exists('user_followers', $user_db)) {
$user_db['user_followers'] = 0;
}
// Remove any unwanted tag from user_name
$user_db['user_name'] = self::sanitizeUserName($user_db['user_name']);
if($pretty) {
$user_db = self::formatArray($user_db);
}
return $user_db;
} catch(Exception $e) {
throw new UserException($e->getMessage(), 400);
}
}
public static function getPrivate() {
return [
'name' => _s('Private profile'),
@ -75,17 +75,17 @@ class User {
'is_private' => TRUE
];
}
public static function getAlbums($var) {
try {
$id = is_array($var) ? $var['id'] : $var;
$user_albums = [];
// Build the user stream
$user_stream = self::getStreamAlbum($id);
if(is_array($user_stream)) {
$user_albums['stream'] = $user_stream;
}
@ -94,11 +94,11 @@ class User {
$db->query('SELECT * FROM '. DB::getTable('albums') . ' WHERE album_user_id=:image_user_id ORDER BY album_name ASC');
$db->bind(':image_user_id', $id);
$user_albums_db = $db->fetchAll();
if($user_albums_db) {
$user_albums += $user_albums_db;
}
foreach($user_albums as $k => &$v) {
if($v['album_image_count'] < 0) {
$v['album_image_count'] = 0;
@ -106,16 +106,14 @@ class User {
$user_albums[$k] = DB::formatRow($v, 'album');
Album::fill($user_albums[$k]);
}
//$user_albums = G\safe_html(strip_tags($user_albums));
return $user_albums;
} catch(Exception $e) {
throw new UserException($e->getMessage(), 400);
}
}
public static function getStreamAlbum($user) {
try {
// Need to ask for user?
@ -136,7 +134,7 @@ class User {
throw new UserException($e->getMessage(), 400);
}
}
public static function getUrl($handle) {
$username = is_array($handle) ? $handle[$handle['user_username'] ? 'user_username' : 'username'] : $handle;
$id = is_array($handle) ? $handle[$handle['user_id'] ? 'user_id' : 'id'] : NULL;
@ -148,11 +146,11 @@ class User {
}
return G\get_base_url($url);
}
public static function getUrlAlbums($user_url) {
return rtrim($user_url, '/') . '/albums';
}
/* Insert user
* @returns uid
*/
@ -208,16 +206,16 @@ class User {
if($real_image_count) {
self::update($user_id, ['image_count' => $real_image_count]);
}
} catch(Exception $e) {} // Silence
} catch(Exception $e) {} // Silence
unset($_SESSION['guest_uploads']);
}
return $user_id;
} catch(Exception $e) {
throw new UserException($e->getMessage(), 400);
}
}
public static function update($id, $values) {
try {
if(isset($values['name'])) {
@ -228,15 +226,15 @@ class User {
throw new UserException($e->getMessage(), 400);
}
}
public static function uploadPicture($user, $type, $source) {
$type = strtolower($type);
if(!in_array($type, ['background', 'avatar'])) {
throw new UserException('unexpected upload value', 403);
}
if(!is_array($user)) {
try {
$user = self::getSingle($user, 'id', true);
@ -244,47 +242,47 @@ class User {
throw new UserException($e->getMessage(), 400);
}
}
if(!$user) {
throw new UserException("target user doesn't exists", 403);
}
// Upload file
try {
$user_images_path = CHV_PATH_CONTENT_IMAGES_USERS . $user['id_encoded'];
$image_upload = Image::upload($source, $user_images_path, ($type == 'avatar' ? 'av' : 'bkg').'_' . strtotime(G\datetimegmt()), ['max_size' => G\get_bytes(Settings::get('user_image_'.$type.'_max_filesize_mb') . ' MB')]);
if($type == 'avatar') {
$max_res = ['width' => 160, 'height' => 160];
$must_resize = ($image_upload['uploaded']['fileinfo']['width'] !== $max_res['width'] and $image_upload['uploaded']['fileinfo']['height'] !== $max_res['height']);
} else {
$max_res = ['width' => 1920];
$must_resize = $image_upload['uploaded']['fileinfo']['width'] > $max_res['width'];
// Medium background
Image::resize($image_upload['uploaded']['file'], NULL, $image_upload['uploaded']['name'] . '.md', ['width' => 500]);
}
if($must_resize) {
$resized = Image::resize($image_upload['uploaded']['file'], NULL, NULL, $max_res);
}
$file_uploaded = $resized ? $resized : $image_upload['uploaded'];
} catch(Exception $e) {
throw new UserException($e->getMessage(), 400);
}
if($file_uploaded) {
try {
// Ok, now convert this image to compressed JPG
$convert = new ImageConvert($file_uploaded['file'], 'jpg', $file_uploaded['file'], 90);
$file_uploaded['file'] = $convert->out;
// Edit user database
$user_edit = self::update($user['id'], [$type.'_filename' => $file_uploaded['filename']]);
if($user_edit) {
// delete any old image (silent)
@ -304,50 +302,50 @@ class User {
}
}
}
public static function deletePicture($user, $deleting) {
$deleting = strtolower($deleting);
if(!in_array($deleting, ['background', 'avatar'])) {
throw new UserException('Unexpected delete value', 100);
}
if(!is_array($user)) {
$user = self::getSingle($user, 'id', true);
}
if(!$user) {
throw new UserException("Target user doesn't exists", 101);
}
if(!$user[$deleting]) {
throw new UserException('user '.$deleting." doesn't exists", 102);
}
$image_path = G\url_to_absolute($user[$deleting]['url']);
if($deleting == 'background') {
$pathinfo = pathinfo($image_path);
@unlink(str_replace($pathinfo['basename'], $pathinfo['filename'].'.md.'.$pathinfo['extension'], $image_path));
}
@unlink($image_path);
if(!file_exists($image_path)) {
try {
$edited_user = self::update($user['id'], [$deleting.'_filename' => NULL]);
} catch(Exception $e) {} // Silence
}
if(!$edited_user) {
throw new UserException("Can't delete ".$deleting." file", 200);
}
return true;
}
public static function delete($user) {
try {
if(!is_array($user)) {
@ -363,13 +361,13 @@ class User {
}
}
}
// Delete images from disk
$db = DB::getInstance();
$db->query('SELECT image_id FROM '.DB::getTable('images').' WHERE image_user_id=:image_user_id');
$db->bind(':image_user_id', $user['id']);
$user_images = $db->fetchAll();
foreach($user_images as $user_image) {
Image::delete($user_image['image_id']);
}
@ -379,7 +377,7 @@ class User {
'table' => 'users',
'user_id' => $user['id'],
]);
// Track stats
Stat::track([
'action' => 'delete',
@ -388,7 +386,7 @@ class User {
'user_id' => $user['id'],
'date_gmt' => $user['date_gmt']
]);
// Update affected user_likes count
$sql = strtr('UPDATE `%table_users` SET user_likes = user_likes - COALESCE((SELECT COUNT(*) FROM `%table_likes` WHERE like_user_id = %user_id AND user_id = like_content_user_id AND like_user_id <> like_content_user_id GROUP BY like_content_user_id),"0");', [
'%table_users' => DB::getTable('users'),
@ -399,7 +397,7 @@ class User {
// Update affected user_liked count (users who liked content owner by this user)
// --> Should happen in Image::delete()
// Update affected user_followers count
$sql = strtr('UPDATE `%table_users` SET user_followers = user_followers - COALESCE((SELECT 1 FROM `%table_follows` WHERE follow_user_id = %user_id AND user_id = follow_followed_user_id AND follow_user_id <> follow_followed_user_id GROUP BY follow_followed_user_id),"0");', [
'%table_users' => DB::getTable('users'),
@ -407,7 +405,7 @@ class User {
'%user_id' => $user['id'],
]);
DB::queryExec($sql);
// Update affected user_following count
$sql = strtr('UPDATE `%table_users` SET user_following = user_following - COALESCE((SELECT 1 FROM `%table_follows` WHERE follow_followed_user_id = %user_id AND user_id = follow_user_id AND follow_user_id <> follow_followed_user_id GROUP BY follow_user_id),"0");', [
'%table_users' => DB::getTable('users'),
@ -416,7 +414,7 @@ class User {
]);
DB::queryExec($sql);
DB::delete('albums', ['user_id' => $user['id']]); // Delete albums DB
DB::delete('images', ['user_id' => $user['id']]); // Delete images DB
DB::delete('logins', ['user_id' => $user['id']]); // Delete logins
@ -428,14 +426,14 @@ class User {
throw new UserException($e->getMessage(), $e->getCode());
}
}
public static function statusRedirect($status) {
if(isset($status) and $status != NULL and $status !== 'valid') {
if($status == 'awaiting-email') $status = 'email-needed';
G\redirect('account/'.$status);
}
}
public static function isValidUsername($string) {
$restricted = [
'tag', 'tags',
@ -452,7 +450,9 @@ class User {
'flow', 'trending', 'popular', 'fresh', 'upcoming', 'editors', 'profiles',
'activity', 'upgrade', 'account',
'affiliates', 'billing',
'do', 'go', 'redirect'
'do', 'go', 'redirect',
'api','sdk', 'plugin', 'plugins', 'tools',
'external',
];
$virtual_routes = ['image', 'album'];
foreach($virtual_routes as $k) {
@ -460,7 +460,7 @@ class User {
}
return preg_match('/'.getSetting('username_pattern').'/', $string) && !in_array($string, $restricted) && !G\is_route_available($string) && !file_exists(G_ROOT_PATH . $string);
}
public static function formatArray($object) {
try {
if($object) {
@ -472,26 +472,26 @@ class User {
throw new UserException($e->getMessage(), 400);
}
}
public static function fill(&$user) {
$user['id_encoded'] = encodeID($user['id']);
// Abbreviated counts
$user['image_count_display'] = G\abbreviate_number($user['image_count']);
$user['album_count_display'] = G\abbreviate_number($user['album_count']);
// Populate user URLs
$user['url'] = self::getUrl($user);
$user['url_albums'] = self::getUrlAlbums($user['url']);
$user['url_liked'] = $user['url'] . '/liked';
$user['url_following'] = $user['url'] . '/following';
$user['url_followers'] = $user['url'] . '/followers';
if(!filter_var($user['website'], FILTER_VALIDATE_URL)) {
unset($user['website']);
}
// Do some safe cleaning
if(isset($user['website'])) {
$user['website_safe_html'] = G\safe_html($user['website']);
@ -501,11 +501,11 @@ class User {
$user['bio_safe_html'] = G\safe_html($user['bio']);
$user['bio_linkify'] = $user['is_admin'] ? G\linkify($user['bio_safe_html'], ['attr' => ['target' => '_blank']]) : linkify_redirector($user['bio_safe_html']);
}
if(empty($user['name'])) {
$user['name'] = ucfirst($user['username']);
}
foreach(['image_count', 'album_count'] as $v) {
$single = $v == 'image_count' ? 'image' : 'album';
$plural = $v == 'image_count' ? 'images' : 'albums';
@ -515,16 +515,16 @@ class User {
$user[$v.'_label'] = $user[$v] == 1 ? $single : $plural;
}
}
// Get first name like "Rodolfo" from "Rodolfo Berrios"
$name_array = explode(' ', $user['name']);
$user['firstname'] = mb_strlen($name_array[0]) > 20 ? trim(mb_substr($name_array[0], 0, 20, 'UTF-8')) : $name_array[0];
$user['firstname_html'] = G\safe_html(strip_tags($user['firstname']));
// Get short name like Rodolfoverylong Berr from "Rodolfoverylong Berrios"
$user['name_short'] = mb_strlen($user['name']) > 20 ? $user['firstname'] : $user['name'];
$user['name_short_html'] = G\safe_html(strip_tags($user['name_short']));
if($user['avatar_filename']) {
$avatar_file = $user['id_encoded'].'/'.$user['avatar_filename'];
$avatar_path = CHV_PATH_CONTENT_IMAGES_USERS . $avatar_file;
@ -536,11 +536,11 @@ class User {
}
}
unset($user['avatar_filename']);
if($user['background_filename']) {
$background_file = $user['id_encoded'].'/'.$user['background_filename'];
$background_path = CHV_PATH_CONTENT_IMAGES_USERS . $background_file;
$pathinfo = pathinfo($background_path);
$background_md_file = $user['id_encoded'].'/'.$pathinfo['filename'].'.md.'.$pathinfo['extension'];
@ -557,7 +557,7 @@ class User {
}
unset($user['background_filename']);
unset($user['facebook_username']);
if($user['twitter_username']) {
$user['twitter'] = array(
'username' => $user['twitter_username'],
@ -565,15 +565,15 @@ class User {
);
}
unset($user['twitter_username']);
$user['notifications_unread_display'] = $user['notifications_unread'] > 10 ? '+10' : $user['notifications_unread'];
}
public static function sanitizeUserName($name) {
return preg_replace('#<|>#', '', $name);
}
// Clean unconfirmed accounts
public static function cleanUnconfirmed($limit=NULL) {
$db = DB::getInstance();
@ -586,7 +586,7 @@ class User {
self::delete($user);
}
}
}
class UserException extends Exception {}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,13 +17,13 @@
namespace CHV;
use G, DirectoryIterator, Exception;
if(!defined("access") or !access) die("This file cannot be directly accessed.");
// Inspired from http://stackoverflow.com/a/18602474
// L10n version of G\time_elapsed_string
function time_elapsed_string($datetime, $full=false) {
$now = new \DateTime(G\datetimegmt());
$ago = new \DateTime($datetime);
$diff = $now->diff($ago);
@ -42,7 +42,7 @@ function time_elapsed_string($datetime, $full=false) {
];
foreach ($string as $k => &$v) {
if ($diff->$k) {
$times = [
'y' => _n('year', 'years', $diff->$k),
'm' => _n('month', 'months', $diff->$k),
@ -52,16 +52,16 @@ function time_elapsed_string($datetime, $full=false) {
'i' => _n('minute', 'minutes', $diff->$k),
's' => _n('second', 'seconds', $diff->$k),
];
$v = $diff->$k . ' ' . $times[$k];
} else {
unset($string[$k]);
}
}
if (!$full) $string = array_slice($string, 0, 1);
return count($string) > 0 ? _s('%s ago', implode(', ', $string)) : _s('moments ago');
}
@ -86,19 +86,16 @@ function system_notification_email($args=[]) {
}
}
// Work-in-progress
// Work-in-progress 2.0 baby!
function send_mail($to, $subject, $body) {
$own_name = __FUNCTION__ . '()';
$args = ['to', 'subject', 'body'];
foreach(func_get_args() as $k => $v) {
if(!$v) {
throw new Exception('Missing $'.$args[$k].' in '. $own_name);
}
}
// Bridge implementation
if(is_array($to)) {
$aux = $to;
@ -109,7 +106,7 @@ function send_mail($to, $subject, $body) {
$from = [getSettings()['email_from_email'], getSettings()['email_from_name']];
$reply_to = NULL;
}
if(!filter_var($to, FILTER_VALIDATE_EMAIL)) {
throw new Exception('Invalid email in ' . $own_name);
}
@ -118,13 +115,11 @@ function send_mail($to, $subject, $body) {
throw new Exception('Invalid $'.$v.' setting in ' . $own_name);
}
}
$body = trim($body);
try {
$mail = new \Mailer();
$alt_body = $mail->html2text($body);
$mail->CharSet = 'UTF-8';
if($body != strip_tags($body)) {
$mail->IsHTML(true);
}
$mail->Mailer = getSettings()['email_mode'];
if($mail->Mailer == 'smtp') {
$mail->IsSMTP();
@ -133,12 +128,18 @@ function send_mail($to, $subject, $body) {
$mail->SMTPAutoTLS = in_array(getSettings()['email_smtp_server_security'], ['ssl', 'tls']);
$mail->Port = getSettings()['email_smtp_server_port'];
$mail->Host = getSettings()['email_smtp_server'];
$mail->Username = getSettings()['email_smtp_server_username'];
$mail->Username = getSettings()['email_smtp_server_username'];
$mail->Password = getSettings()['email_smtp_server_password'];
}
$mail->Timeout = 30;
$mail->Subject = $subject;
$mail->Body = $body;
if($body != $alt_body) {
$mail->IsHTML(true);
$mail->Body = $mail->normalizeBreaks($body);
$mail->AltBody = $mail->normalizeBreaks($alt_body);
} else {
$mail->Body = $body;
}
$mail->addAddress($to);
if($reply_to and is_array($reply_to)) {
foreach($reply_to as $v) {
@ -154,7 +155,7 @@ function send_mail($to, $subject, $body) {
} catch (Exception $e) {
throw new Exception($e->getMessage(), $e->getCode());
}
}
/**
@ -215,7 +216,8 @@ function get_banner_code($banner, $safe_html=true) {
function getSystemNotices() {
$system_notices = [];
if(getSetting('update_check_display_notification') && version_compare(getSetting('update_check_notified_release'), getSetting('chevereto_version_installed'), '>')) {
// Don't notify if system files are newer or match notified release
if(getSetting('update_check_display_notification') && (version_compare(getSetting('update_check_notified_release'), getSetting('chevereto_version_installed'), '>') && version_compare(getSetting('update_check_notified_release'), G_APP_VERSION, '>'))) {
$system_notices[] = _s('There is an update available for your system. Go to %s to download and install this update.', '<a href="'.G\get_base_url('dashboard?checkUpdates').'">'._s('Dashboard').'</a>');
}
if(version_compare(G_APP_VERSION, getSetting('chevereto_version_installed'), '>')) {
@ -255,7 +257,7 @@ function generate_hashed_token($id, $token="") {
);
}
function check_hashed_token($hash, $public_token_format) {
function check_hashed_token($hash, $public_token_format) {
$public_token = hashed_token_info($public_token_format);
return password_verify($public_token["token"], $hash);
}
@ -268,7 +270,7 @@ function recaptcha_check() {
'response' => $_POST['g-recaptcha-response'],
'remoteip' => G\get_client_ip()
];
$endpoint .= '?' . http_build_query($params);
$re_api = json_decode(G\fetch_url($endpoint));
// Mimic old reCaptcha API return
@ -319,7 +321,7 @@ if (!function_exists('bcdiv')) {
function get_translation_table() {
return L10n::getTranslation();
}
function get_language_used() {
return get_available_languages()[L10n::getStatic('locale')];
}
@ -340,7 +342,7 @@ function get_disabled_languages() {
* CRYPT
* ----------------------------------------------------------------------------------------------------------------------------------------
*/
/*
* cheveretoID
* Encode/decode an id
@ -362,14 +364,14 @@ function cheveretoID($in, $action="encode") {
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$salt = getSetting('crypt_salt');
$id_padding = intval(getSetting('id_padding'));
// Use a stock version of the hashed values (faster execution)
if(isset($cheveretoID)) {
$passhash = $cheveretoID['passhash'];
$p = $cheveretoID['p'];
$i = $cheveretoID['i'];
} else {
for($n = 0; $n<strlen($index); $n++) {
$i[] = substr($index,$n ,1);
}
@ -380,7 +382,7 @@ function cheveretoID($in, $action="encode") {
for($n=0; $n < strlen($index); $n++) {
$p[] = substr($passhash, $n ,1);
}
// Stock the crypting thing to don't do it every time
$cheveretoID = [
'passhash' => $passhash,
@ -388,12 +390,12 @@ function cheveretoID($in, $action="encode") {
'i' => $i
];
}
array_multisort($p, SORT_DESC, $i);
$index = implode($i);
$base = strlen($index);
if($action == 'decode') {
// Digital number <<-- alphabet letter code
$out = 0;
@ -421,9 +423,9 @@ function cheveretoID($in, $action="encode") {
}
}
return $out;
return $out;
}
// Shorthand for cheveretoID encode
function encodeID($var) {
return cheveretoID($var, "encode");
@ -484,19 +486,19 @@ function get_image_fileinfo($file) {
*/
function upload_to_content_images($source, $what) {
try {
if(!defined('CHV_PATH_CONTENT_IMAGES_SYSTEM')) {
throw new Exception('Outdated app/loader.php', 100);
}
if(!file_exists(CHV_PATH_CONTENT_IMAGES_SYSTEM) && !@mkdir(CHV_PATH_CONTENT_IMAGES_SYSTEM, 0755, true)) {
throw new Exception(sprinf("Target upload directory %s doesn't exists.", G\absolute_to_relative(CHV_PATH_CONTENT_IMAGES_SYSTEM)), 101);
}
if(!is_writable(CHV_PATH_CONTENT_IMAGES_SYSTEM)) {
throw new Exception(sprintf("No write permission in %s", G\absolute_to_relative(CHV_PATH_CONTENT_IMAGES_SYSTEM)), 102);
}
$typeArr = [
'favicon_image' => [
'name' => 'favicon',
@ -523,7 +525,7 @@ function upload_to_content_images($source, $what) {
'type' => 'image'
]
];
if(G\starts_with('homepage_cover_image_', $what)) {
$cover_handle = str_replace('homepage_cover_image_', NULL, $what);
if($cover_handle == 'add') {
@ -534,20 +536,20 @@ function upload_to_content_images($source, $what) {
}
$typeArr[$what] = $typeArr['homepage_cover_image'];
}
foreach(['logo_vector', 'logo_image'] as $k) {
$typeArr[$k . '_homepage'] = array_merge($typeArr[$k], ['name' => 'logo_homepage']);
}
foreach($typeArr as $k => &$v) {
$v['name'] .= '_' . number_format(round(microtime(TRUE) * 1000), 0, '', '') . '_' . G\random_string(6); // prevent hard cache issues
}
$name = $typeArr[$what]['name'];
if($typeArr[$what]['type'] == 'image') {
$fileinfo = @G\get_image_fileinfo($source['tmp_name']);
// Pre-validations
switch($what) {
case 'favicon_image':
@ -564,7 +566,7 @@ function upload_to_content_images($source, $what) {
}
break;
}
$upload = new Upload;
$upload->setSource($source);
$upload->setDestination(CHV_PATH_CONTENT_IMAGES_SYSTEM);
@ -574,9 +576,9 @@ function upload_to_content_images($source, $what) {
}
$upload->exec();
$uploaded = $upload->uploaded;
} else {
// Check file error
switch ($source['error']) {
case UPLOAD_ERR_OK:
@ -589,23 +591,23 @@ function upload_to_content_images($source, $what) {
default:
throw new Exception('Unknown errors.', 502);
}
$file_contents = @file_get_contents($source['tmp_name']);
if(!$file_contents) {
throw new Exception("Can't read uploaded file content.", 500);
}
if(strpos($file_contents, '<!DOCTYPE svg PUBLIC') == false and strpos($file_contents, '<svg') == false) {
throw new Exception("Uploaded file isn't an SVG.", 300);
}
$filename = $name . G\random_string(8) . '.svg';
$destination = CHV_PATH_CONTENT_IMAGES_SYSTEM . $filename;
if(!@move_uploaded_file($source['tmp_name'], $destination)) {
throw new Exception("Can't move uploaded file to its destination.", 500);
}
$uploaded = [
'file' => $destination,
'filename' => $filename,
@ -615,29 +617,29 @@ function upload_to_content_images($source, $what) {
]
];
}
$filename = $name . '.' . $uploaded['fileinfo']['extension'];
$file = str_replace($uploaded['fileinfo']['filename'], $filename, $uploaded['file']);
if(!@rename($uploaded['file'], $file)) {
throw new Exception("Can't rename uploaded " . $name . " file", 500);
}
$remove_old = isset($remove_old) ? $remove_old : TRUE;
if(!isset($db_filename) || empty($db_filename)) {
$db_filename = getSetting($what);
}
$db_file = CHV_PATH_CONTENT_IMAGES_SYSTEM . $db_filename;
if(in_array($what, ['logo_vector_homepage', 'logo_image_homepage']) && !G\starts_with('logo_homepage', $db_filename)) {
$remove_old = FALSE;
}
if($remove_old && !G\starts_with('default/', $db_filename) && $db_filename != $filename && is_readable($db_file) && !@unlink($db_file)) {
throw new Exception("Can't remove old ".$name." file", 500);
}
if(isset($cover_handle)) {
$what = 'homepage_cover_image';
$homepage_cover_image = getSetting($what);
@ -655,9 +657,9 @@ function upload_to_content_images($source, $what) {
];
}
}
Settings::update([$what => $filename]);
if(isset($cover_handle)) {
Settings::setValue('homepage_cover_images', $homecovers);
}
@ -682,42 +684,49 @@ function isSafeToExecute($max_execution_time=NULL, $options=[]) {
/* Update ping */
function checkUpdates() {
try {
if(is_null(getSetting('update_check_datetimegmt')) || G\datetime_add(getSetting('update_check_datetimegmt'), 'P1D') < G\datetimegmt()) {
@set_time_limit(60); // Don't run forever
$safe_time = 5;
$max_execution_time = ini_get('max_execution_time'); // Store the limit
$CHEVERETO = Settings::getChevereto();
$update = G\fetch_url($CHEVERETO['api']['get']['info']);
if(isSafeToExecute() && $update) {
$json = json_decode($update);
$release_notes = trim($json->software->release_notes);
$latest_release = $json->software->current_version;
// Notify only if not notified OR if latest release is newer and not being notified
if(is_null(getSetting('update_check_notified_release')) || (version_compare($latest_release, getSetting('chevereto_version_installed'), '>') && version_compare($latest_release, getSetting('update_check_notified_release'), '>'))) {
// Email notify
$message = _s('There is an update available for your Chevereto based website.') . ' ' . _s('The release notes for this update are:') ;
$message .= "\n\n";
$message .= $release_notes . "\n\n";
$message .= _s('You can apply this update directly from your %a or download it from %s and then manually install it.', ['%a' => '<a href="' . G\get_base_url('dashboard?checkUpdates') . '" target="_blank">'._s('admin dashboard').'</a>', '%s' => '<a href="' . $CHEVERETO['source']['url'] . '" target="_blank">' . $CHEVERETO['source']['label'] . '</a>']) . "\n\n";
$message .= '--' . "\n" . 'Chevereto' . "\n" . G\get_base_url();
$message = nl2br($message);
system_notification_email([
'subject' => str_replace('Chevereto', G_APP_NAME, _s('Chevereto update available (v%s)', $latest_release)),
'message' => $message
]);
$settings_update = [
'update_check_notified_release' => $latest_release,
'update_check_datetimegmt' => G\datetimegmt(),
'update_check_latest_release' => $latest_release,
];
} else {
$settings_update = ['update_check_datetimegmt' => G\datetimegmt()];
}
Settings::update($settings_update);
$safe_time = 5;
$max_execution_time = ini_get('max_execution_time'); // Store the limit
$CHEVERETO = Settings::getChevereto();
$update = G\fetch_url($CHEVERETO['api']['get']['info']);
if(isSafeToExecute() && $update) {
$json = json_decode($update);
$release_notes = $json->software->release_notes;
$latest_release = $json->software->current_version;
// Notify only if not notified OR if latest release is newer and not being notified AND is not installed (files)
if(is_null(getSetting('update_check_notified_release')) || (version_compare($latest_release, G_APP_VERSION, '>') && version_compare($latest_release, getSetting('update_check_notified_release'), '>'))) {
error_log('se fue un email');
// Email notify
$message = _s('There is an update available for your Chevereto based website.') . ' ' . _s('The release notes for this update are:') ;
$message .= "\n\n";
$message .= $release_notes . "\n\n";
$message .= _s('You can apply this update directly from your %a or download it from %s and then manually install it.', ['%a' => '<a href="' . G\get_base_url('dashboard?checkUpdates') . '" target="_blank">'._s('admin dashboard').'</a>', '%s' => '<a href="' . $CHEVERETO['source']['url'] . '" target="_blank">' . $CHEVERETO['source']['label'] . '</a>']) . "\n\n";
$message .= '--' . "\n" . 'Chevereto' . "\n" . G\get_base_url();
$message = nl2br($message);
system_notification_email(['subject' => _s('Chevereto update available (v%s)', $latest_release), $latest_release, 'message' => $message]);
$settings_update = [
'update_check_notified_release' => $latest_release,
'update_check_datetimegmt' => G\datetimegmt(),
'update_check_latest_release' => $latest_release,
];
} else {
error_log("no email");
$settings_update = ['update_check_datetimegmt' => G\datetimegmt()];
}
Settings::update($settings_update);
}
} catch(Exception $e) {
error_log($e);
} // Silence
}
}
function getJsModLangL10n() {
foreach (new DirectoryIterator(CHV_APP_PATH_CONTENT_LANGUAGES . 'cache/') as $fileInfo) {
if($fileInfo->isDot() || $fileInfo->isDir()) continue;
$lang_code = str_replace('.po.cache.php', NULL, $fileInfo->getFilename());
include($fileInfo->getPathname());
if(!$translation_table['Upload images']) continue;
$l10n[$lang_code] = $translation_table['Upload images'][0];
}
unset($translation_table);
return json_encode($l10n);
}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -117,7 +117,7 @@ function theme_file_exists($var) {
/*** HTML TAGS ***/
function get_html_tags() {
$classes = 'tone-' . CHV\getSetting('theme_tone') . ' top-bar-' . CHV\getSetting('theme_top_bar_color') . ' unsafe-blur-' . (CHV\getSetting('theme_nsfw_blur') ? 'on' : 'off');
$classes = 'device-' . (G\Handler::getCond('mobile_device') ? 'mobile' : 'nonmobile') . ' tone-' . CHV\getSetting('theme_tone') . ' top-bar-' . CHV\getSetting('theme_top_bar_color') . ' unsafe-blur-' . (CHV\getSetting('theme_nsfw_blur') ? 'on' : 'off');
return get_lang_html_tags() . ' class="' . $classes . '"';
}
@ -143,27 +143,27 @@ function get_select_options_html($arr, $selected) {
}
function get_checkbox_html($options=[]) {
if(!array_key_exists('name', $options)) {
return 'ERR:CHECKBOX_NAME_MISSING';
}
$options = array_merge([
'value_checked' => 1,
'value_unchecked' => 0,
'label' => $options['name'],
'checked' => FALSE
], $options);
$tooltip = $options['tooltip'] ? (' rel="tooltip" title="'.$options['tooltip'].'"') : NULL;
$html = '<div class="checkbox-label">' . "\n" .
' <label for="'.$options['name'].'"' . $tooltip . '>' . "\n" .
' <input type="hidden" name="'.$options['name'].'" value="'.$options['value_unchecked'].'">' . "\n" .
' <input type="checkbox" name="'.$options['name'].'" id="'.$options['name'].'" ' . ((bool)$options['checked'] ? ' checked' : NULL) .' value="'.$options['value_checked'].'">' . $options['label'] . "\n" .
' <input type="checkbox" name="'.$options['name'].'" id="'.$options['name'].'" ' . ((bool)$options['checked'] ? ' checked' : NULL) .' value="'.$options['value_checked'].'">' . $options['label'] . "\n" .
' </label>' . "\n" .
'</div>';
return $html;
}
@ -183,21 +183,21 @@ function get_share_links($share_element) {
if(function_exists("get_share_links")) {
return \get_share_links($share_element);
}
if(!$share_element["twitter"]) {
$share_element["twitter"] = CHV\getSetting('twitter_account');
}
$share_element["urlencoded"] = array();
foreach($share_element as $key => $value) {
if($key == "urlencoded") continue;
$share_element["urlencoded"][$key] = rawurlencode($value);
$share_element["urlencoded"][$key] = rawurlencode($value);
}
global $share_links_networks;
G\Render\include_theme_file('custom_hooks/share_links');
if(!$share_links_networks) {
$share_links_networks = array(
'facebook' => array(
@ -249,19 +249,19 @@ function get_share_links($share_element) {
}
$return = array();
foreach($share_links_networks as $key => $value) {
$search = array("%URL%", "%TITLE%", "%DESCRIPTION%", "%HTML%", "%PHOTO_URL%", "%TWITTER%");
$replace= array("url", "title", "description", "HTML", "image", "twitter");
for($i=0; $i<count($replace); $i++) {
if(array_key_exists($replace[$i], $share_element["urlencoded"])) {
$replace[$i] = $share_element["urlencoded"][$replace[$i]];
}
}
$value["url"] = str_replace($search, $replace, $value["url"]);
$return[] = '<li'.($value['mobileonly'] ? ' class="hidden phone-show"' : NULL).'><a data-href="'.$value["url"].'" class="popup-link btn-32 btn-social btn-'.$key.'" rel="tooltip" data-tiptip="top" title="'.$value["label"].'"><span class="btn-icon icon-'.$key.'"></span></a></li>';
}
@ -274,20 +274,12 @@ function get_share_links($share_element) {
* ----------------------------------------------------------------------------------------------------------------------------------------
*/
function include_peafowl_head() {
$peafowl_css = get_static_url(CHV_PATH_PEAFOWL . 'peafowl.css');
$opensans_css = get_static_url(CHV_PATH_PEAFOWL . 'fonts/opensans/opensans.css');
echo '<meta name="generator" content="' . G_APP_NAME . ' ' . CHV\get_chevereto_version() . '">' . "\n" .
'<link rel="stylesheet" href="' . $peafowl_css . '">' . "\n" .
'<link rel="stylesheet" href="' . $opensans_css . '">' . "\n\n" .
'<script>document.documentElement.className += " js";(function(w,d,u){w.readyQ=[];w.bindReadyQ=[];function p(x,y){if(x=="ready"){w.bindReadyQ.push(y);}else{w.readyQ.push(x);}};var a={ready:p,bind:p};w.$=w.jQuery=function(f){if(f===d||f===u){return a}else{p(f)}}})(window,document);var devices=["phone","phablet","tablet","laptop","desktop","largescreen"];window_to_device=function(){for(var e=[480,768,992,1200,1880,2180],n=[],t="",d=document.documentElement.clientWidth||document.getElementsByTagName("body")[0].clientWidth||window.innerWidth,o=0;o<devices.length;++o)d>=e[o]&&n.push(devices[o]);0==n.length&&n.push(devices[0]),t=n[n.length-1];for(var o=0;o<devices.length;++o)document.documentElement.className=document.documentElement.className.replace(devices[o],""),o==devices.length-1&&(document.documentElement.className+=" "+t),document.documentElement.className=document.documentElement.className.replace(/\s+/g," ");if("laptop"==t||"desktop"==t){var c=document.getElementById("pop-box-mask");null!==c&&c.parentNode.removeChild(c)}},window_to_device(),window.onresize=window_to_device,$(document).ready(function(){PF.obj.devices=window.devices,PF.fn.window_to_device=window.window_to_device});</script>' . "\n\n";
// We don't need no language localization
/*
foreach(CHV\get_enabled_languages() as $k => $v) {
if(CHV\get_language_used()['code'] == $k) continue;
echo '<link rel="alternate" hreflang="'.str_replace('_', '-', $k).'" href="'.G\get_base_url('?lang=' . $k).'">'. "\n";
}
*/
echo '<meta name="generator" content="' . G_APP_NAME . ' ' . CHV\get_chevereto_version() . '">' . "\n" .
'<link rel="stylesheet" href="' . get_static_url(CHV_PATH_PEAFOWL . 'peafowl.css') . '">' . "\n" .
'<link rel="stylesheet" href="' . get_static_url(CHV_PATH_PEAFOWL . 'fonts/opensans/opensans.css') . '">' . "\n" .
'<link rel="stylesheet" href="' . get_theme_file_url('style.css') . '">' . "\n\n" .
'<script data-cfasync="false">document.documentElement.className+=" js";var devices=["phone","phablet","tablet","laptop","desktop","largescreen"],window_to_device=function(){for(var e=[480,768,992,1200,1880,2180],t=[],n="",d=document.documentElement.clientWidth||document.getElementsByTagName("body")[0].clientWidth||window.innerWidth,c=0;c<devices.length;++c)d>=e[c]&&t.push(devices[c]);for(0==t.length&&t.push(devices[0]),n=t[t.length-1],c=0;c<devices.length;++c)document.documentElement.className=document.documentElement.className.replace(devices[c],""),c==devices.length-1&&(document.documentElement.className+=" "+n),document.documentElement.className=document.documentElement.className.replace(/\s+/g," ");if("laptop"==n||"desktop"==n){var o=document.getElementById("pop-box-mask");null!==o&&o.parentNode.removeChild(o)}};window_to_device(),window.onresize=window_to_device;function jQueryLoaded(){!function(n,d){n.each(readyQ,function(d,e){n(e)}),n.each(bindReadyQ,function(e,i){n(d).bind("ready",i)})}(jQuery,document)}!function(n,d,e){function i(d,e){"ready"==d?n.bindReadyQ.push(e):n.readyQ.push(d)}n.readyQ=[],n.bindReadyQ=[];var u={ready:i,bind:i};n.$=n.jQuery=function(n){return n===d||void 0===n?u:void i(n)}}(window,document);
</script>' . "\n\n";
}
// Get cookie law banner
@ -315,12 +307,10 @@ function include_peafowl_foot() {
}
$resources['scripts'] = get_static_url(CHV_PATH_PEAFOWL . 'js/scripts.js');
$echo = [
'<script src="' . $resources['scripts'] . '"></script>',
'<script>(function($,d){$.each(readyQ,function(i,f){$(f)});$.each(bindReadyQ,function(i,f){$(d).bind("ready",f)})})(jQuery,document)</script>',
'<script src="' . $resources['peafowl'] . '"></script>',
'<script src="' . $resources['chevereto'] . '"></script>',
'<script defer data-cfasync="false" src="' . $resources['scripts'] . '" id="jquery-js" onload="jQueryLoaded(this, event)"></script>',
'<script defer data-cfasync="false" src="' . $resources['peafowl'] . '" id="peafowl-js"></script>',
'<script defer data-cfasync="false" src="' . $resources['chevereto'] . '" id="chevereto-js"></script>',
];
if(G\Handler::getCond('captcha_needed')) {
$echo[] = strtr('<script>
var PFrecaptchaCallback = function() {
@ -336,27 +326,27 @@ function include_peafowl_foot() {
'%k' => CHV\getSetting('recaptcha_public_key'),
'%t' => in_array(CHV\getSetting('theme_tone'), ['light', 'dark']) ? CHV\getSetting('theme_tone') : 'light', // Esto es MongoCodeQl (en camel case)
]);
$echo[] = '<script src="https://www.google.com/recaptcha/api.js?onload=PFrecaptchaCallback&render=explicit" defer></script>';
$echo[] = '<script defer src="https://www.google.com/recaptcha/api.js?onload=PFrecaptchaCallback&render=explicit"></script>';
}
if(method_exists('CHV\Settings','getChevereto')) {
$echo[] = '<script>var CHEVERETO = ' . json_encode(CHV\Settings::getChevereto()) . '</script>';
$echo[] = '<script data-cfasync="false">var CHEVERETO = ' . json_encode(CHV\Settings::getChevereto()) . '</script>';
}
echo implode("\n", $echo);
}
function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL, $tools) {
// todo: pass requester permissions
if(empty($requester)) {
$requester = CHV\Login::getUser();
} else if(!is_array($requester) and !is_null($requester)) {
$requester = CHV\User::getSingle($requester, 'id');
}
// Default
$stock_tpl = 'IMAGE';
if($tpl == 'album' || $tpl == 'user/album') {
$stock_tpl = "ALBUM";
}
@ -375,11 +365,11 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
CHV\User::fill($item["user"]);
}
}
if(in_array($stock_tpl, ['IMAGE', 'ALBUM'])) {
$item['liked'] = is_null($item['like']['user_id']) ? 0 : ($requester['id'] == $item['like']['user_id'] ? 1 : 0);
}
if($stock_tpl == 'IMAGE') {
if(!$item['is_animated'] || !isset($item['file_resource']['chain']['image'])) {
$conditional_replaces['tpl_list_item/item_image_play_gif'] = NULL;
@ -387,16 +377,16 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
} else if(!isset($item['images_slice'][0]['is_animated']) || $item['images_slice'][0]['is_animated'] == FALSE) {
$conditional_replaces['tpl_list_item/item_image_play_gif'] = NULL;
}
$filled_template = $template["tpl_list_item/$tpl"]; // Stock the unfilled template
// Missing template file cause uncaught error
$tpl_replacements = $template;
if(!CHV\getSetting('enable_likes') || $requester['is_private']/* || $item['user']['is_private']*/) {
$conditional_replaces['tpl_list_item/item_like'] = NULL;
}
if($item['user']['is_private'] && !$requester['is_admin'] && $item["user"]["id"] !== $requester['id']) {
unset($item['user']);
$item['user'] = CHV\User::getPrivate();
@ -405,24 +395,24 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
} else {
$conditional_replaces['tpl_list_item/image_description_private'] = NULL;
}
if($item['user']['is_private'] && $requester['is_admin']) {
$item['user']['name'] = '🔒 ' . $item['user']['name'];
}
$conditional_replaces[$item["user"]["id"] == NULL ? "tpl_list_item/image_description_user" : "tpl_list_item/image_description_guest"] = NULL;
$conditional_replaces[$item["user"]["id"] == NULL ? "tpl_list_item/image_description_user" : "tpl_list_item/image_description_guest"] = NULL;
$conditional_replaces[$item["user"]["avatar"] == NULL ? "tpl_list_item/image_description_user_avatar" : "tpl_list_item/image_description_user_no_avatar"] = NULL;
if($stock_tpl == "IMAGE") {
$conditional_replaces['tpl_list_item/' . (!$item['file_resource']['chain']['image'] ? 'image_cover_image' : 'image_cover_empty')] = NULL;
}
if($stock_tpl == "ALBUM") {
if($item['privacy'] !== 'password' || (!$requester['is_admin'] || $item["user"]["id"] !== $requester['id'])) {
$item['password'] = NULL;
}
$conditional_replaces['tpl_list_item/' . (($item['image_count'] == 0 or !$item['images_slice'][0]['file_resource']) ? 'album_cover_image' : 'album_cover_empty')] = NULL;
for($i=1; $i<count($item["images_slice"]); $i++) {
if(!$item['images_slice'][$i]['file_resource']['chain']['thumb']) {
@ -432,7 +422,7 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
}
$template["tpl_list_item/album_thumbs"] = preg_replace("/%[0-9]+(.*)%[0-9]+/", "", $template["tpl_list_item/album_thumbs"]);
}
if($stock_tpl == "USER") {
$conditional_replaces[$item["avatar"] ? "tpl_list_item/user_no_avatar" : "tpl_list_item/user_avatar"] = NULL;
foreach(array("twitter", "facebook", "website") as $social) {
@ -443,7 +433,7 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
$conditional_replaces[empty($item["avatar"]['url']) ? "tpl_list_item/user_cover_image" : "tpl_list_item/user_cover_empty"] = NULL;
$conditional_replaces[empty($item["background"]['url']) ? "tpl_list_item/user_background_image" : "tpl_list_item/user_background_empty"] = NULL;
}
if(is_null($requester)) {
$show_item_edit_tools = FALSE;
$show_item_public_tools = FALSE;
@ -457,54 +447,54 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
$show_item_edit_tools = FALSE;
$show_item_public_tools = FALSE;
}
if($requester['is_admin']) {
$show_item_edit_tools = TRUE;
$show_item_public_tools = FALSE;
}
}
}
if(!$show_item_public_tools) {
$template['tpl_list_item/item_'.strtolower($stock_tpl).'_public_tools'] = NULL;
}
if(!$show_item_edit_tools) {
$template['tpl_list_item/item_'.strtolower($stock_tpl).'_edit_tools'] = NULL;
}
if(!$requester['is_admin']) {
$template['tpl_list_item/item_'.strtolower($stock_tpl).'_admin_tools'] = NULL;
}
foreach($conditional_replaces as $k => $v) {
$template[$k] = $v;
}
preg_match_all("#%(tpl_list_item/.*)%#", $filled_template, $matches);
if(is_array($matches[1])) {
foreach($matches[1] as $k => $v) {
$filled_template = replace_tpl_string($v, $template[$v], $filled_template);
}
}
foreach($template as $k => $v) {
$filled_template = replace_tpl_string($k, $v, $filled_template);
}
// Get rid of the useless keys
unset($item['original_exifdata']);
// Get rid of any empty property
//$item = G\array_remove_empty($item);
// Sensitive utf8 encode
$utf8_encodes = [
'image' => ['title', 'title_truncated', 'original_filename'],
'album' => ['name', 'name_truncated', 'description'],
'user' => ['name', 'bio'],
];
foreach($utf8_encodes as $k => $v) {
if($k == strtolower($stock_tpl)) {
foreach($v as $encode) {
@ -516,56 +506,56 @@ function get_peafowl_item_list($tpl="image", $item, $template, $requester=NULL,
}
}
}
// Now stock the item values
$replacements = array_change_key_case(flatten_array($item, $stock_tpl."_"), CASE_UPPER);
unset($replacements['IMAGE_ORIGINAL_EXIFDATA']);
if($stock_tpl == "IMAGE" or $stock_tpl == "ALBUM") {
$replacements["ITEM_URL_EDIT"] = ($stock_tpl == "IMAGE" ? $item["url_viewer"] : $item["url"]) . "#edit";
}
// Public for the guest
if(!array_key_exists('user', $item)) {
$replacements['IMAGE_ALBUM_PRIVACY'] = 'public';
}
if(in_array($stock_tpl, ['IMAGE', 'ALBUM'])) {
$nsfw = $stock_tpl == 'IMAGE' ? $item['nsfw'] : $item['images_slice'][0]['nsfw'];
$placeholder = $stock_tpl == 'IMAGE' ? 'IMAGE_FLAG' : 'ALBUM_COVER_FLAG';
$replacements[$placeholder] = $nsfw ? 'unsafe' : 'safe';
}
$show_object = ($show_item_edit_tools || $show_item_public_tools) || ($requester['is_admin'] || (!is_null($requester) AND $item["user"]["id"] == $requester['id']));
if($show_object) {
$object = G\array_filter_array($item, ['image', 'medium', 'thumb', 'name', 'title', 'extension', 'size_formatted', 'display_url', 'how_long_ago', 'url', 'url_viewer', 'filename']);
$replacements['DATA_OBJECT'] = "data-object='" . rawurlencode(json_encode(G\array_utf8encode($object))) . "'";
} else {
$replacements['DATA_OBJECT'] = NULL;
}
if($stock_tpl == 'IMAGE') {
$replacements['SIZE_TYPE'] = CHV\getSetting('theme_image_listing_sizing') . '-size';
}
foreach($replacements as $k => $v) {
$filled_template = replace_tpl_string($k, $v, $filled_template);
}
$column_sizes = array(
"image" => 8,
"album" => 8,
"user" => 8
);
foreach($column_sizes as $k => $v) {
$filled_template = replace_tpl_string("COLUMN_SIZE_".strtoupper($k), $v, $filled_template);
}
return $filled_template;
}
function replace_tpl_string($search, $replace, $subject) {
@ -588,17 +578,17 @@ function flatten_array($array, $prefix = '') {
// This function is sort of an alias of php die() but with html error display
function chevereto_die($error_msg, $paragraph=NULL, $title=NULL) {
if(!is_array($error_msg) && G\check_value($error_msg)) $error_msg = array($error_msg);
if(is_null($paragraph)) {
$paragraph = "The system has encountered errors that must be fixed to allow proper Chevereto functionality. Chevereto won't work until the following issues are solved:";
}
$solution = "Need help or questions about this? Go to <a href='http://chevereto.com/support' target='_blank'>Chevereto support<a/>.";
$title = (!is_null($title)) ? $title : 'System error';
$doctitle = $title . " - Chevereto";
$handled_request = G_ROOT_PATH == '/' ? sanitize_path_slashes($_SERVER["REQUEST_URI"]) : str_ireplace(G_ROOT_PATH_RELATIVE, "", G\add_trailing_slashes($_SERVER["REQUEST_URI"]));
$base_request = explode('/', rtrim(str_replace("//", "/", str_replace("?", "/", $handled_request)), '/'))[0];
if($base_request == 'json' || $base_request == 'api'){
$output = array(
'status_code' => 500,
@ -610,12 +600,12 @@ function chevereto_die($error_msg, $paragraph=NULL, $title=NULL) {
G\json_prepare();
die(G\Render\json_output($output));
}
$html = [
'<h1>'.$title.'</h1>',
'<p>'.$paragraph.'</p>'
];
if(is_array($error_msg)) {
$html[] = '<ul class="errors">';
foreach($error_msg as $error) {
@ -627,16 +617,16 @@ function chevereto_die($error_msg, $paragraph=NULL, $title=NULL) {
$html[] = '<p>'.$solution.'</p>';
$html = join("", $html);
$template = CHV_APP_PATH_CONTENT_SYSTEM . 'template.php';
if(!require_once($template)) {
die("Can't find " . G\absolute_to_relative($system_template));
}
die();
}
function getFriendlyExif($Exif) {
if(gettype($Exif) == 'string') {
$Exif = json_decode($Exif);
}
@ -649,7 +639,7 @@ function getFriendlyExif($Exif) {
}
if($Exif->FNumber or $Exif->COMPUTED->ApertureFNumber) {
$Aperture = 'ƒ/' . ($Exif->FNumber ? G\fraction_to_decimal($Exif->FNumber) : explode('/', $Exif->COMPUTED->ApertureFNumber)[1]);
$exif_one_line[] = $Aperture;
$exif_one_line[] = $Aperture;
}
if($Exif->ISOSpeedRatings) {
$ISO = 'ISO' . (is_array($Exif->ISOSpeedRatings) ? $Exif->ISOSpeedRatings[0] : $Exif->ISOSpeedRatings);
@ -659,7 +649,7 @@ function getFriendlyExif($Exif) {
$FocalLength = G\fraction_to_decimal($Exif->FocalLength) . 'mm';
$exif_one_line[] = $FocalLength;
}
$exif_relevant = [
'XResolution',
'YResolution',
@ -762,7 +752,7 @@ function exifReadableValue($Exif, $key) {
],
'ResolutionUnit' => [
1 => 'None',
2 => 'inches',
2 => 'inches',
3 => 'cm'
],
'ExposureProgram' => [
@ -863,7 +853,7 @@ function exifReadableValue($Exif, $key) {
9 => 'Fine Weather',
10 => 'Cloudy',
11 => 'Shade',
12 => 'Daylight Fluorescent',
12 => 'Daylight Fluorescent',
13 => 'Day White Fluorescent',
14 => 'Cool White Fluorescent',
15 => 'White Fluorescent',
@ -890,12 +880,12 @@ function exifReadableValue($Exif, $key) {
} else {
$value = $table[$key][$Exif->$key];
}
switch($key) {
case 'DateTime':
case 'DateTimeOriginal':
case 'DateTimeDigitized':
$value = preg_replace('/(\d{4})(:)(\d{2})(:)(\d{2})/', '$1-$3-$5', $value);
$value = preg_replace('/(\d{4})(:)(\d{2})(:)(\d{2})/', '$1-$3-$5', $value);
break;
case 'WhiteBalance':
$value = $value == 0 ? 'Auto' : $value;
@ -1011,7 +1001,7 @@ var disqus_config = function() {
s.setAttribute("data-timestamp", +new Date());
(d.head || d.body).appendChild(s);
})();
var disqus_config = function () {
var disqus_config = function () {
this.language = "%language_code";
this.page.remote_auth_s3 = "%auth";
this.page.api_key = "%api_key";
@ -1028,4 +1018,4 @@ var disqus_config = function () {
break;
}
echo $html;
}
}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) 2013 Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,7 +17,7 @@
namespace CHV;
use G;
if(!defined('access') or !access) die('This file cannot be directly accessed.');
/**
@ -29,10 +29,10 @@ if(!defined('access') or !access) die('This file cannot be directly accessed.');
function check_system_integrity() {
$settings = Settings::get();
/*** Check server requirements ***/
// Try to fix sessions in crap setups (OVH)
// Try to fix session crap setups (OVH)
@ini_set('session.gc_divisor', 100);
@ini_set('session.gc_probability', TRUE);
@ini_set('session.use_trans_sid', FALSE);
@ -40,18 +40,18 @@ function check_system_integrity() {
@ini_set('session.hash_bits_per_character', 4);
$missing_tpl = '%n (<a href="http://php.net/manual/en/%t.%u.php" target="_blank">%f</a>) %t is disabled in this server. This %t must be enabled in your PHP configuration (php.ini) and/or you must add this missing %t.';
if(version_compare(PHP_VERSION, '5.4.0', '<')) {
$install_errors[] = 'This server is currently running PHP version '.PHP_VERSION.' and Chevereto needs at least PHP 5.4.0 to run. You need to update PHP in this server.';
}
if(ini_get('allow_url_fopen') !== 1 && !function_exists('curl_init')) {
$install_errors[] = "cURL isn't installed and allow_url_fopen is disabled. Chevereto needs one of these to perform HTTP requests to remote servers.";
}
if(preg_match('/apache/i', $_SERVER['SERVER_SOFTWARE']) && function_exists('apache_get_modules') && !in_array('mod_rewrite', apache_get_modules())) {
$install_errors[] = 'Apache <a href="http://httpd.apache.org/docs/2.1/rewrite/rewrite_intro.html" target="_blank">mod_rewrite</a> is not enabled in this server. This must be enabled to run Chevereto.';
}
if(!extension_loaded('gd') && !function_exists('gd_info')) {
$install_errors[] = '<a href="http://www.libgd.org" target="_blank">GD Library</a> is not enabled in this server. GD is needed to perform image handling.';
} else {
@ -61,7 +61,7 @@ function check_system_integrity() {
if(!imagetypes() & IMG_JPG) $install_errors[] = 'JPG ' . $imagetype_fail;
if(!imagetypes() & IMG_WBMP) $install_errors[] = 'BMP ' . $imagetype_fail;
}
foreach([
'pdo' => [
'%label'=> 'PDO',
@ -86,7 +86,7 @@ function check_system_integrity() {
$install_errors[] = strtr('%name (<a href="http://www.php.net/manual/%slug.php">%label</a>) is not loaded in this server. %desc.', $v);
}
}
// Check those bundled classes
$disabled_classes = explode(',', preg_replace('/\s+/', '', @ini_get('disable_classes')));
if(!empty($disabled_classes)) {
@ -96,7 +96,7 @@ function check_system_integrity() {
}
}
}
// Check those missing functions
foreach([
'utf8_encode' => 'UTF-8 encode',
@ -106,15 +106,15 @@ function check_system_integrity() {
$install_errors[] = strtr(str_replace('%t', 'function', $missing_tpl), ['%n' => $v, '%f' => $k, '%u' => str_replace('_', '-', $k)]);
}
}
/*** Folders check ***/
// Check writtable folders
$writting_paths = array(CHV_PATH_IMAGES, CHV_PATH_CONTENT);
$writting_paths = [CHV_PATH_IMAGES, CHV_PATH_CONTENT, CHV_APP_PATH_CONTENT, CHV_APP_PATH_CONTENT_LOCKS];
foreach($writting_paths as $v) {
if(!file_exists($v)) { // Exists?
if(!@mkdir($v)) {
$install_errors[] = "<code>".G\absolute_to_relative($v)."</code> doesn't exists. Make sure to upload this.";
$install_errors[] = "<code>".G\absolute_to_relative($v)."</code> doesn't exists. Make sure to upload it.";
}
} else { // Can write?
if(!is_writable($v)) {
@ -122,13 +122,13 @@ function check_system_integrity() {
}
}
}
/*** System template file check ***/
$system_template = CHV_APP_PATH_CONTENT_SYSTEM . 'template.php';
if(!file_exists($system_template)) {
$install_errors[] = "<code>".G\absolute_to_relative($system_template)."</code> doesn't exists. Make sure to upload this.";
}
/*** License file ***/
$license_file = G_APP_PATH . 'license/check.php';
if(!file_exists($license_file)) {
@ -136,9 +136,8 @@ function check_system_integrity() {
} else {
require_once($license_file);
}
/*** .htaccess checks (only for Apache) ***/
/*** .htaccess checks (only for Apache) ***/
if(G\is_apache()) {
// Check for the root .htaccess file
if(!file_exists(G_ROOT_PATH . '.htaccess')) {

View file

@ -1,18 +1,37 @@
<?php
/* --------------------------------------------------------------------
Chevereto
http://chevereto.com/
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
`--/++++++++:.
`./ydNNMMMMMMMMMMmo.`
-+hNMMMMCOMPRENMMMMMMmh-
`oNMMMMMMMMLAMWEAMMMMMMMNy-
.hMMMMMMMMCONCHETUMAREMMMMMMN+`
+mMMMMMMMMMTENGOMQUEMVIVIRMMMMMo. .// :///////:./: .:/+/:.
:MMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMm/` /MN oyymMmyyo:Mm`-mNysyNd-
.mMMMMd+:-sshMMMMMMMMMMMMMMMMMMMMMMd` /MN yMs `yo /Nm+:-/+-
/NNMN+.. sMMMMMMMMNymNMMMMMNNdmMd` /MN yMs :shmmmh:
oodm-`o: yMMMMMMNmy-./hNMMN/. +mh` /MN yMs oy/``.sMm
``o- .. `oMMMMMMyshh::``sMMy`///.y: /NN sNs -dNhyhmm+
:.`+/`` `oMMMMMMMhmMyom+mNMMMdNoohhs `:- .:. -:/:-`
-.-Ndd/smMMMMMMMMMMMMNNMMMMMMMmdNdMN.
.o:dhyMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMo
- mMMMMMMMMMMMMMMMMMyyNhhhmmhsdMMM/ ```````` ``````` ```````` `````````
` +MMMMMMMMMMMMMMNyhNMhdNh-`.:-/Ns dMNmmmm+ yMNmmmNNs` hMNmmmmm: yMNmmmmm:
` `hMmMMMMMMMMMMy/yMMMMMMMMMMN: `` mM/ yMy -NM: hMo yMs
` `./MMMMMMMMMMNo:osyh+os+/..-+/ mMmmmmh` yMNdddmmo` hMNmmmmh yMNmmmmd
+MMMMMMMMMMM+y//-```````/NN- mM+.... yMh-/mNy` hMo````` yMs`````
+MMMMMMMMMMMMMNho/s/-:+dNMs mM/ yMy .yMd- hMhoo+oo- yMdoo+o+:
.mMMMMMMMMMMMMMMMMMMNddNMhs` /o- :o: `/+/ /ooooooo- :oo+oooo:
` .sdMMMMMMMdNMMMMMMy/-+NmoMh
.-.. `/hhhNMMy/dMMMMMNNNNNoNN:
-:/-/.` `-sdyydNd+/yhmmNMNhomm/
-/:- -sNdshmd/::--//shy.
`:dMmhhdhsoo+/-sm`
`oNMMNm: +d
`-hMMh` `d`
`om. :d`
.- +d`
--------------------------------------------------------------------- */
$license = 'Free:version';

View file

@ -23,8 +23,6 @@ use G, Exception;
if(!defined('access') or !access) die('This file cannot be directly accessed.');
setlocale(LC_ALL, 'en_US.UTF8');
// settings.php workaround
if(!is_readable(dirname(__FILE__) . '/settings.php')) {
if(!@fopen(dirname(__FILE__) . '/settings.php', 'w')) {
@ -35,6 +33,14 @@ if(!is_readable(dirname(__FILE__) . '/settings.php')) {
// G thing
(file_exists(dirname(dirname(__FILE__)) . '/lib/G/G.php')) ? require_once(dirname(dirname(__FILE__)) . '/lib/G/G.php') : die("Can't find lib/G/G.php");
// Require at least X memory to do the thing
$min_memory = '256M';
$memory_limit = ini_get('memory_limit');
$memory_limit_bytes = $memory_limit ? G\get_ini_bytes($memory_limit) : 0;
if($memory_limit_bytes < G\get_ini_bytes($min_memory)) {
@ini_set('memory_limit', $min_memory); // Careful with that Axe, Eugene
}
// CHV\DB instance
// CHV\Settings Instance
try {
@ -60,6 +66,7 @@ define('CHV_APP_PATH_CONTENT', G_APP_PATH . 'content/');
define('CHV_APP_PATH_LIB_VENDOR', G_APP_PATH . 'vendor/');
define('CHV_APP_PATH_CONTENT_SYSTEM', CHV_APP_PATH_CONTENT . 'system/');
define('CHV_APP_PATH_CONTENT_LANGUAGES', CHV_APP_PATH_CONTENT . 'languages/');
define('CHV_APP_PATH_CONTENT_LOCKS', CHV_APP_PATH_CONTENT . 'locks/');
// CHV paths
define('CHV_PATH_IMAGES', G_ROOT_PATH . CHV_FOLDER_IMAGES . '/');
@ -177,7 +184,6 @@ if(!Settings::get('chevereto_version_installed')) {
// Process showPingPixel (automatic updates check)
if(class_exists('CHV\Lock') && Settings::get('enable_automatic_updates_check') && array_key_exists('ping', $_REQUEST) && $_REQUEST['r']) {
die();
if(is_null(Settings::get('update_check_datetimegmt')) || G\datetime_add(Settings::get('update_check_datetimegmt'), 'P1D') < G\datetimegmt()) {
try {
L10n::setLocale(Settings::get('default_language')); // Force system language
@ -219,7 +225,7 @@ if(is_readable(G_APP_PATH . 'chevereto-hook.php')) {
// Fix the default system images (must be done here because CHV_PATH_CONTENT_IMAGES_SYSTEM)
foreach([
'favicon_image' => 'favicon.png',
'favicon_image' => 'favicon.png',
'logo_vector' => 'logo.svg',
'logo_image' => 'logo.png',
'watermark_image' => 'watermark.png',
@ -244,8 +250,6 @@ foreach([
}
}
}
if($homepage_cover_image !== getSetting('homepage_cover_image')) {
Settings::update(['homepage_cover_image' => $homepage_cover_image]);
}
@ -337,7 +341,7 @@ register_shutdown_function(function() {
try {
if(!isset($hook_before)) {
$hook_before = function($handler) {
$time = G\get_execution_time();
// Handle agree consent stuff
if(array_key_exists('agree-consent', $_GET)) {
setcookie('AGREE_CONSENT', 1, time()+(60*60*24*30), G_ROOT_PATH_RELATIVE); // 30-day cookie
@ -345,7 +349,6 @@ try {
G\redirect(preg_replace('/([&\?]agree-consent)/', NULL, G\get_current_url()));
}
// ACE OF BASE
$base = $handler::$base_request;
// Parse this sh*t right away
@ -355,16 +358,16 @@ try {
$handler::setVar('auth_token', $handler::getAuthToken());
$handler::setVar('doctitle', getSetting('website_name'));
$handler::setVar('meta_description', getSetting('website_description'));
$handler::setVar('meta_keywords', getSetting('website_keywords'));
$handler::setVar('logged_user', Login::getUser());
$handler::setVar('failed_access_requests', 0); // Init
$handler::setVar('header_logo_link', G\get_base_url());
$handler::setCond('admin', Login::getUser()['is_admin']);
$handler::setCond('maintenance', getSetting('maintenance') AND !Login::getUser()['is_admin']);
$handler::setCond('admin', Login::isAdmin());
$handler::setCond('maintenance', getSetting('maintenance') AND !Login::isAdmin());
$handler::setCond('show_consent_screen', $base !== 'api' && (getSetting('enable_consent_screen') ? !(Login::getUser() OR isset($_SESSION['agree-consent']) OR isset($_COOKIE['AGREE_CONSENT'])) : FALSE));
$handler::setCond('captcha_needed', getSetting('recaptcha') AND getSetting('recaptcha_threshold') == 0);
$handler::setCond('show_header', !($handler::getCond('maintenance') OR $handler::getCond('show_consent_screen')));
$handler::setCond('show_notifications', FALSE);
$handler::setCond('allowed_to_delete_content', Login::isAdmin() || getSetting('enable_user_content_delete'));
// Login if maintenance /dashboard
if($handler::getCond('maintenance') && $handler->request_array[0] == 'dashboard') {
@ -540,22 +543,35 @@ try {
$pages_visible[$v['id']] = $v;
}
}
if(getSetting('enable_plugin_route')) {
$plugin_page = [
'type' => 'link',
'link_url' => G\get_base_url('plugin'),
'icon' => 'icon-code2',
'title' => _s('Plugin'),
'is_active' => 1,
'is_link_visible' => 1,
];
Page::fill($plugin_page);
array_unshift($pages_visible, $plugin_page);
}
$handler::setVar('pages_link_visible', $pages_visible);
// Allowed/Enabled upload conditional
$upload_enabled = Login::getUser()['is_admin'] ? TRUE : getSetting('enable_uploads');
$upload_enabled = Login::isAdmin() ? TRUE : getSetting('enable_uploads');
$upload_allowed = $upload_enabled;
if(!Login::getUser()) {
if(!getSetting('guest_uploads') || getSetting('website_privacy_mode') == 'private' || $handler::getCond('maintenance')) {
$upload_allowed = FALSE;
}
} else if(!Login::getUser()['is_admin'] && getSetting('website_mode') == 'personal' && getSetting('website_mode_personal_uid') !== Login::getUser()['id']) {
} else if(!Login::isAdmin() && getSetting('website_mode') == 'personal' && getSetting('website_mode_personal_uid') !== Login::getUser()['id']) {
$upload_allowed = FALSE;
}
$handler::setCond('upload_enabled', $upload_enabled);
$handler::setCond('upload_allowed', $upload_allowed);
$handler::setCond('upload_enabled', $upload_enabled); // System allows to upload?
$handler::setCond('upload_allowed', $upload_allowed); // Target peer can upload?
// Maintenance mode + Consent screen
if($handler::getCond('maintenance') || $handler::getCond('show_consent_screen')) {
@ -567,12 +583,19 @@ try {
}
// Inject system notices
$handler::setVar('system_notices', Login::getUser()['is_admin'] ? getSystemNotices() : NULL);
$handler::setVar('system_notices', Login::isAdmin() ? getSystemNotices() : NULL);
if(!in_array($handler->request_array[0], ['login', 'signup', 'account', 'connect', 'logout', 'json', 'api'])) {
$_SESSION['last_url'] = G\get_current_url();
}
if(!isset($_SESSION['is_mobile_device'])) {
$_SESSION['is_mobile_device'] = FALSE;
if(@require_once CHV_APP_PATH_LIB_VENDOR . '/serbanghita/Mobile_Detect.php') {
$detect = new \Mobile_Detect;
$_SESSION['is_mobile_device'] = $detect->isMobile();
}
}
$handler::setCond('mobile_device', isset($_SESSION['is_mobile_device']) ? $_SESSION['is_mobile_device'] : NULL);
};
}
if(!isset($hook_after)) {

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,53 +17,53 @@
$route = function($handler) {
try {
if($handler->isRequestLevel(4)) return $handler->issue404(); // Allow only 3 levels
if(is_null($handler->request[0])) {
return $handler->issue404();
}
$logged_user = CHV\Login::getUser();
// User status override redirect
CHV\User::statusRedirect($logged_user['status']);
$id = CHV\decodeID($handler->request[0]);
$tables = CHV\DB::getTables();
// Session stock viewed albums
if(!$_SESSION['album_view_stock']) {
$_SESSION['album_view_stock'] = [];
}
$album = CHV\Album::getSingle($id, !in_array($id, $_SESSION['album_view_stock']), TRUE, $logged_user);
// Stock this album view
$_SESSION['album_view_stock'][] = $id;
// No album or belogns to a banned user?
if(!$album || (!$logged_user['is_admin'] and $album['user']['status'] !== 'valid')) {
return $handler->issue404();
}
$is_owner = $album['user']['id'] == $logged_user['id'];
// Password protected content
// Password protected content
if(!($handler::getCond('admin') || $is_owner) && $album['privacy'] == 'password' && isset($album['password'])) {
$is_error = FALSE;
$error_message = NULL;
$failed_access_requests = CHV\Requestlog::getCounts('content-password', 'fail');
// GTFO
if(CHV\is_max_invalid_request($failed_access_requests['day'])) {
G\set_status_header(403);
$handler->template = 'request-denied';
return;
}
$captcha_needed = $handler::getCond('captcha_needed');
if($captcha_needed && $_POST['content-password']) {
$captcha = CHV\recaptcha_check();
@ -72,7 +72,7 @@ $route = function($handler) {
$error_message = _s("The reCAPTCHA wasn't entered correctly");
}
}
if(!$is_error) {
if(isset($_POST['content-password']) && CHV\Album::checkPassword($album['password'], $_POST['content-password'])) {
CHV\Album::storeUserPasswordHash($album['id'], $_POST['content-password']);
@ -86,10 +86,10 @@ $route = function($handler) {
}
}
}
$handler::setCond('error', $is_error);
$handler::setVar('error', $error_message);
if($is_error) {
if(CHV\getSettings()['recaptcha'] && CHV\must_use_recaptcha($failed_access_requests['day'] + 1)) {
$captcha_needed = TRUE;
@ -104,13 +104,13 @@ $route = function($handler) {
}
}
// Private profile
if($album['user']['is_private'] && !$logged_user['is_admin'] && $album["user"]["id"] !== $logged_user['id']) {
unset($album['user']);
$album['user'] = CHV\User::getPrivate();
}
// Privacy
if($handler::getCond('forced_private_mode')) {
$album['privacy'] = CHV\getSetting('website_content_privacy_mode');
@ -120,13 +120,13 @@ $route = function($handler) {
}
$safe_html_album = G\safe_html($album);
// List
$list_params = CHV\Listing::getParams(); // Use CHV magic params
$type = 'images';
$where = 'WHERE image_album_id=:image_album_id';
$list = new CHV\Listing;
$list->setType($type); // images | users | albums
$list->setOffset($list_params['offset']);
@ -144,11 +144,11 @@ $route = function($handler) {
$list->setTools(TRUE);
}
$list->exec();
// Tabs
$tabs = CHV\Listing::getTabs([
'listing' => 'images',
'basename' => $album['url'],
'basename' => G\get_route_name() . '/' . $album['id_encoded'],
'params_hidden' => ['list' => 'images', 'from' => 'album', 'albumid' => $album['id_encoded']],
]);
@ -160,14 +160,16 @@ $route = function($handler) {
'id' => 'tab-share',
];
}
$tabs[] = [
'list' => FALSE,
'tools' => FALSE,
'label' => _s('Embed codes'),
'id' => 'tab-codes',
];
if(CHV\getSetting('theme_show_embed_content')) {
$tabs[] = [
'list' => FALSE,
'tools' => FALSE,
'label' => _s('Embed codes'),
'id' => 'tab-codes',
];
}
if($logged_user['is_admin']) {
$tabs[] = [
'list' => FALSE,
@ -176,12 +178,12 @@ $route = function($handler) {
'id' => 'tab-full-info',
];
}
foreach($tabs as $k => &$v) {
if(!isset($v['params'])) continue;
$class_tabs[$k]['disabled'] = $album['image_count'] == 0 ? !$v['current'] : FALSE;
}
$handler::setCond('owner', $is_owner);
$handler::setVars([
'pre_doctitle' => $safe_html_album['name'],
@ -191,7 +193,7 @@ $route = function($handler) {
'list' => $list,
'owner' => $album['user']
]);
// Populate the album meta description
if($album['description']) {
$meta_description = $album['description'];
@ -199,7 +201,7 @@ $route = function($handler) {
$meta_description = _s('%a album hosted in %w', ['%a' => $album['name'], '%w' => CHV\getSetting('website_name')]);
}
$handler::setVar('meta_description', htmlspecialchars($meta_description));
// Items editor
if($handler::getCond('admin') or $is_owner) {
$handler::setVar('user_items_editor', [
@ -207,7 +209,7 @@ $route = function($handler) {
"type" => "images"
]);
}
// Sharing
$share_element = array(
"referer" => G\get_base_url(),
@ -216,9 +218,9 @@ $route = function($handler) {
);
$share_element["HTML"] = '<a href="'.$share_element["url"].'" title="'.$share_element["title"].'">'.$safe_html_album["name"].' ('.$album['image_count'].' '._n('image', 'images', $album['user']['image_count']).')</a>';
$share_links_array = CHV\render\get_share_links($share_element);
$handler::setVar('share_links_array', $share_links_array);
// Share modal
$handler::setVar('share_modal', [
'type' => 'album',
@ -227,7 +229,7 @@ $route = function($handler) {
'privacy' => $album['privacy'],
'privacy_notes' => $album['privacy_notes'],
]);
} catch(Exception $e) {
G\exception_to_error($e);
}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,19 +17,19 @@
$route = function($handler) {
try {
if(!CHV\getSetting('website_explore_page')) {
return $handler->issue404();
}
$category = NULL;
$categories = $handler::getVar('categories');
$category_url_key = $handler->request[0];
if(!$category_url_key) {
G\redirect('explore');
}
if($category_url_key) {
foreach($categories as $k => $v) {
// Set category info
@ -50,7 +50,7 @@ $route = function($handler) {
'basename' => G\get_route_name() . '/' . $category['url_key'],
'params_hidden' => ['category_id' => $category['id'], 'hide_banned' => 1],
]);
// List
$list_params = CHV\Listing::getParams(); // Use CHV magic params
$list = new CHV\Listing;
@ -67,13 +67,12 @@ $route = function($handler) {
$meta_description = $category['description'] ?: NULL;
$handler::setVar('meta_description', htmlspecialchars($meta_description));
$handler::setVar('meta_keywords', $category['name']);
$handler::setVar('category', $category);
$handler::setVar('tabs', $tabs);
$handler::setVar('list', $list);
$handler->template = 'explore';
} catch(Exception $e) {
G\exception_to_error($e);
}

View file

@ -179,7 +179,7 @@ $route = function($handler) {
_s('Bug tracking') => 'https://chevereto.com/bug-tracking',
_s('Blog') => 'https://chevereto.com/blog',
_s('Community') => 'https://chevereto.com/community',
'GitHub' => 'https://github.com/Chevereto/Chevereto-Free',
'GitHub' => 'https://github.com/Chevereto',
];
$chevereto_links = [];
foreach($chevereto_urls as $k => $v) {
@ -413,14 +413,6 @@ $route = function($handler) {
$page_file_path_clean = trim(G\sanitize_relative_path($_POST['page_file_path']), '/');
// Disable PHP pages here
if(G\get_app_setting('disable_php_pages')) {
$page_extension = G\get_file_extension($page_file_path_clean);
if($page_extension == 'php') {
$page_file_path_clean = G\str_replace_last($page_extension, 'html', $page_file_path_clean);
}
}
$_POST['page_file_path'] = str_replace('default/', NULL, $page_file_path_clean);
$_POST['page_file_path_absolute'] = CHV\Page::getPath($_POST['page_file_path']);
@ -644,7 +636,7 @@ $route = function($handler) {
],
'page_file_path' =>
[
'validate' => $_POST['page_type'] == 'internal' ? preg_match('/^[\w\-\_\/]+\.('.(G\get_app_setting('disable_php_pages') ? 'html' : 'html|php').')$/', $_POST['page_file_path']) : TRUE,
'validate' => $_POST['page_type'] == 'internal' ? preg_match('/^[\w\-\_\/]+\.php$/', $_POST['page_file_path']) : TRUE,
'error_msg' => _s('Invalid file path')
],
'page_link_url' =>
@ -687,6 +679,11 @@ $route = function($handler) {
'validate' => $_POST['auto_delete_guest_uploads'] !== NULL && array_key_exists($_POST['auto_delete_guest_uploads'], CHV\Image::getAvailableExpirations()),
'error_msg' => _s('Invalid value: %s', $_POST['auto_delete_guest_uploads'])
],
'sdk_pup_url' =>
[
'validate' => $_POST['sdk_pup_url'] ? filter_var($_POST['sdk_pup_url'], FILTER_VALIDATE_URL) : TRUE,
'error_msg' => _s('Invalid URL')
],
];
// Detect funny stuff
@ -1062,7 +1059,6 @@ $route = function($handler) {
$settings_to_vars = [
'website_doctitle' => 'doctitle',
'website_description' => 'meta_description',
'website_keywords'=> 'meta_keywords'
];
foreach($update_settings as $k => $v) {
if($k == 'maintenance') {

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,54 +17,53 @@
$route = function($handler) {
try {
$logged_user = CHV\Login::getUser();
if(!CHV\getSetting('website_explore_page') && !$logged_user['is_admin']) {
return $handler->issue404();
}
$doing = $handler->request[0];
if(!$doing && CHV\getSetting('homepage_style') == 'route_explore' && strpos(G\get_current_url(), G\get_base_url(G\get_route_name())) !== FALSE) {
$redir = G\str_replace_first(G\get_base_url(G\get_route_name()), G\get_base_url(), G\get_current_url());
G\redirect($redir);
}
$explore_semantics = $handler::getVar('explore_semantics');
if(isset($doing) && !array_key_exists($doing, $explore_semantics)) {
return $handler->issue404();
}
if($handler->isRequestLevel(3)) return $handler->issue404(); // Allow only 3 levels
$basename = CHV\getSetting('homepage_style') == 'route_explore' && $handler->getCond('mapped_route') ? NULL : G\get_route_name();
if($doing) {
$basename .= ($basename ? '/' : NULL) . $doing;
}
$listing = isset($doing) ? $explore_semantics[$doing] : ['label' => _s('Explore'), 'icon' => 'icon-images2'];
$listing['list'] = is_null($doing) ? G\get_route_name() : $doing;
$listingParams = [
'listing' => $listing['list'],
'basename' => $basename,
'params_hidden' => ['hide_empty' => 1, 'hide_banned' => 1],
];
if($doing == 'animated') {
$listingParams['params_hidden']['is_animated'] = 1;
}
$tabs = CHV\Listing::getTabs($listingParams, TRUE);
$currentKey = $tabs['currentKey'];
$currentKey = $tabs['currentKey'];
$type = $tabs['tabs'][$currentKey]['type'];
$tabs = $tabs['tabs'];
parse_str($tabs[$currentKey]['params'], $tabs_params);
$list_params = CHV\Listing::getParams(); // Use CHV magic params
$list_params['sort'] = explode('_', $tabs_params['sort']); // Hack this stuff
@ -79,20 +78,25 @@ $route = function($handler) {
$list->setRequester(CHV\Login::getUser());
$list->setParamsHidden($listingParams['params_hidden']);
$list->exec();
$handler::setVar('listing', $listing);
$handler::setVar('pre_doctitle', _s('Explore'));
//$handler::setVar('meta_keywords', NULL);
if(CHV\getSetting('homepage_style') == 'route_explore') {
$handler::setVar('doctitle', CHV\Settings::get('website_doctitle'));
$handler::setVar('pre_doctitle', CHV\Settings::get('website_name'));
} else {
$handler::setVar('pre_doctitle', _s('Explore'));
}
$handler::setVar('category', NULL);
$handler::setVar('tabs', $tabs);
$handler::setVar('list', $list);
if($logged_user['is_admin']) {
$handler::setVar('user_items_editor', FALSE);
}
} catch(Exception $e) {
G\exception_to_error($e);
}
};
};

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,45 +17,45 @@
$route = function($handler) {
try {
if($handler->isRequestLevel(3)) return $handler->issue404(); // Allow only 2 levels
if(is_null($handler->request[0])) {
return $handler->issue404();
}
$logged_user = CHV\Login::getUser();
// User status override redirect
CHV\User::statusRedirect($logged_user['status']);
$id = CHV\decodeID($handler->request[0]);
$tables = CHV\DB::getTables();
if($id==0) {
return $handler->issue404();
}
// Trail this view
$_SESSION['last_viewed_image'] = CHV\encodeId($id);
// Session stock viewed images
if(!$_SESSION['image_view_stock']) {
$_SESSION['image_view_stock'] = [];
}
// Get image DB
$image = CHV\Image::getSingle($id, !in_array($id, $_SESSION['image_view_stock']), TRUE, $logged_user);
// Stock this image view
$_SESSION['image_view_stock'][] = $id;
// No image or belongs to a banned user if exists?
if(!$image || (!$logged_user['is_admin'] && $image['user']['status'] == 'banned')) {
return $handler->issue404();
}
// Test local images
if($image['file_resource']['type'] == 'path') {
if(!$image['file_resource']['chain']['image'] || !file_exists($image['file_resource']['chain']['image'])) {
@ -67,7 +67,7 @@ $route = function($handler) {
$image['is_animated'] = 1;
}
}
/*
Note: Remote image testing was removed because of the HUGE number of websites running external containers unaccesible via HTTP.
Remote image test works only if the website can fetch the image URI headers.
@ -75,18 +75,18 @@ $route = function($handler) {
*/
$is_owner = $image['user']['id'] !== NULL ? ($image['user']['id'] == $logged_user['id']) : false;
// Password protected content
if(!($handler::getCond('admin') || $is_owner) && $image['album']['privacy'] == 'password' && !CHV\Album::checkSessionPassword($image['album'])) {
G\redirect($image['album']['url']);
}
// Private profile
if($image['user']['is_private'] && !$logged_user['is_admin'] && $image["user"]["id"] !== $logged_user['id']) {
unset($image['user']);
$image['user'] = CHV\User::getPrivate();
}
// Privacy
if($handler::getCond('forced_private_mode')) {
$image['album']['privacy'] = CHV\getSetting('website_content_privacy_mode');
@ -94,29 +94,29 @@ $route = function($handler) {
if(!$handler::getCond('admin') and in_array($image['album']['privacy'], array('private', 'custom')) and !$is_owner) {
return $handler->issue404();
}
$db = CHV\DB::getInstance();
// User found
if($image['user']['id'] !== NULL) {
// Get user albums
$name_array = explode(' ', $image['user']['name']);
$user_name_short = $name_array[0];
$image['user']['albums'] = [];
// Lets fake the stream as an album
$image['user']['albums']['stream'] = CHV\User::getStreamAlbum($image['user']);
// Get user album list
$image['user']['albums'] += CHV\DB::get('albums', ['user_id' => $image['user']['id']], 'AND', ['field' => 'name', 'order' => 'asc']);
foreach($image['user']['albums'] as $k => $v) {
$image['user']['albums'][$k] = CHV\DB::formatRow($v, 'album');
CHV\Album::fill($image['user']['albums'][$k]);
}
}
// Get the album slice
@ -125,11 +125,11 @@ $route = function($handler) {
$image_album_slice_db = $get_album_slice['db'];
$image_album_slice = array_merge($image['album'], $get_album_slice['formatted']);
}
$image_safe_html = G\safe_html($image);
$pre_doctitle = $image_safe_html['title'] ?: ($image_safe_html['name'].'.'.$image_safe_html['extension']) . ' hosted at ' . CHV\getSetting('website_name');
$tabs = [
[
"label" => _s('About'),
@ -143,16 +143,16 @@ $route = function($handler) {
"id" => "tab-codes",
];
}
if($handler::getCond('admin')) {
$tabs[] = [
"label" => _s('Full info'),
"id" => "tab-full-info"
];
// Banned uploader IP?
$banned_uploader_ip = CHV\Ip_ban::getSingle(['ip' => $image['uploader_ip']]);
// Admin list values
$image_admin_list_values = [
[
@ -172,11 +172,11 @@ $route = function($handler) {
'content' => $image['date_gmt'] . ' (GMT)'
]
];
$handler::setVar('image_admin_list_values', $image_admin_list_values);
$handler::setCond('banned_uploader_ip', (bool)$banned_uploader_ip);
}
foreach($tabs as $tab) {
if($tab['current'] === TRUE) {
$handler::setVar('current_tab', G\str_replace_first('tab-', NULL, $tab['id']));
@ -192,12 +192,6 @@ $route = function($handler) {
$handler::setVar('tabs', $tabs);
$handler::setVar('owner', $image['user']);
// Populate image category to meta keywords
$category = $handler::getVar('categories')[$image['category_id']];
if($category) {
$handler::setVar('meta_keywords', _s('%s images', $category['name']) . ', ' . $handler::getVar('meta_keywords'));
}
// Populate the image meta description
if($image['description']) {
$meta_description = $image['description'];
@ -217,7 +211,7 @@ $route = function($handler) {
}
}
$handler::setVar('meta_description', htmlspecialchars($meta_description));
if($handler::getCond('admin') or $is_owner) {
$handler::setVar('user_items_editor', [
'user_albums' => $image['user']['albums'],
@ -226,7 +220,7 @@ $route = function($handler) {
'category_id' => $image['category_id']
]);
}
// Share thing
$share_element = [
'referer' => G\get_base_url(),
@ -237,7 +231,7 @@ $route = function($handler) {
$share_element['HTML'] = '<a href="'.$share_element["url"].'" title="'.$share_element["title"].'"><img src="'.$share_element["image"].'" /></a>';
$share_links_array = CHV\render\get_share_links($share_element);
$handler::setVar('share_links_array', $share_links_array);
// Share modal
$handler::setVar('share_modal', [
'type' => 'image',
@ -246,20 +240,20 @@ $route = function($handler) {
'privacy' => $image['album']['privacy'],
'privacy_notes' => $image['album']['privacy_notes'],
]);
// Embed codes
$embed = [];
$embed['direct-links'] = [
'label' => _s('Direct links'),
'entries' => [
[
'label' => _s('Image URL'),
'value' => $image['url']
],
[
'label' => _s('Image link'),
'value' => $image['url_viewer']
],
[
'label' => _s('Image URL'),
'value' => $image['url']
],
[
'label' => _s('Thumbnail URL'),
'value' => $image['thumb']['url']
@ -272,13 +266,13 @@ $route = function($handler) {
'value' => $image['medium']['url']
];
}
$image_full = [
'html' => '<img src="'.$image['url'].'" alt="'.$image['filename'].'" border="0" />',
'markdown' => '!['.$image['filename'].']('.$image['url'].')'
];
$image_full['bbcode'] = G\html_to_bbcode($image_full['html']);
$embed['full-image'] = [
'label' => _s('Full image'),
'entries' => [
@ -296,11 +290,11 @@ $route = function($handler) {
],
]
];
$embed_full_linked['html'] = '<a href="'.$image['url_viewer'].'">'.$image_full['html'].'</a>';
$embed_full_linked['bbcode'] = G\html_to_bbcode($embed_full_linked['html']);
$embed_full_linked['markdown'] = '[!['.$image['filename'].']('.$image['url'].')]('.$image['url_viewer'].')';
$embed['full-linked'] = [
'label' => _s('Full image (linked)'),
'entries' => [
@ -318,7 +312,7 @@ $route = function($handler) {
],
]
];
if($image['medium']) {
$embed_medium_linked = array(
"html" => '<a href="'.$image['url_viewer'].'"><img src="'.$image['medium']['url'].'" alt="'.$image['filename'].'" border="0" /></a>'
@ -343,13 +337,13 @@ $route = function($handler) {
]
];
}
$embed_thumb_linked = [
'html' => '<a href="'.$image['url_viewer'].'"><img src="'.$image['thumb']['url'].'" alt="'.$image['filename'].'" border="0" /></a>'
];
$embed_thumb_linked['bbcode'] = G\html_to_bbcode($embed_thumb_linked['html']);
$embed_thumb_linked['markdown'] = '[!['.$image['thumb']['filename'].']('.$image['thumb']['url'].')]('.$image['url_viewer'].')';
$embed['thumb-linked'] = [
'label' => _s('Thumbnail image (linked)'),
'entries' => [
@ -367,7 +361,7 @@ $route = function($handler) {
],
]
];
// Insert an embed id for each entry (for the cliboard.js bind)
$embed_id = 1;
foreach($embed as &$v) {
@ -376,9 +370,9 @@ $route = function($handler) {
$embed_id++;
}
}
$handler::setVar('embed', $embed);
} catch(Exception $e) {
G\exception_to_error($e);
}

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,41 +17,42 @@
$route = function($handler) {
try {
// Parse the current query string
// Parse the current query string
parse_str($_SERVER['QUERY_STRING'], $querystr);
if(!in_array(key($querystr), ['random', 'lang']) and CHV\Settings::get('homepage_style') == 'route_explore') {
$handler->mapRoute('explore');
include G_APP_PATH_ROUTES . 'route.explore.php';
return $route($handler);
}
$logged_user = CHV\Login::getUser();
// User status override redirect
CHV\User::statusRedirect($logged_user['status']);
// Process the index query string requests like "?lang=en"
if($_SERVER['QUERY_STRING']) {
switch(key($querystr)){
// Party Boy
case 'random':
if(!CHV\getSetting('website_random')) {
break;
}
$tables = CHV\DB::getTables();
$db = CHV\DB::getInstance();
$db->query('SELECT MIN(image_id) as min, MAX(image_id) as max FROM '.$tables['images']);
$limit = $db->fetchSingle();
// Try to get the right image
$random_ids = G\random_values($limit['min'], $limit['max'], 100);
if(is_null($random_ids)) {
G\redirect();
} else {
@ -62,14 +63,14 @@ $route = function($handler) {
if($limit['min'] !== $limit['max']) {
// Do NOT show the last viewed image
$last_viewed_image = CHV\decodeID($_SESSION['last_viewed_image']);
$last_viewed_image = CHV\decodeID($_SESSION['last_viewed_image']);
if(($key = array_search($last_viewed_image, $random_ids)) !== false) {
unset($random_ids[$key]);
}
}
$query = 'SELECT image_id FROM '.$tables['images'].' LEFT JOIN '.$tables['albums'].' ON '.$tables['images'].'.image_album_id = '.$tables['albums'].'.album_id WHERE image_id IN ('.join(',', $random_ids).") AND (album_privacy = 'public' OR album_privacy IS NULL) ";
// Don't show NSFW in random mode
if(!CHV\getSetting('show_nsfw_in_random_mode')) {
if($logged_user) {
@ -78,21 +79,21 @@ $route = function($handler) {
$query .= 'AND '.$tables['images'].'.image_nsfw = 0 ';
}
}
if($handler::getCond('forced_private_mode')) {
$query .= 'AND '.$tables['images'].'.image_user_id = '.$logged_user['id'].' ';
}
$query .= 'ORDER BY RAND() LIMIT 1';
$db->query($query);
$imageID = $db->fetchSingle()['image_id'];
$image = CHV\Image::getSingle($imageID, false, true);;
// Does exists in the disk?
if($image['file_resource']['chain']['image'] == NULL) $image = false;
if(!$image) {
if($_SESSION['random_failure'] > 3) {
G\redirect();
@ -102,37 +103,37 @@ $route = function($handler) {
} else {
unset($_SESSION['random_failure']);
}
return G\redirect($image ? CHV\Image::getUrlViewer(CHV\encodeID($imageID)) : '?random');
break;
// Set the language by cookie then redirect to the original referer
case 'lang':
if(!CHV\getSetting('language_chooser_enable')) {
return G\redirect();
}
// Valid lang?
if(!array_key_exists($querystr['lang'], CHV\get_available_languages())) {
return G\redirect();
}
$logged_user = CHV\Login::getUser();
if($logged_user and $logged_user['language'] !== $querystr['lang']) {
CHV\User::update($logged_user['id'], ['language' => $querystr['lang']]);
}
// Store selected language in cookie
setcookie('USER_SELECTED_LANG', $querystr['lang'], time()+(60*60*24*30), G_ROOT_PATH_RELATIVE);
// Final redir
G\redirect($_SESSION['REQUEST_REFERER']);
break;
// Legacy 1.X viewer request (?v=file.ext)
case 'v':
if(preg_match('{^\w*\.jpg|png|gif$}', $_GET['v'])) {
@ -144,11 +145,11 @@ $route = function($handler) {
G\redirect($image['url_viewer']);
}
}
}
$handler->issue404();
break;
// Allow any /?list=
case 'list':
$handler->template = 'index';
@ -156,7 +157,7 @@ $route = function($handler) {
}
}
if (CHV\Settings::get('homepage_style') == 'split') {
// Tabs
$tabs = [
@ -167,12 +168,12 @@ $route = function($handler) {
'type' => 'image'
]
];
// Handle the home uids
$home_uids = CHV\getSetting('homepage_uids');
$home_uid_is_null = ($home_uids == '' or $home_uids == '0' ? true : false);
$home_uid_is_null = ($home_uids == '' or $home_uids == '0' ? true : false);
$home_uid_arr = !$home_uid_is_null ? explode(',', $home_uids) : false;
if(is_array($home_uid_arr)) {
$home_uid_bind = [];
foreach($home_uid_arr as $k => $v) {
@ -183,7 +184,7 @@ $route = function($handler) {
}
$home_uid_bind = implode(',', $home_uid_bind);
}
$list = new CHV\Listing;
$list->setType('images');
$list->setOffset(0);
@ -201,23 +202,23 @@ $route = function($handler) {
foreach($home_uid_arr as $k => $v) {
$list->bind(':user_id_' . $k, $v);
}
}
}
$list->exec();
$list->pagination = false;
$handler::setVar('tabs', $tabs);
$handler::setVar('list', $list);
}
$handler::setVar('doctitle', CHV\Settings::get('website_doctitle'));
$handler::setVar('pre_doctitle', CHV\Settings::get('website_name'));
if($logged_user['is_admin']) {
$handler::setVar('user_items_editor', false);
}
} catch(Exception $e) {
G\exception_to_error($e);
}
};
};

View file

@ -38,7 +38,6 @@ $route = function($handler) {
break;
case 'upload': // EX 100
// Is upload allowed anyway?
if(!$handler::getCond('upload_allowed')) {
throw new Exception(_s('Request denied'), 401);
@ -521,9 +520,7 @@ $route = function($handler) {
$id = $_REQUEST['editing']['id'];
// Validate IP
if(!G\is_valid_ip($editing['ip'])) {
throw new Exception('Invalid IP address', 101);
}
CHV\Ip_ban::validateIP($editing['ip']);
// Validate expiration
if(!empty($editing['expires']) and !preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $editing['expires'])) {
@ -689,9 +686,7 @@ $route = function($handler) {
$ip_ban = G\array_filter_array($_REQUEST['ip_ban'], ['ip', 'expires', 'message'], 'exclusion');
// Validate IP
if(!G\is_valid_ip($ip_ban['ip'])) {
throw new Exception('Invalid IP address', 101);
}
CHV\Ip_ban::validateIP($ip_ban['ip']);
// Validate expiration
if(!empty($ip_ban['expires']) and !preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $ip_ban['expires'])) {
@ -908,6 +903,11 @@ $route = function($handler) {
$deleting = $_REQUEST['deleting'];
$type = $_REQUEST['delete'];
if(!$logged_user['is_admin'] && !CHV\getSetting('enable_user_content_delete') && (G\starts_with('image', $type) || G\starts_with('album', $type))) {
throw new Exception('Forbidden action', 403);
}
$owner_id = $_REQUEST['owner'] != NULL ? CHV\decodeID($_REQUEST['owner']) : $logged_user['id'];
$multiple = $_REQUEST['multiple'] == 'true';
@ -1045,82 +1045,20 @@ $route = function($handler) {
break;
case 'test':
if(!$logged_user['is_admin']) {
throw new Exception('Invalid request', 403);
}
switch($_REQUEST['test']['object']) {
case 'email':
// Validate email
if(!filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL)) {
throw new Exception(_s('Invalid email'), 100);
}
CHV\send_mail($_REQUEST['email'], _s('Test email from %s @ %t', ['%s' => CHV\getSetting('website_name'), '%t' => G\datetime()]), _s('This is just a test'));
$json_array['success'] = ['message' => _s('Test email sent to %s.', $_REQUEST['email']), 'code' => 200];
break;
}
break;
case 'notifications':
if(!$logged_user) {
throw new Exception('Invalid request', 403);
}
$notification_array = [
'user_id' => $logged_user['id']
];
$notifications = CHV\Notification::get($notification_array);
CHV\Notification::markAsRead($notification_array);
$json_array['status_code'] = 200;
if($notifications) {
$json_array['html'] = '';
$template = '<li%class>%avatar<span class="notification-text">%message</span><span class="how-long-ago">%how_long_ago</span></li>';
$avatar_src_tpl = [
0 => '<span class="user-image default-user-image"><span class="icon icon-user"></span></span>',
1 => '<img class="user-image" src="%user_avatar_url" alt="%user_name_short_html">'
];
$avatar_tpl = [
0 => $avatar_src_tpl[0],
1 => '<a href="%user_url">%user_avatar</a>'
];
foreach($notifications as $k => $v) {
$content_type = $v['content_type'];
switch($v['type']) {
case 'like':
$message = _s('%u liked your %t %c', [
'%t' => _s($content_type),
'%c' => '<a href="'.$v[$content_type]['url_viewer'].'">' . $v[$content_type][($content_type == 'image' ? 'title' : 'name') . '_truncated_html'] . '</a>'
]);
break;
case 'follow':
$message = _s('%u is now following you');
break;
}
$v['message'] = strtr($message, [
'%u' => $v['user']['is_private'] ? _s('A private user') : ('<a href="'.$v['user']['url'].'">'.$v['user']['name_short_html'].'</a>'),
]);
if($v['user']['is_private']) {
$avatar = $avatar_tpl[0];
} else {
$avatar = strtr($avatar_tpl[1], [
'%user_url' => $v['user']['url'],
'%user_avatar' => strtr($avatar_src_tpl[isset($v['user']['avatar']) ? 1 : 0], [
'%user_avatar_url' => $v['user']['avatar']['url'],
'%user_name_short_html' => $v['user']['name_short_html'],
]),
]);
}
$json_array['html'] .= strtr($template, [
'%class' => !$v['is_read'] ? ' class="new"' : NULL,
'%avatar' => $avatar,
'%user_url' => $v['user']['url'],
'%message' => $v['message'],
'%how_long_ago' => CHV\time_elapsed_string($v['date_gmt']),
]);
if(!$logged_user['is_admin']) {
throw new Exception('Invalid request', 403);
}
unset($content_type);
} else {
$json_array['html'] = NULL;
}
break;
switch($_REQUEST['test']['object']) {
case 'email':
// Validate email
if(!filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL)) {
throw new Exception(_s('Invalid email'), 100);
}
CHV\send_mail($_REQUEST['email'], _s('Test email from %s @ %t', ['%s' => CHV\getSetting('website_name'), '%t' => G\datetime()]), '<p>' . _s('This is just a test') . '</p>');
$json_array['success'] = ['message' => _s('Test email sent to %s.', $_REQUEST['email']), 'code' => 200];
break;
}
break;
case 'upgrade':
try {

View file

@ -19,6 +19,7 @@ $route = function($handler) {
try {
if($_POST and !$handler::checkAuthToken($_REQUEST['auth_token'])) {
G\set_status_header(403);
$handler->template = 'request-denied';
return;
}

View file

@ -9,41 +9,41 @@
<inbox@rodolfoberrios.com>
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) {
$request_url_key = implode('/', $handler->request);
// Get this page
$page = CHV\Page::getSingle($request_url_key);
// Exists or is active or is type default?
if(!$page or !$page['is_active'] or $page['type'] !== 'internal') {
return $handler->issue404();
}
// No file path set
if(!$page['file_path_absolute']) {
return $handler->issue404();
}
// File path doesn't exists
if(!file_exists($page['file_path_absolute'])) {
return $handler->issue404();
}
$pathinfo = pathinfo($page['file_path_absolute']);
$page_extension = G\get_file_extension($page['file_path_absolute']);
// Inject theme based path
$handler->path_theme = G\add_ending_slash($pathinfo['dirname']);
$handler->template = $pathinfo['filename'] . '.' . $page_extension;
// Add page meta data
$page_metas = [
'pre_doctitle' => $page['title'],
@ -54,84 +54,4 @@ $route = function($handler) {
if($v == NULL) continue;
$handler->setVar($k, $v);
}
if($_POST and $_POST['chv-contact-form'] == 1) {
$allowed_subjects = [
'general' => _s('General questions/comments'),
'dmca' => _s('DMCA complaint'),
];
if(!G\Handler::checkAuthToken($_REQUEST['auth_token'])) {
die(_s("Request denied"));
}
// Validate post data
if(strlen($_POST['name']) == 0) {
$input_errors['name'] = _s('Invalid name');
}
if(strlen($_POST['message']) == 0) {
$input_errors['message'] = _s('Invalid message');
}
if(!array_key_exists($_POST['subject'], $allowed_subjects)) {
$input_errors['subject'] = _s('Invalid subject');
}
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$input_errors['email'] = _s('Invalid email');
}
if(CHV\getSettings()['recaptcha']) {
$captcha = CHV\recaptcha_check();
if(!$captcha->is_valid) {
$input_errors['recaptcha'] = _s('Invalid reCAPTCHA');
}
}
if(count($input_errors) > 0) {
$is_error = TRUE;
$error = _s("Can't submit the form: %s", implode(', ', $input_errors));
} else {
$email = trim($_POST['email']);
$subject = CHV\getSettings()['website_name'] . ' contact form';
$name = $_POST['name'];
$send_mail = [
'to' => CHV\getSettings()['email_incoming_email'],
'from' => [CHV\getSettings()['email_from_email'], $name . ' (' . CHV\getSettings()['website_name'] . ' contact form)'],
'reply-to' => [$email]
];
$body_arr = [ // Mail body array (easier to edit)
'Name' => $name,
'E-mail' => $email,
'User' => (CHV\Login::isLoggedUser() ? CHV\Login::getUser()['url'] : 'not user'),
'Subject' => $_POST['subject'] . "\n",
'Message' => $_POST['message'] . "\n",
'IP' => G\get_client_ip(),
'Browser' => getenv("HTTP_USER_AGENT"),
'URL' => G\get_base_url() . "\n"
];
// Format body message
$body = '';
foreach($body_arr as $k => $v) {
$body .= $k . ': ' . $v . "\n";
}
// Mail send handle
try {
CHV\send_mail($send_mail, $subject, $body);
$is_sent = TRUE;
$success = _s('Message sent. We will get in contact soon.');
} catch(Exception $e) {
$is_error = TRUE;
$error = _s('Mail error') . ': ' . $e->getMessage();
}
}
if($page_extension == 'html') {
$growl = ($is_error and $error) ? $error : (($is_sent and $success) ? $success : NULL);
if($growl) {
$handler->hookTemplate(['where' => 'after', 'code' =>
'<script>$(document).ready(function() {
PF.fn.growl.call("'.$growl.'")
});</script>']
);
}
}
}
};

108
app/routes/route.plugin.php Normal file
View file

@ -0,0 +1,108 @@
<?php
/* --------------------------------------------------------------------
Chevereto
http://chevereto.com/
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
<inbox@rodolfoberrios.com>
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\getSetting('enable_plugin_route') && !CHV\Login::isAdmin()) {
return $handler->issue404();
}
$src = CHV\getSetting('sdk_pup_url') ?: G\get_base_url('sdk/pup.js');
$src = G\str_replace_first('https:', '', $src);
G\Render\include_theme_file('snippets/embed');
$embed_tpl = G\get_global('embed_tpl');
$embed = [];
foreach($embed_tpl as $kGroup => $vGroup) {
foreach($vGroup['options'] as $k => $v) {
if($k == 'bbcode-embed-medium') {
$k = NULL;
}
$embed[$k] = $v['label'];
}
}
$tagAttrs = [
'async' => '',
'src' => $src,
'data-url' => G\get_base_url('upload')
];
$tagCode = '<script';
foreach($tagAttrs as $k => $v) {
$tagCode .= ' ' . $k;
if($v) {
$tagCode .= '="' . $v .'"';
}
}
$tagCode .= '></script>';
$plugin = [
'tagAttrs' => $tagAttrs,
'tagCode' => $tagCode,
'table' => [
'%cClass' => 'chevereto-pup-container',
'%bClass' => 'chevereto-pup-button',
'%iClass' => 'chevereto-pup-button-icon',
'%iconSvg' => '<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M76.7 87.5c12.8 0 23.3-13.3 23.3-29.4 0-13.6-5.2-25.7-15.4-27.5 0 0-3.5-0.7-5.6 1.7 0 0 0.6 9.4-2.9 12.6 0 0 8.7-32.4-23.7-32.4 -29.3 0-22.5 34.5-22.5 34.5 -5-6.4-0.6-19.6-0.6-19.6 -2.5-2.6-6.1-2.5-6.1-2.5C10.9 25 0 39.1 0 54.6c0 15.5 9.3 32.7 29.3 32.7 2 0 6.4 0 11.7 0V68.5h-13l22-22 22 22H59v18.8C68.6 87.4 76.7 87.5 76.7 87.5z"/></svg>',
],
'vendors' => [
'bbPress',
'Discourse',
'Discuz!',
'Invision Power Board',
'MyBB',
'NodeBB',
'phpBB',
'Simple Machines Forum',
'Vanilla Forums',
'vBulletin',
'XenForo'
],
'palettes' => [
'default' => ['#ececec','#000','#2980b9','#fff'],
'clear' => ['inherit','inherit','inherit','#2980b9'],
'turquoise' => ['#16a085','#fff','#1abc9c','#fff'],
'green' => ['#27ae60','#fff','#2ecc71','#fff'],
'blue' => ['#2980b9','#fff','#3498db','#fff'],
'purple' => ['#8e44ad','#fff','#9b59b6','#fff'],
'darkblue' => ['#2c3e50','#fff','#34495e','#fff'],
'yellow' => ['#f39c12','#fff','#f1c40f','#fff'],
'orange' => ['#d35400','#fff','#e67e22','#fff'],
'red' => ['#c0392b','#fff','#e74c3c','#fff'],
'grey' => ['#ececec','#000','#e0e0e0','#000'],
'black' => ['#333','#fff','#666','#fff']
],
'button' => '<div class="%cClass"><button id="pup-preview" class="%bClass %bClass--palette-default"><span class="%iClass">%iconSvg</span><span class="%tClass">' . _s('Upload images') . '</span></button></div>',
'baseCss' => '.%cClass{display:inline-block;margin-top:5px;margin-bottom:5px}.%bClass{-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s;outline:0;border:none;cursor:pointer;border:1px solid rgba(0,0,0,.05);border-radius:.2em;padding:.5em 1em;font-size:12px;font-weight:700;text-shadow:none}.%bClass:hover{border-top-color:rgba(255,255,255,.1);border-right-color:rgba(0,0,0,.05);border-bottom-color:rgba(0,0,0,.1);border-left-color:rgba(0,0,0,.05);}.%iClass{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-item-align:center;align-self:center;position:relative;height:1em;width:1em;margin-right:.25em}.%iClass img,.%iClass svg{width:1em;height:1em;bottom:-.125em;position:absolute}.%iClass svg{fill:currentColor}',
'paletteCss' => '.%bClass--palette-%palette{color:%2;background:%1}.%bClass--palette-%palette:hover{background:%3;color:%4}',
'embed' => $embed,
];
$palette_css_rules = '';
foreach($plugin['palettes'] as $palette => $colors) {
$paletteTable = $plugin['table'];
$paletteTable['%palette'] = $palette;
foreach($colors as $index => $color) {
$paletteTable['%' . ($index + 1)] = $color;
}
$palette_css_rules .= strtr($plugin['paletteCss'], $paletteTable);
}
foreach(['button', 'baseCss'] as $v) {
$plugin[$v] = strtr($plugin[$v], $plugin['table']);
}
$plugin['stylesheet'] = '<style type="text/css" id="chevereto-pup-style">' . $plugin['baseCss'] . $palette_css_rules . '</style>';
$handler::setVar('plugin', $plugin);
$handler::setVar('pre_doctitle', _s('Upload plugin'));
} catch(Exception $e) {
G\exception_to_error($e);
}
};

View file

@ -9,7 +9,7 @@
<inbox@rodolfoberrios.com>
Copyright (C) Rodolfo Berrios A. All rights reserved.
BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
http://chevereto.com/license
@ -17,32 +17,32 @@
$route = function($handler) {
try {
$logged_user = CHV\Login::getUser();
if(!CHV\getSetting('website_search') && !$logged_user['is_admin']) {
return $handler->issue404();
}
if($_POST and !$handler::checkAuthToken($_REQUEST['auth_token'])) {
$handler->template = 'request-denied';
return;
}
if($handler->isRequestLevel(4)) return $handler->issue404(); // Allow only 3 levels
if(empty($handler->request[0])) {
return $handler->issue404();
}
// User status override redirect
CHV\User::statusRedirect($logged_user['status']);
// Valid search type
if(!in_array($handler->request[0], ['images', 'albums', 'users'])) {
return $handler->issue404();
}
// Build search params
$search = new CHV\Search;
$search->q = $_REQUEST['q'];
@ -50,13 +50,13 @@ $route = function($handler) {
$search->request = $_REQUEST;
$search->requester = CHV\Login::getUser();
$search->build();
if(!G\check_value($search->q)) {
return G\redirect();
}
$safe_html_search = G\safe_html($search->display);
try {
/*** Listing ***/
$list_params = CHV\Listing::getParams(); // Use CHV magic params
@ -75,7 +75,7 @@ $route = function($handler) {
$list->output_tpl = $search->type;
$list->exec();
} catch(Exception $e) {} // Silence to avoid wrong input queries
$tabs = CHV\Listing::getTabs([
'listing' => 'search',
'basename' => 'search',
@ -85,7 +85,7 @@ $route = function($handler) {
foreach($tabs as $k => &$v) {
$v['current'] = $v['type'] == $search->type;
}
// _s() must be bind in this way for the PO grabber
switch($search->type) {
case 'images':
@ -98,19 +98,18 @@ $route = function($handler) {
$meta_description = _s('User search results for %s');
break;
}
$handler::setVar('pre_doctitle', _s('Search'));
$handler::setVar('meta_description', sprintf($meta_description, $safe_html_search['q']));
//$handler::setVar('meta_keywords', NULL);
$handler::setVar('search', $search->display);
$handler::setVar('safe_html_search', $safe_html_search);
$handler::setVar('tabs', $tabs);
$handler::setVar('list', $list);
if($logged_user['is_admin']) {
$handler::setVar('user_items_editor', false);
}
} catch(Exception $e) {
G\exception_to_error($e);
}

View file

@ -23,6 +23,7 @@ $route = function($handler) {
}
if($_POST and !$handler::checkAuthToken($_REQUEST['auth_token'])) {
G\set_status_header(403);
$handler->template = 'request-denied';
return;
}

View file

@ -0,0 +1,36 @@
<?php
/* --------------------------------------------------------------------
Chevereto
http://chevereto.com/
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
<inbox@rodolfoberrios.com>
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(!$handler::getCond('upload_allowed')) {
if(CHV\Login::getUser()) {
G\set_status_header(403);
$handler->template = 'request-denied';
return;
} else {
G\redirect('login');
}
}
$logged_user = CHV\Login::getUser();
// User status override redirect
CHV\User::statusRedirect($logged_user['status']);
$handler::setVar('pre_doctitle', _s('Upload')); // Wow, such creativity. Very smart.
} catch(Exception $e) {
G\exception_to_error($e);
}
};

View file

@ -156,7 +156,8 @@ $route = function($handler) {
}
// Tabs
$base_user_url = basename($user['url']);
$base_user_url = $user['url'];
foreach($user_views as $k => $v) {
$handler::setCond('user_' . $k, $v['current']);
if($v['current']) {

View file

@ -9,16 +9,11 @@
<?php if(get_meta_description()) { ?>
<meta name="description" content="<?php echo get_meta_description(); ?>">
<?php } ?>
<?php if(get_meta_keywords()) { ?>
<meta name="keywords" content="<?php echo get_meta_keywords(); ?>">
<?php } ?>
<title><?php echo get_doctitle(); ?></title>
<?php CHV\Render\include_peafowl_head(); ?>
<link rel="stylesheet" href="<?php echo CHV\Render\get_theme_file_url('style.css'); ?>">
<link rel="shortcut icon" href="<?php echo CHV\get_system_image_url(CHV\getSetting('favicon_image')); ?>">
<link rel="icon" type="image/png" href="<?php echo CHV\get_system_image_url(CHV\getSetting('favicon_image')); ?>" sizes="192x192">
<link rel="apple-touch-icon" href="<?php echo CHV\get_system_image_url(CHV\getSetting('favicon_image')); ?>" sizes="180x180">
@ -157,7 +152,7 @@ foreach($twitter_card as $k => $v) {
if(is_maintenance() || is_show_consent_screen()) {
$body_class = '';
}
$top_bar_class = CHV\getSetting('theme_top_bar_color');
?>
<?php
@ -178,20 +173,20 @@ foreach($twitter_card as $k => $v) {
$logo_header = CHV\getSetting($logo_header);
?>
<div id="logo" class="top-bar-logo"><a href="<?php echo get_header_logo_link(); ?>"><img class="replace-svg" src="<?php echo CHV\get_system_image_url($logo_header); ?>" alt="<?php echo CHV\getSetting('website_name'); ?>"></a></div>
<?php if(CHV\getSetting('website_privacy_mode') == 'public' or (CHV\getSetting('website_privacy_mode') == 'private' and CHV\Login::getUser())) { ?>
<ul class="top-bar-left float-left">
<li data-action="top-bar-menu-full" data-nav="mobile-menu" class="top-btn-el phone-show hidden">
<span class="top-btn-text"><span class="icon icon-menu3"></span></span>
</li>
<?php
if(CHV\getSetting('website_explore_page')) {
// Category selector
?>
<li id="top-bar-explore" data-nav="explore" class="phone-hide pop-btn pop-btn-auto pop-btn-auto pop-btn-show<?php if(in_array(G\get_route_name(), ['explore','category'])) { ?> current<?php } ?>">
<li id="top-bar-explore" data-nav="explore" class="phone-hide pop-keep-click pop-btn pop-btn-show<?php if(in_array(G\get_route_name(), ['explore','category'])) { ?> current<?php } ?>">
<?php
$cols = 1;
$categories = get_categories();
@ -207,7 +202,7 @@ foreach($twitter_card as $k => $v) {
?>
<span class="top-btn-text"><span class="icon icon-stack"></span><span class="btn-text phone-hide phablet-hide"><?php _se('Explore'); ?></span></span>
<div class="pop-box <?php if($cols > 1) { echo sprintf('pbcols%d ', $cols); } ?>arrow-box arrow-box-top anchor-left">
<div class="pop-box-inner pop-box-menu<?php if($cols > 1) { ?> pop-box-menucols<?php } ?>">
<?php
if(function_exists('get_explore_semantics')) {
@ -252,14 +247,14 @@ foreach($twitter_card as $k => $v) {
<?php
}
?>
<?php if(CHV\getSetting('website_search')) { ?>
<li data-action="top-bar-search" data-nav="search" class="phone-hide pop-btn">
<span class="top-btn-text"><span class="icon icon-search"></span><span class="btn-text phone-hide phablet-hide"><?php _se('Search'); ?></span></span>
</li>
<li data-action="top-bar-search-input" class="top-bar-search-input phone-hide pop-btn pop-keep-click hidden">
<div class="input-search">
<form action="<?php echo G\get_base_url("search/images"); ?>" method="get">
<form action="<?php echo G\get_base_url("search/images"); ?>/" method="get">
<input class="search" type="text" placeholder="<?php _se('Search'); ?>" autocomplete="off" spellcheck="false" name="q">
</form>
<span class="icon-search"></span><span class="icon close icon-close" data-action="clear-search" title="<?php _se('Close'); ?>"></span><span class="icon settings icon-triangle-down" data-modal="form" data-target="advanced-search" title="<?php _se('Advanced search'); ?>"></span>
@ -270,17 +265,17 @@ foreach($twitter_card as $k => $v) {
<?php G\Render\include_theme_file('snippets/form_advanced_search'); ?>
</div>
<?php } ?>
<?php if(CHV\getSetting('website_random')) { ?>
<li id="top-bar-random" data-nav="random" class="top-btn-el phone-hide">
<a href="<?php echo G\get_base_url("?random"); ?>"><span class="top-btn-text"><span class="icon icon-shuffle"></span><span class="btn-text phone-hide phablet-hide"><?php _se('Random'); ?></span></span></a>
</li>
<?php } ?>
</ul>
<?php } ?>
<ul class="top-bar-right float-right keep-visible">
<?php if(get_system_notices()) { ?>
<li data-nav="notices" class="phone-hide pop-btn pop-keep-click">
<span class="top-btn-text"><span class="icon icon-notification color-red"></span><span class="btn-text phone-hide phablet-hide"><?php _se('Notices (%s)', count(get_system_notices())); ?></span></span>
@ -295,13 +290,13 @@ foreach($twitter_card as $k => $v) {
</div>
</li>
<?php } ?>
<?php if(is_upload_enabled()) { ?>
<li data-action="top-bar-upload" data-nav="upload" class="pop-btn"<?php if(!CHV\getSetting('guest_uploads')) { ?> data-login-needed="true"<?php } ?>>
<li data-action="top-bar-upload" data-nav="upload" class="<?php if(G\is_route("upload")) echo "current "; ?>pop-btn phone-hide"<?php if(!CHV\getSetting('guest_uploads')) { ?> data-login-needed="true"<?php } ?>>
<span class="top-btn-text"><span class="icon icon-cloud-upload"></span><span class="btn-text phone-hide phablet-hide"><?php _se('Upload'); ?></span></span>
</li>
<?php } ?>
<?php
if(!CHV\Login::isLoggedUser()) {
?>
@ -316,7 +311,7 @@ foreach($twitter_card as $k => $v) {
?>
<li id="top-bar-signin" data-nav="signin" class="<?php if(G\is_route("login")) echo "current "; ?>pop-btn pop-btn-delayed pop-account pop-keep-click">
<span class="top-btn-text"><span class="icon icon-login tablet-hide laptop-hide desktop-hide"></span><span class="text phone-hide phablet-hide"><?php _se('Sign in'); ?></span></span>
<div id="top-signin-menu" class="pop-box c8 arrow-box arrow-box-top anchor-<?php echo (get_pages_link_visible() && CHV\getSetting('enable_signups')) ? 'center' : 'right'; ?>">
<div id="top-signin-menu" class="pop-box anchor-center c8 arrow-box arrow-box-top">
<div class="pop-box-inner">
<?php
if(CHV\getSetting('social_signin')) {
@ -356,14 +351,14 @@ foreach($twitter_card as $k => $v) {
if(is_captcha_needed()) {
?>
<li id="top-bar-signup" data-nav="signup" class="<?php if(G\is_route("signup")) echo "current "; ?>phone-hide top-btn-el">
<a href="<?php echo G\get_base_url('signup'); ?>" class="top-btn-text top-btn-create-account btn <?php echo CHV\getSetting('theme_top_bar_button_color'); ?> text"><span class="icon icon-user phablet-hide tablet-hide laptop-hide desktop-hide"></span><?php _se('Create account'); ?></a>
<a href="<?php echo G\get_base_url('signup'); ?>" class="top-btn-text top-btn-create-account btn <?php echo CHV\getSetting('theme_top_bar_button_color'); ?> text"><span class="icon icon-user2 phablet-hide tablet-hide laptop-hide desktop-hide"></span><?php _se('Create account'); ?></a>
</li>
<?php
} else {
} else {
?>
<li id="top-bar-signup" data-nav="signup" class="<?php if(G\is_route("signup")) echo "current "; ?>phone-hide pop-btn pop-btn-delayed pop-account pop-keep-click">
<span class="top-btn-text top-btn-create-account btn <?php echo CHV\getSetting('theme_top_bar_button_color'); ?> text"><span class="icon icon-user phablet-hide tablet-hide laptop-hide desktop-hide"></span><?php _se('Create account'); ?></span>
<div id="top-signup-menu" class="pop-box anchor-<?php echo get_pages_link_visible() ? 'center' : 'right'; ?> c8 arrow-box arrow-box-top">
<span class="top-btn-text top-btn-create-account btn <?php echo CHV\getSetting('theme_top_bar_button_color'); ?> text"><span class="icon icon-user2 phablet-hide tablet-hide laptop-hide desktop-hide"></span><?php _se('Create account'); ?></span>
<div id="top-signup-menu" class="pop-box anchor-center c8 arrow-box arrow-box-top">
<div class="pop-box-inner">
<?php
if(CHV\getSetting('social_signin')) {
@ -390,10 +385,10 @@ foreach($twitter_card as $k => $v) {
</div>
</li>
<?php
}
}
} // signups
?>
<?php
} else {
if(is_show_notifications()) {
@ -401,12 +396,12 @@ foreach($twitter_card as $k => $v) {
$notifications_display = CHV\Login::getUser()['notifications_unread_display'];
$notifications_counter = strtr('<span data-content="notifications-counter" class="top-btn-number%c">'.$notifications_display.'</span>', ['%c' => $notifications_unread > 0 ? ' on' : NULL]);
?>
<li data-action="top-bar-notifications" class="top-bar-notifications pop-btn pop-keep-click margin-right-5 phone-hide">
<li data-action="top-bar-notifications" class="top-bar-notifications pop-btn pop-keep-click">
<div class="top-btn-text">
<div class="soft-hidden menu-fullscreen-show"><span class="icon icon-bell2"></span><?php echo $notifications_counter; ?><span class="btn-text"><?php _se('Notifications'); ?></span></div>
<div class="menu-fullscreen-hide"><?php echo $notifications_counter; ?></div>
<div class="menu-fullscreen-hide"><span class="icon icon-bell2"></span><?php echo $notifications_counter; ?></div>
</div>
<div class="top-bar-notifications-container c9 pop-box arrow-box arrow-box-top anchor-right">
<div class="top-bar-notifications-container c9 pop-box arrow-box arrow-box-top anchor-center">
<div class="pop-box-inner">
<div class="top-bar-notifications-header phone-hide phablet-hide">
<h2><?php _se('Notifications'); ?></h2>
@ -425,17 +420,17 @@ foreach($twitter_card as $k => $v) {
</div>
</div>
</li>
<?php
<?php
}
?>
<li id="top-bar-user" data-nav="user" class="pop-btn pop-btn-delayed phone-hide<?php echo is_show_notifications() ? ' margin-left-0' : NULL; ?>">
<li id="top-bar-user" data-nav="user" class="pop-btn pop-keep-click pop-btn-delayed <?php echo is_show_notifications() ? ' margin-left-10' : NULL; ?>">
<span class="top-btn-text">
<?php if(CHV\Login::getUser()["avatar"]["url"]) { ?>
<img src="<?php echo CHV\Login::getUser()["avatar"]["url"]; ?>" alt="" class="user-image">
<?php } else { ?>
<img src="" alt="" class="user-image hidden">
<?php } ?>
<span class="user-image default-user-image<?php echo (CHV\Login::getUser()["avatar"]["url"] ? ' hidden' : ''); ?>"><span class="icon icon-user"></span></span>
<span class="user-image default-user-image<?php echo (CHV\Login::getUser()["avatar"]["url"] ? ' hidden' : ''); ?>"><span class="icon icon-user2"></span></span>
<span class="text phone-hide"><?php echo CHV\Login::getUser()["name_short_html"]; ?></span><span class="phone-hide arrow-down"></span>
</span>
<div class="pop-box arrow-box arrow-box-top anchor-right">
@ -466,13 +461,13 @@ foreach($twitter_card as $k => $v) {
<?php
}
?>
<?php
<?php
if(CHV\getSetting('website_privacy_mode') == 'public' or (CHV\getSetting('website_privacy_mode') == 'private' and CHV\Login::getUser())) {
?>
<?php
if(get_pages_link_visible()) {
?>
<li data-nav="about" class="phone-hide pop-btn pop-btn-delayed">
<li data-nav="about" class="phone-hide pop-btn pop-keep-click pop-btn-delayed">
<span class="top-btn-text"><span class="icon icon-info tablet-hide laptop-hide desktop-hide"></span><span class="text phone-hide phablet-hide"><?php _se('About'); ?></span><span class="arrow-down"></span></span>
<div class="pop-box arrow-box arrow-box-top anchor-right">
<div class="pop-box-inner pop-box-menu">
@ -501,7 +496,7 @@ foreach($twitter_card as $k => $v) {
$cols = min(6, ceil(count($enabled_languages) / 6));
?>
<span class="top-btn-text"><span class="text"><?php echo CHV\get_language_used()['short_name']; ?></span><span class="arrow-down"></span></span>
<div class="pop-box <?php if($cols > 1) { echo sprintf('pbcols%d ', $cols); } ?>arrow-box arrow-box-top anchor-right">
<div class="pop-box <?php if($cols > 1) { echo sprintf('pbcols%d ', $cols); } ?>arrow-box arrow-box-top anchor-center">
<div class="pop-box-inner pop-box-menu<?php if($cols > 1) { ?> pop-box-menucols<?php } ?>">
<ul>
<?php
@ -520,9 +515,9 @@ foreach($twitter_card as $k => $v) {
<?php
}
?>
</ul>
</div>
</header>
<?php } ?>

View file

@ -7,38 +7,40 @@ if(CHV\Login::isLoggedUser()) {
}
}
?>
<div id="anywhere-upload" class="upload-box upload-box--fixed upload-box--hidden">
<div id="anywhere-upload" class="upload-box upload-box--fixed upload-box--hidden queueEmpty" data-queue-size="0">
<div class="content-width">
<div class="upload-box-inner">
<div class="upload-box-heading c16 center-box">
<div class="upload-box-status">
<div data-group="upload">
<span class="icon icon-download2 cursor-pointer" data-trigger="anywhere-upload-input"></span>
<div class="heading phone-hide phablet-hide"><a data-trigger="anywhere-upload-input"><?php _se('Drag and drop or paste images here to upload'); ?></a></div>
<div class="heading tablet-hide laptop-hide desktop-hide"><a data-trigger="anywhere-upload-input"><?php _se('Select the images to upload'); ?></a></div>
<div class="phone-hide phablet-hide upload-box-status-text"><?php _se('You can also %i or %u.', [
<div class="heading device-mobile--hide"><a data-trigger="anywhere-upload-input"><?php _se('Drag and drop or paste images here to upload'); ?></a></div>
<div class="heading device-nonmobile--hide"><a data-trigger="anywhere-upload-input"><?php _se('Select the images to upload'); ?></a></div>
<div class="device-mobile--hide upload-box-status-text"><?php _se('You can also %i or %u.', [
'%i' => '<a data-trigger="anywhere-upload-input">' . _s('browse from your computer') . '</a>',
'%u' => '<a data-modal="form" data-target="anywhere-upload-paste-url">' . _s('add image URLs') . '</a>',
]); ?></div>
<div class="tablet-hide laptop-hide desktop-hide upload-box-status-text"><?php _se('You can also %i or %u.', [
'%i' => '<a data-trigger="anywhere-upload-input-camera">' . _s('take a picture') . '</a>',
<div class="device-nonmobile--hide upload-box-status-text"><?php _se('You can also %i, %c or %u.', [
'%i' => '<a data-trigger="anywhere-upload-input">' . _s('browse from your device') . '</a>',
'%c' => '<a data-trigger="anywhere-upload-input-camera">' . _s('take a picture') . '</a>',
'%u' => '<a data-modal="form" data-target="anywhere-upload-paste-url">' . _s('add image URLs') . '</a>',
]); ?></div>
</div>
<div data-group="upload-queue-ready" class="soft-hidden">
<span class="icon icon-images" data-trigger="anywhere-upload-input"></span>
<div class="heading phone-hide phablet-hide"><?php _se('Edit or resize any image by clicking the image preview'); ?></div>
<div class="heading tablet-hide laptop-hide desktop-hide"><?php _se('Edit or resize any image by touching the image preview'); ?></div>
<div class="phone-hide phablet-hide upload-box-status-text"><?php _se('You can keep adding more images from %i or from %u.', [
<div class="heading device-mobile--hide"><?php _se('Edit or resize any image by clicking the image preview'); ?></div>
<div class="heading device-nonmobile--hide"><?php _se('Edit any image by touching the image preview'); ?></div>
<div class="device-mobile--hide upload-box-status-text"><?php _se('You can add more images from %i or %u.', [
'%i' => '<a data-trigger="anywhere-upload-input">' . _s('your computer') . '</a>',
'%u' => '<a data-modal="form" data-target="anywhere-upload-paste-url">' . _s('image URLs') . '</a>',
'%u' => '<a data-modal="form" data-target="anywhere-upload-paste-url">' . _s('add image URLs') . '</a>',
]); ?></div>
<div class="tablet-hide laptop-hide desktop-hide upload-box-status-text"><?php _se('You can keep adding more images from %i or from %u.', [
<div class="device-nonmobile--hide upload-box-status-text"><?php _se('You can add more images from %i, %c or %u.', [
'%i' => '<a data-trigger="anywhere-upload-input">' . _s('your device') . '</a>',
'%u' => '<a data-modal="form" data-target="anywhere-upload-paste-url">' . _s('image URLs') . '</a>',
'%c' => '<a data-trigger="anywhere-upload-input-camera">' . _s('take a picture') . '</a>',
'%u' => '<a data-modal="form" data-target="anywhere-upload-paste-url">' . _s('add image URLs') . '</a>',
]); ?></div>
</div>
<div data-group="uploading" class="soft-hidden">
@ -55,7 +57,7 @@ if(CHV\Login::isLoggedUser()) {
<div class="upload-box-status-text">
<div data-group="user" class="soft-hidden">
<div data-group="user-stream" class="soft-hidden">
<?php
<?php
$uploaded_message = _s('Uploaded content added to %s.') . ' ';
if(CHV\Login::getUser()['album_count'] > 0) {
$uploaded_message .= _s('You can %c with the content just uploaded or %m.');
@ -66,7 +68,7 @@ if(CHV\Login::isLoggedUser()) {
'%s' => '<a data-text="upload-target" data-link="upload-target"></a>',
'%c' => '<a data-modal="form" data-target="form-uploaded-create-album">' . _s('create a new album') . '</a>',
'%m' => '<a data-modal="form" data-target="form-uploaded-move-album">' . _s('move it to an existing album') . '</a>',
]);
]);
?>
</div>
<div data-group="user-album" class="soft-hidden"><?php _se('Uploaded content added to %s.', '<a data-text="upload-target" data-link="upload-target"></a>'); ?></div>
@ -84,18 +86,18 @@ if(CHV\Login::isLoggedUser()) {
</div>
</div>
</div>
<input id="anywhere-upload-input" data-action="anywhere-upload-input"<?php if(!CHV\getSetting('guest_uploads')) { ?> data-login-needed="true"<?php } ?> class="hidden-visibility" type="file" accept="<?php echo '.' . implode(',.', CHV\Image::getEnabledImageFormats()); ?>" multiple>
<input id="anywhere-upload-input-camera" data-action="anywhere-upload-input"<?php if(!CHV\getSetting('guest_uploads')) { ?> data-login-needed="true"<?php } ?> class="hidden-visibility" type="file" capture="camera" accept="image/*">
<ul id="anywhere-upload-queue" class="upload-box-queue content-width soft-hidden" data-group="upload-queue"></ul>
<div id="anywhere-upload-submit" class="btn-container text-align-center margin-bottom-0 soft-hidden" data-group="upload-queue-ready">
<div data-group="upload-queue-ready">
<?php
if(CHV\Login::isLoggedUser() && CHV\Login::getUser()['album_count'] > 0) {
?>
<div class="input-label c8 center-box text-align-left">
<div class="input-label upload-input-col center-box text-align-left">
<label for="upload-album-id"><?php _se('Album', 'Albums', 1); ?></label>
<select name="upload-album-id" id="upload-album-id" class="text-input">
<?php
@ -104,7 +106,7 @@ if(CHV\Login::isLoggedUser()) {
$user_album_options_html[] = strtr('<option value="%id"%selected>%name</option>', [
'%selected' => (function_exists('get_album') && get_album()['id_encoded'] == $album['id_encoded']) ? ' selected' : NULL,
'%id' => $album['id_encoded'],
'%name' => $album['name_with_privacy_readable']
'%name' => $album['name_with_privacy_readable_html']
]);
}
$user_album_options_html = implode("\n", $user_album_options_html);
@ -118,7 +120,7 @@ if(CHV\Login::isLoggedUser()) {
<?php
if(get_categories()) {
?>
<div class="input-label c8 center-box text-align-left">
<div class="input-label upload-input-col center-box text-align-left">
<label for="upload-category-id"><?php _se('Category'); ?></label>
<select name="upload-category-id" id="upload-category-id" class="text-input">
<option value><?php _se('Select category'); ?></option>
@ -147,19 +149,21 @@ if(CHV\Login::isLoggedUser()) {
<button class="btn plain disabled btn-big plain margin-right-5" disabled data-action="upload-privacy-copy"><span class="icon icon-unlocked" data-lock="icon-lock" data-unlock="icon-unlocked"></span></button><button class="btn btn-big disabled off" disabled><?php _se('Uploading'); ?></button> <span class="btn-alt"><?php _se('or'); ?> <a data-action="cancel-upload" data-button="close-cancel"><?php _se('cancel'); ?></a><a data-action="cancel-upload-remaining" data-button="close-cancel" class="soft-hidden"><?php _se('cancel remaining'); ?></a></span>
</div>
</div>
<div id="anywhere-upload-report">
<div data-group="upload-result" data-result="mixted" class="soft-hidden margin-top-10 text-align-center upload-box-status-text"><?php _se("Note: Some images couldn't be uploaded."); ?> <a data-modal="simple" data-target="failed-upload-result"><?php _se('learn more'); ?></a></div>
<div data-group="upload-result" data-result="error" class="soft-hidden margin-top-10 text-align-center upload-box-status-text"><?php _se('Check the <a data-modal="simple" data-target="failed-upload-result">error report</a> for more information.'); ?></div>
</div>
<div class="upload-box-allowed-files position-absolute"><span class="phone-hide"><?php echo str_replace(',', ' ', strtoupper(CHV\getSetting('upload_enabled_image_formats'))); ?></span> <span><?php _se('max'); ?> <?php echo G\format_bytes(G\get_bytes(CHV\getSetting('upload_max_filesize_mb').'MB')); ?></span></div>
<div class="upload-box-allowed-files position-absolute"><span><?php echo str_replace(',', ' ', strtoupper(CHV\getSetting('upload_enabled_image_formats'))); ?></span><span> <?php echo G\format_bytes(G\get_bytes(CHV\getSetting('upload_max_filesize_mb').'MB')); ?></span></div>
<div class="upload-box-close position-absolute">
<a data-action="reset-upload" data-button="close-cancel"><span class="btn-icon icon-loop2"></span><span class="btn-text"><?php _se('reset'); ?></span></a>
<a data-action="close-upload" data-button="close-cancel"><span class="btn-icon icon-close"></span><span class="btn-text"><?php _se('close'); ?></span></a>
<a data-action="cancel-upload" data-button="close-cancel" class="soft-hidden"><span class="btn-icon icon-close"></span><span class="btn-text"><?php _se('cancel'); ?></span></a>
<a data-action="cancel-upload-remaining" data-button="close-cancel" class="soft-hidden"><span class="btn-icon icon-close"></span><span class="btn-text"><?php _se('cancel remaining'); ?></span></a>
<a data-action="cancel-upload" data-button="close-cancel"><span class="btn-icon icon-close"></span><span class="btn-text"><?php _se('cancel'); ?></span></a>
<a data-action="cancel-upload-remaining" data-button="close-cancel"><span class="btn-icon icon-close"></span><span class="btn-text"><?php _se('cancel remaining'); ?></span></a>
</div>
<?php if(CHV\getSetting('theme_show_embed_uploader')) { ?>
<div data-group="upload-result" data-result="success" class="c16 center-box soft-hidden">
<div class="input-label margin-bottom-0 copy-hover-display">
@ -184,7 +188,8 @@ if(CHV\Login::isLoggedUser()) {
foreach($value['options'] as $k => $v) {
echo '<div data-combo-value="'.$k.'" class="switch-combo'.($i>0 ? " soft-hidden" : "").'">
<textarea id="uploaded-embed-code-'.$i.'" class="r2 resize-vertical" name="'.$k.'" data-size="'.$v["size"].'" data-focus="select-all"></textarea>
<button class="copy-input" data-action="copy" data-action-target="#uploaded-embed-code-'.$i.'">'._s('copy').'</button>
<button class="input-action" data-action="copy" data-action-target="#uploaded-embed-code-'.$i.'">'._s('copy').'</button>
<button class="input-action" data-action="openerPostMessage" data-action-target="#uploaded-embed-code-'.$i.'">'._s('insert').'</button>
</div>'."\n";
$i++;
}
@ -194,11 +199,11 @@ if(CHV\Login::isLoggedUser()) {
</div>
</div>
<?php } ?>
</div>
</div>
<div class="hidden">
<div id="anywhere-upload-item-template">
<li class="queue-item">
@ -309,7 +314,7 @@ if(CHV\Login::isLoggedUser()) {
</div>
</div>
</div>
<?php
if(CHV\Login::isLoggedUser()) {
global $new_album, $user_items_editor;
@ -343,14 +348,14 @@ if(CHV\Login::isLoggedUser()) {
</div>
</div>
</div>
<?php
}
?>
<div data-modal="failed-upload-result" class="hidden">
<span class="modal-box-title"><?php _se('Error report'); ?></span>
<ul data-content="failed-upload-result" style="max-height: 115px;" class="overflow-auto"></ul>
</div>
</div>

View file

@ -6,7 +6,7 @@ $owner = function_exists('get_owner') ? get_owner() : G\get_global("owner");
<div class="breadcrum-item pop-btn pop-btn-auto pop-keep-click pop-btn-desktop">
<a href="<?php echo $owner['url']; ?>" class="user-image">
<?php if($owner['avatar']['url']) { ?>
<img src="<?php echo $owner['avatar']['url']; ?>" alt="<?php echo $owner['username']; ?>">
<img class="user-image" src="<?php echo $owner['avatar']['url']; ?>" alt="<?php echo $owner['username']; ?>">
<?php } else { ?>
<span class="user-image default-user-image"><span class="icon icon-user"></span></span>
<?php } ?>

View file

@ -34,7 +34,7 @@
foreach($value['options'] as $k => $v) {
echo '<div data-combo-value="'.$k.'" class="switch-combo'.($i>0 ? " soft-hidden" : "").'">
<textarea id="modal-embed-code-'.$i.'" class="r3 resize-vertical" name="'.$k.'" data-size="'.$v["size"].'" data-focus="select-all"></textarea>
<button class="copy-input" data-action="copy" data-action-target="#modal-embed-code-'.$i.'">'._s('copy').'</button>
<button class="input-action" data-action="copy" data-action-target="#modal-embed-code-'.$i.'">'._s('copy').'</button>
</div>'."\n";
$i++;
}

View file

@ -15,111 +15,115 @@
</script>
<?php } ?>
<script>
PF.obj.config.base_url = "<?php echo G\get_base_url(); ?>";
PF.obj.config.json_api = "<?php echo G\get_base_url('json'); ?>";
PF.obj.config.listing.items_per_page = "<?php echo CHV\getSetting('listing_items_per_page'); ?>";
PF.obj.config.listing.device_to_columns = <?php echo json_encode(CHV\getSetting('listing_device_to_columns')); ?>;
PF.obj.config.auth_token = "<?php echo get_auth_token(); ?>";
<script data-cfasync="false">
document.getElementById("chevereto-js").addEventListener("load", function () {
PF.obj.devices = window.devices;
PF.fn.window_to_device = window.window_to_device;
PF.obj.config.base_url = "<?php echo G\get_base_url(); ?>";
PF.obj.config.json_api = "<?php echo G\get_base_url('json'); ?>";
PF.obj.config.listing.items_per_page = "<?php echo CHV\getSetting('listing_items_per_page'); ?>";
PF.obj.config.listing.device_to_columns = <?php echo json_encode(CHV\getSetting('listing_device_to_columns')); ?>;
PF.obj.config.auth_token = "<?php echo get_auth_token(); ?>";
PF.obj.l10n = <?php echo json_encode(CHV\get_translation_table()) ;?>;
PF.obj.l10n = <?php echo json_encode(CHV\get_translation_table()) ;?>;
if(typeof CHV == "undefined") {
CHV = {obj: {}, fn: {}, str:{}};
}
CHV.obj.vars = {
urls: {
home: PF.obj.config.base_url,
search: "<?php echo G\get_base_url("search"); ?>"
if(typeof CHV == "undefined") {
CHV = {obj: {}, fn: {}, str:{}};
}
};
CHV.obj.config = {
image : {
max_filesize: "<?php echo CHV\getSetting('upload_max_filesize_mb') . ' MB'; ?>",
right_click: <?php echo json_encode(CHV\getSetting('theme_image_right_click')); ?>,
load_max_filesize: "<?php echo CHV\getSetting('image_load_max_filesize_mb') . ' MB'; ?>",
max_width: <?php echo json_encode(CHV\getSetting('upload_max_image_width')); ?>,
max_height: <?php echo json_encode(CHV\getSetting('upload_max_image_height')); ?>,
},
upload: {
redirect_single_upload: <?php echo json_encode(CHV\getSetting('enable_redirect_single_upload')); ?>,
threads: <?php echo json_encode(CHV\getSetting('upload_threads')); ?>,
image_types: <?php echo json_encode(CHV\Image::getEnabledImageFormats()); ?>,
},
user: {
avatar_max_filesize: "<?php echo CHV\getSetting('user_image_avatar_max_filesize_mb') . ' MB'; ?>",
background_max_filesize: "<?php echo CHV\getSetting('user_image_background_max_filesize_mb') . ' MB'; ?>",
},
recaptcha: {
enabled: <?php echo CHV\getSettings()['recaptcha'] ? 'true' : 'false'; ?>,
sitekey: "<?php echo CHV\getSetting('recaptcha_public_key'); ?>",
},
};
<?php
$page_info = [
'doctitle' => function_exists('get_doctitle') ? get_doctitle() : NULL,
'pre_doctitle' => function_exists('get_pre_doctitle') ? get_pre_doctitle() : NULL
];
if($page_info['pre_doctitle']) {
$page_info['pos_doctitle'] = G\str_replace_first($page_info['pre_doctitle'], '', $page_info['doctitle']);
}
?>
CHV.obj.page_info = <?php echo json_encode($page_info); ?>;
<?php
$logged_user = CHV\Login::getUser();
if($logged_user) {
$logged_user_array = [];
foreach(['name', 'username', 'id', 'url', 'url_albums'] as $arr) {
$logged_user_array[$arr] = $logged_user[$arr == 'id' ? 'id_encoded' : $arr];
CHV.obj.vars = {
urls: {
home: PF.obj.config.base_url,
search: "<?php echo G\get_base_url("search"); ?>"
}
?>
CHV.obj.logged_user = <?php echo json_encode($logged_user_array); ?>;
<?php
}
if($logged_user['is_admin']) {
?>
CHV.obj.system_info = <?php echo json_encode(['version' => G\get_app_version()]); ?>;
<?php
}
?>
};
<?php
if(!G\is_prevented_route() and !is_404() && in_array(G\get_route_name(), ["image", "album", "user", "settings"]) or (function_exists('is_dashboard_user') and is_dashboard_user())) {
if(in_array(G\get_route_name(), ["settings", "dashboard"])) {
$route = ['id' => NULL, 'url' => NULL];
$route_user = get_user();
} else {
$route_fn = "get_".G\get_route_name();
if(is_callable($route_fn)) {
$route = $route_fn();
$route_user = G\get_route_name() == "user" ? $route : $route["user"];
CHV.obj.config = {
image : {
max_filesize: "<?php echo CHV\getSetting('upload_max_filesize_mb') . ' MB'; ?>",
right_click: <?php echo json_encode(CHV\getSetting('theme_image_right_click')); ?>,
load_max_filesize: "<?php echo CHV\getSetting('image_load_max_filesize_mb') . ' MB'; ?>",
max_width: <?php echo json_encode(CHV\getSetting('upload_max_image_width')); ?>,
max_height: <?php echo json_encode(CHV\getSetting('upload_max_image_height')); ?>,
},
upload: {
redirect_single_upload: <?php echo json_encode(CHV\getSetting('enable_redirect_single_upload')); ?>,
threads: <?php echo json_encode(CHV\getSetting('upload_threads')); ?>,
image_types: <?php echo json_encode(CHV\Image::getEnabledImageFormats()); ?>,
},
user: {
avatar_max_filesize: "<?php echo CHV\getSetting('user_image_avatar_max_filesize_mb') . ' MB'; ?>",
background_max_filesize: "<?php echo CHV\getSetting('user_image_background_max_filesize_mb') . ' MB'; ?>",
},
recaptcha: {
enabled: <?php echo CHV\getSettings()['recaptcha'] ? 'true' : 'false'; ?>,
sitekey: "<?php echo CHV\getSetting('recaptcha_public_key'); ?>",
},
};
<?php
$page_info = [
'doctitle' => function_exists('get_doctitle') ? get_doctitle() : NULL,
'pre_doctitle' => function_exists('get_pre_doctitle') ? get_pre_doctitle() : NULL
];
if($page_info['pre_doctitle']) {
$page_info['pos_doctitle'] = G\str_replace_first($page_info['pre_doctitle'], '', $page_info['doctitle']);
}
?>
CHV.obj.page_info = <?php echo json_encode($page_info); ?>;
<?php
$logged_user = CHV\Login::getUser();
if($logged_user) {
$logged_user_array = [];
foreach(['name', 'username', 'id', 'url', 'url_albums'] as $arr) {
$logged_user_array[$arr] = $logged_user[$arr == 'id' ? 'id_encoded' : $arr];
}
?>
CHV.obj.logged_user = <?php echo json_encode($logged_user_array); ?>;
<?php
}
if($logged_user['is_admin']) {
?>
CHV.obj.system_info = <?php echo json_encode(['version' => G\get_app_version()]); ?>;
<?php
}
?>
<?php
if(!G\is_prevented_route() and !is_404() && in_array(G\get_route_name(), ["image", "album", "user", "settings"]) or (function_exists('is_dashboard_user') and is_dashboard_user())) {
if(in_array(G\get_route_name(), ["settings", "dashboard"])) {
$route = ['id' => NULL, 'url' => NULL];
$route_user = get_user();
} else {
$route_fn = "get_".G\get_route_name();
if(is_callable($route_fn)) {
$route = $route_fn();
$route_user = G\get_route_name() == "user" ? $route : $route["user"];
}
}
?>
CHV.obj.resource = {
id: "<?php echo $route["id_encoded"]; ?>",
type: "<?php echo G\get_route_name(); ?>",
url: "<?php echo (G\get_route_name() == "image" ? $route["url_viewer"] : $route["url"]); ?>",
parent_url: "<?php echo G\get_route_name() == "image" ? (get_image()['user']['is_private'] ? G\get_base_url() : get_image()['album']['url']) : (G\get_route_name() == 'dashboard' ? NULL : $route_user['url']) ?>"
};
<?php
if($route_user["id"]) {
?>
CHV.obj.resource.user = {
name: "<?php echo G\safe_html($route_user["name"]); ?>",
username: "<?php echo G\safe_html($route_user["username"]); ?>",
id: "<?php echo $route_user["id_encoded"]; ?>",
url: "<?php echo $route_user["url"]; ?>",
url_albums: "<?php echo $route_user["url_albums"]; ?>"
};
<?php
}
}
?>
CHV.obj.resource = {
id: "<?php echo $route["id_encoded"]; ?>",
type: "<?php echo G\get_route_name(); ?>",
url: "<?php echo (G\get_route_name() == "image" ? $route["url_viewer"] : $route["url"]); ?>",
parent_url: "<?php echo G\get_route_name() == "image" ? (get_image()['user']['is_private'] ? G\get_base_url() : get_image()['album']['url']) : (G\get_route_name() == 'dashboard' ? NULL : $route_user['url']) ?>"
};
<?php
if($route_user["id"]) {
?>
CHV.obj.resource.user = {
name: "<?php echo G\safe_html($route_user["name"]); ?>",
username: "<?php echo G\safe_html($route_user["username"]); ?>",
id: "<?php echo $route_user["id_encoded"]; ?>",
url: "<?php echo $route_user["url"]; ?>",
url_albums: "<?php echo $route_user["url_albums"]; ?>"
};
<?php
}
}
?>
?>
});
</script>

View file

@ -1,5 +1,5 @@
<?php if(!defined('access') or !access) die('This file cannot be directly accessed.'); ?>
<form action="<?php echo G\get_base_url("search/images"); ?>" method="get" data-beforeunload="continue">
<form action="<?php echo G\get_base_url("search/images"); ?>/" method="get" data-beforeunload="continue">
<?php
foreach([
'as_q' => [
@ -19,7 +19,7 @@
'as_eq' => [
'label' => _s('None of these words'),
'placeholder' => _s('Put a minus sign just before words you don\'t want: -rodent -"Jack Russell"')
]
]
] as $k => $v) {
?>
<div class="input-label">
@ -27,7 +27,7 @@
<input type="text" id="<?php echo $k; ?>" name="<?php echo $k; ?>" class="text-input" placeholder="<?php echo G\safe_html($v['placeholder']); ?>">
</div>
<?php } ?>
<?php
<?php
// Category selector
$categories = get_categories();
if(count($categories) > 0) {

View file

@ -3,6 +3,7 @@
<div class="input-label c7">
<label for="form-ip_ban-ip"><?php _se('IP address'); ?></label>
<input type="text" <?php if(function_exists('get_image')) { echo 'readonly'; } ?> id="form-ip_ban-ip" name="form-ip_ban-ip" class="text-input" value="<?php if(function_exists('get_image')) { echo get_image()['uploader_ip']; } ?>" placeholder="127.0.0.1" required>
<div class="input-below font-size-small"><?php _se('You can use wildcard * characters.'); ?></div>
</div>
<div class="input-label">
<div class="c7">

View file

@ -6,7 +6,7 @@
if(is_array($user_items_editor)) {
foreach($user_items_editor['user_albums'] as $album) {
?>
<option value="<?php echo $album['id_encoded']; ?>"<?php if($album['id'] == $user_items_editor['album']['id']) echo " selected"; ?>><?php echo $album['name_with_privacy_readable']; ?></option>
<option value="<?php echo $album['id_encoded']; ?>"<?php if($album['id'] == $user_items_editor['album']['id']) echo " selected"; ?>><?php echo $album['name_with_privacy_readable_html']; ?></option>
<?php
}
}

View file

@ -110,7 +110,6 @@
// Bind the native fn to the CHV object
$(document).ready(function() {
CHV.obj.image_viewer.image = {
width: <?php echo get_image()["width"]; ?>,
height: <?php echo get_image()["height"]; ?>,
@ -124,10 +123,7 @@
CHV.obj.image_viewer.album = {
id_encoded: "<?php echo get_image()["album"]["id_encoded"]; ?>"
};
image_viewer_full_fix();
CHV.fn.image_viewer_full_fix = window["image_viewer_full_fix"];
});
</script>

View file

@ -34,7 +34,6 @@ foreach($tabs as $tab) {
?>
<?php
if($classic) {
CHV\Render\show_banner('listing_before_pagination', $list->sfw);
}
if($list->has_page_prev || $list->has_page_next) {
?>
@ -96,7 +95,6 @@ foreach($tabs as $tab) {
<?php
}
if($classic) {
CHV\Render\show_banner('listing_after_pagination', $list->sfw);
}
?>
<?php

View file

@ -50,9 +50,13 @@ foreach($tabs as $tab) {
<?php
}
?>
<?php if((array_key_exists('tools_available', $tab) ? in_array('delete', $tab['tools_available']) : TRUE)) { ?>
<?php
if(is_allowed_to_delete_content() && (array_key_exists('tools_available', $tab) ? in_array('delete', $tab['tools_available']) : TRUE)) {
?>
<li><a data-action="delete"><?php _se('Delete'); ?></a></li>
<?php } ?>
<?php
}
?>
<li><a data-action="clear"><?php _se('Clear selection'); ?></a></li>
</ul>
</div>

View file

@ -13,7 +13,7 @@ if($user_items_editor !== false) {
<span class="modal-box-title">
<?php
if($modal_dealing_with == 'images') {
_se('Edit image details');
_se('Edit image details');
} else {
_se('Edit album details');
$disable_album_toggle = true;

View file

@ -3,11 +3,11 @@ Theme Name: Peafowl
Theme URL: http://chevereto.com/
Version: 3
Author: Rodolfo Berrios
@Chevereto: 3.9.1
@Chevereto: 3.10.3
@requires peafowl.css
*/
/*
/*
* LAYOUT
* ---------------------------------------------
*/
@ -44,7 +44,7 @@ body.landing {
transform: scale(1);
}
.js body.landing.loaded {
overflow: auto;
overflow: auto;
}
body.split {
@ -64,7 +64,20 @@ body.split {
}
}
/*
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
* ---------------------------------------------
*/
@ -90,21 +103,21 @@ body.split {
max-height: 100%;
width: auto;
}
.js .image-viewer-container img {
position: absolute;
/*background: #000;*/
width: 100%;
height: auto;
}
.image-viewer .btn-download {
position: absolute;
top: 20px;
right: 20px;
z-index: 1;
}
.image-viewer-navigation {}
.image-viewer-navigation a {
z-index: 3;
@ -113,7 +126,7 @@ body.split {
background-color: #AAA;
background-color: rgba(0,0,0,.3);
}
#image-viewer-loading {
width: 30px;
height: 30px;
@ -159,7 +172,7 @@ body.split {
}
/*
* LIKE BUTTON
* LIKE BUTTON
* --
*/
.btn-like {}
@ -175,7 +188,7 @@ body.split {
}
/*
* FOLLOW BUTTON
* FOLLOW BUTTON
* --
*/
.btn-follow {}
@ -190,18 +203,17 @@ body.split {
display: inline-block;
}
/*
/*
* UPLOAD BOX
* ---------------------------------------------
*/
#fullscreen-uploader-mask {
z-index: 99;
}
.phone #fullscreen-uploader-mask {
z-index: 400;
}
#anywhere-upload {
z-index: 400;
scroll: auto;
@ -220,17 +232,29 @@ body.split {
.phone #anywhere-upload {
z-index: 500;
height: 100vh !important;
height: 100vh !important; /* 100% height for phone only */
}
#upload #anywhere-upload {
overflow: hidden !important;
height: auto !important;
}
.phone #anywhere-upload[data-queue-size="0"] .upload-box-heading {
#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: 50%;
left: 0;
right: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
padding: 10px;
top: auto;
left: 0;
right: 0;
text-align: center;
bottom: 10px;
}
#anywhere-upload-paste {
@ -245,21 +269,18 @@ body.split {
.upload-box {
border-bottom: 0;
}
.upload-box-queue {
text-align: center;
/*width: 960px; /* nota: setear por js */
font-size: 0;
margin-top: 40px;
margin-bottom: 30px; /* thumbs add 10 */
margin-top: 35px;
margin-bottom: 35px;
}
.upload-box-queue li {
position: relative;
text-align: center;
display: inline-block;
background: red;
margin-right: 10px;
margin-bottom: 10px;
margin: 5px;
background: #EFEFEF;
-webkit-box-shadow: inset 0px 2px 10px 0px rgba(0,0,0,.07);
box-shadow: inset 0px 2px 10px 0px rgba(0,0,0,.07);
@ -274,7 +295,7 @@ body.split {
.upload-box-queue .block.failed {
border-radius: 0;
}
.upload-box-queue li, .upload-box-queue li.normal {
width: 110px; /* 110 -> 77 -> 55 */
height: 110px;
@ -293,7 +314,7 @@ body.split {
font-size: 7px;
font-size: 0.5rem;
}
.upload-box-queue .block {
width: 100%;
height: 100%;
@ -302,11 +323,11 @@ body.split {
overflow: hidden;
position: absolute;
}
.upload-box-queue a.image-link {
display: none;
}
.upload-box-queue .completed a.image-link {
display: block;
position: absolute;
@ -314,7 +335,7 @@ body.split {
z-index: 1;
-webkit-transform: rotate(0.000001deg); /* workraround for webkit rounded:hover:overflow issue */
}
.upload-box-queue .queue-item .queue-item-button,
.upload-box-queue .queue-item .block.edit {
display: block;
@ -333,8 +354,8 @@ body.split {
.upload-box-queue .queue-item.completed:hover .queue-item-button {
display: none;
}
/*.upload-box-queue .hover-display {
opacity: 0;
transition: opacity 300ms ease;
@ -342,7 +363,7 @@ body.split {
.upload-box-queue .queue-item:hover .hover-display {
opacity: 1;
}*/
.upload-box-queue .queue-item .queue-item-button {
font-size: 7px;
width: 21px;
@ -359,7 +380,7 @@ body.split {
background: #333;
color: #FFF;
}
.upload-box-queue .queue-item .queue-item-button.cancel {
top: -7px;
}
@ -367,7 +388,7 @@ body.split {
top: 16px;
font-size: 9px;
}
.upload-box-queue .big-icon {
position: absolute;
color: #DADADA;
@ -380,12 +401,12 @@ body.split {
margin-top: -0.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 .preview, .upload-box-queue .done {
position: relative;
overflow: hidden;
@ -395,15 +416,15 @@ body.split {
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;
}
@ -413,7 +434,7 @@ body.split {
.queue-item.uploading .block.edit {
display: none;
}
.upload-box-queue .progress-percent {
font-family: arial, helvetica, sans-serif;
font-size: 2.86em;
@ -436,21 +457,21 @@ body.split {
font-weight: normal;
position: relative;
}
.upload-box-queue .progress-bar {
float: right;
width: 100%;
display: none;
}
.upload-box-queue .progress-bar, .upload-box-queue .failed .result {
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;
@ -460,11 +481,11 @@ body.split {
z-index: 1;
display: none;
}
.tone-dark .upload-box-queue .progress-bar, .tone-dark .upload-box-queue .failed .result {
background: rgba(0,0,0,.65);
}
.upload-box-queue .result .icon {
position: absolute;
width: 1em;
@ -485,17 +506,45 @@ body.split {
color: #E84C3D;
font-size: 3.429em; /* 48 */
}
.upload-box-queue.queue-complete .cancel,
.upload-box-queue.queue-complete .edit {
display: none;
}
#uploaded-embed-toggle-combo, #form-embed-toggle-combo {
position: relative;
}
/*
#upload .top-bar {
-webkit-box-shadow: none;
box-shadow: none;
border-bottom-color: transparent;
}
#upload #anywhere-upload {
background: transparent;
}
#upload .upload-box {
transform: none;
position: static;
}
body#upload [data-action="close-upload"],
body:not(#upload) [data-action="reset-upload"] {
display: none !important;
}
/* reset shows on ready and complete! */
.upload-box:not(.queueReady):not(.queueCompleted) [data-action="reset-upload"],
.upload-box.queueUploading [data-action="close-upload"],
.upload-box:not(.queueUploading) [data-action^="cancel-upload"],
.upload-box.queueHasResults [data-action="cancel-upload"],
.upload-box:not(.queueHasResults) [data-action="cancel-upload-remaining"] {
display: none;
}
/*
* USER BACKGROUND COVER
* ---------------------------------------------
*/
@ -525,26 +574,26 @@ body.split {
#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-src, #background-cover .loading-placeholder {
position: absolute;
top: 0;
@ -556,7 +605,7 @@ body.split {
background: rgba(0,0,0,.8);
}
/*
/*
* LIST STYLES
* ---------------------------------------------
*/
@ -619,16 +668,16 @@ body.split {
.list-item.unsafe .list-item-image-tools li {
display: none;
}
.phone .list-item .list-item-image-tools li,
.phablet .list-item .list-item-image-tools li {
display: block;
}
.list-item.unsafe:hover .list-item-image-tools li {
display: block;
}
.list-item.selected .list-item-image-tools li.tool-select,
.list-item.unsafe .list-item-image-tools li.tool-flag,
.list-item.selected:hover .list-item-image-tools li {
@ -638,8 +687,8 @@ body.split {
color: #FFF;
background: #27AE60;
}
.list-item-image-tools li {
.list-item-image-tools li {
margin: 2px;
cursor: pointer;
position: relative;
@ -651,18 +700,18 @@ body.split {
display: block;
color: inherit;
}
.list-item-image-tools li span {
float: right;
}
.list-item-image-tools li .label {
font-size: 0.86em;
}
.list-item-image-tools li .btn-icon {
font-size: 1em;
}
.list-item-image-tools li .label {
text-transform: uppercase;
padding-left: 1em;
@ -676,11 +725,11 @@ body.split {
.small-cols .list-item-image-tools li:hover .label {
display: none;
}
.list-item.unsafe li:hover .label-flag-unsafe, .list-item.safe li:hover .label-flag-safe {
display: none;
}
.unsafe-blur-on .list-item.unsafe .list-item-image .image-container,
.unsafe-blur-on .list-item .list-item-thumbs li.unsafe a {
filter: blur(5px);
@ -693,7 +742,7 @@ body.split {
filter: none;
-webkit-filter: none;
}
.list-item-image-tools li .btn-icon {
width: 2.4em; /* 36/15 */
height: 2.4em;
@ -708,16 +757,16 @@ body.split {
color: #FFF;
background: rgba(0,0,0,.4);
}
.list-item.selected li.tool-select .btn-icon,
.list-item.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);
}
@ -738,7 +787,7 @@ body.split {
background: #333;
}
*/
.list-item .list-item-avatar-cover,
.list-item .list-item-avatar-cover > * {
border-radius: 100%;
@ -764,12 +813,12 @@ body.split {
width: 100px;
height: 100px;
}
.list-item .list-item-avatar-cover img {
.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%;
@ -779,7 +828,7 @@ body.split {
.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;
@ -794,7 +843,7 @@ body.split {
background: rgba(0,0,0,.5);
color: #FFF;
}
.list-item-like {
position: absolute;
top: 50%;
@ -813,7 +862,7 @@ body.split {
.list-item[data-liked="1"] .list-item-like .btn-like.btn-liked {
display: block;
}
/* play stuff */
.list-item-play-gif, .list-item-play-gif * {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAACdCAMAAAAgwM7pAAAB5lBMVEUAAAD//4D//6oAAAD//7///8wAAAD//9X//9v//9///+P//+b//+gAAAD//+r//+sAAAD//+3//+7//+////D///H///L///L///MAAAD///P///T///QAAAD///X///YAAAD///b///f///f///gAAAD///gAAAD///gAAAD///kAAAD///kAAAD///kAAAD///n///oAAAD///r///r///oAAAD///r///v///sAAAD///v///v///v///v///v///sAAAD///z///wAAAD///z///wAAAAAAAD///wAAAD///z///wAAAD///z///wAAAD///wAAAD///wAAAD///wAAAD///wAAAD///0AAAD///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///3///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///7///6+e5cNAAAAoXRSTlMAAgICBAQEBgYICAoKCgwMDA4OEBASEhQUFBYWGBgaGhocHiAiIiQkJiYoKCoqLCwuLi4wMjY2ODg6Ojw+QEJERkZISkpMUFBSVFRWWFhaXFxeXmBgYmJkZGZmaGpsbnBydHZ4enx+gYOFh4mLjY+Rk5WXmZuho6Wnqa2xs7W3u72/wcPFx8nLzc/R09XX2dvd3+Hj5efp6+3v8fP19/n7/fvKuacAAARqSURBVHherNgNx4RAFAXgQywQAYRYSLJWhBAwRInIyBjn//+Ql5eVXW1bzXkAEM3HnXMv9qRlY4bJOmenwTRliivip7H8YM0zxilR0Xlu8l0R4ahbPXPHXN9wSGX5g63wWzbygDHDvqj1PMS3EXYkPQ/rE3x1X3jCcscXueMpLsemh+dJ/oENuedpPt9YH8cL3B0fkoWXLAneRD0v6t/PU8vLWqyQeV7mM6xGBhjxgopBKrzqj2UQ+6pPNQPV+BfNDDRHAICCwQoAQMdgHQDEnsF8vO59+AkwFDAALAUskFIiRUmJEg0lGhhKGAyUGDBRYoKlhIWjhJN9SPZrssWWbb/sQMquiOzSysqIqrApS21FgafsOVI9kLInWxYiVLFGFrRU0U8VRmXxWBXYZS2EqqlRtVmqxk/ViqqaY1W7rhogqEYawiGLfuyjH0TpR2OruNoe1v01Y4a/bEVhGD+VCXcWC2xrZiFbZZGlEcKCwGSiyUKIiCzLQG0w1Q5Vg1FrdVRVUW3V3Nv7/Ke7va5ot2p77jkf+vvS50t/yT0n57zveygUfJ8P+fNDih57t22WWn2CJruzUg2CCI3wWjmt5fmUH8AEUelz7fhO4kgyQqepXhKhcGRKdZsGHT5fHY1GsMYBxJ3thI2KEIDQUGkWwWTISnLTDkTHi0k2DoCdpzlFBuv0Y5Kdzksg3EE48MoHJD7wMD1YAhID9wqKKFSj8r0m41HMRGeS2zMushvoIxSMyJjIJJoDvEWEhrbpsgyeHhmxOsLOwzDkXsKBr4CNh8d4hUg5D9EK8EmfoCV9pxMIFunylF9jNFXkEbuILkqu8TvNXEp0sg68ITzoARYJF85xwUdk4/Vt/cAIF5ERWNViq2eMxXQGv5Y2cc4iWkdMSx6csYgadse0FMAh4cIF3HxEIja5iQrs0wI44CPy4JRFUL85pKUNnLCIXIhqybzVz3hEuB3awrpGbEBDQV21Pem1XqjiU45KgmK3Pk9peoEUdJfsShFp9/Sy7iaiY/i/tuYRKaRGi5SFgV4upm4ZsVouplnAa6Brjz8L9zXsnZQN+8fMc6w3WE05QrwlFFAMNXzHLP6DnzCXcxTtigPhnBtjAWI5huNAXsPxs1N1XBeyiBYi1ryuGO0BoY0wU22XoHBQkyowDTj2d59QFyv1kUXbl0HXz9tHFj073mxfFtRQh1vCTqY7y+CWIhQPUTwx8JA0roQk0e9qVVd6rkkRdDvXVBYqaMa3FRk3bCh/W4BXEUWgQlVeivcA6Zd9fusamErWpmNFJCHsT7LzMn/Rd+DQnAw1Dq/5TjRJPQPICNwdLQbRN8hNhIdoH0F1xesVqlJEjjYFM1U3ua6EyigUpPd3ohu+5C8KYlcJtQkkcfwrms5ftI1LgxJMFovlT6poqUWhnuTPGDCjxRgcDIstnCPRy0NE3iWA1ZZi8sIqsYnIoAhAuoKChUlEmt1Q2Use/3l41EM7TPTwety2ONyoRuNs8rdrRqBU/AVcT/TiMRYQxQAAAABJRU5ErkJggg==');
@ -876,7 +925,7 @@ a.stats-block:hover {
.tone-dark a.stats-block:hover {
background: #222;
}
.text-align-center .stats-big-number {
text-align: center;
}
@ -959,7 +1008,7 @@ body.split #home-cover {
font-size: 3em;
}
}
#home-cover-content p {
font-size: 22px;
margin: 20px 0;
@ -983,7 +1032,7 @@ body.split #home-cover {
letter-spacing: 2px;
padding: 12px 30px;
}
#home-pics-feature {
height: 700px;
overflow: hidden;
@ -1003,13 +1052,13 @@ body.split #home-cover {
bottom: 0;
z-index: 1;
}
.tone-dark #home-pics-feature-overlay { /* FF3.6+ */ /* Chrome,Safari4+ */ /* Chrome10+,Safari5.1+ */ /* Opera 11.10+ */ /* IE10+ */
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%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#000000',GradientType=0 ); /* IE6-9 */
}
#home-pics-feature.empty #home-pics-overlay {
display: none;
}
@ -1290,7 +1339,7 @@ body#consent-screen {
-webkit-animation: none;
animation: none;
}
@-webkit-keyframes slideshow {
0% {
opacity: 0;
@ -1304,7 +1353,7 @@ body#consent-screen {
transform: scale(1.12);
}
}
@keyframes slideshow {
0% {
opacity: 0;
@ -1394,5 +1443,5 @@ body.landing .footer {
color: rgba(255,255,255,.7);
}
body.landing .footer, body.landing .footer a:hover {
color: #FFF;
}
color: #FFF;
}

File diff suppressed because one or more lines are too long

View file

@ -8,8 +8,14 @@
<span class="btn-icon icon-folder" title="<?php _ne('Album', 'Albums', 1); ?>"></span>
<span class="label label-move"><?php _ne('Album', 'Albums', 1); ?></span>
</li>
<?php
if(G\Handler::getCond('allowed_to_delete_content')) {
?>
<li class="tool-delete" data-action="delete">
<span class="btn-icon icon-remove" title="<?php _se('Delete'); ?>"></span>
<span class="label label-delete"><?php _se('Delete'); ?></span>
</li>
<?php
}
?>
</ul>

View file

@ -16,8 +16,14 @@
<span class="btn-icon icon-folder" title="<?php _ne('Album', 'Albums', 1); ?>"></span>
<span class="label label-move"><?php _ne('Album', 'Albums', 1); ?></span>
</li>
<?php
if(G\Handler::getCond('allowed_to_delete_content')) {
?>
<li class="tool-delete" data-action="delete">
<span class="btn-icon icon-remove" title="<?php _se('Delete'); ?>"></span>
<span class="label label-delete"><?php _se('Delete'); ?></span>
</li>
<?php
}
?>
</ul>

View file

@ -6,7 +6,10 @@
</div>
</a>
<div class="list-item-desc">
<div class="position-absolute left-10"><a class="text-decoration-none list-item-desc-title" href="%USER_URL%">%USER_NAME%</a><span class="display-block font-size-small">%USER_USERNAME%</span></div>
<div class="list-item-desc-title">
<a class="list-item-desc-title-link" href="%USER_URL%">%USER_NAME%</a>
<span class="display-block font-size-small">%USER_USERNAME%</span>
</div>
<div class="position-absolute right-10 text-align-right"><span>%USER_IMAGE_COUNT%</span><span class="display-block font-size-small">%USER_IMAGE_COUNT_LABEL%</span></div>
</div>
</div>

View file

@ -19,5 +19,9 @@
<?php G\Render\include_theme_footer(); ?>
<?php if(isset($_REQUEST["deleted"])) { ?>
<script>PF.fn.growl.call("<?php echo (G\get_route_name() == 'user' ? _s('The user has been deleted') : _s('The content has been deleted.')); ?>");</script>
<script>
$(function() {
PF.fn.growl.call("<?php echo (G\get_route_name() == 'user' ? _s('The user has been deleted') : _s('The content has been deleted.')); ?>");
});
</script>
<?php } ?>

View file

@ -31,8 +31,12 @@
</div>
</div>
<?php G\Render\include_theme_footer(); ?>
<?php if(get_post() and is_error()) { ?>
<script>PF.fn.growl.expirable("<?php echo get_error(); ?>"); </script>
<?php } ?>
<script>
$(function() {
PF.fn.growl.expirable("<?php echo get_error(); ?>");
});
</script>
<?php } ?>
<?php G\Render\include_theme_footer(); ?>

View file

@ -2,14 +2,12 @@
<?php G\Render\include_theme_header(); ?>
<div class="content-width">
<?php CHV\Render\show_banner('album_before_header', get_list()->sfw); ?>
<div class="header header-content margin-bottom-10">
<div class="header-content-left">
<div class="header-content-breadcrum">
<?php
if(get_album()['user']['id']) {
G\Render\include_theme_file("snippets/breadcrum_owner_card");
@ -22,9 +20,9 @@
<?php
}
?>
<div class="breadcrum-item">
<h1><span class="breadcrum-text"><span class="icon icon-eye-blocked margin-right-5 <?php if(get_album()["privacy"] == "public") echo "soft-hidden"; ?>" data-content="privacy-private" title="<?php _se('This content is private'); ?>" rel="tooltip"></span><span class="breadcrum-text"><a href="<?php echo get_album()["url"]; ?>" data-text="album-name"<?php if(get_album()['name'] !== get_album()['name_truncated']) { ?> title="<?php echo get_album_safe_html()["name"]; ?><?php } ?>"><?php echo get_album()["name_truncated_html"]; ?></a></span></h1>
<h1><span class="breadcrum-text"><span class="icon icon-eye-blocked margin-right-5 <?php if(get_album()["privacy"] == "public") echo "soft-hidden"; ?>" data-content="privacy-private" title="<?php _se('This content is private'); ?>" rel="tooltip"></span><span class="breadcrum-text"><a href="<?php echo get_album()["url"]; ?>" data-text="album-name"<?php if(get_album()['name'] !== get_album()['name_truncated']) { ?> title="<?php echo get_album()["name_html"]; ?><?php } ?>"><?php echo get_album()["name_truncated_html"]; ?></a></span></h1>
</div>
<?php
if(is_owner() or is_admin()) {
@ -40,7 +38,7 @@
?>
</div>
</div>
<div class="header-content-right phone-hide">
<div class="number-figures float-left"><b data-text="image-count"><?php echo get_album()["image_count"]; ?></b> <span data-text="image-label" data-label-single="<?php _ne('image', 'images', 1); ?>" data-label-plural="<?php _ne('image', 'images', 2); ?>"><?php _ne('image', 'images', get_album()['image_count']); ?></span></div>
<div class="number-figures float-left"><?php echo get_album()['views']; ?> <span><?php echo get_album()['views_label']; ?></span></div>
@ -54,11 +52,11 @@
<?php
}
?>
<?php
<?php
if(CHV\getSetting('theme_show_social_share')) {
?>
<a class="btn red" data-modal="simple" data-target="modal-share"><span class="btn-icon icon-share"></span><span class="btn-text phone-hide"><?php _se('Share'); ?></span></a>
<?php
<?php
}
?>
<?php
@ -69,18 +67,16 @@
}
?>
</div>
</div>
<h1 class="viewer-title" data-text="album-description"><?php echo nl2br(get_album_safe_html()['description']); ?></h1>
<?php CHV\Render\show_banner('album_after_header', get_list()->sfw); ?>
<div class="header header-tabs margin-bottom-10 follow-scroll">
<h1><strong data-text="album-name"><?php echo get_album_safe_html()["name_truncated"]; ?></strong></h1>
<h1><strong data-text="album-name"><?php echo get_album()["name_truncated_html"]; ?></strong></h1>
<?php G\Render\include_theme_file("snippets/tabs"); ?>
<?php
if(is_owner() or is_admin()) {
G\Render\include_theme_file("snippets/user_items_editor");
@ -92,39 +88,40 @@
}
?>
</div>
<div id="content-listing-tabs" class="tabbed-listing">
<div id="tabbed-content-group">
<?php
G\Render\include_theme_file("snippets/listing");
?>
<div id="tab-share" class="tabbed-content margin-top-30">
<div class="growl static text-align-center margin-bottom-30 clear-both<?php if(get_album()["privacy"] == "public") echo " soft-hidden"; ?>" data-content="privacy-private"><?php echo get_album()['privacy_notes']; ?></div>
<div class="panel-share c16 phablet-c1 grid-columns margin-right-10">
<div class="panel-share-networks panel-share-item">
<h4 class="title c5 phablet-c1 grid-columns"><?php _se('Social networks'); ?></h4>
<ul class="float-left">
<?php echo join("\n", get_share_links_array()); ?>
</ul>
</div>
<div class="panel-share-input-label">
<h4 class="title c5 phablet-c1 grid-columns"><?php _se('Album link'); ?></h4>
<div class="panel-share-input c10 phablet-c1 grid-columns">
<input type="text" class="text-input" value="<?php echo get_album()["url"]; ?>" data-focus="select-all">
</div>
</div>
</div>
</div>
<?php if(CHV\getSetting('theme_show_embed_content')) { ?>
<div id="tab-codes" class="tabbed-content margin-top-30">
<?php if(CHV\Login::getUser()) { ?>
<div class="content-listing-loading"></div>
@ -150,7 +147,7 @@
foreach($value['options'] as $k => $v) {
echo '<div data-combo-value="'.$k.'" class="switch-combo'.($i>0 ? " soft-hidden" : "").'">
<textarea id="album-embed-code-'.$i.'" class="r8 resize-vertical" name="'.$k.'" data-size="'.$v["size"].'" data-focus="select-all"></textarea>
<button class="copy-input" data-action="copy" data-action-target="#album-embed-code-'.$i.'">'._s('copy').'</button>
<button class="input-action" data-action="copy" data-action-target="#album-embed-code-'.$i.'">'._s('copy').'</button>
</div>'."\n";
$i++;
}
@ -165,7 +162,7 @@
</div>
<?php } ?>
</div>
<?php } ?>
<?php
if(is_admin()) {
?>
@ -175,14 +172,14 @@
<?php
}
?>
</div>
</div>
</div>
<?php
if(is_owner() or is_admin()) {
@ -200,9 +197,12 @@
}
?>
<?php G\Render\include_theme_footer(); ?>
<?php if((is_owner() or is_admin()) and isset($_REQUEST["deleted"])) : ?>
<script>PF.fn.growl.expirable("<?php _se('The content has been deleted.'); ?>");</script>
<?php endif; ?>
<script>
$(function() {
PF.fn.growl.expirable("<?php _se('The content has been deleted.'); ?>");
});
</script>
<?php endif; ?>
<?php G\Render\include_theme_footer(); ?>

View file

@ -190,7 +190,7 @@
<span class="icon icon-cog phablet-hide tablet-hide laptop-hide desktop-hide"></span>
<span class="phone-hide"><?php echo get_dashboard_menu()[get_dashboard()]['label']; ?></span>
</h1>
<div data-content="pop-selection" class="pop-btn header-link float-left margin-left-10" data-action="settings-switch">
<div data-content="pop-selection" class="pop-btn pop-keep-click header-link float-left margin-left-10" data-action="settings-switch">
<span class="pop-btn-text margin-left-5"><?php echo get_settings()['label']; ?><span class="arrow-down"></span></span>
<div class="pop-box pbcols3 anchor-left arrow-box arrow-box-top">
<div class="pop-box-inner pop-box-menu pop-box-menucols">
@ -280,11 +280,6 @@
<input type="text" name="website_description" id="website_description" class="text-input" value="<?php echo CHV\Settings::get('website_description', true); ?>">
<div class="input-warning red-warning"><?php echo get_input_errors()['website_description']; ?></div>
</div>
<div class="input-label">
<label for="website_keywords"><?php _se('Website keywords'); ?></label>
<input type="text" name="website_keywords" id="website_keywords" class="text-input" value="<?php echo CHV\Settings::get('website_keywords', true); ?>">
<div class="input-warning red-warning"><?php echo get_input_errors()['website_keywords']; ?></div>
</div>
</div>
<hr class="line-separator"></hr>
@ -393,7 +388,7 @@
<hr class="line-separator"></hr>
<div class="input-label">
<div class="input-label">
<label for="website_mode"><?php _se('Website mode'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="website_mode" id="website_mode" class="text-input" data-combo="website-mode-combo">
<?php
@ -703,7 +698,7 @@
<ul class="c20 phablet-c1">
<?php
foreach(CHV\Upload::getAvailableImageFormats() as $k) {
echo '<li class="c5 display-inline-block"><label class="display-block" for="image_format_enable['.$k.']"> <input type="checkbox" name="image_format_enable[]" id="image_format_enable['.$k.']" value="'.$k.'"'.(in_array($k, CHV\Upload::getEnabledImageFormats()) ? ' checked' : NULL).'>'.strtoupper($k).'</label></li>';
echo '<li class="c5 display-inline-block margin-right-10"><label class="display-block" for="image_format_enable['.$k.']"> <input type="checkbox" name="image_format_enable[]" id="image_format_enable['.$k.']" value="'.$k.'"'.(in_array($k, CHV\Upload::getEnabledImageFormats()) ? ' checked' : NULL).'>'.strtoupper($k).'</label></li>';
}
?>
</ul>
@ -1137,6 +1132,18 @@
<div class="input-below"><?php _se('Enable this if you want to allow users to signup.'); ?></div>
<?php personal_mode_warning(); ?>
</div>
<div class="input-label">
<label for="enable_user_content_delete"><?php _se('Enable user content delete'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="enable_user_content_delete" id="enable_user_content_delete" class="text-input">
<?php
echo CHV\Render\get_select_options_html([1 => _s('Enabled'), 0 => _s('Disabled')], CHV\Settings::get('enable_user_content_delete'));
?>
</select></div>
<div class="input-below"><?php _se("Enable this if you want to allow users to delete their own content. This setting doesn't affect administrators."); ?></div>
<?php personal_mode_warning(); ?>
</div>
<div class="input-label">
<label for="user_minimum_age"><?php _se("Minimum age required"); ?></label>
<div class="c3"><input type="number" min="0" pattern="\d+" name="user_minimum_age" id="user_minimum_age" class="text-input"<?php if(CHV\getSetting('website_mode') == 'personal') echo ' disabled'; ?> value="<?php echo get_safe_post() ? get_safe_post()['user_minimum_age'] : CHV\Settings::get('user_minimum_age'); ?>" placeholder="<?php _se('Empty'); ?>"></div>
@ -1158,6 +1165,8 @@
<?php personal_mode_warning(); ?>
</div>
<hr class="line-separator"></hr>
<div class="input-label">
<label for="require_user_email_confirmation"><?php _se('Require email confirmation'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="require_user_email_confirmation" id="require_user_email_confirmation" class="text-input"<?php if(CHV\getSetting('website_mode') == 'personal') echo ' disabled'; ?>>
@ -2040,7 +2049,7 @@
], get_safe_post() ? get_safe_post()['comments_api'] : CHV\Settings::get('comments_api'));
?>
</select></div>
<div class="input-below"><?php _se('Disqus API works with %s.', '<a href="https://help.disqus.com/customer/portal/articles/236206" target="_blank">Single Sing-On</a> (SSO)'); ?></div>
<div class="input-below"><?php _se('Disqus API works with %s.', '<a href="https://help.disqus.com/customer/portal/articles/236206" target="_blank">Single Sign-On</a> (SSO)'); ?></div>
</div>
<div id="comments_api-combo">
<div data-combo-value="disqus" class="switch-combo<?php if((get_safe_post() ? get_safe_post()['comments_api'] : CHV\Settings::get('comments_api')) !== 'disqus') echo ' soft-hidden'; ?>">
@ -2097,6 +2106,27 @@
<?php } ?>
<?php if(get_settings()['key'] == 'additional-settings') { ?>
<div class="input-label">
<label for="enable_plugin_route"><?php _se('Plugin route'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="enable_plugin_route" id="enable_plugin_route" class="text-input">
<?php
echo CHV\Render\get_select_options_html([1 => _s('Enabled'), 0 => _s('Disabled')], CHV\Settings::get('enable_plugin_route'));
?>
</select></div>
<div class="input-below"><?php _se("Enable this to display plugin instructions at %u. A link to these instructions will be added to the %s menu. This setting doesn't affect administrators.", [
'%u' => G_ROOT_PATH_RELATIVE . 'plugin',
'%s' => '“' . _s('About') . '”',
]); ?></div>
</div>
<div class="input-label">
<label for="sdk_pup_url">PUP SDK URL</label>
<div class="c9 phablet-c1"><input type="text" name="sdk_pup_url" id="sdk_pup_url" class="text-input" value="<?php echo CHV\Settings::get('sdk_pup_url', true); ?>" placeholder="<?php _se('Empty'); ?>"></div>
<div class="input-below input-warning red-warning"><?php echo get_input_errors()['sdk_pup_url']; ?></div>
<div class="input-below"><?php _se('Use this to set a custom URL for %p. Please note that you need to manually replicate %s in this URL.', ['%p' => 'PUP SDK', '%s' => G_ROOT_PATH_RELATIVE . 'sdk/pup.js']); ?></div>
</div>
<hr class="line-separator"></hr>
<div class="input-label">
<label for="enable_cookie_law"><?php _se('Cookie law compliance'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="enable_cookie_law" id="enable_cookie_law" class="text-input">
@ -2138,8 +2168,12 @@
</div>
<?php G\Render\include_theme_footer(); ?>
<?php if(is_changed() || is_error()) { ?>
<script>PF.fn.growl.expirable("<?php echo is_changed() ? (get_changed_message() ?: _s('Changes have been saved.')) : (get_error_message() ?: _s('Check the errors to proceed.')); ?>");</script>
<?php } ?>
<script>
$(function() {
PF.fn.growl.expirable("<?php echo is_changed() ? (get_changed_message() ?: _s('Changes have been saved.')) : (get_error_message() ?: _s('Check the errors to proceed.')); ?>");
});
</script>
<?php } ?>
<?php G\Render\include_theme_footer(); ?>

View file

@ -1,15 +1,12 @@
<?php if(!defined('access') or !access) die('This file cannot be directly accessed.'); ?>
<?php G\Render\include_theme_header(); ?>
<?php CHV\Render\show_banner('explore_after_top', get_list()->sfw); ?>
<div class="content-width">
<div class="header header-tabs margin-bottom-10 follow-scroll">
<h1><strong><?php echo (function_exists('get_category') and get_category()['name']) ? get_category()['name'] : ('<span class="margin-right-5 icon ' . get_listing()['icon'] . '"></span>' . get_listing()['label']); ?></strong></h1>
<?php G\Render\include_theme_file("snippets/tabs"); ?>
<?php
if(is_admin()) {
G\Render\include_theme_file("snippets/user_items_editor");
@ -20,9 +17,9 @@
<?php
}
?>
</div>
<div id="content-listing-tabs" class="tabbed-listing">
<div id="tabbed-content-group">
<?php
@ -30,7 +27,7 @@
?>
</div>
</div>
</div>
<?php G\Render\include_theme_footer(); ?>

View file

@ -4,9 +4,6 @@
<div class="top-bar-placeholder"></div>
<div id="image-viewer" class="image-viewer full-viewer margin-bottom-10">
<?php
CHV\Render\show_banner('image_image-viewer_top', !get_image()['nsfw']);
?>
<?php
$image_url = get_image()['medium'] ? get_image()['medium']['url'] : get_image()['url'];
?>
@ -34,19 +31,12 @@
<?php if(get_image()['is_use_loader']) { ?>
<div id="image-viewer-loader" data-size="<?php echo get_image()['size']; ?>"><?php if(get_image()['is_animated']) { ?><span class="btn-icon icon icon-play3"></span><?php } ?><span class="btn-text"><?php get_image()['is_animated'] ? _se('Play GIF') : _se('Load full resolution'); ?> - <?php echo get_image()['size_formatted']; ?></span></div>
<?php } ?>
<?php
CHV\Render\show_banner('image_image-viewer_foot', !get_image()['nsfw']);
?>
</div>
<?php CHV\Render\show_theme_inline_code('snippets/image.js'); ?>
<?php
CHV\Render\show_banner('image_after_image-viewer', !get_image()['nsfw']);
?>
<div class="content-width">
<div class="header header-content margin-bottom-10">
<div class="header-content-left">
<div class="header-content-breadcrum">
@ -71,10 +61,14 @@
<div class="breadcrum-item">
<a class="edit-link" data-modal="edit"><span class="icon-edit"></span><span><?php _se('Edit image details'); ?></span></a>
</div>
<?php
if(is_allowed_to_delete_content()) {
?>
<div class="breadcrum-item">
<a class="delete-link" data-confirm="<?php _se("Do you really want to delete this image? This can't be undone."); ?>" data-submit-fn="CHV.fn.submit_resource_delete" data-ajax-deferred="CHV.fn.complete_resource_delete" data-ajax-url="<?php echo G\get_base_url("json"); ?>"><?php _se('Delete image'); ?></a>
</div>
<?php
}
}
?>
</div>
@ -98,9 +92,9 @@
<a class="btn red" data-modal="simple" data-target="modal-share"><span class="btn-icon icon-share"></span><span class="btn-text phone-hide"><?php _se('Share'); ?></span></a>
<?php } ?>
</div>
</div>
<?php
if(!get_image()['title']) {
?>
@ -112,11 +106,7 @@
<?php
}
?>
<?php
CHV\Render\show_banner('image_before_header', !get_image()['nsfw']);
?>
<div class="header">
<?php G\Render\include_theme_file("snippets/tabs"); ?>
<div class="header-content-right">
@ -124,13 +114,9 @@
<?php if(CHV\getSetting('enable_likes')) { ?><div class="number-figures float-left"><span class="icon icon-heart4"></span> <b data-text="likes-count"><?php echo get_image()["likes"]; ?></b></div><?php } ?>
</div>
</div>
<?php
CHV\Render\show_banner('image_after_header', !get_image()['nsfw']);
?>
<div id="tabbed-content-group">
<div id="tab-about" class="tabbed-content<?php echo (get_current_tab() == 'about' ? ' visible' : NULL); ?>">
<div class="c9 phablet-c1 fluid-column grid-columns">
<div class="panel-description default-margin-bottom">
@ -141,7 +127,7 @@
$category_link = '<a href="'.$category['url'].'" rel="tag">'.$category['name'].'</a>';
$time_elapsed_string = '<span title="'.get_image()['date_fixed_peer'].'">' . CHV\time_elapsed_string(get_image()['date_gmt']) . '</span>';
if(get_image()['album']['id'] and (get_image()['album']['privacy'] !== 'private_but_link' or is_owner() or is_admin())) {
$album_link = '<a href="'.get_image()['album']['url'].'"'. (get_image()['album']['name'] !== get_image()['album']['name_truncated'] ? (' title="' . get_image()['album']['name'] . '"') : NULL) .'>' . get_image()['album']['name_truncated'] . '</a>';
$album_link = '<a href="'.get_image()['album']['url'].'"'. (get_image()['album']['name'] !== get_image()['album']['name_truncated'] ? (' title="' . get_image()['album']['name_html'] . '"') : NULL) .'>' . get_image()['album']['name_truncated_html'] . '</a>';
if($category) {
echo _s('Added to %a and categorized in %c', ['%a' => $album_link, '%c' => $category_link]);
} else {
@ -186,7 +172,7 @@
} // theme_show_exif_data
?>
</div>
<?php if(CHV\getSetting('theme_show_social_share')) { ?>
<div class="phone-show phablet-show hidden panel-share-networks margin-bottom-30">
<h4 class="title"><?php _se('Share image'); ?></h4>
@ -195,7 +181,7 @@
</ul>
</div>
<?php } ?>
<?php
if(is_admin()) {
?>
@ -217,7 +203,7 @@
] +
array_slice($image_admin_list_values, 1, count($image_admin_list_values) - 1, true) ;
}
foreach($image_admin_list_values as $v) {
?>
<li><span class="c5 display-table-cell padding-right-10"><?php echo $v['label']; ?></span> <span class="display-table-cell"><?php echo $v['content']; ?></span></li>
@ -235,16 +221,12 @@
<?php
}
?>
<?php
CHV\Render\show_banner('content_before_comments', !get_image()['nsfw']);
?>
<div class="comments">
<?php CHV\Render\showComments(); ?>
</div>
</div>
<?php if(CHV\getSetting('theme_show_social_share')) { ?>
<div class="tablet-show laptop-show desktop-show hidden c15 phablet-c1 fluid-column grid-columns default-margin-bottom margin-left-10 panel-share-networks">
<h4 class="title c4 grid-columns"><?php _se('Share image'); ?></h4>
@ -253,7 +235,7 @@
</ul>
</div>
<?php } ?>
<?php
if(get_image()['album']) {
?>
@ -266,20 +248,17 @@
<?php
}
?>
<div class="c15 phablet-c1 fluid-column grid-columns margin-left-10 phablet-margin-left-0">
<?php
CHV\Render\show_banner('content_tab-about_column', !get_image()['nsfw']);
?>
</div>
</div>
<?php if(CHV\getSetting('theme_show_embed_content')) { ?>
<div id="tab-codes" class="tabbed-content<?php echo (get_current_tab() == 'codes' ? ' visible' : NULL); ?>">
<div class="growl static text-align-center margin-bottom-30 clear-both<?php if(get_image()['album']['privacy'] == 'public' || get_image()['album']['privacy'] == NULL) echo " soft-hidden"; ?>" data-content="privacy-private"><?php echo get_image()['album']['privacy_notes']; ?></div>
<div class="panel-share c16 phablet-c1 grid-columns margin-right-10">
<?php
foreach(get_embed() as $embed) {
@ -291,19 +270,19 @@
<h4 class="title c5 grid-columns"><?php echo $entry['label']; ?></h4>
<div class="c10 phablet-c1 grid-columns">
<input id="<?php echo $entry['id']; ?>" type="text" class="text-input" value="<?php echo $entry['value']; ?>" data-focus="select-all">
<button class="copy-input" data-action="copy" data-action-target="#<?php echo $entry['id']; ?>">copy</button>
<button class="input-action" data-action="copy" data-action-target="#<?php echo $entry['id']; ?>">copy</button>
</div>
</div>
<?php } ?>
</div>
<?php
<?php
}
?>
</div>
</div>
<?php } ?>
<?php
if(is_admin()) {
?>
@ -313,13 +292,9 @@
<?php
}
?>
</div>
<?php
CHV\Render\show_banner('image_footer', !get_image()['nsfw']);
?>
</div>
@ -336,12 +311,11 @@
</div>
<?php
}
if(CHV\getSetting('theme_show_social_share')) {
G\Render\include_theme_file('snippets/modal_share');
}
?>
<?php G\Render\include_theme_footer(); ?>

View file

@ -6,11 +6,19 @@
CHV\Render\show_theme_inline_code('snippets/index.js');
}
?>
<div id="home-cover" data-content="follow-scroll-opacity">
<div id="home-cover-slideshow">
<?php foreach(CHV\getSetting('homepage_cover_images_shuffled') as $k => $v) { ?>
<?php
$i = 0;
foreach(CHV\getSetting('homepage_cover_images_shuffled') as $k => $v) {
if($i > 1 && is_mobile_device()) break;
?>
<div class="home-cover-img" data-src="<?php echo $v['url']; ?>"></div>
<?php } ?>
<?php
$i++;
}
?>
</div>
<div id="home-cover-content" class="c20 fluid-column center-box padding-left-10 padding-right-10">
<h1><?php echo CHV\getSetting('homepage_title_html') ?: _s('Upload and share your images.'); ?></h1>
@ -31,7 +39,7 @@
<?php if (CHV\Settings::get('homepage_style') == 'split') { ?>
<div class="content-width">
<?php
$list = get_list();
if(is_admin()) {
@ -48,7 +56,7 @@
<?php
}
?>
<div id="home-pics-feature" class="<?php echo count($list->output) == 0 ? 'empty' : 'filled'; ?>">
<div id="content-listing-tabs" class="tabbed-listing">
<?php if(count($list->output) > 0) { ?><div id="home-pics-feature-overlay"></div><?php } ?>
@ -66,9 +74,9 @@
?>
</div>
</div>
<?php CHV\Render\show_banner('home_after_listing', get_list()->sfw); ?>
<?php
if(!get_logged_user() and CHV\getSetting('enable_signups')) {
?>
@ -80,7 +88,7 @@
<?php
}
?>
</div>
<?php } ?>

View file

@ -0,0 +1,116 @@
<?php if(!defined('access') or !access) die('This file cannot be directly accessed.'); ?>
<?php G\Render\include_theme_header(); ?>
<div class="center-box c24">
<div class="content-width">
<div class="header default-margin-bottom">
<h1><?php _se('Upload plugin'); ?></h1>
</div>
<div class="text-content">
<p><?php _se('Add image uploading to your website, blog or forum by installing our upload plugin. It provides image uploading to any website by placing a button that will allow your users to directly upload images to our service and it will automatically handle the codes needed for insertion. All features included like drag and drop, remote upload, image resizing and more.'); ?></p>
<h2><?php _se('Supported software'); ?></h2>
<p><?php _se('The plugin works in any website with user-editable content and for %sv, it will place an upload button that will match the target editor toolbar so no extra customization is needed.', ['%sv' => '<a data-toggle="pup-vendors">' . _s('supported software') . '</a>']); ?></p>
<ul data-content="pup-vendors" class="soft-hidden">
<?php
foreach (get_plugin()['vendors'] as $k => $v) {
echo '<li>' . $v . '</li>' . "\n";
}
?>
</ul>
<h2><?php _se('Add it to your website'); ?></h2>
<p><?php _se('Copy and paste the plugin code into your website HTML code (preferably inside the head section). There are plenty %o to make it fit better to your needs.', ['%o' => '<a data-toggle="pup-options">' . _s('options') . '</a>']); ?></p>
<div class="input-label margin-bottom-0">
<textarea id="pup-insert-code" data-focus="select-all" class="r2 resize-vertical" autocomplete="off" spellcheck="false" readonly><?php echo G\safe_html(get_plugin()['tagCode']); ?></textarea>
<button class="input-action" data-action="copy" data-action-target="#pup-insert-code"><?php _se('copy'); ?></button>
</div>
<div><?php echo get_plugin()['stylesheet']; echo get_plugin()['button']; ?></div>
<div data-content="pup-options" class="soft-hidden">
<h3><?php _se('Basic options'); ?></h3>
<div class="input-label margin-top-0">
<label for="palette"><?php _se('Color palette'); ?></label>
<div class="c9 phablet-c1">
<select type="text" name="palette" id="palette" class="text-input">
<?php
foreach (get_plugin()['palettes'] as $k => $v) {
$attr = 'value="' . ($k == 'default' ? '' : $k) . '"';
if($k == 'default') {
$attr .= ' selected="selected"';
}
echo '<option ' . $attr . '>' . ucfirst($k) . '</option>' . "\n";
}
?>
</select>
</div>
<div class="input-below"><?php _se('Button color scheme'); ?></div>
</div>
<div class="input-label">
<label for="auto-insert"><?php _se('Embed codes'); ?></label>
<div class="c9 phablet-c1">
<select type="text" name="auto-insert" id="auto-insert" class="text-input">
<?php
foreach (get_plugin()['embed'] as $k => $v) {
$attr = 'value="' . $k . '"';
if(!$k) {
$attr .= ' selected="selected"';
}
echo '<option ' . $attr . '>' . $v . '</option>' . "\n";
}
?>
</select>
</div>
<div class="input-below"><?php _se('Embed codes that will be auto-inserted in editor box'); ?></div>
</div>
<div class="input-label">
<label for="sibling"><?php _se('Sibling selector'); ?></label>
<div class="c9 phablet-c1">
<input type="text" name="sibling" id="sibling" class="text-input" placeholder="Empty string">
</div>
<div class="input-below"><?php _se('Sibling element selector where to place the button next to'); ?></div>
</div>
<div class="input-label">
<label for="sibling-pos"><?php _se('Sibling position'); ?></label>
<div class="c9 phablet-c1">
<select type="text" name="sibling-pos" id="sibling-pos" class="text-input">
<option value="" selected="selected"><?php _se('After'); ?></option>
<option value="before"><?php _se('Before'); ?></option>
</select>
</div>
<div class="input-below"><?php _se('Position relative to sibling element'); ?></div>
</div>
<div class="clear-both">
<h3><?php _se('Advanced options'); ?></h3>
<p><?php _se('The plugin has a large set of additional options that allow full customization. You can use custom HTML, CSS, own color palette, set observers and more. Check the %d and the plugin source to get a better idea of these advanced options.', ['%d' => '<a href="https://chevereto.com/docs/pup" target="_blank">' . _s('documentation') . '</a>']); ?></p>
</div>
</div>
</div>
</div>
</div>
<?php G\Render\include_theme_footer(); ?>
<script>
$(function() {
var $pluginButton = $("#pup-preview");
var tagAttrs = <?php echo json_encode(get_plugin()['tagAttrs']); ?>;
var el = document.createElement("script");
for(var key in tagAttrs) {
el.setAttribute(key, tagAttrs[key]);
}
$(document).on("keyup change", "[data-content=pup-options] *:input", function(e) {
var attr = 'data-' + $(this).attr("name");
var val = $(this).val();
if(val) {
el.setAttribute(attr, val);
} else {
el.removeAttribute(attr);
}
$("#pup-insert-code").val(el.outerHTML.replace('=""', '')).highlight();
});
$(document).on("change", "#palette", function(e) {
var val = $(this).val() || "default";
$pluginButton.removeClass(function(i, className) {
return (className.match (/(^|\s)chevereto-pup-button--palette-\S+/g) || []).join(' ');
}).addClass('chevereto-pup-button--palette-' + val);
});
});
</script>

View file

@ -482,8 +482,12 @@
</div>
<?php G\Render\include_theme_footer(); ?>
<?php if(get_post() and (is_changed() or is_error())) { ?>
<script>PF.fn.growl.expirable("<?php echo is_changed() ? (get_changed_message() ? get_changed_message() : _s('Changes have been saved.')) : _s('Check the errors to proceed.'); ?>");</script>
<?php } ?>
<script>
$(function() {
PF.fn.growl.expirable("<?php echo is_changed() ? (get_changed_message() ? get_changed_message() : _s('Changes have been saved.')) : _s('Check the errors to proceed.'); ?>");
});
</script>
<?php } ?>
<?php G\Render\include_theme_footer(); ?>

Some files were not shown because too many files have changed in this diff Show more