BuddyPress forum topics don’t show up

As the last year’s Vlado was not wise enough to blog about this little problem that occurs after BuddyPress updates or server migrations, he is doing it one year later, when he comes again to such a problem.

  • all forum topics are missing;
  • creating a forum topic doesn’t show up;
  • checking topics from a specific group/user profile doesn’t show any results.

Simply you’ve got a mistake in your bb-config.php file, which should be located in the root folder of your WordPress installation. In case of server migration you should check your database credentials (db name, host, user and pass) and in case you have been a wise-ass and have changed your database tables prefix, you’ll have to update these manually in the the same file.

Next thing you’ll see are all your lovely forum topics coming back home.

Черен списък на лакомите WordPress разширения

  • FT Calendar – извеждането на джаджа в страничното поле или чрез shortcode води до едни около 80 SQL заявки.  За полупразен не-много-посещаван сайт няма да се отрази кой знае как. За сериозно натоварван сайт това ще се окаже bottleneck. Като бонус получавате и таблици с абсурдни id-та на клетките и *стотин грешки на страницата ви при проверка от validator.w3.org.
  • News-Ticker – ако някой види в кода как се взимат с една заявка всички публикации, след което и всички етикети и категории, че да се направи в PHP кода филтрирането по посочените критерии, ще разбере, че авторът хал-хабер си няма от SQL и предпочита да се уповава на знанията си в PHP и API-то на WordPress. При няколко хиляди публикации и над 10к етикета това би значело секунди зареждане на глупава малка лентичка с няколко превъртащи се новини.
  • Semisecure Login Reimagined – хубаво нещо е да се криптират паролите като се размяткат насам-натам, ама когато това се случва с ключ с дължина 2048 бита нещата могат да отидат малко в тиквите, при по-голям човеко-поток на сайта навътре-навън. Тук винаги можем да изберем по-къс ключ, като 512 битов примерно. И все пак, едно на ум.
  • BuddyPress Live Notification (http://buddydev.com/plugins/buddypress-live-notification/) – супер е известията ни в BuddyPress да излизат веднага, а не едва когато презаредим страницата, но вероятно има и някакви по-щадящи процесора варианти. Асинхронното чудовище е способно при няколко логнати потребителя да изяде лимита на процесорното ви време, ако сте на споделен хостинг за нула време. True story.
  • Automatic SEO Links (http://wordpress.org/plugins/automatic-seo-links/) – безкрайно много заявки на всяка страница, а при голям сайт или много добавени думи става мазало.

Списъкът ще се дописва постепенно…

Правилният начин за регистриране на езиците за даден WordPress plugin

Доволно количество часове загубих в борене на мега-странният бъг с няколко разширения в една моя инсталация на WordPress с BuddyPress, в която кожата реагираше на смяната на езика (ползвайки qTranslate), докато разширенията продължаваха изкарват само английски надписи. CodeStyling Localization ми разпознаваше файловете, преведените езици, генерираха се .mo файловете и в кода се добавяха същите тия файлове уж както си му е реда. Е явно не съвсем. Ето как се било правело:

/* LOAD LANGUAGES */
function plugin_name_load_textdomain() {
   $locale = apply_filters( ‘wordpress_locale’, get_locale() );
   $mofile = dirname( __File__ ) . “/languages/PLUGIN-NAME-$locale.mo”;

   if ( file_exists( $mofile ) )
      load_textdomain( ‘text-domain-name’, $mofile );
}
add_action ( ‘plugins_loaded’, ‘plugin_name_load_textdomain’, 7 );

SMS известия от Мтел за писма в GMail

Като как да си настроим известия за пристигнали писма на пощата, ако операторът ни е Мтел? Лесно. Ей тъй:

  1. Разрешаваме mail2sms услугата през сайта им: http://www.mtel.bg/sms_mail2sms Предполага се че имаме профил там и че сме си регистрирали актуалния телефон. Накрая на процедурата разполагаме с пощенски адрес 35988НОМЕРЪТ@sms.mtel.net
  2. В гугълската поща отиваме на Settings -> Forwarding and POP/IMAP (тук някъде: https://mail.google.com/mail/u/0/#settings/fwdandpop), където цъкваме бутона Add forwarding email, и въвеждаме пощата, която получихме в първата стъпка. Продължаваме напред.
  3. Казва ни се, че трябва да въведем код за потвърждение на пренасочването. До минутка-две би трябвало да получите sms с част от заглавието на гугълското служебно писмо. В него има и един #, след който има поредица от цифри. Това е кодът за потвърждение. Въвеждате го на страницата на gmail, която го очаква, и с това процесът по въвеждането на пощата за препращане е приключил.
  4. На същата страница за препращане (там дето цъкнахме бутонът за добавяне на адрес) вече имаме въведеният адрес и радиобутон за включването на препращането. Избираме enable и определяме останалите настройки по собствен вкус.

Ако пощата ви е твърде натоварена по принцип, това нещо ще започне в даден момент да досажда. А в по-следващ момент Мтел могат да решат да не препращат всеки sms, ако прекалявате с безплатността на услугата. Не гарантират 100% доставяне, if you know what I mean.

.exe файловете не се изпълняват, а питат за асоциация (Open with…)

При възстановяване на стара конфигурация на Windows XP може да се загуби асоциацията на exe файловете. Малко вероятно, но се случва. Резултатът – всеки shortcut или exe файл отварят прозорчето за избор на програма за стартирането, както се случва обичайно с неизвестните файлове. Забавното е, че не можеш да си пуснеш regedit-а.

Най-лесният вариант, който е хубаво да се пробва на първо място е да идеш на Folder options (Windows Explorer -> Tools, View или Edit, в зависимост от версията на бозата), и от там на File types. Целта е да се възстанови EXE разширението като асоциация за Applications. Ако го има в списъка, би трябвало да има бутон Restore. Ако няма бутон, триеш асоциацията и я създаваш на ново. Ако я няма, просто добавяш нова такава.

Това може и да не свърши работа. Тогава създаваш един файл, който трябва да завършва на .reg и в себе си като текст има следното:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT.exe]
@=”exefile”
“Content Type”=”application/x-msdownload”

[HKEY_CLASSES_ROOT.exePersistentHandler]
@=”{098f2470-bae0-11cd-b579-08002b30bfeb}”

[HKEY_CLASSES_ROOTexefile]
@=”Application”
“EditFlags”=hex:38,07,00,00
“TileInfo”=”prop:FileDescription;Company;FileVersion”
“InfoTip”=”prop:FileDescription;Company;FileVersion;Create;Size”

[HKEY_CLASSES_ROOTexefileDefaultIcon]
@=”%1″

[HKEY_CLASSES_ROOTexefileshell]

[HKEY_CLASSES_ROOTexefileshellopen]
“EditFlags”=hex:00,00,00,00

[HKEY_CLASSES_ROOTexefileshellopencommand]
@=””%1″ %*”

[HKEY_CLASSES_ROOTexefileshellrunas]

[HKEY_CLASSES_ROOTexefileshellrunascommand]
@=””%1″ %*”

[HKEY_CLASSES_ROOTexefileshellex]

[HKEY_CLASSES_ROOTexefileshellexDropHandler]
@=”{86C86720-42A0-1069-A2E8-08002B30309D}”

[HKEY_CLASSES_ROOTexefileshellexPropertySheetHandlers]

[HKEY_CLASSES_ROOTexefileshellexPropertySheetHandlersPEAnalyser]
@=”{09A63660-16F9-11d0-B1DF-004F56001CA7}”

[HKEY_CLASSES_ROOTexefileshellexPropertySheetHandlersPifProps]
@=”{86F19A00-42A0-1069-A2E9-08002B30309D}”

[HKEY_CLASSES_ROOTexefileshellexPropertySheetHandlersShimLayer Property Page]
@=”{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}”

Файлът се изпълнява или от контекстното меню (дясно копче върху него) се избира merge. Проблемът би трябвало да е решен. Иначе – лошоооо.

Отново напомням, че всичко това е решение, до което стигнах от ровене в нета, и което може да не ви свърши никаква работа или да ви навлече неприятности. При мен свърши работа при отстраняването на подобен проблем. Оригиналният източник с подробно описание на решението на английски – тук.

 

Успешна борба със scareware

На първо място, какво е scareware:

Това е софтуер, който се разпространява като вирус и се опитва да се държи като такъв, максимално гръмко при това, за да изкара акъла на потребителя до там, че да го докара до свалянето или закупуването на нещо, от което не се нуждае. Примерно “антивирусна”, която или ще го съсипе съвсем, или просто ще спре изпълнението на scareware-а, задоволявайки авторите само с покупката ви на този “чудесен софтуер”. Търсенето за решения в интернет твърде често водят до страници, където “спасилите се” горещо препоръчват “решения”. Демек още тонове зловреден софтуер, който ви решава този проблем, за сметка на което съвсем спокойно и с вашето разрешение започва да ви краде данни или да ползва ресурсите на машината ви. Давайки ви спокойствието, че вече имате яката антивирусна.

Та, борим се с нещо, което се е качило на компа, пречи на работата, имитира някаква антивирусна, евентуално дори Security Center-а на Windows, и след като сканира компа и открива десетки троянски коня, ви препоръчва да закупите и/или свалите невероятен спасителен софтуер.

След като ви изкара акъла тая чудесия, тя евентуално спира възможността ви да си работите на компютъра, деактивирайки декстопа, иконките ви, евентуално дори task manager-а и т.н. При вкарване на flash-ка автоматично се копира и там, още преди да се води flash-ката “Ready to use”.

Можете да се борите геройски с него, или просто да възстановите стара конфигурация на windows-а. Start -> Programs -> Accessories -> System tools -> System restore (или там квото беше). Избирате задна дата на възстановяване и това ще реши проблемът.

Как се постига резултатът? Зловредния код е някакво exe, вероятно няколко, които са разхвърляни на скрити директории из файловата система и се изпълняват при стартирането на компа, при пускането на task manager-а и всякакви други ситуации, за да внесат безпокойство в душата ви. Restore на системата към по-ранен етап всъщност ще заличи всички тези записи в регистъра, които предизвикват изпълнението на зловредния код. Файловете ще останат, но няма да ви причиняват повече неприятности, освен ако не ги стартирате сами.

Очевидно решението е скалъпено и не гарантира никаква сигурност занапред. По-дългосрочен резултат ще има преинсталация на бозата или заместването й с Linux. Антивирусният софтуер е като дядо Коледа. Създадени, с цел повече продажби и облагодетелстване на авторите. В същото време, безкрайно безполезни.

Make FT Calendar plugin to start week from Monday

It was a bit of a hassle but I  finally did it. The FT Calendar plugin (version 1.0.6) was starting the week from Sunday, which was rather annoying for me, being a Bulgarian… so I hacked it in order to start from Monday. That works for the thumb calendar shortcode. I just didn’t have the time to work around the whole thing, but it should be pretty easy, having achieved this little victory.

Installation of the “patch” is actually replacing the existing class-shortcodes.php file with the one, attached here. It’s located in your plugins dir, probably wp-content/plugins/ft-calendar/classes/. DO make sure your plugin is version 1.0.6, or you might wipe out something useful or totally break it! I take no responsibility on the stuff you did or will do after downloading the patch.

Any feedback is welcome!

>>>DOWNLOAD THE PATCH<<<

Adding a button to TinyMCE – the Visual Editor in WordPress

I needed a simple button that would generate a shortcode on clicking. And that button had to be in the visual editor when adding or editing posts. That editor is implemented by TinyMCE, which is an opensource project too. Well, anyway, I wasted several hours fighting with existing plugins and themes that have introduced some custom buttons. I tried the Codex too, but that gave help for adding a custom style list only. Which was not the thing I needed.

Anyway, solution is almost simple. And I found it works about a day after I already implemented it. Theoretically speaking, it’s introducing a new “plugin” to TinyMCE.

What happens in practice is the following:

add_filter(‘mce_external_plugins’, ‘tinymce_custplugin_register’);
function tinymce_custplugin_register($plugin_array)
{
$url = get_bloginfo(‘template_url’).’/js/custom-plugin.js’;
//url is the actual button with it’s label and action, when clicked
$plugin_array[‘custplugin’] = $url;
return $plugin_array;
}
add_filter(‘mce_buttons’, ‘tinymce_custplugin_addbutton’, 0);
function tinymce_custplugin_addbutton($buttons)
{
//Separator adds space before the button (obviously?)
array_push($buttons, ‘separator’, ‘custplugin’);
return $buttons;
}
We add this code in the functions.php of your theme OR in a new plugin, just to have it across all themes we might go through.
Here comes the JavaScript file:
function custplugin() {
return ‘[my-shortcode]’;
}
(function() {
tinymce.create(‘tinymce.plugins.custplugin’, {
init : function(ed, url){
ed.addButton(‘custplugin’, {
title : ‘My Custom Button’,
onclick : function() {
ed.execCommand(
‘mceInsertContent’,
false,
custplugin() //the real deal goes here
);
},
image: url + ‘/button-icon.png’
});
}
});
tinymce.PluginManager.add(‘custplugin’,tinymce.plugins.custplugin);
})();
UPDATE: Watch out for the ‘ and ” when coping the code from here. You’ll have to replace them with real ones, as these may lead to an js error.

Смяна на представка на таблиците в базата на WordPress

Защо би ни хрумнало такова нещо? Сигурност. wp_ отдалеч крещи, че системата отдолу е WordPress. А от време на време е хубаво това да се маскира. Какво правим за ръчната смяна на префиксите:

  1. Запазваме си някъде копие на базата, щото обикновено нещата се скапват, когато нямаме backup.
  2. Сменяме стойността на prefix променливата в wp-config.php файла с новата представка. На този етап сайтът би трябвало да спре да се отваря адекватно, просто защото се връзва с базата си, но не намира никоя от таблиците. Ще предложи нова инсталация, която реално ще бъде с новата представка. НЕ правете това.
  3. Отваряме базата и преименуваме всички таблици, сменяйки старата представка с новата. На този етап сайтът би трябвало вече да се отваря, но да нямате достъп до административния панел.
  4. Преименувате ключове и стойности в таблиците usermeta & options. Без значение е това, че тия стойности не са имена на таблици, те започват с wp_ (или какъвато там ви е представката) и съответно подлежат на преименуване.

След като свършите всички тези дела, можете да активирате отново разширенията, които би трябвало да се деактивирали предварително. Не че е фатално, но е препоръчително. Сега е моментът да направите цялостно изтестване на системата и да видите дали нещо някъде не се чупи по глупав начин. Малък шанс, но все пак възможен, е някой гений да е написал разширение с набухана представка вътре в кода. Е, ще трябва да я заместите с правилната променлива.

Като цяло всичкото действие, както и някои други извращения със смяна на адреси на папки за разширения, кожи и т.н., е хубаво да се планира и изпълнява преди инсталацията на разширенията и кожите, защото в последствие винаги може да изскочи от някъде някакво разминаване заради лошо написан код на разширенията.

Server Error 500 за PHP, засилено на IIS7

Дано на никого не му хрумва да ме пита защо търкалям PHP на Windows сървър. Как да е, наложи ми се. Приложението си работеше като пич на Apache, обаче в момента, в който го прехвърлих на новото място и уж всичко е настроено, взе да ми изскача грешка 500 за която и страница от PHP приложението да се опитам да отворя – локално на сървъра или отдалечено.

Дълго рових и търсих, като очаквах да е нещо, свързано с application pool-а, който и преди ми е създавал проблеми. В края на краищата установих, че просто глупостта е решила, че каква да е грешка в кода ми трябва да излиза като грешка 500, без да затормозява потребителя с описателни и разбираеми съобщения.

Решението бе просто да се смени съответната настройка за извеждане на съобщения през конфигуратура на IIS (inetmgr) -> нашия сайт -> Error Pages -> Edit Feature Settings -> Detailed errors вместо Detailed errors for local бла-бла-бла.

И се оказа, че съм забравил да вкарам настройките за базата. Headpalm.

Тук отиваме на Error Pages за проблемния сайт.

И влизаме в настройките за извеждане на грешка 500.


Където избираме Detailed errors. Това е всичко.