/var/log/life.log
Блог программиста из солнечной Бурятии

Скрытие пункта меню по умолчанию

Случается так, что нет необходимости показывать в меню пункт по умолчанию, а бывает и необходимость убрать этот пункт меню. Но в Joomla обязательно должен быть пункт меню по умолчанию, чтобы избавится от показа оного, нужно в файле modules/mod_mainmenu/helper.php в начале цикла

1
2
3
4
while (count($rows) && !is_null($row = array_shift($rows)))
{
...
}

добавить

1
if ($row->id == 1) continue;

в данном случае 1 это ItemId пункта меню, который необходимо скрыть.
UPD:
Чтобы в Joomla 1.7 скрыть главную нужно после

1
2
3
4
{
    unset($items[$i]);
    continue;
}

Добавить

1
2
3
4
if ($item->id == 1){
    unset($items[$i]);
    continue;
}

c99madshell

Как оказалось функционала этого шелла мне недостаточно, да и были в нём баги. Баг в выставлении прав на файлы. Новые значения прав на файл вычислялись правильно, но в результате получалась строка вида “0xxx” и это строка передавалась как аргумент в функцию chmod. В то время как вторым параметром функции должно быть число, и php благополучно преобразовывал строку в число…в десятичной системе счисления, вот и вся проблема. После исправления ещё добавил рекурсивную возможность смены прав, т.к. пришлось работать с сайтом к которому не то-что по ssh нет доступа, но и по фтп, и у всех загружаемых файлов выставляются права 600, и соответственно если это картинки то просмотреть их невозможно, незнаю что за паранойя у админа. Также добавил возможность переименования файлов/папок, и заменил $HTTP_POST_FILES на $_FILES для загрузки файлов
[download id=”4″]

hack tools

По работе приходится часто что-то менять в скриптах либо в бд на сайтах, к которым есть доступ только по ftp, а phpmyadmin где-то в панели управления к которой не всегда есть доступ. В таких случаях помогают я полезных скрипта — MySQL RST/GHC Manager для работы с БД и c99madshell – Web Shell.
MySQL RST/GHC Manager – всем хорош, к тому же был переписан на post запросы Античатом, но были в нём недочёты: правка данных, если в них присутствовал символ ” ‘ ” и ‘ ” ‘, не происходила либо происходила не правильно, к тому же если в поле длинной более 40 символов был тег <textarea>, то гуи разъезжалось, всё это я поправил и сжал, так что размер его составляет 30кб против 113кб
[download id=”2″]
С c99madshell всё гораздо проще, там багов(вроде) нет, но доставляло неудобство то, что имена в левой части, а управляющие элементы в правой части экрана и на 21” мониторе сложновато определять к какому файлу относится действие, я добавил выделение цветом строки таблицы, на которую наведена мышь, стало гораздо удобнее, и чуток уменьшил размер
[download id=”3″]

anti iframer

Достался мне похаканый сайтик на joomla, который был жестоко проифрэймлен. Симптомы такие, во всех папках до 3-го уровня вложенности, где есть один из файлов index.html, index.php, default.php добавлен .htaccess и втсавлены iframe в эти файлы. Пришлось писать “удалятор” этих пакостей. Т.к. это joomal то index.html используются лишь для того, чтобы запретить просмотр содержимого каталогов на сайте, то их я просто очищаю, а из остальных пришлось гадость вырезать: Читать полностью »

Скрипт для создания шаблона для вышивания(вязания)

Скрипт помогает создавать шаблон рисунка для вышивания или вязания. После нажатия кнопки “Сформировать шаблон”, будет создан рисунок с шаблоном, который можно распечатать и пользоваться.
исходный код pattern.php

Работа тестировалась только в Opera и FireFox, в IE по идее не должно работать.
Список изменений
v0.1.0 Базовая реализация.

ODBC, MSAccess и прочая нечисть

Под FreeBSD я что-то не решился этим заниматься, ну тат вроде как замена винде и делать пришлось. Задача такова: есть прога на java, которая через ODBC общается с MSAccess базой, вот это извращение нужно было заставить работать под ubuntu. Для начала были установлены unixodbc и mdbtools. Поле их установки никаких ярлыков в меню не появилось, команды аля unixodbc mdbtools не прокатили, через поиск надыбыл /usr/share/menu/unixodbc-bin а то туда уже ODBCConfig, надо сказать толку от этой гуишной оболочки не много, так и не разобрался как нормально что там сделать, всё ошибки выдавал, опытным путём и гуглом было выяснено, что все что надо находится в /etc/odbc.ini и /etc/odbcinst.ini. В odbcinst.ini находились настройки драйвера MSAccess которые мне всётаки удалось запихнуть. а в odbc.ini настройки System DNS где собственно и должно находится описалово конекта к базе, ничего сложного там не было

1
2
3
4
5
6
7
8
[myConnection]
Description = Microsoft AccessTS
Driver = MDB1
Database = /home/vampirus/db1.mdb
Servername = localhost
UserName =
Password =
Port = 5432

