Sync gravatar in core and Spartacus.

Bump version to 1.63.

Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
Thomas Hochstein 2018-09-02 17:59:04 +02:00
parent 7ba10c9b04
commit 686a66aa05
19 changed files with 833 additions and 948 deletions

View file

@ -1,8 +1,29 @@
#
Version 1.60:
Version 1.63:
------------------------------------------------------------------------
* Sync core and Spartacus.
Version 1.62.2:
------------------------------------------------------------------------
* Add legal information to be used by serendipity_event_dsgvo_gpdr
Version 1.62.1:
------------------------------------------------------------------------
* Remove defunct mybloglog
Version 1.61.1:
------------------------------------------------------------------------
* Workaround PHP < 5.6 bug, not verifying certs, stopping Request2
Version 1.61:
------------------------------------------------------------------------
* Switch plugin to http_request2
Version 1.60:
------------------------------------------------------------------------
* Consistent plugin usage
Version 1.59:
------------------------------------------------------------------------
* Allows other plugins to fetch user metadata via
avatar_fetch_userinfos hook.
* supports !# twitter links now, too.

View file

@ -60,3 +60,4 @@
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_DESC', 'Gravatar má implementovaných několik návratových metod pro případ, že pro požadovaného uživatele není znám žádný avatar. Implementovány jsou též Moster ID, Identicon a Wavatar. Pokud vyberete některý z těchto zíněných, nebudou uskutečňovány žádné další pokusy o načtení avataru, pokud uživatel zadá email.');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS', 'Vždy návratová hodnota pro Gravatar');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS_DESC', 'Používat návratovou hodnotu Gravatar i v případě, že uživatel nezadá email (zadá tedy url nebo jméno)');

View file

@ -60,3 +60,4 @@
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_DESC', 'Gravatar má implementovaných několik návratových metod pro případ, že pro požadovaného uživatele není znám žádný avatar. Implementovány jsou též Moster ID, Identicon a Wavatar. Pokud vyberete některý z těchto zíněných, nebudou uskutečňovány žádné další pokusy o načtení avataru, pokud uživatel zadá email.');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS', 'Vždy návratová hodnota pro Gravatar');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS_DESC', 'Používat návratovou hodnotu Gravatar i v případě, že uživatel nezadá email (zadá tedy url nebo jméno)');

View file