помойму только Driver,Database тут нужны но раз работает и так то оставил)
проверил работу

1
2
isql -v myConnection
 select * from Realtion

работает, ну думаю зашибись, так просто, вечером проверю, как там java с этим подружится, и пошёл на работу.
Вечером.
про попытке запуска прога выпадала с исключением, ещё бы ведь я почему-то решил что будет лучше если поставить Open-jdk вмето sun’овского. Ладно поставил сановкий jdk. И тут меня ждал сюрприз, видимо драйвер корявый или что, но при любом раскладе было Result Set Type is not supported. Получается от MSAccess надо было отказыватся, ничего лучше mysql я не придумал. Надо сказать ставить mysql php apache я не хотел, т.к. для этих целей я хотел поставить FreeBSD на старый комп. Ну ладно думаю пригодится mysql ещё для чего-нибудь. т.к. php ставить не хотелось, решил ну попробую через perl не сложно должно быть, но модуля(или как он там?) DBD:ODBC не оказалось, про попытке его доставить Makefile.pl выдал какие то ошибки, разбираться в которых небыло никакого желания. потом для импорта, решил поробовать mdbtools, не зря же ставил, но на сколько я смог понять импорт шёл только в csv, ну думаю тут на python попробую, благо с csv я на нём уже работал, но тут меня ждала подлянка, для работы с mysql надо было что-то доставить, а было уже лень. Последней попыткой была kexi под FreeBSD она вроде в mysql мне перекинула(или нет, непомню), но тут она отказывалась это делать и падала.
Уторо вечера мудренее.
Надо было сразу поставить php и не выпендриваться, ах да ещё пришлось качнуть драйвер odbcmysql и настроить, но это мелочи. скриптик простой ничего сложного

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$r = odbc_connect("myConnection","","");
$q = odbc_exec($r,"select * from Relation");
$conn = mysql_connect("localhost","root","password");
mysql_selectdb("db1");
while(odbc_fetch_row($q)){
    $PS=odbc_result($q,"PS");
    $Parg = odbc_result($q,"Parg");
    $X = odbc_result($q,"X");
    $R = odbc_result($q,"relation");
    $Y = odbc_result($q,"Y");
    mysql_query("INSERT INTO Relation (PS,Parg,X,relation,Y) VALUE ('$PS','$Parg','$X','$R','$Y')");
}
?>

и вот я с надежной запускаю прогу, а она мне идите лесом, таблицы RELATION нету, как так? есть она говорю(ну не привык я ещё что регистр имеет значение), ладно переименовываю таблицу в RELATION, а она мне нету таблицы Relation, ах ты су… @= во что значит делат прогу в винде группе человек. Переведя всё к единому регистру, java всё скушала и начала работать)

backup

Для вордпресса есть хороший плагин, который делает бэкап раз в час, день неделю, это уж как настроить, и есть возможность отсылки его на мыло. Решил сделать такое же для phpbb3, не плагин конечно, а так скриптик. Вот что получилось:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/acp/acp_database.' . $phpEx);
include($phpbb_root_path . 'includes/functions_install.' . $phpEx);

$time = time();
$filename = 'backup_' . $time . '_' . unique_id();
$mail = 'backup@mail.com';
$subj = 'backup';
$tables = get_tables($db);
$ext = new mysql_extractor(false, true, 'gzip', $filename, $time);
$ext->write_start($table_prefix);
foreach ($tables as $table_name){
    $ext->write_table($table_name);
    $ext->write_data($table_name);
}
$ext->write_end();

//send mail
$path = $phpbb_root_path . 'store/' . $filename . '.sql.gz';
$boundary = "==PHPBB-BY-VAMPIRUS-".md5(time());
$fp = fopen($path,"rb");
$file = fread($fp,filesize($path));
fclose($fp);
$data = chunk_split(base64_encode($file));
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary="$boundary"\n";
$headers .= 'From: vampirus@site.ru'. "\n";
$message = "blabla\nThis is a multi-part message in MIME format.\n\n" .
                    "--{$boundary}\n" .
                "Content-Type: text/plain; charset=koi8-r\n" .
                "Content-Transfer-Encoding: 8bit\n\n" .
                "backup\n\n";
$message .= "--{$boundary}\n" .
                "Content-Type: application/octet-stream;\n" .
                " name="{$filename}.sql.gz"\n" .
                "Content-Disposition: attachment;\n" .
                " filename="{$filename}.sql.gz"\n" .
                "Content-Transfer-Encoding: base64\n\n" .
                $data . "\n\n" .
                "--{$boundary}--\n";
mail($mail,$subj,$message,$headers);
unlink($path);
?>

естественно на хосте должно быть установлено расширение zlib для php.
Осталось теперь только в cron задание добавить. Бэкапы шлуются на мыло на гмэйле, помойму самый лучший вариант).