@ -1,4 +1,4 @@
<?php # lang_de.inc.php 1.17 2009-08-20 10:10:36 VladaAjgl $
<?php
/**
* @version 1.17
@ -65,3 +65,4 @@
// Next lines were translated on 2009/08/20
@define('PLUGIN_EVENT_GRAVATAR_METHOD_DESC', 'Wenn die vorherigen Methoden fehlschlagen, versuche diese. Der Typ "' . PLUGIN_EVENT_GRAVATAR_METHOD_DEFAULT . '", "Monster ID", "Wavatar", "Identicon" und "---" wird niemals fehlschlagen. Alles unterhalb dieser Methoden wird nicht versucht.');

View file

@ -1,4 +1,4 @@
<?php #
<?php
/**
* @version
@ -62,3 +62,4 @@
'<b><a href="://www.splitbrain.org/go/monsterid" target="_blank">Monster ID avatars</a></b> are localy created monster images unique for each writer.');
@define('PLUGIN_EVENT_GRAVATAR_EXTLING_WARNING', '<font color="red">CAUTION!</font> This plugin has to be executed before any plugin changing links (like i.e. the exit tracking plugin)! ' .
'<font color="red">Else Pavatars, Favatars and MayBlogLog avatars won\'t work!</font>');

View file

@ -1,11 +1,12 @@
body {
font-family: Arial, sans-serif!important;
margin: 20;
font-family: Arial, sans-serif!important;
margin: 20;
}
#title {
background: #cfcfcf;
margin: 0;
}#content {
}
#content {
background: #efefef;
margin: 0;
}

View file

@ -49,7 +49,7 @@
<li><a href="#cnf_gravatar_fallback_always">Vždy vyžadovat Gravatar Fallback</a></li>
</ol>
<li><a href="#changelog">ChangeLog (historie verzí)</a></li>
<li><a href="#changelog">ChangeLog (historie verzí)</a></li>
</ol>
</div>
@ -200,232 +200,232 @@ Avatary Identicon (identikony) jsou generov
<ul>
<li>verze 1.54</li>
<ul>
<li>Do jazykové konstanty PLUGIN_EVENT_GRAVATAR_SUPPORTED byl přidán parametr %s pro zobrazení podporovaných avatarových služeb.</li>
</ul>
<ul>
<li>Do jazykové konstanty PLUGIN_EVENT_GRAVATAR_SUPPORTED byl přidán parametr %s pro zobrazení podporovaných avatarových služeb.</li>
</ul>
<li>verze 1.52</li>
<ul>
<li>Změněno zobrazení podporovaných avatarů pod polem pro komentář, aby podporovalo hezké zalamování řádků.</li>
</ul>
<ul>
<li>Změněno zobrazení podporovaných avatarů pod polem pro komentář, aby podporovalo hezké zalamování řádků.</li>
</ul>
<li>verze 1.51</li>
<ul>
<li>Použití funkce strtolower() pro mailové adresy.</li>
</ul>
<ul>
<li>Použití funkce strtolower() pro mailové adresy.</li>
</ul>
<li>verze 1.49 [brockhaus]</li>
<ul>
<li>Pavatar v blozích s přesměrováním nefungoval, pokud byl odkaz na Pavatar přístupný pouze v informacích tagu "rel link"</li>
</ul>
<ul>
<li>Pavatar v blozích s přesměrováním nefungoval, pokud byl odkaz na Pavatar přístupný pouze v informacích tagu "rel link"</li>
</ul>
<li>verze 1.48 [brockhaus]</li>
<ul>
<li>Oprava: Kompatibilita PHP byla porušena při opravě 1.46 :-/</li>
<li>Přidán avatar Identica. Použito hlavně pro pingbacky Indetica a mělo by být použito před Favatarem, jinak se bude zobrazovat značka Identica místo obrázku uživatele.</li>
<li>Vyčištění kódu</li>
</ul>
<ul>
<li>Oprava: Kompatibilita PHP byla porušena při opravě 1.46 :-/</li>
<li>Přidán avatar Identica. Použito hlavně pro pingbacky Indetica a mělo by být použito před Favatarem, jinak se bude zobrazovat značka Identica místo obrázku uživatele.</li>
<li>Vyčištění kódu</li>
</ul>
<li>verze 1.47 [brockhaus]</li>
<ul>
<li>Vypnutí ladicích výpisů v template_c</li>
</ul>
<ul>
<li>Vypnutí ladicích výpisů v template_c</li>
</ul>
<li>verze 1.46 [brockhaus]</li>
<ul>
<li>Přidán Twitter Avatar (pokud URL odkazuje na profil na Twitteru). To je většinou použito pro Tweetbacky a mělo by být použito před Favatarem, jinak se bude zobrazovat logo Twitteru.</li>
<li>Vyčištění kódu</li>
</ul>
<ul>
<li>Přidán Twitter Avatar (pokud URL odkazuje na profil na Twitteru). To je většinou použito pro Tweetbacky a mělo by být použito před Favatarem, jinak se bude zobrazovat logo Twitteru.</li>
<li>Vyčištění kódu</li>
</ul>
<li>verze 1.45 [brockhaus]</li>
<ul>
<li>Nápověda</li>
<li>Vyčištění</li>
</ul>
<ul>
<li>Nápověda</li>
<li>Vyčištění</li>
</ul>
<li>verze 1.44 [brockhaus]</li>
<ul>
<li>Přidána podpora Wavatarů</li>
<li>Podpora pro ošetření chyb (fallback) Gravataru pomocí indetyicon, MonsterID a Wavataru.</li>
<li>Optimalizace zpětných volání (trackback) avatarů: Querypars budou odstřiženy z URL. Nyní v ukázkovém Serendipity blogu dostanete vždycky stejného cachovaného Avatara, ne samostatného pro jiné stránky.</li>
</ul>
<ul>
<li>Přidána podpora Wavatarů</li>
<li>Podpora pro ošetření chyb (fallback) Gravataru pomocí indetyicon, MonsterID a Wavataru.</li>
<li>Optimalizace zpětných volání (trackback) avatarů: Querypars budou odstřiženy z URL. Nyní v ukázkovém Serendipity blogu dostanete vždycky stejného cachovaného Avatara, ne samostatného pro jiné stránky.</li>
</ul>
<li>verze 1.43 [brockhaus]</li>
<ul>
<li>Volba nastavení pro přidání jména autora do attributu ALT u obrázku avatara. Normálně je to vyplněno hvězdičkou "*", ale slepci jsou při prohlížení stránek závislí na tagu ALT, který jim čtečky předčítají, aby se dozvěděli, co je obsahem obrázku.</li>
</ul>
<ul>
<li>Volba nastavení pro přidání jména autora do attributu ALT u obrázku avatara. Normálně je to vyplněno hvězdičkou "*", ale slepci jsou při prohlížení stránek závislí na tagu ALT, který jim čtečky předčítají, aby se dozvěděli, co je obsahem obrázku.</li>
</ul>
<li>verze 1.42 [brockhaus]</li>
<ul>
<li>Kódování podtržítka "_" v URL adresách uživatelů, aby se odlišily od oddělovačů. Funkce "urlencode" je nekóduje. Díky uživateli [Tino Schwarze] za objevení a opravu.</li>
</ul>
<ul>
<li>Kódování podtržítka "_" v URL adresách uživatelů, aby se odlišily od oddělovačů. Funkce "urlencode" je nekóduje. Díky uživateli [Tino Schwarze] za objevení a opravu.</li>
</ul>
<li>verze 1.41 [garvinhicking]</li>
<ul>
<li>Opravena hlavička "Last-Modified" u obrázků avatarů.</li>
</ul>
<ul>
<li>Opravena hlavička "Last-Modified" u obrázků avatarů.</li>
</ul>
<li>verze 1.40</li>
<ul>
<li>Přidána podpora Ycon (<a href="http://moblog.wiredwings.com">http://moblog.wiredwings.com<a/>)(</li>
</ul>
<ul>
<li>Přidána podpora Ycon (<a href="http://moblog.wiredwings.com">http://moblog.wiredwings.com<a/>)(</li>
</ul>
<li>verze 1.39 [brockhaus]</li>
<ul>
<li>Avatary Monster ID je nyní také cachován, protože jejich vytváření trvá dlouho.</li>
</ul>
<ul>
<li>Avatary Monster ID je nyní také cachován, protože jejich vytváření trvá dlouho.</li>
</ul>
<li>verze 1.38 [brockhaus]</li>
<ul>
<li>Podpora Monster ID avatarů (podrobnosti naleznete na <a href="http://www.splitbrain.org/go/monsterid">http://www.splitbrain.org/go/monsterid</a>)</li>
<li>Selhání při čerstvé instalaci a času cache nastaveném na 0.</li>
<li>Podpora nastavení absolutní cesty k standardnímu avataru.</li>
<li>Po uložení nastavení je nyní cache <b>vždy</b> vyčištěna, aby byly změny viditelné ihned, dokonce i když je cachování zapnuto.</li>
<li>Pokud plugin nemůže zapisovat do cache, pak to v ladicím módu zapíše do logu a zobrazí výchozí obrázek, pokud není nalezen cachovaný soubor.</li>
</ul>
<ul>
<li>Podpora Monster ID avatarů (podrobnosti naleznete na <a href="http://www.splitbrain.org/go/monsterid">http://www.splitbrain.org/go/monsterid</a>)</li>
<li>Selhání při čerstvé instalaci a času cache nastaveném na 0.</li>
<li>Podpora nastavení absolutní cesty k standardnímu avataru.</li>
<li>Po uložení nastavení je nyní cache <b>vždy</b> vyčištěna, aby byly změny viditelné ihned, dokonce i když je cachování zapnuto.</li>
<li>Pokud plugin nemůže zapisovat do cache, pak to v ladicím módu zapíše do logu a zobrazí výchozí obrázek, pokud není nalezen cachovaný soubor.</li>
</ul>
<li>verze 1.37 [brockhaus]</li>
<ul>
<li>Řádka pod oknem komentáře informující o podporovaných typech avatarů lze skrýt pomocí nastavení.</li>
</ul>
<ul>
<li>Řádka pod oknem komentáře informující o podporovaných typech avatarů lze skrýt pomocí nastavení.</li>
</ul>
<li>verze 1.36 [brockhaus]</li>
<ul>
<li>Přidána nová volba: Můžete nastavit, že plugin nebude vytvářet avatary přímo, ale místo toho pouze tag pro smarty. Pokud je tato volba zapnutá, můžete si definovat v šabloně pro komentáře, kde se mají avatary zobrazovat, a to pomocí tagu $comment.comment_avatar.</li>
<li>CSS třída avataru se bude měnit podle toho, kde je zobrazen. Pro normální komentáře bude mít třídu "comment_avatar", pro plugin "nejnovější příspěvky" to bude třída "serendipity_plugin_comments_avatar", aby byla možnost jednoduše je označit, ostylovat.</li>
<li>Nastavení zarovnání avatarů: Nastavení zarovnání bude použito, pokud je avatar vykreslen přímo (ne pomocí smarty).</li>
<li>Nová volba pro vypínání/zapínání obrázků avatarů v postranním sloupci (nejnovější komentáře).</li>
<li>Podporovaní metody avatarů se zobrazovaly i pod kontaktním formulářem, což ale nemělo logický smysl. V tomto fromuláři byly tedy avatary vypnuty.</li>
<li>Další změny v jazykových souborech.</li>
</ul>
<ul>
<li>Přidána nová volba: Můžete nastavit, že plugin nebude vytvářet avatary přímo, ale místo toho pouze tag pro smarty. Pokud je tato volba zapnutá, můžete si definovat v šabloně pro komentáře, kde se mají avatary zobrazovat, a to pomocí tagu $comment.comment_avatar.</li>
<li>CSS třída avataru se bude měnit podle toho, kde je zobrazen. Pro normální komentáře bude mít třídu "comment_avatar", pro plugin "nejnovější příspěvky" to bude třída "serendipity_plugin_comments_avatar", aby byla možnost jednoduše je označit, ostylovat.</li>
<li>Nastavení zarovnání avatarů: Nastavení zarovnání bude použito, pokud je avatar vykreslen přímo (ne pomocí smarty).</li>
<li>Nová volba pro vypínání/zapínání obrázků avatarů v postranním sloupci (nejnovější komentáře).</li>
<li>Podporovaní metody avatarů se zobrazovaly i pod kontaktním formulářem, což ale nemělo logický smysl. V tomto fromuláři byly tedy avatary vypnuty.</li>
<li>Další změny v jazykových souborech.</li>
</ul>
<li>verze 1.35 [brockhaus]</li>
<ul>
<li>Opraveny chyby v anglickém jazykovém souboru. (Díky Donovi!)</li>
</ul>
<ul>
<li>Opraveny chyby v anglickém jazykovém souboru. (Díky Donovi!)</li>
</ul>
<li>verze 1.34 [brockhaus]</li>
<ul>
<li>Hodnocení Gravatarů nepracuje spolehlivě. Můj Gravatar hodnocený jako G je zobrazen pouze při použití hodnocení gravatarů X. :-/<br />
Přidána volba pro vypnutí parametru hodnocení Gravatarů, což by mělo mít stejný efekt jako nastavení hodnocení X.</li>
</ul>
<ul>
<li>Hodnocení Gravatarů nepracuje spolehlivě. Můj Gravatar hodnocený jako G je zobrazen pouze při použití hodnocení gravatarů X. :-/<br />
Přidána volba pro vypnutí parametru hodnocení Gravatarů, což by mělo mít stejný efekt jako nastavení hodnocení X.</li>
</ul>
<li>verze 1.33 [brockhaus]</li>
<ul>
<li>Pavatar: X-Pavatar Header je nyní znovu podporován a je první použitou metodou automatické detekce Pavatara.</li>
</ul>
<ul>
<li>Pavatar: X-Pavatar Header je nyní znovu podporován a je první použitou metodou automatické detekce Pavatara.</li>
</ul>
<li>verze 1.32 [brockhaus]</li>
<ul>
<li>Výchozí avatar MyBlogLog nebyl správně detekování. :-/</li>
<li>Pokud není zadán email ani url adresa, ale je definován výchozí avatar, je nyní zobrazen právě výchozí avatar.</li>
</ul>
<ul>
<li>Výchozí avatar MyBlogLog nebyl správně detekování. :-/</li>
<li>Pokud není zadán email ani url adresa, ale je definován výchozí avatar, je nyní zobrazen právě výchozí avatar.</li>
</ul>
<li>verze 1.31 [brockhaus]</li>
<ul>
<li>Změna času volání (call-time) chyby (pass-by-reference) (fetchAvatar).</li>
</ul>
<ul>
<li>Změna času volání (call-time) chyby (pass-by-reference) (fetchAvatar).</li>
</ul>
<li>verze 1.30 [brockhaus]</li>
<ul>
<li>Standradní Avatar se nezobrazoval, pokud byl blog nainstalován v podadresáři webu a ne přímo v kořenové složce.</li>
<li>Odkaz na Gravatara byl trochu špatně (přesto fungoval).</li>
</ul>
<ul>
<li>Standradní Avatar se nezobrazoval, pokud byl blog nainstalován v podadresáři webu a ne přímo v kořenové složce.</li>
<li>Odkaz na Gravatara byl trochu špatně (přesto fungoval).</li>
</ul>
<li>verze 1.29 [brockhaus]</li>
<ul>
<li>Oprava chyby 1.27 přidávala k URL "http://", i když nebyla zadána vůbec žádná URL adresa.</li>
</ul>
<ul>
<li>Oprava chyby 1.27 přidávala k URL "http://", i když nebyla zadána vůbec žádná URL adresa.</li>
</ul>
<li>verze 1.28 [brockhaus]</li>
<ul>
<li>V Serendipity 1.1 nebylo možné natavit výchozího avatara. Nastavení nebylo kompatibilní s verzí Serendipity 1.1.</li>
</ul>
<ul>
<li>V Serendipity 1.1 nebylo možné natavit výchozího avatara. Nastavení nebylo kompatibilní s verzí Serendipity 1.1.</li>
</ul>
<li>verze 1.27 [brockhaus]</li>
<ul>
<li>Pokud pisatel zadal svoji adresu jako "www.domena.cz" místo "http://www.domena.cz", Avatar nebyl načten správně.</li>
</ul>
<ul>
<li>Pokud pisatel zadal svoji adresu jako "www.domena.cz" místo "http://www.domena.cz", Avatar nebyl načten správně.</li>
</ul>
<li>verze 1.26 [brockhaus]</li>
<ul>
<li>MyBlogLog trochu pozměnil způsob volání avatara, což mělo za následek, že ošetření chybových výstupů (fallback) pro MyBlogLog přestal fungovat.</li>
</ul>
<ul>
<li>MyBlogLog trochu pozměnil způsob volání avatara, což mělo za následek, že ošetření chybových výstupů (fallback) pro MyBlogLog přestal fungovat.</li>
</ul>
<li>verze 1.25 [garvinhicking]</li>
<ul>
<li>Zarovnání (algin) nahraceno definicí pomocí CSS stylů, takže XHTML už neobsahuje žádné definice zarovnání.</li>
</ul>
<ul>
<li>Zarovnání (algin) nahraceno definicí pomocí CSS stylů, takže XHTML už neobsahuje žádné definice zarovnání.</li>
</ul>
<li>verze 1.24 [brockhaus]</li>
<ul>
<li>Kontrola odpovědi MyBlogLog, jestli obsahuje opravdu obrázek.</li>
<li>Vyčištění paměti cache při nastavení hodnoty cachování na 0.</li>
<li>Vypnutí ladicích výpisů.</li>
</ul>
<ul>
<li>Kontrola odpovědi MyBlogLog, jestli obsahuje opravdu obrázek.</li>
<li>Vyčištění paměti cache při nastavení hodnoty cachování na 0.</li>
<li>Vypnutí ladicích výpisů.</li>
</ul>
<li>verze 1.23 [brockhaus]</li>
<ul>
<li>Při vkládání čerstvých P/favatarů, plugin přijme pouze odpovědi označené vzdáleným serverem jako obrázky. To zamezí přijetí potenciálních html stránek jako obrázku avatara.</li>
</ul>
<ul>
<li>Při vkládání čerstvých P/favatarů, plugin přijme pouze odpovědi označené vzdáleným serverem jako obrázky. To zamezí přijetí potenciálních html stránek jako obrázku avatara.</li>
</ul>
<li>verze 1.22 [brockhaus]</li>
<ul>
<li>Vkládání i přesměrovaných P/Favatarů.</li>
</ul>
<ul>
<li>Vkládání i přesměrovaných P/Favatarů.</li>
</ul>
<li>verze 1.21 [brockhaus]</li>
<ul>
<li>Vkládání avatarů se rozbilo při vypnutí cache.</li>
<li>Prohlížeč nebyl schopen cachovat výchozí avatary kvůli špatně nastavenému času cache.</li>
<li>Kontrola, jestli cachovaný soubor vypadá jako obrázek, předtím, než je odeslán na klienta.</li>
</ul>
<ul>
<li>Vkládání avatarů se rozbilo při vypnutí cache.</li>
<li>Prohlížeč nebyl schopen cachovat výchozí avatary kvůli špatně nastavenému času cache.</li>
<li>Kontrola, jestli cachovaný soubor vypadá jako obrázek, předtím, než je odeslán na klienta.</li>
</ul>
<li>verze 1.20 [brockhaus]</li>
<ul>
<li>Titulek obrázku avatara nyní zobrazuje jméno autora místo "Avatar" (V.)</li>
</ul>
<ul>
<li>Titulek obrázku avatara nyní zobrazuje jméno autora místo "Avatar" (V.)</li>
</ul>
<li>verze 1.19 [brockhaus]</li>
<ul>
<li>Využití cache prohlížeče má za následek dobré vylepšení výkonu!</li>
</ul>
<ul>
<li>Využití cache prohlížeče má za následek dobré vylepšení výkonu!</li>
</ul>
<li>verze 1.18 [brockhaus]</li>
<ul>
<li>Vypnutí ladicích výpisů</li>
</ul>
<ul>
<li>Vypnutí ladicích výpisů</li>
</ul>
<li>verze 1.17 [brockhaus]</li>
<ul>
<li>Pokud je zapnuto cachování, je nyní cachováno <b>všechno</b>. Známí přispěvatelé a komentátoři nyní nezpůsobí <b>žádné</b> volání cizích serverů, pokud už jsou jejich obrázky cachovány. Velmi pěkné posílení výkonu. Díky Garvinovi za nápad.</li>
<li>Záplata proti hackování od uživatele [garvinhickins]</li>
</ul>
<ul>
<li>Pokud je zapnuto cachování, je nyní cachováno <b>všechno</b>. Známí přispěvatelé a komentátoři nyní nezpůsobí <b>žádné</b> volání cizích serverů, pokud už jsou jejich obrázky cachovány. Velmi pěkné posílení výkonu. Díky Garvinovi za nápad.</li>
<li>Záplata proti hackování od uživatele [garvinhickins]</li>
</ul>
<li>verze 1.16 [garvinhicking]</li>
<ul>
<li>uhlazení kódu</li>
</ul>
<ul>
<li>uhlazení kódu</li>
</ul>
<li>verze 1.14 [brockhaus]</li>
<ul>
<li>Implementováno zpracování chyb pro MyBlogLog! :-) Ale je pomalé, dokonce i s optimalizací pomocí cachování. MyBlogLog by neměl být první v pořadí avatarů.</li>
<li>Přidána pátá kolonka pro výběr metody avatarů, protože MyBlogLog nyní také podporuje zpracování chyb (fallback).</li>
</ul>
<ul>
<li>Implementováno zpracování chyb pro MyBlogLog! :-) Ale je pomalé, dokonce i s optimalizací pomocí cachování. MyBlogLog by neměl být první v pořadí avatarů.</li>
<li>Přidána pátá kolonka pro výběr metody avatarů, protože MyBlogLog nyní také podporuje zpracování chyb (fallback).</li>
</ul>
<li>verze 1.13 [brockhaus]</li>
<ul>
<li>Doporučení změněno: Není to plugin "statistika", který znefunkční Pavatary/Favatary, ale plugin "sledování odchodů" (exit tracking plugin)</li>
</ul>
<ul>
<li>Doporučení změněno: Není to plugin "statistika", který znefunkční Pavatary/Favatary, ale plugin "sledování odchodů" (exit tracking plugin)</li>
</ul>
<li>verze 1.12 [brockhaus]</li>
<ul>
<li>MyBlogLog avatary jsou nyní také cachovány.</li>
<li>Stránky s přesměrováním na výchozí stránku, pokud nebyla nalazena výchozí položka, jsou nyní podporovány. Dřívější plugin avatar předpokládal, že výchozí stránka ja P/Favatar.</li>
<li>Výchozí nastavení pořadí avatarů je nyní: Gravatar -> Pavatar
<ul>
<li>MyBlogLog avatary jsou nyní také cachovány.</li>
<li>Stránky s přesměrováním na výchozí stránku, pokud nebyla nalazena výchozí položka, jsou nyní podporovány. Dřívější plugin avatar předpokládal, že výchozí stránka ja P/Favatar.</li>
<li>Výchozí nastavení pořadí avatarů je nyní: Gravatar -> Pavatar
-> Favatar -> výchozí Avatar</li>
<li>Přidáno doporučení, že plugin by měl být zařazen před pluginy, které mění odkazy.</li>
<li>Načítání nastavené cesty pluginu. Dříve to byl vždy adresář 'plugin'.</li>
<li>Vyřazeno nastavení okraje gravatara, protože už nefunguje (napořád?).</li>
</ul>
<li>Přidáno doporučení, že plugin by měl být zařazen před pluginy, které mění odkazy.</li>
<li>Načítání nastavené cesty pluginu. Dříve to byl vždy adresář 'plugin'.</li>
<li>Vyřazeno nastavení okraje gravatara, protože už nefunguje (napořád?).</li>
</ul>
<li>verze 1.11 [brockhaus], testovací verze nebyla releasována do CVS/Spartacus</li>
<ul>
<li>Fallback (zpracování chyby) pro Gravatar funguje! Ale zobrazuje výchozího avatara nezávisle na nastavení. Takže toto nastavení bylo smazáno.</li>
</ul>
<ul>
<li>Fallback (zpracování chyby) pro Gravatar funguje! Ale zobrazuje výchozího avatara nezávisle na nastavení. Takže toto nastavení bylo smazáno.</li>
</ul>
<li>verze 1.10 [brockhaus]</li>
<ul>
<li>Informace o Pavatar / Avatar nebyly nikdy načtené z cache</li>
<li>...ale po načtení z cache způsobily nekonečnou smyčku pro obrázky načtené z lokálního blogu (pokud byl povolen postranní blugin s komentáři - comment sidebar)</li>
<li>Nastavení výšky obrázku bylo pojmenováno "height" ... :-/</li>
<li>Cachování Gravataru nefungovalo spolehlivě, pokud byl nastaven výchozí avatar.</li>
</ul>
<ul>
<li>Informace o Pavatar / Avatar nebyly nikdy načtené z cache</li>
<li>...ale po načtení z cache způsobily nekonečnou smyčku pro obrázky načtené z lokálního blogu (pokud byl povolen postranní blugin s komentáři - comment sidebar)</li>
<li>Nastavení výšky obrázku bylo pojmenováno "height" ... :-/</li>
<li>Cachování Gravataru nefungovalo spolehlivě, pokud byl nastaven výchozí avatar.</li>
</ul>
<li>verze 1.9 [brockhaus]</li>
<ul>
<li>Při hledání Pavatara byl natažen Favatar jako Pavatar, pokud nebyl nalezen Pavatar, ale favicon. Díky uživateli [El Burro]</li>
</ul>
<ul>
<li>Při hledání Pavatara byl natažen Favatar jako Pavatar, pokud nebyl nalezen Pavatar, ale favicon. Díky uživateli [El Burro]</li>
</ul>
<li>verze 1.8 [brockhaus]</li>
<ul>
<li>Plugin nebych schopen načíst Favatary/Pavatary, pokud bylo přesměrování nasměrováno na URL stránky nastavené jako domovská stránka komentujícího. Třeba Garvin má takový blog...</li>
</ul>
<ul>
<li>Plugin nebych schopen načíst Favatary/Pavatary, pokud bylo přesměrování nasměrováno na URL stránky nastavené jako domovská stránka komentujícího. Třeba Garvin má takový blog...</li>
</ul>
<li>verze 1.7 [brockhaus]</li>
<ul>
<li>Přidána podpora Pavatarů (<a href="www.pavatar.com">www.pavatar.com</a>)</li>
<li>Přidána podpora MyBlogLog avatarů (<a href="www.pavatar.com">www.mybloglog.com</a>)</li>
<li>Pořadí pro výběr avatarů a jaké typy avatarů jsou podporovány, vše je nyní nastavitelné.</li>
<li>Standardní avatar může být jeden z nich (měl by být poslední).</li>
<li>Volba pro nenastavení Gravatara jako výchozího avatara, i když je definovaný. (Chceme méně datových profilů...)</li>
<li>Vložení výchozího avatara pomocí mediatéky v nastavení pluginu.</li>
<li>Velikost obrázku je nyní zajištěna pomocí HTML kódu.</li>
<li>Pod polem pro komentář jsou zobrazovány pouze aktuálně nastavené metody avatara jako podporované.</li>
</ul>
<ul>
<li>Přidána podpora Pavatarů (<a href="www.pavatar.com">www.pavatar.com</a>)</li>
<li>Přidána podpora MyBlogLog avatarů (<a href="www.pavatar.com">www.mybloglog.com</a>)</li>
<li>Pořadí pro výběr avatarů a jaké typy avatarů jsou podporovány, vše je nyní nastavitelné.</li>
<li>Standardní avatar může být jeden z nich (měl by být poslední).</li>
<li>Volba pro nenastavení Gravatara jako výchozího avatara, i když je definovaný. (Chceme méně datových profilů...)</li>
<li>Vložení výchozího avatara pomocí mediatéky v nastavení pluginu.</li>
<li>Velikost obrázku je nyní zajištěna pomocí HTML kódu.</li>
<li>Pod polem pro komentář jsou zobrazovány pouze aktuálně nastavené metody avatara jako podporované.</li>
</ul>
<li>verze 1.6 [garvinhickins]</li>
<li>verze 1.5 [garvinhickins]</li>
<li>verze 1.4 [garvinhickins]</li>
<li>verze 1.3 [garvinhickins]</li>
<ul>
<li>Opraveny chyby neplatnosti domény</li>
</ul>
<ul>
<li>Opraveny chyby neplatnosti domény</li>
</ul>
</ul>
<p><a href="#top">nahoru</a></p>

View file

@ -49,7 +49,7 @@
<li><a href="#cnf_gravatar_fallback_always">V¾dy vy¾adovat Gravatar Fallback</a></li>
</ol>
<li><a href="#changelog">ChangeLog (historie verzí)</a></li>
<li><a href="#changelog">ChangeLog (historie verzí)</a></li>
</ol>
</div>
@ -200,232 +200,232 @@ Avatary Identicon (identikony) jsou generov
<ul>
<li>verze 1.54</li>
<ul>
<li>Do jazykové konstanty PLUGIN_EVENT_GRAVATAR_SUPPORTED byl přidán parametr %s pro zobrazení podporovaných avatarových služeb.</li>
</ul>
<ul>
<li>Do jazykové konstanty PLUGIN_EVENT_GRAVATAR_SUPPORTED byl přidán parametr %s pro zobrazení podporovaných avatarových služeb.</li>
</ul>
<li>verze 1.52</li>
<ul>
<li>Změněno zobrazení podporovaných avatarů pod polem pro komentář, aby podporovalo hezké zalamování řádků.</li>
</ul>
<ul>
<li>Změněno zobrazení podporovaných avatarů pod polem pro komentář, aby podporovalo hezké zalamování řádků.</li>
</ul>
<li>verze 1.51</li>
<ul>
<li>Použití funkce strtolower() pro mailové adresy.</li>
</ul>
<ul>
<li>Použití funkce strtolower() pro mailové adresy.</li>
</ul>
<li>verze 1.49 [brockhaus]</li>
<ul>
<li>Pavatar v blozích s přesměrováním nefungoval, pokud byl odkaz na Pavatar přístupný pouze v informacích tagu "rel link"</li>
</ul>
<ul>
<li>Pavatar v blozích s přesměrováním nefungoval, pokud byl odkaz na Pavatar přístupný pouze v informacích tagu "rel link"</li>
</ul>
<li>verze 1.48 [brockhaus]</li>
<ul>
<li>Oprava: Kompatibilita PHP byla porušena při opravě 1.46 :-/</li>
<li>Přidán avatar Identica. Použito hlavně pro pingbacky Indetica a mělo by být použito před Favatarem, jinak se bude zobrazovat značka Identica místo obrázku uživatele.</li>
<li>Vyčištění kódu</li>
</ul>
<ul>
<li>Oprava: Kompatibilita PHP byla porušena při opravě 1.46 :-/</li>
<li>Přidán avatar Identica. Použito hlavně pro pingbacky Indetica a mělo by být použito před Favatarem, jinak se bude zobrazovat značka Identica místo obrázku uživatele.</li>
<li>Vyčištění kódu</li>
</ul>
<li>verze 1.47 [brockhaus]</li>
<ul>
<li>Vypnutí ladicích výpisů v template_c</li>
</ul>
<ul>
<li>Vypnutí ladicích výpisů v template_c</li>
</ul>
<li>verze 1.46 [brockhaus]</li>
<ul>
<li>Přidán Twitter Avatar (pokud URL odkazuje na profil na Twitteru). To je většinou použito pro Tweetbacky a mělo by být použito před Favatarem, jinak se bude zobrazovat logo Twitteru.</li>
<li>Vyčištění kódu</li>
</ul>
<ul>
<li>Přidán Twitter Avatar (pokud URL odkazuje na profil na Twitteru). To je většinou použito pro Tweetbacky a mělo by být použito před Favatarem, jinak se bude zobrazovat logo Twitteru.</li>
<li>Vyčištění kódu</li>
</ul>
<li>verze 1.45 [brockhaus]</li>
<ul>
<li>Nápověda</li>
<li>Vyčištění</li>
</ul>
<ul>
<li>Nápověda</li>
<li>Vyčištění</li>
</ul>
<li>verze 1.44 [brockhaus]</li>
<ul>
<li>Přidána podpora Wavatarů</li>
<li>Podpora pro ošetření chyb (fallback) Gravataru pomocí indetyicon, MonsterID a Wavataru.</li>
<li>Optimalizace zpětných volání (trackback) avatarů: Querypars budou odstřiženy z URL. Nyní v ukázkovém Serendipity blogu dostanete vždycky stejného cachovaného Avatara, ne samostatného pro jiné stránky.</li>
</ul>
<ul>
<li>Přidána podpora Wavatarů</li>
<li>Podpora pro ošetření chyb (fallback) Gravataru pomocí indetyicon, MonsterID a Wavataru.</li>
<li>Optimalizace zpětných volání (trackback) avatarů: Querypars budou odstřiženy z URL. Nyní v ukázkovém Serendipity blogu dostanete vždycky stejného cachovaného Avatara, ne samostatného pro jiné stránky.</li>
</ul>
<li>verze 1.43 [brockhaus]</li>
<ul>
<li>Volba nastavení pro přidání jména autora do attributu ALT u obrázku avatara. Normálně je to vyplněno hvězdičkou "*", ale slepci jsou při prohlížení stránek závislí na tagu ALT, který jim čtečky předčítají, aby se dozvěděli, co je obsahem obrázku.</li>
</ul>
<ul>
<li>Volba nastavení pro přidání jména autora do attributu ALT u obrázku avatara. Normálně je to vyplněno hvězdičkou "*", ale slepci jsou při prohlížení stránek závislí na tagu ALT, který jim čtečky předčítají, aby se dozvěděli, co je obsahem obrázku.</li>
</ul>
<li>verze 1.42 [brockhaus]</li>
<ul>
<li>Kódování podtržítka "_" v URL adresách uživatelů, aby se odlišily od oddělovačů. Funkce "urlencode" je nekóduje. Díky uživateli [Tino Schwarze] za objevení a opravu.</li>
</ul>
<ul>
<li>Kódování podtržítka "_" v URL adresách uživatelů, aby se odlišily od oddělovačů. Funkce "urlencode" je nekóduje. Díky uživateli [Tino Schwarze] za objevení a opravu.</li>
</ul>
<li>verze 1.41 [garvinhicking]</li>
<ul>
<li>Opravena hlavička "Last-Modified" u obrázků avatarů.</li>
</ul>
<ul>
<li>Opravena hlavička "Last-Modified" u obrázků avatarů.</li>
</ul>
<li>verze 1.40</li>
<ul>
<li>Přidána podpora Ycon (<a href="http://moblog.wiredwings.com">http://moblog.wiredwings.com<a/>)(</li>
</ul>
<ul>
<li>Přidána podpora Ycon (<a href="http://moblog.wiredwings.com">http://moblog.wiredwings.com<a/>)(</li>
</ul>
<li>verze 1.39 [brockhaus]</li>
<ul>
<li>Avatary Monster ID je nyní také cachován, protože jejich vytváření trvá dlouho.</li>
</ul>
<ul>
<li>Avatary Monster ID je nyní také cachován, protože jejich vytváření trvá dlouho.</li>
</ul>
<li>verze 1.38 [brockhaus]</li>
<ul>
<li>Podpora Monster ID avatarů (podrobnosti naleznete na <a href="http://www.splitbrain.org/go/monsterid">http://www.splitbrain.org/go/monsterid</a>)</li>
<li>Selhání při čerstvé instalaci a času cache nastaveném na 0.</li>
<li>Podpora nastavení absolutní cesty k standardnímu avataru.</li>
<li>Po uložení nastavení je nyní cache <b>vždy</b> vyčištěna, aby byly změny viditelné ihned, dokonce i když je cachování zapnuto.</li>
<li>Pokud plugin nemůže zapisovat do cache, pak to v ladicím módu zapíše do logu a zobrazí výchozí obrázek, pokud není nalezen cachovaný soubor.</li>
</ul>
<ul>
<li>Podpora Monster ID avatarů (podrobnosti naleznete na <a href="http://www.splitbrain.org/go/monsterid">http://www.splitbrain.org/go/monsterid</a>)</li>
<li>Selhání při čerstvé instalaci a času cache nastaveném na 0.</li>
<li>Podpora nastavení absolutní cesty k standardnímu avataru.</li>
<li>Po uložení nastavení je nyní cache <b>vždy</b> vyčištěna, aby byly změny viditelné ihned, dokonce i když je cachování zapnuto.</li>
<li>Pokud plugin nemůže zapisovat do cache, pak to v ladicím módu zapíše do logu a zobrazí výchozí obrázek, pokud není nalezen cachovaný soubor.</li>
</ul>
<li>verze 1.37 [brockhaus]</li>
<ul>
<li>Řádka pod oknem komentáře informující o podporovaných typech avatarů lze skrýt pomocí nastavení.</li>
</ul>
<ul>
<li>Řádka pod oknem komentáře informující o podporovaných typech avatarů lze skrýt pomocí nastavení.</li>
</ul>
<li>verze 1.36 [brockhaus]</li>
<ul>
<li>Přidána nová volba: Můžete nastavit, že plugin nebude vytvářet avatary přímo, ale místo toho pouze tag pro smarty. Pokud je tato volba zapnutá, můžete si definovat v šabloně pro komentáře, kde se mají avatary zobrazovat, a to pomocí tagu $comment.comment_avatar.</li>
<li>CSS třída avataru se bude měnit podle toho, kde je zobrazen. Pro normální komentáře bude mít třídu "comment_avatar", pro plugin "nejnovější příspěvky" to bude třída "serendipity_plugin_comments_avatar", aby byla možnost jednoduše je označit, ostylovat.</li>
<li>Nastavení zarovnání avatarů: Nastavení zarovnání bude použito, pokud je avatar vykreslen přímo (ne pomocí smarty).</li>
<li>Nová volba pro vypínání/zapínání obrázků avatarů v postranním sloupci (nejnovější komentáře).</li>
<li>Podporovaní metody avatarů se zobrazovaly i pod kontaktním formulářem, což ale nemělo logický smysl. V tomto fromuláři byly tedy avatary vypnuty.</li>
<li>Další změny v jazykových souborech.</li>
</ul>
<ul>
<li>Přidána nová volba: Můžete nastavit, že plugin nebude vytvářet avatary přímo, ale místo toho pouze tag pro smarty. Pokud je tato volba zapnutá, můžete si definovat v šabloně pro komentáře, kde se mají avatary zobrazovat, a to pomocí tagu $comment.comment_avatar.</li>
<li>CSS třída avataru se bude měnit podle toho, kde je zobrazen. Pro normální komentáře bude mít třídu "comment_avatar", pro plugin "nejnovější příspěvky" to bude třída "serendipity_plugin_comments_avatar", aby byla možnost jednoduše je označit, ostylovat.</li>
<li>Nastavení zarovnání avatarů: Nastavení zarovnání bude použito, pokud je avatar vykreslen přímo (ne pomocí smarty).</li>
<li>Nová volba pro vypínání/zapínání obrázků avatarů v postranním sloupci (nejnovější komentáře).</li>
<li>Podporovaní metody avatarů se zobrazovaly i pod kontaktním formulářem, což ale nemělo logický smysl. V tomto fromuláři byly tedy avatary vypnuty.</li>
<li>Další změny v jazykových souborech.</li>
</ul>
<li>verze 1.35 [brockhaus]</li>
<ul>
<li>Opraveny chyby v anglickém jazykovém souboru. (Díky Donovi!)</li>
</ul>
<ul>
<li>Opraveny chyby v anglickém jazykovém souboru. (Díky Donovi!)</li>
</ul>
<li>verze 1.34 [brockhaus]</li>
<ul>
<li>Hodnocení Gravatarů nepracuje spolehlivě. Můj Gravatar hodnocený jako G je zobrazen pouze při použití hodnocení gravatarů X. :-/<br />
Přidána volba pro vypnutí parametru hodnocení Gravatarů, což by mělo mít stejný efekt jako nastavení hodnocení X.</li>
</ul>
<ul>
<li>Hodnocení Gravatarů nepracuje spolehlivě. Můj Gravatar hodnocený jako G je zobrazen pouze při použití hodnocení gravatarů X. :-/<br />
Přidána volba pro vypnutí parametru hodnocení Gravatarů, což by mělo mít stejný efekt jako nastavení hodnocení X.</li>
</ul>
<li>verze 1.33 [brockhaus]</li>
<ul>
<li>Pavatar: X-Pavatar Header je nyní znovu podporován a je první použitou metodou automatické detekce Pavatara.</li>
</ul>
<ul>
<li>Pavatar: X-Pavatar Header je nyní znovu podporován a je první použitou metodou automatické detekce Pavatara.</li>
</ul>
<li>verze 1.32 [brockhaus]</li>
<ul>
<li>Výchozí avatar MyBlogLog nebyl správně detekování. :-/</li>
<li>Pokud není zadán email ani url adresa, ale je definován výchozí avatar, je nyní zobrazen právě výchozí avatar.</li>
</ul>
<ul>
<li>Výchozí avatar MyBlogLog nebyl správně detekování. :-/</li>
<li>Pokud není zadán email ani url adresa, ale je definován výchozí avatar, je nyní zobrazen právě výchozí avatar.</li>
</ul>
<li>verze 1.31 [brockhaus]</li>
<ul>
<li>Změna času volání (call-time) chyby (pass-by-reference) (fetchAvatar).</li>
</ul>
<ul>
<li>Změna času volání (call-time) chyby (pass-by-reference) (fetchAvatar).</li>
</ul>
<li>verze 1.30 [brockhaus]</li>
<ul>
<li>Standradní Avatar se nezobrazoval, pokud byl blog nainstalován v podadresáři webu a ne přímo v kořenové složce.</li>
<li>Odkaz na Gravatara byl trochu špatně (přesto fungoval).</li>
</ul>
<ul>
<li>Standradní Avatar se nezobrazoval, pokud byl blog nainstalován v podadresáři webu a ne přímo v kořenové složce.</li>
<li>Odkaz na Gravatara byl trochu špatně (přesto fungoval).</li>
</ul>
<li>verze 1.29 [brockhaus]</li>
<ul>
<li>Oprava chyby 1.27 přidávala k URL "http://", i když nebyla zadána vůbec žádná URL adresa.</li>
</ul>
<ul>
<li>Oprava chyby 1.27 přidávala k URL "http://", i když nebyla zadána vůbec žádná URL adresa.</li>
</ul>
<li>verze 1.28 [brockhaus]</li>
<ul>
<li>V Serendipity 1.1 nebylo možné natavit výchozího avatara. Nastavení nebylo kompatibilní s verzí Serendipity 1.1.</li>
</ul>
<ul>
<li>V Serendipity 1.1 nebylo možné natavit výchozího avatara. Nastavení nebylo kompatibilní s verzí Serendipity 1.1.</li>
</ul>
<li>verze 1.27 [brockhaus]</li>
<ul>
<li>Pokud pisatel zadal svoji adresu jako "www.domena.cz" místo "http://www.domena.cz", Avatar nebyl načten správně.</li>
</ul>
<ul>
<li>Pokud pisatel zadal svoji adresu jako "www.domena.cz" místo "http://www.domena.cz", Avatar nebyl načten správně.</li>
</ul>
<li>verze 1.26 [brockhaus]</li>
<ul>
<li>MyBlogLog trochu pozměnil způsob volání avatara, což mělo za následek, že ošetření chybových výstupů (fallback) pro MyBlogLog přestal fungovat.</li>
</ul>
<ul>
<li>MyBlogLog trochu pozměnil způsob volání avatara, což mělo za následek, že ošetření chybových výstupů (fallback) pro MyBlogLog přestal fungovat.</li>
</ul>
<li>verze 1.25 [garvinhicking]</li>
<ul>
<li>Zarovnání (algin) nahraceno definicí pomocí CSS stylů, takže XHTML už neobsahuje žádné definice zarovnání.</li>
</ul>
<ul>
<li>Zarovnání (algin) nahraceno definicí pomocí CSS stylů, takže XHTML už neobsahuje žádné definice zarovnání.</li>
</ul>
<li>verze 1.24 [brockhaus]</li>
<ul>
<li>Kontrola odpovědi MyBlogLog, jestli obsahuje opravdu obrázek.</li>
<li>Vyčištění paměti cache při nastavení hodnoty cachování na 0.</li>
<li>Vypnutí ladicích výpisů.</li>
</ul>
<ul>
<li>Kontrola odpovědi MyBlogLog, jestli obsahuje opravdu obrázek.</li>
<li>Vyčištění paměti cache při nastavení hodnoty cachování na 0.</li>
<li>Vypnutí ladicích výpisů.</li>
</ul>
<li>verze 1.23 [brockhaus]</li>
<ul>
<li>Při vkládání čerstvých P/favatarů, plugin přijme pouze odpovědi označené vzdáleným serverem jako obrázky. To zamezí přijetí potenciálních html stránek jako obrázku avatara.</li>
</ul>
<ul>
<li>Při vkládání čerstvých P/favatarů, plugin přijme pouze odpovědi označené vzdáleným serverem jako obrázky. To zamezí přijetí potenciálních html stránek jako obrázku avatara.</li>
</ul>
<li>verze 1.22 [brockhaus]</li>
<ul>
<li>Vkládání i přesměrovaných P/Favatarů.</li>
</ul>
<ul>
<li>Vkládání i přesměrovaných P/Favatarů.</li>
</ul>
<li>verze 1.21 [brockhaus]</li>
<ul>
<li>Vkládání avatarů se rozbilo při vypnutí cache.</li>
<li>Prohlížeč nebyl schopen cachovat výchozí avatary kvůli špatně nastavenému času cache.</li>
<li>Kontrola, jestli cachovaný soubor vypadá jako obrázek, předtím, než je odeslán na klienta.</li>
</ul>
<ul>
<li>Vkládání avatarů se rozbilo při vypnutí cache.</li>
<li>Prohlížeč nebyl schopen cachovat výchozí avatary kvůli špatně nastavenému času cache.</li>
<li>Kontrola, jestli cachovaný soubor vypadá jako obrázek, předtím, než je odeslán na klienta.</li>
</ul>
<li>verze 1.20 [brockhaus]</li>
<ul>
<li>Titulek obrázku avatara nyní zobrazuje jméno autora místo "Avatar" (V.)</li>
</ul>
<ul>
<li>Titulek obrázku avatara nyní zobrazuje jméno autora místo "Avatar" (V.)</li>
</ul>
<li>verze 1.19 [brockhaus]</li>
<ul>
<li>Využití cache prohlížeče má za následek dobré vylepšení výkonu!</li>
</ul>
<ul>
<li>Využití cache prohlížeče má za následek dobré vylepšení výkonu!</li>
</ul>
<li>verze 1.18 [brockhaus]</li>
<ul>
<li>Vypnutí ladicích výpisů</li>
</ul>
<ul>
<li>Vypnutí ladicích výpisů</li>
</ul>
<li>verze 1.17 [brockhaus]</li>
<ul>
<li>Pokud je zapnuto cachování, je nyní cachováno <b>všechno</b>. Známí přispěvatelé a komentátoři nyní nezpůsobí <b>žádné</b> volání cizích serverů, pokud už jsou jejich obrázky cachovány. Velmi pěkné posílení výkonu. Díky Garvinovi za nápad.</li>
<li>Záplata proti hackování od uživatele [garvinhickins]</li>
</ul>
<ul>
<li>Pokud je zapnuto cachování, je nyní cachováno <b>všechno</b>. Známí přispěvatelé a komentátoři nyní nezpůsobí <b>žádné</b> volání cizích serverů, pokud už jsou jejich obrázky cachovány. Velmi pěkné posílení výkonu. Díky Garvinovi za nápad.</li>
<li>Záplata proti hackování od uživatele [garvinhickins]</li>
</ul>
<li>verze 1.16 [garvinhicking]</li>
<ul>
<li>uhlazení kódu</li>
</ul>
<ul>
<li>uhlazení kódu</li>
</ul>
<li>verze 1.14 [brockhaus]</li>
<ul>
<li>Implementováno zpracování chyb pro MyBlogLog! :-) Ale je pomalé, dokonce i s optimalizací pomocí cachování. MyBlogLog by neměl být první v pořadí avatarů.</li>
<li>Přidána pátá kolonka pro výběr metody avatarů, protože MyBlogLog nyní také podporuje zpracování chyb (fallback).</li>
</ul>
<ul>
<li>Implementováno zpracování chyb pro MyBlogLog! :-) Ale je pomalé, dokonce i s optimalizací pomocí cachování. MyBlogLog by neměl být první v pořadí avatarů.</li>
<li>Přidána pátá kolonka pro výběr metody avatarů, protože MyBlogLog nyní také podporuje zpracování chyb (fallback).</li>
</ul>
<li>verze 1.13 [brockhaus]</li>
<ul>
<li>Doporučení změněno: Není to plugin "statistika", který znefunkční Pavatary/Favatary, ale plugin "sledování odchodů" (exit tracking plugin)</li>
</ul>
<ul>
<li>Doporučení změněno: Není to plugin "statistika", který znefunkční Pavatary/Favatary, ale plugin "sledování odchodů" (exit tracking plugin)</li>
</ul>
<li>verze 1.12 [brockhaus]</li>
<ul>
<li>MyBlogLog avatary jsou nyní také cachovány.</li>
<li>Stránky s přesměrováním na výchozí stránku, pokud nebyla nalazena výchozí položka, jsou nyní podporovány. Dřívější plugin avatar předpokládal, že výchozí stránka ja P/Favatar.</li>
<li>Výchozí nastavení pořadí avatarů je nyní: Gravatar -> Pavatar
<ul>
<li>MyBlogLog avatary jsou nyní také cachovány.</li>
<li>Stránky s přesměrováním na výchozí stránku, pokud nebyla nalazena výchozí položka, jsou nyní podporovány. Dřívější plugin avatar předpokládal, že výchozí stránka ja P/Favatar.</li>
<li>Výchozí nastavení pořadí avatarů je nyní: Gravatar -> Pavatar
-> Favatar -> výchozí Avatar</li>
<li>Přidáno doporučení, že plugin by měl být zařazen před pluginy, které mění odkazy.</li>
<li>Načítání nastavené cesty pluginu. Dříve to byl vždy adresář 'plugin'.</li>
<li>Vyřazeno nastavení okraje gravatara, protože už nefunguje (napořád?).</li>
</ul>
<li>Přidáno doporučení, že plugin by měl být zařazen před pluginy, které mění odkazy.</li>
<li>Načítání nastavené cesty pluginu. Dříve to byl vždy adresář 'plugin'.</li>
<li>Vyřazeno nastavení okraje gravatara, protože už nefunguje (napořád?).</li>
</ul>
<li>verze 1.11 [brockhaus], testovací verze nebyla releasována do CVS/Spartacus</li>
<ul>
<li>Fallback (zpracování chyby) pro Gravatar funguje! Ale zobrazuje výchozího avatara nezávisle na nastavení. Takže toto nastavení bylo smazáno.</li>
</ul>
<ul>
<li>Fallback (zpracování chyby) pro Gravatar funguje! Ale zobrazuje výchozího avatara nezávisle na nastavení. Takže toto nastavení bylo smazáno.</li>
</ul>
<li>verze 1.10 [brockhaus]</li>
<ul>
<li>Informace o Pavatar / Avatar nebyly nikdy načtené z cache</li>
<li>...ale po načtení z cache způsobily nekonečnou smyčku pro obrázky načtené z lokálního blogu (pokud byl povolen postranní blugin s komentáři - comment sidebar)</li>
<li>Nastavení výšky obrázku bylo pojmenováno "height" ... :-/</li>
<li>Cachování Gravataru nefungovalo spolehlivě, pokud byl nastaven výchozí avatar.</li>
</ul>
<ul>
<li>Informace o Pavatar / Avatar nebyly nikdy načtené z cache</li>
<li>...ale po načtení z cache způsobily nekonečnou smyčku pro obrázky načtené z lokálního blogu (pokud byl povolen postranní blugin s komentáři - comment sidebar)</li>
<li>Nastavení výšky obrázku bylo pojmenováno "height" ... :-/</li>
<li>Cachování Gravataru nefungovalo spolehlivě, pokud byl nastaven výchozí avatar.</li>
</ul>
<li>verze 1.9 [brockhaus]</li>
<ul>
<li>Při hledání Pavatara byl natažen Favatar jako Pavatar, pokud nebyl nalezen Pavatar, ale favicon. Díky uživateli [El Burro]</li>
</ul>
<ul>
<li>Při hledání Pavatara byl natažen Favatar jako Pavatar, pokud nebyl nalezen Pavatar, ale favicon. Díky uživateli [El Burro]</li>
</ul>
<li>verze 1.8 [brockhaus]</li>
<ul>
<li>Plugin nebych schopen načíst Favatary/Pavatary, pokud bylo přesměrování nasměrováno na URL stránky nastavené jako domovská stránka komentujícího. Třeba Garvin má takový blog...</li>
</ul>
<ul>
<li>Plugin nebych schopen načíst Favatary/Pavatary, pokud bylo přesměrování nasměrováno na URL stránky nastavené jako domovská stránka komentujícího. Třeba Garvin má takový blog...</li>
</ul>
<li>verze 1.7 [brockhaus]</li>
<ul>
<li>Přidána podpora Pavatarů (<a href="www.pavatar.com">www.pavatar.com</a>)</li>
<li>Přidána podpora MyBlogLog avatarů (<a href="www.pavatar.com">www.mybloglog.com</a>)</li>
<li>Pořadí pro výběr avatarů a jaké typy avatarů jsou podporovány, vše je nyní nastavitelné.</li>
<li>Standardní avatar může být jeden z nich (měl by být poslední).</li>
<li>Volba pro nenastavení Gravatara jako výchozího avatara, i když je definovaný. (Chceme méně datových profilů...)</li>
<li>Vložení výchozího avatara pomocí mediatéky v nastavení pluginu.</li>
<li>Velikost obrázku je nyní zajištěna pomocí HTML kódu.</li>
<li>Pod polem pro komentář jsou zobrazovány pouze aktuálně nastavené metody avatara jako podporované.</li>
</ul>
<ul>
<li>Přidána podpora Pavatarů (<a href="www.pavatar.com">www.pavatar.com</a>)</li>
<li>Přidána podpora MyBlogLog avatarů (<a href="www.pavatar.com">www.mybloglog.com</a>)</li>
<li>Pořadí pro výběr avatarů a jaké typy avatarů jsou podporovány, vše je nyní nastavitelné.</li>
<li>Standardní avatar může být jeden z nich (měl by být poslední).</li>
<li>Volba pro nenastavení Gravatara jako výchozího avatara, i když je definovaný. (Chceme méně datových profilů...)</li>
<li>Vložení výchozího avatara pomocí mediatéky v nastavení pluginu.</li>
<li>Velikost obrázku je nyní zajištěna pomocí HTML kódu.</li>
<li>Pod polem pro komentář jsou zobrazovány pouze aktuálně nastavené metody avatara jako podporované.</li>
</ul>
<li>verze 1.6 [garvinhickins]</li>
<li>verze 1.5 [garvinhickins]</li>
<li>verze 1.4 [garvinhickins]</li>
<li>verze 1.3 [garvinhickins]</li>
<ul>
<li>Opraveny chyby neplatnosti domény</li>
</ul>
<ul>
<li>Opraveny chyby neplatnosti domény</li>
</ul>
</ul>
<p><a href="#top">nahoru</a></p>

View file

@ -49,97 +49,72 @@
<a name="overview"></a>
<h2>Überblick</h2>
<p>Mit dem Avatar Plugin kann man Kommentatoren in seinem Blog "ein Gesicht" geben.
Für jeden einzelnen Kommentator im Blog wird ein so genanntes Avatar zur Verfügung gestellt, das ihn repräsentiert.
Dafür werden unterschiedliche Mechanismen angeboten, die nacheinander durchprobiert werden, ob sie ein Avatar für
den Kommentator liefern.</p>
<p>Der erste Mechanismus, der ein Avatar findet, wird benutzt, nachfolgende Mechanismen
dann nicht mehr ausprobiert. Dies bedeutet, dass man die Methoden so sortieren sollte, dass die am meisten bevorzugte
zuerst ausprobiert wird. Methoden, die auf jeden Fall immer ein Avatar liefern, sollten als letzte konfiguriert werden,
da nach diesen natürlich keine weiteren Methoden ausprobiert werden.
</p>
<p><strong>Wichtig:</strong> Dieses Plugin muss vor allen Plugins in der Liste stehen, die Links verändern, wie
z.B. das "Exit Tracking Plugin". Ansonsten können Avatare, die auf den Links der Kommentatoren beruhen, nicht
funktionieren.</p>
<p>Mit dem Avatar Plugin kann man Kommentatoren in seinem Blog "ein Gesicht" geben. Für jeden einzelnen Kommentator im Blog wird ein so genanntes Avatar zur Verfügung gestellt, das ihn repräsentiert. Dafür werden unterschiedliche Mechanismen angeboten, die nacheinander durchprobiert werden, ob sie ein Avatar für den Kommentator liefern.</p>
<p>Der erste Mechanismus, der ein Avatar findet, wird benutzt, nachfolgende Mechanismen dann nicht mehr ausprobiert. Dies bedeutet, dass man die Methoden so sortieren sollte, dass die am meisten bevorzugte zuerst ausprobiert wird. Methoden, die auf jeden Fall immer ein Avatar liefern, sollten als letzte konfiguriert werden, da nach diesen natürlich keine weiteren Methoden ausprobiert werden.</p>
<p><strong>Wichtig:</strong> Dieses Plugin muss vor allen Plugins in der Liste stehen, die Links verändern, wie z.B. das "Exit Tracking Plugin". Ansonsten können Avatare, die auf den Links der Kommentatoren beruhen, nicht funktionieren.</p>
<p>Hier folgt eine Beschreibung der aktuell verfügbaren Mechanismen, ein Avatar für einen Kommentator zu ermitteln:</p>
<p><a href="#top">top</a></p>
<a name="avt_gravatar"></a>
<h3>Gravatar</h3>
<p><a href="http://www.gravatar.com" target="_blank">Gravatar</a> ist einer der bekanntesten Services für Benutzer Avatare.
Benutzer können sich bei diesem Service mit einer EMail registrieren und für sich ein Avatar Bild hinterlegen</p>
<p>Gravatare sind also von der vom Kommentator eingegebenen EMail abhängig. Nur wenn eine solche angegeben wurde, kann
ermittelt werden, ob für diese ein Avatar beim Gravatar Service hinterlegt wurde.</p>
<p><a href="http://www.gravatar.com" target="_blank">Gravatar</a> ist einer der bekanntesten Services für Benutzer Avatare. Benutzer können sich bei diesem Service mit einer EMail registrieren und für sich ein Avatar Bild hinterlegen</p>
<p>Gravatare sind also von der vom Kommentator eingegebenen EMail abhängig. Nur wenn eine solche angegeben wurde, kann ermittelt werden, ob für diese ein Avatar beim Gravatar Service hinterlegt wurde.</p>
<p><a href="#top">top</a></p>
<a name="avt_pavatar"></a>
<h3>Pavatar</h3>
<p><a href="http://www.pavatar.com" target="_blank">Pavatare</a> sind Avatare (Bilddateien), die der Schreber genau
für diesen Zweck auf seiner Homepage hinterlegt hat.</p>
<p>Im Gegensatz zu den recht ähnlichen <a href="#avt_favatar">Favataren</a> kann man hier also ein eigenes Avatar Bild
mit einer beliebigen Auflösung hinterlegen.</p>
<p>Hier wird anhand der vom Kommentator angegebenen Homepage ermittelt, ob diese ein Pavatar liefert. Pavatare sind
also nur ladbar, wenn der Kommentator eine Homepage angegeben hat</p>
<p><a href="http://www.pavatar.com" target="_blank">Pavatare</a> sind Avatare (Bilddateien), die der Schreber genau für diesen Zweck auf seiner Homepage hinterlegt hat.</p>
<p>Im Gegensatz zu den recht ähnlichen <a href="#avt_favatar">Favataren</a> kann man hier also ein eigenes Avatar Bild mit einer beliebigen Auflösung hinterlegen.</p>
<p>Hier wird anhand der vom Kommentator angegebenen Homepage ermittelt, ob diese ein Pavatar liefert. Pavatare sind also nur ladbar, wenn der Kommentator eine Homepage angegeben hat</p>
<p><a href="#top">top</a></p>
<a name="avt_favatar"></a>
<h3>Favatar</h3>
<p>Dies ist ein Konzept mit dem viele Hompage Besitzer automatisch einen Avatar haben, ohne dass sie dafür irgendetwas tun müssen:</p>
<p>Das Blog holt sich hier einfach das favicon der Homepage, die der Benutzer als seine URL angegeben hat.
Dafür ist das favicon aber eben ein Icon und somit normaler Weise auch recht klein und nicht immer als Avatar geeignet.</p>
<p>Das Blog holt sich hier einfach das favicon der Homepage, die der Benutzer als seine URL angegeben hat. Dafür ist das favicon aber eben ein Icon und somit normaler Weise auch recht klein und nicht immer als Avatar geeignet.</p>
<p><a href="#top">top</a></p>
<a name="avt_twitter"></a>
<h3>Twitter</h3>
<p>Falls der Kommentator als URL ein <a href="http://twitter.com" target="_blank">Twitter Profil</a> angegeben hat, dann wird versucht, hier das Profilbild für diesen
Benutzer zu laden.</p>
<p><i>Anmerkung</i>: Falls auch Favatare geladen werden sollen, dann muss Twitter vor diesen versucht werden, sonst wird das
Favicon von Twitter geladen. Dies kann allerdings auch gewollt sein, um z.B. "Tweetbacks" von Twitter klar zu markieren.</p>
<p>Falls der Kommentator als URL ein <a href="http://twitter.com" target="_blank">Twitter Profil</a> angegeben hat, dann wird versucht, hier das Profilbild für diesen Benutzer zu laden.</p>
<p><i>Anmerkung</i>: Falls auch Favatare geladen werden sollen, dann muss Twitter vor diesen versucht werden, sonst wird das Favicon von Twitter geladen. Dies kann allerdings auch gewollt sein, um z.B. "Tweetbacks" von Twitter klar zu markieren.</p>
<p><a href="#top">top</a></p>
<a name="avt_identica"></a>
<h3>Identica</h3>
<p>Dies ist ein spezielles Avatar für <a href="http://identi.ca" target="_blank">Identica</a> Pingbacks. Es wird versucht,
das Profilbild des Benutzers zu laden, der den Pingback ausgelöst hat.</p>
<p><i>Anmerkung</i>: Falls auch Favatare geladen werden sollen, dann muss Identica vor diesen versucht werden, sonst wird das
Favicon von Identica geladen. Dies kann allerdings auch gewollt sein, um z.B. "Tweetbacks" von Identica klar zu markieren.</p>
<p>Dies ist ein spezielles Avatar für <a href="http://identi.ca" target="_blank">Identica</a> Pingbacks. Es wird versucht, das Profilbild des Benutzers zu laden, der den Pingback ausgelöst hat.</p>
<p><i>Anmerkung</i>: Falls auch Favatare geladen werden sollen, dann muss Identica vor diesen versucht werden, sonst wird das Favicon von Identica geladen. Dies kann allerdings auch gewollt sein, um z.B. "Tweetbacks" von Identica klar zu markieren.</p>
<p><a href="#top">top</a></p>
<a name="avt_mybloglog"></a>
<h3>MyBlogLog</h3>
<p>Dies ist wieder ein (dem Gravatar Service sehr ähnlicher) zentraler Service. MyBlogLog ist eigentlich ein Blog Community Service,
aber man kann aus diesem ebenfalls Avatare ermitteln</p>
<p>Das Vorhandensein eines MyBlogLog Avatars wird über die Homepage Angabe des Kommentators ermittelt.
<p>Dies ist wieder ein (dem Gravatar Service sehr ähnlicher) zentraler Service. MyBlogLog ist eigentlich ein Blog Community Service, aber man kann aus diesem ebenfalls Avatare ermitteln</p>
<p>Das Vorhandensein eines MyBlogLog Avatars wird über die Homepage Angabe des Kommentators ermittelt.</p>
<p><a href="#top">top</a></p>
<a name="avt_wavatar"></a>
<h3>Wavatar</h3>
<p>Das Wavatar wird dynamisch erzeugt aus der Eingabe von Hompage und EMail des Kommentators. Es liefert für jeden Benutzer ein anderes
aber immer selbes Avatar. Da es <strong>immer</strong> ein Avatar liefert, werden alle nachfolgenden Avatar Methoden ignoriert.
Wavatare sehen in etwa wie folgt aus:</p>
<p>Das Wavatar wird dynamisch erzeugt aus der Eingabe von Hompage und EMail des Kommentators. Es liefert für jeden Benutzer ein anderes aber immer selbes Avatar. Da es <strong>immer</strong> ein Avatar liefert, werden alle nachfolgenden Avatar Methoden ignoriert. Wavatare sehen in etwa wie folgt aus:</p>
<p align="center"><img src="documentation/wavatars.jpg"/></p>
<p><a href="#top">top</a></p>
<a name="avt_monsterid"></a>
<h3>MonsterID</h3>
<p>MonsterID Avatare werden nach dem selben Mechanismus erzeugt, wie Wavatare und Indenticons, hier werden kleine niedliche "Monster"
aus den Benutzer Angaben erzeugt.</p>
<p>MonsterID Avatare werden nach dem selben Mechanismus erzeugt, wie Wavatare und Indenticons, hier werden kleine niedliche "Monster" aus den Benutzer Angaben erzeugt.</p>
<p>Genau wie Wavatar und Identicon liefern sie <strong>immer</strong> einen Avatar für den Kommentator.</p>
<p align="center"><img src="documentation/monsterid.png"/></p>
<p><a href="#top">top</a></p>
<a name="avt_identicon"></a>
<h3>Identicon/YCon</h3>
<p>Identicon werden nach dem selben Mechanismus erzeugt, wie Wavatare und MonsterIDs, sie sehen nur anders aus. Hier werden
abstrakte Gebilde erzeugt.</p>
<p>Identicon werden nach dem selben Mechanismus erzeugt, wie Wavatare und MonsterIDs, sie sehen nur anders aus. Hier werden abstrakte Gebilde erzeugt.</p>
<p>Genau wie Wavatar und MonsterID liefern sie <strong>immer</strong> einen Avatar für den Kommentator.</p>
<p align="center"><img src="documentation/identicons.jpg"/></p>
<p><a href="#top">top</a></p>
<a name="avt_standard"></a>
<h3>Standardavatar</h3>
<p>Die Methode "Standardavatar" liefert immer das selbe Avatar für alle Benutzer. Das Bild, das hier benutzt werden soll, kann
weiter unten konfiguriert werden.</p>
<p>Die Methode "Standardavatar" liefert immer das selbe Avatar für alle Benutzer. Das Bild, das hier benutzt werden soll, kann weiter unten konfiguriert werden.</p>
<p><a href="#top">top</a></p>
<a name="config"></a>
@ -148,8 +123,7 @@ weiter unten konfiguriert werden.</p>
<a name="cnf_method"></a>
<h3>Avatar laden über</h3>
<p>Hiermit wird die Reihenfolge festgelegt, in der versucht wird, ein Avatar für den Kommentator zu erzeugen.</p>
<p>Es gibt derzeit 6 Einschübe, mit denen die Reihenfolge festgelegt wird. Zu beachten ist, dass Methoden,
die auf jeden Fall ein Avatar liefern, alle nachfolgenden Methoden nicht zur Probe bringen.</p>
<p>Es gibt derzeit 6 Einschübe, mit denen die Reihenfolge festgelegt wird. Zu beachten ist, dass Methoden, die auf jeden Fall ein Avatar liefern, alle nachfolgenden Methoden nicht zur Probe bringen.</p>
<p><a href="#top">top</a></p>
<a name="cnf_standard"></a>

View file

@ -60,3 +60,4 @@
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_DESC', 'Gravatar má implementovaných několik návratových metod pro případ, že pro požadovaného uživatele není znám žádný avatar. Implementovány jsou též Moster ID, Identicon a Wavatar. Pokud vyberete některý z těchto zíněných, nebudou uskutečňovány žádné další pokusy o načtení avataru, pokud uživatel zadá email.');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS', 'Vždy návratová hodnota pro Gravatar');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS_DESC', 'Používat návratovou hodnotu Gravatar i v případě, že uživatel nezadá email (zadá tedy url nebo jméno)');

View file

@ -60,3 +60,4 @@
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_DESC', 'Gravatar má implementovaných několik návratových metod pro případ, že pro požadovaného uživatele není znám žádný avatar. Implementovány jsou též Moster ID, Identicon a Wavatar. Pokud vyberete některý z těchto zíněných, nebudou uskutečňovány žádné další pokusy o načtení avataru, pokud uživatel zadá email.');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS', 'Vždy návratová hodnota pro Gravatar');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS_DESC', 'Používat návratovou hodnotu Gravatar i v případě, že uživatel nezadá email (zadá tedy url nebo jméno)');

View file

@ -1,4 +1,4 @@
<?php # lang_de.inc.php 1.17 2009-08-20 10:10:36 VladaAjgl $
<?php
/**
* @version 1.17
@ -65,3 +65,4 @@
// Next lines were translated on 2009/08/20
@define('PLUGIN_EVENT_GRAVATAR_METHOD_DESC', 'Wenn die vorherigen Methoden fehlschlagen, versuche diese. Der Typ "' . PLUGIN_EVENT_GRAVATAR_METHOD_DEFAULT . '", "Monster ID", "Wavatar", "Identicon" und "---" wird niemals fehlschlagen. Alles unterhalb dieser Methoden wird nicht versucht.');

View file

@ -1,4 +1,4 @@
<?php #
<?php
/**
* @version
@ -62,3 +62,4 @@
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_DESC', 'Gravatar implements some fallback methods in case, no Gravatar is known for the user. It implements also Moster ID, Identicon and Wavatar. If you choose one of these, no further method after Gravatar is evaluated, if the user entered an email.');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS', 'Gravatar always fallback');
@define('PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS_DESC', 'Use Gravatar fallbacks even if the user didn\'t enter an email (but an url or a name)');

View file

@ -1,4 +1,4 @@
<?php #
<?php
/**
* @version
@ -62,3 +62,4 @@
'<b><a href="://www.splitbrain.org/go/monsterid" target="_blank">Monster ID avatars</a></b> are localy created monster images unique for each writer.');
@define('PLUGIN_EVENT_GRAVATAR_EXTLING_WARNING', '<font color="red">CAUTION!</font> This plugin has to be executed before any plugin changing links (like i.e. the exit tracking plugin)! ' .
'<font color="red">Else Pavatars, Favatars and MayBlogLog avatars won\'t work!</font>');

View file

@ -2,7 +2,7 @@
function build_monster($filename, $seed='',$size=''){
// init random seed
if($seed) srand( hexdec(substr(md5($seed),0,6)) );
if ($seed) srand( hexdec(substr(md5($seed),0,6)) );
// throw the dice for body parts
$parts = array(
@ -31,17 +31,17 @@ function build_monster($filename, $seed='',$size=''){
imagedestroy($im);
// color the body
if($part == 'body'){
if ($part == 'body') {
$color = imagecolorallocate($monster, rand(20,235), rand(20,235), rand(20,235));
imagefill($monster,60,60,$color);
}
}
// restore random seed
if($seed) srand();
if ($seed) srand();
// resize if needed, then output
if($size && $size < 400){
if ($size && $size < 400) {
$out = @imagecreatetruecolor($size,$size);
if (!$out) return false; // Problems creating image!
imagecopyresampled($out,$monster,0,0,0,0,$size,$size,120,120);
@ -49,10 +49,12 @@ function build_monster($filename, $seed='',$size=''){
imagedestroy($out);
imagedestroy($monster);
return true;
}else{
} else {
//header ("Content-type: image/png");
imagepng($monster,$filename);
imagedestroy($monster);
return true;
}
}
?>

View file

@ -1,20 +1,14 @@
<?php #
<?php
if (IN_serendipity !== true) {
die ("Don't hack!");
}
// Probe for a language include with constants. Still include defines later on, if some constants were missing
$probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
if (file_exists($probelang)) {
include $probelang;
}
include dirname(__FILE__) . '/lang_en.inc.php';
// Load possible language files.
@serendipity_plugin_api::load_language(dirname(__FILE__));
// Actual version of this plugin
@define('PLUGIN_EVENT_GRAVATAR_VERSION', '1.60.1'); // NOTE: This plugin is also in the central repository. Commit changes to the core, too :)
@define('PLUGIN_EVENT_GRAVATAR_VERSION', '1.62.3'); // NOTE: This plugin is also in the central repository. Commit changes to the core, too :)
// Defines the maximum available method slots in the configuration.
@define('PLUGIN_EVENT_GRAVATAR_METHOD_MAX', 6);
@ -43,13 +37,13 @@ class serendipity_event_gravatar extends serendipity_event
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking, Grischa Brockhaus');
$propbag->add('requirements', array(
'serendipity' => '0.7',
'serendipity' => '1.6',
'smarty' => '2.6.7',
'php' => '4.1.0'
));
$propbag->add('version', PLUGIN_EVENT_GRAVATAR_VERSION);
$propbag->add('groups', array('IMAGES'));
$propbag->add('event_hooks', array(
$propbag->add('groups', array('IMAGES'));
$propbag->add('event_hooks', array(
'frontend_display' => true,
'frontend_comment' => true,
'external_plugin' => true,
@ -78,10 +72,6 @@ class serendipity_event_gravatar extends serendipity_event
'url' => 'http://identi.ca',
'desc' => 'Transmits comment data to retrieve unique avatar for a user.'
),
'mybloglog' => array(
'url' => 'http://www.mybloglog.com',
'desc' => 'Transmits comment data to retrieve unique avatar for a user.'
),
'monsterid' => array(
'url' => 'http://www.splitbrain.org/go/monsterid',
'desc' => 'Transmits comment data to retrieve unique avatar for a user.'
@ -109,13 +99,13 @@ class serendipity_event_gravatar extends serendipity_event
'transmits_user_input' => true
));
$configuration = array('longdescription','seperator');
$config_methods = array();
$configuration = array('longdescription', 'separator');
$config_methods = array();
for ($idx=1; $idx<=PLUGIN_EVENT_GRAVATAR_METHOD_MAX; $idx++) {
$config_methods[] = "method_$idx";
}
$propbag->add('configuration',
array_merge($configuration, $config_methods,
array('defaultavatar', 'recent_entries', 'infoline',
@ -125,7 +115,6 @@ class serendipity_event_gravatar extends serendipity_event
);
}
function introspect_config_item($name, &$propbag)
{
global $serendipity;
@ -136,7 +125,6 @@ class serendipity_event_gravatar extends serendipity_event
'pavatar' => "Pavatar",
'twitter' => "Twitter",
'identica' => "Identica",
'mybloglog' => "MyBlogLog",
'monsterid' => "Monster ID",
'wavatars' => "Wavatars",
'identicon' => "Identicon/YCon",
@ -165,6 +153,7 @@ class serendipity_event_gravatar extends serendipity_event
);
switch($name) {
case 'smartyimage':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_EVENT_GRAVATAR_USE_SMARTY);
@ -190,13 +179,16 @@ class serendipity_event_gravatar extends serendipity_event
$propbag->add('type', 'content');
$propbag->add('default', PLUGIN_EVENT_GRAVATAR_EXTLING_WARNING);
break;
case 'longdescription':
$propbag->add('type', 'content');
$propbag->add('default', PLUGIN_EVENT_GRAVATAR_LONG_DESCRIPTION);
break;
case 'seperator':
$propbag->add('type', 'seperator');
case 'separator':
$propbag->add('type', 'separator');
break;
case 'gravatar_fallback':
$propbag->add('type', 'select');
$propbag->add('name', PLUGIN_EVENT_GRAVATAR_FALLBACK);
@ -204,6 +196,7 @@ class serendipity_event_gravatar extends serendipity_event
$propbag->add('select_values', $gravatar_fallbacks);
$propbag->add('default', 'none');
break;
case 'gravatar_fallback_use_always':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_EVENT_GRAVATAR_FALLBACK_ALLWAYS);
@ -212,11 +205,7 @@ class serendipity_event_gravatar extends serendipity_event
break;
case 'defaultavatar':
if (version_compare('1.2',$serendipity['version'])==1) {// 1 if 1.2 higher than actual version number
$propbag->add('type', 'string');
} else {
$propbag->add('type', 'media');
}
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_EVENT_GRAVATAR_DEFAULTAVATAR);
$propbag->add('description', PLUGIN_EVENT_GRAVATAR_DEFAULTAVATAR_DESC);
$propbag->add('default', '');
@ -247,7 +236,7 @@ class serendipity_event_gravatar extends serendipity_event
$propbag->add('type', 'radio');
$propbag->add('name', PLUGIN_EVENT_GRAVATAR_RATING);
$propbag->add('description', PLUGIN_EVENT_GRAVATAR_RATING_DESC);
$propbag->add('radio', array(
$propbag->add('radio', array(
'value' => array('-', 'G', 'PG', 'R', 'X'),
'desc' => array(PLUGIN_EVENT_GRAVATAR_RATING_NO,PLUGIN_EVENT_GRAVATAR_RATING_G, PLUGIN_EVENT_GRAVATAR_RATING_PG, PLUGIN_EVENT_GRAVATAR_RATING_R, PLUGIN_EVENT_GRAVATAR_RATING_X)
));
@ -276,19 +265,22 @@ class serendipity_event_gravatar extends serendipity_event
$propbag->add('default', false);
break;
default:
return false;
}
return true;
}
function generate_content(&$title) {
function generate_content(&$title)
{
$title = PLUGIN_EVENT_GRAVATAR_NAME;
}
/**
* Will be called while saving settings
*/
function cleanup() {
function cleanup()
{
// *Always* clean up the cache after changing configuration, else
// the configuration change will first be seen after cache time is run out.
$this->log("-------");
@ -359,8 +351,6 @@ class serendipity_event_gravatar extends serendipity_event
} else {
return false;
}
break;
// Print out image html for the user avatar into the frontend_display
@ -370,35 +360,39 @@ class serendipity_event_gravatar extends serendipity_event
}
$this->printAvatarHtml($eventData, $addData);
return true;
break;
case 'css':
// avatar css has to be emitted no matter of smarty enabled: the sidebar needs it.
//$useSmarty = serendipity_db_bool($this->get_config('smartyimage', false));
//if (!$useSmarty && !(strpos($eventData, '.avatar_left') || strpos($eventData, '.avatar_rigth'))) {
if (!(strpos($eventData, '.avatar_left') || strpos($eventData, '.avatar_rigth'))) {
?>
// CSS class does NOT exist by user customized template styles, include default
if (false === (strpos($eventData, '.avatar_left') || strpos($eventData, '.avatar_rigth'))) {
$eventData .= '
/* serendipity_event_gravatar start */
.avatar_left {
float:left;
margin-left:0px;
margin-right:10px;
float:left;
margin-left:0px;
margin-right:10px;
}
.avatar_right {
float:right;
margin-right:0px;
margin-left:10px;
float:right;
margin-right:0px;
margin-left:10px;
}
<?php
/* serendipity_event_gravatar end */
';
}
return true;
break;
break;
// Adds information about the actual supported avatar types below the comment input
case 'frontend_comment':
// Suppress infoline about configured avatar types if configured like that:
if (!serendipity_db_bool($this->get_config('infoline', true))){
if (!serendipity_db_bool($this->get_config('infoline', 'true'))){
return false;
}
@ -432,7 +426,7 @@ class serendipity_event_gravatar extends serendipity_event
$supported_methods .= (empty($supported_methods) ? '' : ', ') . '<a href="http://www.splitbrain.org/go/monsterid">Monster ID</a>';
break;
case 'identicon':
$supported_methods .= (empty($supported_methods) ? '' : ', ') . '<a href="http://scott.sherrillmix.com/blog/blogger/wp_identicon/">Identicon/Ycon</a>';
$supported_methods .= (empty($supported_methods) ? '' : ', ') . '<a href="http://scott.sherrillmix.com/blog/blogger/wp_identicon/">Identicon/Ycon</a>';
break;
case 'wavatars':
$supported_methods .= (empty($supported_methods) ? '' : ', ') . '<a href="http://www.shamusyoung.com/twentysidedtale/?p=1462">Wavatars</a>';
@ -440,12 +434,13 @@ class serendipity_event_gravatar extends serendipity_event
}
}
echo '<div class="serendipity_commentDirection serendipity_comment_gravatar">' . sprintf(PLUGIN_EVENT_GRAVATAR_SUPPORTED, $supported_methods) . '</div>';
return true;
break;
default:
return false;
}
return true;
} else {
return false;
}
@ -455,16 +450,16 @@ class serendipity_event_gravatar extends serendipity_event
* Returns HTML displaying the user avatar. This is done without any call to external servers.
* If a cached avatar is found, the image will have it as SRC, else the SRC will be filled with
* an external_plugin call, that will try to fetch a fresh avatar later.
*
*/
function printAvatarHtml(&$eventData, &$addData){
function printAvatarHtml(&$eventData, &$addData)
{
global $serendipity;
$useSmarty = serendipity_db_bool($this->get_config('smartyimage', false));
$useSmarty = serendipity_db_bool($this->get_config('smartyimage', 'false'));
// comments sidebar plugin doesn't support smarty, so switch it off, if detected
if ($addData['from'] == 'serendipity_plugin_comments:generate_content') {
if (!serendipity_db_bool($this->get_config('recent_entries', true))) {
if (!serendipity_db_bool($this->get_config('recent_entries', 'true'))) {
return false;
}
$useSmarty = false;
@ -482,12 +477,12 @@ class serendipity_event_gravatar extends serendipity_event
$url = '';
if (!empty($eventData['url'])) {
$url = $eventData['url'];
$url = $eventData['url'];
}
if (!empty($eventData['url'])) { // Strip Query paras
$urlparts = explode('?', $eventData['url']);
$url = $urlparts[0];
if (!empty($eventData['url'])) { // Strip Query params
$urlparts = explode('?', $eventData['url']);
$url = $urlparts[0];
}
$title = '';
$author = 'unknown';
@ -497,10 +492,10 @@ class serendipity_event_gravatar extends serendipity_event
}
if (isset($eventData['email']) && !empty($eventData['email'])) {
$email_md5 = md5(strtolower($eventData['email']));
$email_md5 = md5(strtolower($eventData['email']));
}
else {
$email_md5 = '';
$email_md5 = '';
}
if ($this->cache_seconds > 0) {
$cache_file = $this->getCacheFilePath($eventData);
@ -542,7 +537,8 @@ class serendipity_event_gravatar extends serendipity_event
* Generates a CSS class for the avatar depending where it is displayed.
* Defaults to comment_avatar in comments and is unique for plugins.
*/
function generateAvatarCssClass($addData){
function generateAvatarCssClass($addData)
{
if (empty($addData)) {
return "avatar";
}
@ -555,7 +551,8 @@ class serendipity_event_gravatar extends serendipity_event
/**
* Tests wether the default avatar is supported
*/
function supportDefaultAvatar(){
function supportDefaultAvatar()
{
// Check if a default avatar is defined
$default = $this->getDefaultImageConfiguration();
@ -584,7 +581,8 @@ class serendipity_event_gravatar extends serendipity_event
* Will try to fetch a fresh avatar image by user configuration. If retreiving was successfull,
* the image will cached and displayed as binary image response.
*/
function fetchAvatar(&$eventData) {
function fetchAvatar(&$eventData)
{
global $serendipity;
$methodnr = 1;
@ -627,9 +625,6 @@ class serendipity_event_gravatar extends serendipity_event
case 'identica':
$success = $this->fetchIdentica($eventData);
break;
case 'mybloglog':
$success = $this->fetchMyBlogLog($eventData);
break;
case 'monsterid':
$success = $this->fetchMonster($eventData);
break;
@ -670,7 +665,8 @@ class serendipity_event_gravatar extends serendipity_event
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchGravatar(&$eventData){
function fetchGravatar(&$eventData)
{
global $serendipity;
$this->log("Gravatar: url=" . $eventData['url'] . " email_md5=" . $eventData['email_md5'] . " author=" .$eventData['author']) ;
@ -679,28 +675,28 @@ class serendipity_event_gravatar extends serendipity_event
return false;
}
if (empty($eventData['email_md5'])) {
if (!serendipity_db_bool($this->get_config('gravatar_fallback_use_always', false)) || (empty($eventData['url']) && empty($eventData['author']))) {
return false;
}
else {
if (empty($eventData['url'])) $email_md5 = md5($eventData['author']);
else $email_md5 = md5($eventData['url']);
}
if (!serendipity_db_bool($this->get_config('gravatar_fallback_use_always', 'false')) || (empty($eventData['url']) && empty($eventData['author']))) {
return false;
}
else {
if (empty($eventData['url'])) $email_md5 = md5($eventData['author']);
else $email_md5 = md5($eventData['url']);
}
}
else {
$email_md5 = $eventData['email_md5'];
$email_md5 = $eventData['email_md5'];
}
$default = $this->getDefaultImageConfiguration();
$gravatar_fallback = $this->get_config("gravatar_fallback");
$fallback = "";
if ($gravatar_fallback != 'none') {
$fallback = '&d=' . $gravatar_fallback;
$fallback = '&d=' . $gravatar_fallback;
}
else {
//$defaultavatar = urlencode((empty($default['defaultavatar'])? $serendipity['baseURL'] . 'dummy.gif': 'http://' . $_SERVER['SERVER_NAME'] . $default['defaultavatar']));
$defaultavatar = urlencode($serendipity['serendipityHTTPPath'] . 'dummy456.gif123'); // Add a not existing image to produce an error we can check
$fallback = '&d=' . $defaultavatar;
//$defaultavatar = urlencode((empty($default['defaultavatar'])? $serendipity['baseURL'] . 'dummy.gif': 'http://' . $_SERVER['SERVER_NAME'] . $default['defaultavatar']));
$defaultavatar = urlencode($serendipity['serendipityHTTPPath'] . 'dummy456.gif123'); // Add a not existing image to produce an error we can check
$fallback = '&d=' . $defaultavatar;
}
$urltpl = 'http://www.gravatar.com/avatar.php?'
@ -714,46 +710,10 @@ class serendipity_event_gravatar extends serendipity_event
$success = $this->saveAndResponseAvatar($eventData, $urltpl, 1);
$this->avatarConfiguration['gravatar_found'] = $success;
return $success;
}
/**
* Tries to add a MyBlogLog.com avatar to the comment.
*
* @param array eventdata the data given by the event
* @param int cache hours for fetching images from cache
* @param array default default values for avatar images
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchMyBlogLog(&$eventData){
require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
global $serendipity;
// Was lastrun successfull?
if (isset($this->avatarConfiguration['mybloglog_found']) && !$this->avatarConfiguration['mybloglog_found']) {
return false;
}
if (empty($eventData['url'])) {
return false;
}
// Get configured plugin path:
$pluginPath = 'plugin';
if (isset($serendipity['permalinkPluginPath'])){
$pluginPath = $serendipity['permalinkPluginPath'];
}
$author_url = 'http://pub.mybloglog.com/coiserv.php?'
. 'href=' . $eventData['url']
. '&n=' . (!empty($eventData['author']) ? $eventData['author'] : '*');
$check = $this->saveAndResponseMyBlogAvatar($eventData, $author_url);
$this->avatarConfiguration['mybloglog_found'] = $check;
return $check;
}
/**
* Tries to add a favatar or pavatar (depending on the given mode) to the comment.
@ -764,8 +724,9 @@ class serendipity_event_gravatar extends serendipity_event
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchPFavatar(&$eventData, $mode="F"){
require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
function fetchPFavatar(&$eventData, $mode="F")
{
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
global $serendipity;
$default = $this->getDefaultImageConfiguration();
@ -807,30 +768,27 @@ class serendipity_event_gravatar extends serendipity_event
serendipity_request_start();
}
// Evaluate URL of P/Favatar
$req = new HTTP_Request($url, array('allowRedirects' => true, 'maxRedirects' => 3));
$options = array('follow_redirects' => true, 'max_redirects' => 3);
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
$options['ssl_verify_peer'] = false;
}
$req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET, $options);
$favicon = false;
// code 200: OK, code 30x: REDIRECTION
$responses = "/(200 OK)|(30[0-9] Found)/"; // |(30[0-9] Moved)
if (!$islocalhost && (PEAR::isError($req->sendRequest()) || preg_match($responses, $req->getResponseCode()))) {
// nothing to do,
$favicon = false;
$this->log($mode . " - Error fetching $url: " . $req->getResponseCode());
}
else {
$pavatarHeaderIcon = $req->getResponseHeader("X-Pavatar");
$fContent = $req->getResponseBody();
try {
$response = $req->send();
$pavatarHeaderIcon = $response->getHeader("X-Pavatar");
$fContent = $response->getBody();
if ($mode=='P' && !empty($pavatarHeaderIcon)){
$faviconURL = $pavatarHeaderIcon;
$this->log("Found x-pavatar in head: $faviconURL");
}
else if (!$islocalhost &&
($mode=='P' && preg_match('/<link[^>]+rel="pavatar"[^>]+?href="([^"]+?)"/si', $fContent, $matches)) ||
($mode=='F' && preg_match('/<link[^>]+rel="(?:shortcut )?icon"[^>]+?href="([^"]+?)"/si', $fContent, $matches))
)
else if (!$islocalhost && ($mode=='P' && preg_match('/<link[^>]+rel="pavatar"[^>]+?href="([^"]+?)"/si', $fContent, $matches)) ||
($mode=='F' && preg_match('/<link[^>]+rel="(?:shortcut )?icon"[^>]+?href="([^"]+?)"/si', $fContent, $matches)))
{
// Attempt to grab an avatar link from their webpage url
$linkUrl = (function_exists('serendipity_entity_decode') ? serendipity_entity_decode($matches[1]) : html_entity_decode($matches[1], ENT_COMPAT, LANG_CHARSET));
if (substr($linkUrl, 0, 1) == '/') {
@ -846,8 +804,7 @@ class serendipity_event_gravatar extends serendipity_event
}
$this->log($mode . " - Found link rel to url $faviconURL");
}
else {
} else {
// If unsuccessful, attempt to "guess" the favicon location
$urlParts = parse_url($url);
$faviconURL = $urlParts['scheme'] . '://' . $urlParts['host'] . ($mode=='F'?'/favicon.ico':'/pavatar.png');
@ -855,7 +812,6 @@ class serendipity_event_gravatar extends serendipity_event
}
// Split image URL and check if image is available using a fast and timed out socket:
$url_parts = @parse_url($faviconURL);
if (!is_array($url_parts)) {
$url_parts = array();
@ -894,7 +850,13 @@ class serendipity_event_gravatar extends serendipity_event
// Remember the last result of the P/Favatar search
$this->avatarConfiguration['img_url_'.$mode] = $favicon;
} catch (HTTP_Request2_Exception $e) {
if (!$islocalhost && preg_match($responses, $response->getStatus())) {
$favicon = false;
$this->log($mode . " - Error fetching $url: " . $response->getStatus());
}
}
if (function_exists('serendipity_request_end')) {
serendipity_request_end();
}
@ -907,11 +869,11 @@ class serendipity_event_gravatar extends serendipity_event
else {
return false;
}
}
function fetchTwitter(&$eventData) {
require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
function fetchTwitter(&$eventData)
{
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
// Was lastrun successfull?
if (isset($this->avatarConfiguration['twitter_found']) && !$this->avatarConfiguration['twitter_found']) {
@ -941,22 +903,33 @@ class serendipity_event_gravatar extends serendipity_event
$path = trim($parts['path']);
$dirs = explode('/',$path);
$twittername = $dirs[1];
//if ($twittername=='#!') $twittername = $dirs[2];
$this->log("Twitteruser found ($url): $twittername");
$twitter_search = 'http://search.twitter.com/search.atom?q=from%3A' . $twittername . '&rpp=1';
serendipity_request_start();
$req = new HTTP_Request($twitter_search);
$req->sendRequest();
$this->last_error = $req->getResponseCode();
if ($req->getResponseCode() != 200) {
$this->last_error = $req->getResponseCode();
$options = array();
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
$options['ssl_verify_peer'] = false;
}
$req = new HTTP_Request2($twitter_search, HTTP_Request2::METHOD_GET, $options);
try {
$response = $req->send();
$this->last_error = $response->getStatus();
if ($response->getStatus() != 200) {
throw new HTTP_Request2_Exception("Could not search on twitter");
}
$response = trim($response->getBody());
} catch (HTTP_Request2_Exception $e) {
$this->last_error = $response->getStatus();
serendipity_request_end();
$this->log("Twitter Error: {$this->last_error}");
return false;
}
$response = trim($req->getResponseBody());
serendipity_request_end();
$parser = xml_parser_create();
$vals=array(); $index=array();
@ -981,8 +954,9 @@ class serendipity_event_gravatar extends serendipity_event
}
function fetchIdentica(&$eventData) {
require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
function fetchIdentica(&$eventData)
{
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
// Was lastrun successfull?
if (isset($this->avatarConfiguration['identica_found']) && !$this->avatarConfiguration['identica_found']) {
@ -997,16 +971,25 @@ class serendipity_event_gravatar extends serendipity_event
$status_id = $matches[1];
$search = "http://identi.ca/api/statuses/show/$status_id.xml";
serendipity_request_start();
$req = new HTTP_Request($search);
$req->sendRequest();
$this->last_error = $req->getResponseCode();
if ($req->getResponseCode() != 200) {
$this->last_error = $req->getResponseCode();
$options = array();
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
$options['ssl_verify_peer'] = false;
}
$req = new HTTP_Request2($search, HTTP_Request2::METHOD_GET, $options);
try {
$response = $req->send();
$this->last_error = $response->getStatus();
if ($response->getStatus() != 200) {
throw new HTTP_Request2_Exception("Could not search on identica");
}
$response = trim($response->getBody());
} catch (HTTP_Request2_Exception $e) {
$this->last_error = $response->getStatus();
serendipity_request_end();
$this->log("Identica Error: {$this->last_error}");
return false;
}
$response = trim($req->getResponseBody());
serendipity_request_end();
$parser = xml_parser_create();
$vals=array(); $index=array();
@ -1031,7 +1014,8 @@ class serendipity_event_gravatar extends serendipity_event
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchMonster(&$eventData){
function fetchMonster(&$eventData)
{
require_once dirname(__FILE__) . '/monsterid/monsterid.php';
$seed = md5($eventData['author']) . $eventData['email_md5'] . md5($eventData['url']);
@ -1061,7 +1045,8 @@ class serendipity_event_gravatar extends serendipity_event
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchWavatar(&$eventData){
function fetchWavatar(&$eventData)
{
require_once dirname(__FILE__) . '/wavatars/wavatars.php';
$seed = md5($eventData['author']) . $eventData['email_md5'] . md5($eventData['url']);
@ -1093,7 +1078,8 @@ class serendipity_event_gravatar extends serendipity_event
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchYcon(&$eventData){
function fetchYcon(&$eventData)
{
require_once dirname(__FILE__) . '/ycon/ycon.image.php';
$seed = md5($eventData['author']) . $eventData['email_md5'] . md5($eventData['url']);
@ -1123,7 +1109,8 @@ class serendipity_event_gravatar extends serendipity_event
*
* @return boolean true, if Avatar was found and added to the comment buffer
*/
function fetchDefault(){
function fetchDefault()
{
global $serendipity;
$default = $this->getDefaultImageConfiguration();
@ -1145,12 +1132,12 @@ class serendipity_event_gravatar extends serendipity_event
return true;
}
/**
* Caches an avatar and streams it back to the browser.
*/
function saveAndResponseAvatar($eventData, $url, $allow_redirection = 3){
require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
function saveAndResponseAvatar($eventData, $url, $allow_redirection = 3)
{
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
global $serendipity;
$fContent = null;
@ -1159,34 +1146,36 @@ class serendipity_event_gravatar extends serendipity_event
}
if ($allow_redirection) {
$request_pars['allowRedirects'] = true;
$request_pars['maxRedirects'] = $allow_redirection;
$request_pars['follow_redirects'] = true;
$request_pars['max_redirects'] = $allow_redirection;
}
else {
$request_pars['allowRedirects'] = false;
$request_pars['follow_redirects'] = false;
}
$req = new HTTP_Request($url, $request_pars);
// if the request leads to an error we don't want to have it: return false
if (PEAR::isError($req->sendRequest()) || ($req->getResponseCode() != '200')) {
$fContent = null;
if ($req->getResponseCode() != '200') {
$this->log("Avatar fetch error: " . $req->getResponseCode() . " for url=" . $url);
}
else {
$this->log("Avatar fetch error: PEAR reported ERROR for url=" . $url);
}
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
$request_pars['ssl_verify_peer'] = false;
}
else {
$req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET, $request_pars);
try {
$response = $req->send();
if ($response->getStatus() != '200') {
throw new HTTP_Request2_Exception("Could not search on identica");
}
// Allow only images as Avatar!
$mime = $req->getResponseHeader("content-type");
$mime = $response->getHeader("content-type");
$this->avatarConfiguration['mime-type'] = $mime;
$this->log("Avatar fetch mimetype: $mime" . " for url=" . $url);
$mimeparts = explode('/',$mime);
if (count($mimeparts)==2 && $mimeparts[0]=='image') {
$fContent = $req->getResponseBody();
$fContent = $response->getBody();
}
} catch (HTTP_Request2_Exception $e) {
$fContent = null;
$this->log("Avatar fetch error: " . $e);
}
if (function_exists('serendipity_request_start')) {
@ -1199,7 +1188,7 @@ class serendipity_event_gravatar extends serendipity_event
return false;
}
$cache_file = $this->cacheAvatar($eventData, $fContent,$req);
$cache_file = $this->cacheAvatar($eventData, $fContent);
if ($cache_file) {
$this->show($cache_file);
}
@ -1210,131 +1199,14 @@ class serendipity_event_gravatar extends serendipity_event
return true;
}
function saveAndResponseMyBlogAvatar($eventData, $url) {
global $serendipity;
$request_pars['allowRedirects'] = false;
$this->log("saveAndResponseMyBlogAvatar: " . $url);
// First a dummy icon is fetched. This is done by fetching a MyBlog Avatar for a not existing domain.
// If we have done this before, the dummy_md5 is already set, so we can skip this fetching here.
if (!isset($this->mybloglog_dummy_md5)) {
$cachefilename = '_mybloglogdummy.md5';
$cache_file = $this->getCacheDirectory() . '/' . $cachefilename;
// Look up the cache for the md5 of the MyBlogLog dummy icon saved earlier:
if (file_exists($cache_file) && time() - filemtime($cache_file) < $this->cache_seconds){
$fp = fopen($cache_file, 'rb');
$this->mybloglog_dummy_md5 = fread($fp, filesize($cache_file));
fclose($fp);
$this->log("Loaded dummy MD5: " . $this->mybloglog_dummy_md5);
}
else { // dummy MD5 file was not cached or was too old. We have to fetch the dummy icon now
$dummyurl = 'http://pub.mybloglog.com/coiserv.php?href=http://grunz.grunz.grunz&n=*';
$this->log("trying dummyUrl: " . $dummyurl);
if (function_exists('serendipity_request_start')) {
serendipity_request_start();
}
$reqdummy = new HTTP_Request($dummyurl, $request_pars);
if (PEAR::isError($reqdummy->sendRequest()) || ($reqdummy->getResponseCode() != '200')) {
if (function_exists('serendipity_request_start')) {
serendipity_request_end();
}
$this->avatarConfiguration["mybloglog_dummy_error!"]=$reqdummy->getResponseCode();
// unable to fetch a dummy picture!
$this->log("unable to fetch a dummy picture!" . $dummyurl);
return false; // what can we say else..
}
else {
// Allow only images as Avatar!
$mime = $reqdummy->getResponseHeader("content-type");
$this->log("MyBlogLog Avatar fetch mimetype: $mime");
$mimeparts = explode('/',$mime);
if (count($mimeparts)!=2 || $mimeparts[0]!='image') {
// unable to fetch a dummy picture!
$this->log("unable to fetch a dummy picture!" . $dummyurl);
if (function_exists('serendipity_request_start')) {
serendipity_request_end();
}
return false; // what can we say else..
}
$fContent = $reqdummy->getResponseBody();
$this->mybloglog_dummy_md5 = md5($fContent);
// Save MD5 of dummy icon for later runs
$fp = fopen($cache_file, 'wb');
fwrite($fp,$this->mybloglog_dummy_md5);
fclose($fp);
$this->log("dummy MD5 saved: " . $this->mybloglog_dummy_md5);
}
if (function_exists('serendipity_request_start')) {
serendipity_request_end();
}
}
}
// Fetch the correct icon and compare:
if (isset($this->mybloglog_dummy_md5)) {
$cachefilename = $this->getCacheFilePath($eventData);
// fetch the icon
if (function_exists('serendipity_request_start')) {
serendipity_request_start();
}
$this->log("Fetching mbl: " . $url);
$req = new HTTP_Request($url, $request_pars);
if (PEAR::isError($req->sendRequest()) || ($req->getResponseCode() != '200')) {
if (function_exists('serendipity_request_start')) {
serendipity_request_end();
}
$this->log("Unable to fetch the correct image!");
// Unable to fetch the correct image!
return false;
}
else {
// Test, if this realy is an image!
$mime_type = $req->getResponseHeader('content-type');
if (!empty($mime_type)) $mt_parts = explode('/',$mime_type);
if (isset($mt_parts) && is_array($mt_parts) && $mt_parts[0] == 'image') {
$fContent = $req->getResponseBody();
$avtmd5 = md5($fContent);
$this->log("mbl image fetched, MD5: " . $avtmd5);
if ($this->mybloglog_dummy_md5 != $avtmd5) {
$this->log("caching mbl image: " . $cachefilename);
$this->cacheAvatar($eventData,$fContent,$req);
}
} else {
$this->log("MyBlogLog did not return an image: " . $mime_type );
$avtmd5 = $this->mybloglog_dummy_md5; // Declare it as dummy in order not to save it.
}
}
if (function_exists('serendipity_request_start')) {
serendipity_request_end();
}
if ($this->mybloglog_dummy_md5 == $avtmd5){ // This seems to be a dummy avatar!
return false;
}
else {
$this->show($cachefilename);
return true;
}
}
return false;
}
/**
* Caches an avatar file.
*
* @param string cache_file name of file used for caching
* @param string fContent content to be cached
* @param request req optional the request that produced this content (for logging)
*/
function cacheAvatar($eventData, $fContent, $req=null){
function cacheAvatar($eventData, $fContent)
{
$cache_file = $this->getCacheFilePath($eventData);
$this->log("cacheAvatar: " . $cache_file);
@ -1354,20 +1226,14 @@ class serendipity_event_gravatar extends serendipity_event
fwrite($fp, $fContent);
fclose($fp);
if (isset($req)){
// Remember mime type
$mime_type = $req->getResponseHeader('content-type');
$this->avatarConfiguration['mime-type'] = $mime_type;
}
return $cache_file;
}
/**
* Return binary response for an image
*/
function show($filename) {
function show($filename)
{
$this->log("show: $filename");
if (!file_exists($filename)) {
header('X-Avatar: No-Image');
@ -1426,8 +1292,8 @@ class serendipity_event_gravatar extends serendipity_event
* @param string title the title for that image
* @return string the html code representing the Avatar
*/
function generateImageHtml($url, $title = null, $align = 'right', $addAlignClass = true, $cssClass = "comment_avatar"){
function generateImageHtml($url, $title = null, $align = 'right', $addAlignClass = true, $cssClass = "comment_avatar")
{
$default = $this->getDefaultImageConfiguration();
if (empty($title)){
@ -1440,7 +1306,7 @@ class serendipity_event_gravatar extends serendipity_event
if ($addAlignClass && ($align == 'right' || $align == 'left'))
$cssAlign = "avatar_$align";
$alt = '*';
if (serendipity_db_bool($this->get_config('autoralt', false))) {
if (serendipity_db_bool($this->get_config('autoralt', 'false'))) {
$alt = $title;
}
return '<img src="' . $url . '" alt="' . $alt . '" title="' . $title . '" class="' . $cssClass . ($addAlignClass? " $cssAlign":"") . '" height="' . $default['size'] . '" width="' . $default['size'] . '"/>';
@ -1449,14 +1315,16 @@ class serendipity_event_gravatar extends serendipity_event
/**
* Just generates comments into the comment block. Used for debugging only!
*/
function generateComment(&$eventData, $comment){
function generateComment(&$eventData, $comment)
{
$eventData['comment'] = "-- $comment --<br>\n" . $eventData['comment'];
}
/**
* Returns the avatar cache directory
*/
function getCacheDirectory(){
function getCacheDirectory()
{
global $serendipity;
if ($this->cache_dir === null) {
$this->cache_dir = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . '/serendipity_event_avatar';
@ -1469,7 +1337,8 @@ class serendipity_event_gravatar extends serendipity_event
* If no relevant user data was found, null is returned.
*
*/
function getCacheFilePath($eventData){
function getCacheFilePath($eventData)
{
global $serendipity;
$cache_filename = $this->getCacheFileName($eventData);
@ -1484,7 +1353,8 @@ class serendipity_event_gravatar extends serendipity_event
* If no relevant user data was found, null is returned.
*
*/
function getCacheFileUrl($eventData){
function getCacheFileUrl($eventData)
{
global $serendipity;
$cache_filename = $this->getCacheFileName($eventData);
@ -1497,12 +1367,14 @@ class serendipity_event_gravatar extends serendipity_event
/**
* Returns a URL encoded and signed variable.
*/
function urlencode($url) {
function urlencode($url)
{
$hash = md5($this->instance_id . $url);
return $hash . str_replace ('_', '%5F', urlencode($url));
}
function urldecode($url) {
function urldecode($url)
{
$hash = substr($url, 0, 32);
$real_url = urldecode(substr($url, 32));
@ -1520,7 +1392,8 @@ class serendipity_event_gravatar extends serendipity_event
* If no relevant user data was found, null is returned.
*
*/
function getCacheFileName($eventData){
function getCacheFileName($eventData)
{
global $serendipity;
if (!isset($eventData['email']) && !isset($eventData['email_md5']) && !isset($eventData['url'])) {
@ -1543,7 +1416,8 @@ class serendipity_event_gravatar extends serendipity_event
/**
* Builds an array of default image configuration
*/
function getDefaultImageConfiguration() {
function getDefaultImageConfiguration()
{
global $serendipity;
if ($this->defaultImageConfigurationdefault === null) {
@ -1556,7 +1430,8 @@ class serendipity_event_gravatar extends serendipity_event
return $this->defaultImageConfigurationdefault;
}
function getPermaPluginPath() {
function getPermaPluginPath()
{
global $serendipity;
// Get configured plugin path:
@ -1569,12 +1444,14 @@ class serendipity_event_gravatar extends serendipity_event
}
function log($message){
function log($message)
{
if (!PLUGIN_EVENT_GRAVATAR_DEBUG) return;
$fp = fopen($this->getCacheDirectory() . '.log','a');
fwrite($fp, $message . "\n");
fclose($fp);
}
}
/* vim: set sts=4 ts=4 expandtab : */

View file

@ -99,9 +99,9 @@ Builds the avatar.
function wavatar_build ($filename, $seed, $size)
{
if (!function_exists (imagecreatetruecolor)) {
return false;
}
if (!function_exists (imagecreatetruecolor)) {
return false;
}
$face = 1 + (hexdec (substr ($seed, 1, 2)) % (WAVATAR_FACES));
$bg_color = (hexdec (substr ($seed, 3, 2)) % 240);
$fade = 1 + (hexdec (substr ($seed, 5, 2)) % (WAVATAR_BACKGROUNDS));

View file

@ -2,13 +2,13 @@
require_once 'ycon.php';
function build_ycon($filename, $seed='',$size=''){
$hash = md5($seed);
$image = ycon($hash, $size, 255, 255, 255);
imagetruecolortopalette($image, false, 64);
// header('Content-type: image/png');
imagepng($image,$filename);
imagedestroy($image);
return true;
$hash = md5($seed);
$image = ycon($hash, $size, 255, 255, 255);
imagetruecolortopalette($image, false, 64);
// header('Content-type: image/png');
imagepng($image,$filename);
imagedestroy($image);
return true;
}
?>

View file

@ -282,4 +282,5 @@ function draw_glpyh(&$image, $x, $y, $full, $fg_color, $bg_color, $shape, $rotat
// draw the bastard
imagefilledpolygon($image, $points, count($points) / 2, $drawing_color);
}
?>