Плагин форум / cpgforum для 1.5.* Плагин форум / cpgforum для 1.5.*
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Плагин форум / cpgforum для 1.5.*

Started by Cubatao, April 07, 2010, 08:38:18 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Cubatao

Ребят, я понимаю, что пишу не там, где надо, но плодить темы тоже не вижу смысла. мне просто совет нужен. Поставил плагин в виде форума для галереи (Forum (v2)). А при его работе вылезает ошибка. Вот и хочу узнать, может кто из здесь присутствующих уже ставил и проверял или надо спрашивать на основных форумах? Если так, то я не шибко владею английским и возникает ещё вопрос, сможете ли мне помочь в написании там о моей проблеме? В общем не ругайтесь сильно, подскажите как дальше быть.
Да и ещё. Я очень хочу, чтобы у меня в галерее был форум, а русского перевода нет. В принципе мог бы заняться вопросом русификации на досуге. Имеет смысл? Или уже есть русик?
::)

Makc666

Quote from: Cubatao on April 07, 2010, 08:38:18 AM
Ребят, я понимаю, что пишу не там, где надо, но плодить темы тоже не вижу смысла. мне просто совет нужен. Поставил плагин в виде форума для галереи (Forum (v2)). А при его работе вылезает ошибка. Вот и хочу узнать, может кто из здесь присутствующих уже ставил и проверял или надо спрашивать на основных форумах? Если так, то я не шибко владею английским и возникает ещё вопрос, сможете ли мне помочь в написании там о моей проблеме? В общем не ругайтесь сильно, подскажите как дальше быть.
Да и ещё. Я очень хочу, чтобы у меня в галерее был форум, а русского перевода нет. В принципе мог бы заняться вопросом русификации на досуге. Имеет смысл? Или уже есть русик?
::)

1ых, когда Вы пишите о любом плагине, пожалуйста, всегда приводите ссылку на тему данного плагина.
И ссылку на сообщения откуда вы этот плагин скачивали.

2ых, а зачем Вам плагин в виде форума, если можно взять тот же форум phpBB3 и использовать его?

3ых, если этот плагин лёгкий, то может быть его и имеет смысл использовать.

4ых, на этом форум есть поиск. И он работает.

5ых, и вот если в этом поиске выбрать только русский разделы, отметь опцию, чтобы искать только в заголовках тем, а потом ввести в поиск слову "форум", то ссылка номер №3 это будет тема:
Русский перевод к форуму cpgforum
http://forum.coppermine-gallery.net/index.php/topic,62366.0.html

6ых, отделяю ваше сообщение и свой ответ :)

Cubatao

Признаю свою ошибку, был не прав, искал, действительно плохо. Нашёл только в англоязычном форуме. Исправлюсь.
Ссылки на тему нет, потому как здесь он не выделен ссылкой (Forum (v2)). Видимо в разработке или как... phpBB не хочу использовать по причине того, что мне такого функционала не надо и мосты тоже наводить не надо. ::) Вот и решил использовать этот.
Суть вопроса такова. При создании темы показывает такую ошибку:
Array ( [0] => Error Number: 1364 [1] => Field 'poster_email' doesn't have a default value [2] => INSERT INTO cpg15x_fr_messages (icon, subject, body, poster_time, poster_id, poster_name, poster_ip, smileys_enabled, topic_id, board_id) VALUES ('icon1', 'Заголовок', 'Текст', 1270709596, '1', 'USER', '91.189.54.100', 1, 6, 1) )
При этом ошибка пишется простым текстом на белой странице.
Второй косяк заключается в том, что иконка темы не прорисовывается. Пишется изображение и всё. Смотрел исходный код страницы, получается, что не присваивает имя. То есть есть только .gif и всё, а имени нет.

Makc666

Quote from: Cubatao on April 08, 2010, 08:59:06 AM
Суть вопроса такова. При создании темы показывает такую ошибку:
Array ( [0] => Error Number: 1364 [1] => Field 'poster_email' doesn't have a default value [2] => INSERT INTO cpg15x_fr_messages (icon, subject, body, poster_time, poster_id, poster_name, poster_ip, smileys_enabled, topic_id, board_id) VALUES ('icon1', 'Заголовок', 'Текст', 1270709596, '1', 'USER', '91.189.54.100', 1, 6, 1) )
При этом ошибка пишется простым текстом на белой странице.

Удалите из базы данных из таблицы CPG_fr_messages строку poster_email.
Она нигде не используется.

Quote from: Cubatao on April 08, 2010, 08:59:06 AM
Второй косяк заключается в том, что иконка темы не прорисовывается. Пишется изображение и всё. Смотрел исходный код страницы, получается, что не присваивает имя. То есть есть только .gif и всё, а имени нет.
Мне устанавливать плагин не хочется, скажу Вам честно.
Поэтому, если бы Вы написали тот кусок кода, о котором идёт речь :)

В файле cpg1.5.x_plugin_forum_v2.1-1.zip\forum\forum\sources\board.php
указан путь
$newtopic['icon']                  = 'plugins/forum/forum/html/images/post/'.$first_message['icon'].'.gif';

Этот код?

Короче, смотрите...

Вот код вставки новой темы:

cpg1.5.x_plugin_forum_v2.1-1.zip\forum\forum\sources\board.php

    function newtopic() {
        include(BASE_DIR.'include'.DS.'smilies.inc.php');
        include(BASE_DIR.'include'.DS.'mailer.inc.php');
        $vars = array();$errors = array();
        $authorizer = check_model::getInstance();
        $vars['board_id']  = $this->validate->get->getInt('id');
        if (!$authorizer->is_board_id($vars['board_id'])) {
            cpg_die(ERROR, Lang::item('error.wrong_board_id'), __FILE__, __LINE__);
        }
        if (!$authorizer->can_create_topic($vars['board_id'])) {
            cpg_die(ERROR, Lang::item('error.perm_denied'), __FILE__, __LINE__);
        }
        $vars['nagavitor'] = $this->forum->get_nagavitor();
        $vars['icons']     = $this->forum->get_icons();
        $data = array('icon' => 'icon1');
        if ($this->validate->post->keyExists('submit')) {
            $data = array(
                'icon'            => $this->validate->post->getRaw('icon'),
                'subject'         => $this->validate->post->getEscaped('subject'),
                'body'            => $this->validate->post->getEscaped('body'),
                'poster_time'     => time(),
                'poster_id'       => USER_ID,
                'poster_name'     => USER_NAME,
                'poster_ip'       => Config::item('hdr_ip'),
                'smileys_enabled' => 1,
            );
            if ($data['subject'] == '') $errors[] = Lang::item('error.empty_subject');
            if ($data['icon'] == '')    $errors[] = Lang::item('error.no_msg_icon');
            if ($data['body'] == '')    $errors[] = Lang::item('error.empty_body');
            if (strlen($data['body']) > Config::item('fr_msg_max_size') && Config::item('fr_msg_max_size')) {
                $data['body'] = substr($data['body'], 0, Config::item('fr_msg_max_size'));
            }
            if (count($errors) == 0) {
                if ($authorizer->double_post()) {
                    cpg_die(ERROR, Lang::item('error.already_post'), __FILE__, __LINE__);
                } else {
                    $topic_id = $this->forum->insert_topic($vars['board_id'], $data);
                    // to-do: send notify email
                    $users = $this->forum->get_notify_user($vars['board_id'], '');
                    foreach ($users as $user) {
                        if ($user['user_id'] == USER_ID) continue;
                        $user =  $this->forum->get_user_data($user['user_id'], 'user_email');
                        // prepare email
                        $email_subject = Lang::item('board.board_new_topic'). $data['subject'];
                        $email_body = sprintf(
                            Lang::item('board.notify_email'),
                            $data['subject'],
                            Config::item('fr_prefix_url').forum::link('topic', '', $topic_id),
                            Config::item('fr_prefix_url').forum::link('topic', '', $topic_id),
                            Config::item('fr_prefix_url').forum::link('board', 'notify', $vars['board_id']),
                            Config::item('fr_prefix_url').forum::link('board', 'notify', $vars['board_id']),
                            Config::item('fr_title')
                        );
                        // send mail
                        cpg_mail($user['user_email'], $email_subject, $email_body, 'text/html', Config::item('fr_title'), Config::item('gallery_admin_email'));
                        // set send = 0
                        $this->forum->set_board_notify($vars['board_id'], 0, $user['user_id']);
                    }
                    // set notify ?
                    if ($this->validate->post->getInt('notify') === 1) {
                        $this->forum->set_topic_notify($topic_id, $this->validate->post->getInt('notify'));
                    }
                    forum::message(Lang::item('common.message'), sprintf(Lang::item('topic.new_topic_success'), $data['subject']), 'forum.php?c=topic&id='.$topic_id);
                }
            }
        }
        $vars['errors'] = $errors;
        $vars['form']   = $data;
        $this->view->render('board/newtopic', $vars);
    }


Иконка добавляется в переменную $data тут:
        if ($this->validate->post->keyExists('submit')) {
            $data = array(
                'icon'            => $this->validate->post->getRaw('icon'),


cpg1.5.x_plugin_forum_v2.1-1.zip\forum\forum\models\Forum.php

Вот продолжение команды:

    function insert_topic($board_id, $data) {
        $topic_data = array(
            'is_sticky'         => 0,
            'board_id'          => $board_id,
            'first_msg_id'      => 0,
            'last_msg_id'       => 0,
            'started_member_id' => USER_ID,
            'updated_member_id' => USER_ID,
            'poll_id'           => 0,
            'replies'           => 0,
            'views'             => 0,
            'locked'            => 0,
        );
        $this->db->insert(Config::item('TABLE_FR_TOPICS'), $topic_data);
        $topic_id = $this->db->insert_id();
        $data['topic_id'] = $topic_id;
        $data['board_id'] = $board_id;
        $this->db->insert(Config::item('TABLE_FR_MESSAGES'), $data);
        $msg_id = $this->db->insert_id();
        $this->db->update(Config::item('TABLE_FR_TOPICS'), array('first_msg_id' => $msg_id, 'last_msg_id'  => $msg_id), "topic_id='{$topic_id}'");
        $this->db->update(Config::item('TABLE_FR_BOARDS'), array('last_msg_id' => $msg_id, 'updated_msg_id'  => $msg_id), "board_id='{$board_id}'");
        $this->update_topic_stats($topic_id);
        $this->update_board_stats($board_id);
        return $topic_id;
    }


В последнем коде после первой строки
function insert_topic($board_id, $data) {

добавьте код:
print_r($data);
exit;


И попробуйте создать тему тестовую.
И смотрите на вывод array, указан там номер иконки или нет.

Cubatao

Makc666, огромное спасибо уже на этих ответах. Я не хочу никого напрягать, но если бы я разбирался в SQL и PHP как вы, например, то меня бы здесь не было. ;)
poster_email удалил, теперь за следуещее значение цепляется.
Array ( [0] => Error Number: 1364 [1] => Field '[b]modified_name[/b]' doesn't have a default value [2] => INSERT INTO cpg15x_fr_messages (icon, subject, body, poster_time, poster_id, poster_name, poster_ip, smileys_enabled, topic_id, board_id) VALUES ('icon1', 'Тема', 'Текст', 1270737223, '1', 'User', '109.174.2.5', 1, 7, 1) ) При этом, я пытался в poster_email выставить значение по умолчанию (пришлось тип сменить на varchar), тогда ошибка вылазит так же по следующему элементу, то есть по modified_name.
Если имеет значение, то
System    Windows NT K7-V 6.1 build 7600
PHP Version 5.2.12
Версия сервера SQL: 5.0.67-community-nt
Версия MySQL-клиента: 5.0.51a

По иконке... А в файле \forum\forum\helpers\forum_helper.php вот этот код не иконку "создаёт"?
function generate_message_icons($name, $icons = array(), $default = 'icon1') {
        $html .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">".PHP_EOL;
        $html .= "<tr>".PHP_EOL;
        $count = 0;
        foreach ($icons as $icon) {
            $count++;
            if ($default == $icon['filename'])
                $html .= "<td><input type=\"radio\" name=\"[$name]\" value=\"[$icon['filename']]\" checked=\"checked\">&nbsp;<img src=\"plugins/forum/forum/html/images/post/[$icon['filename']].gif\" title=\"{$icon['title']}\" alt=\"\" />".PHP_EOL;
            else
                $html .= "<td><input type=\"radio\" name=\"{$name}\" value=\"{$icon['filename']}\">&nbsp;<img src=\"plugins/forum/forum/html/images/post/{$icon['filename']}.gif\" title=\"{$icon['title']}\" alt=\"\" /></td>".PHP_EOL;
            if ($count % 16 == 0 && $count != 1) $html .= "</tr><tr>".PHP_EOL;
        }
        $html .= "</tr>".PHP_EOL;
        $html .= "</table>".PHP_EOL;
        return $html;
    }

А кусок кода я имел ввиду из того, что можно в Опере посмотреть выбрав в меню "Исходный код". Но путь этот.
<td><img border="0" src="plugins/forum/forum/html/images/post/.gif" /></td>

То что вы посоветовали сейчас попробую реализовать.

Cubatao

#5
Итак, то, что вы предложили выполнил.
Array ( [icon] => icon7 [subject] => ТЕСТОВАЯ [body] => ТЕКСТ [poster_time] => 1270739054 [poster_id] => 1 [poster_name] => USER [poster_ip] => 109.***.*.* [smileys_enabled] => 1 )
Насколько я понимаю, имя файла иконки присваивается правильно? Тогда почему в HTML-файл идет только .gif?

Cubatao

Makc666 огромное спасибо за помощь!! Но всё решилось иначе. Надо было раньше Гуглом воспользоваться. Собственно вот решение. Мне помогло. Причём и с иконкой тоже вопросов не возникает. 8) Правда меня смущает такое положение дел. Больше это ничем не грозит? ???

Cubatao

Возникла другая маленькая проблема. При нажатии кнопки Enter (при переводе строки) в тексте сообщения зачем-то подставляет символы \r\n. Помогите, пожалуйста, решить этот вопрос.

Makc666

Quote from: Cubatao on April 08, 2010, 05:08:12 PM
Итак, то, что вы предложили выполнил.
Array ( [icon] => icon7 [subject] => ТЕСТОВАЯ [body] => ТЕКСТ [poster_time] => 1270739054 [poster_id] => 1 [poster_name] => USER [poster_ip] => 109.***.*.* [smileys_enabled] => 1 )
Насколько я понимаю, имя файла иконки присваивается правильно? Тогда почему в HTML-файл идет только .gif?
Это значит значения формируются правильно.
Дальше по коду данные значения заносятся в базу данных.
Соответственно, если сообщения появляется в форуме, то вам нужно заглянуть в базу данных и посмотреть в таблице для данного сообщения, есть ли там в поле иконки данное значение icon7.

Makc666

#9
Quote from: Cubatao on April 08, 2010, 06:18:44 PM
Makc666 огромное спасибо за помощь!! Но всё решилось иначе. Надо было раньше Гуглом воспользоваться. Собственно вот решение. Мне помогло. Причём и с иконкой тоже вопросов не возникает. 8) Правда меня смущает такое положение дел. Больше это ничем не грозит? ???
Я, если честно, не стал вчитываться в это решение.
Но то, что вы сделали, в корне не верно.
Так делать не нужно.

Поле `modified_name` используется при редактировании сообщения. Значит оно нужно.

Смотрите.

Я Вам объясняю.

Когда Вы устанавливали плагин форума, вы создавали базу данных.

Одна из частей базы данных - это таблица сообщений.

Она имеет такую структуру:
CREATE TABLE IF NOT EXISTS `CPG_fr_messages` (
 `msg_id` int(10) NOT NULL auto_increment,
 `topic_id` mediumint(8) NOT NULL default '0',
 `board_id` smallint(5) NOT NULL default '0',
 `poster_time` int(10) NOT NULL default '0',
 `poster_id` mediumint(8) NOT NULL default '0',
 `modified_id` int(10) NOT NULL default '0',
 `subject` tinytext NOT NULL,
 `poster_name` tinytext NOT NULL,
 `poster_email` tinytext NOT NULL,
 `poster_ip` tinytext NOT NULL,
 `smileys_enabled` tinyint(4) NOT NULL default '1',
 `modified_time` int(10) NOT NULL default '0',
 `modified_name` tinytext NOT NULL,
 `body` text NOT NULL,
 `icon` varchar(16) NOT NULL default 'xx',
 PRIMARY KEY  (`msg_id`)
) TYPE=MyISAM;


Видите, к примеру, у полей:
 `poster_id` mediumint(8) NOT NULL default '0',
 `modified_id` int(10) NOT NULL default '0',

есть значение по умолчанию default '0'.

А у полей:
 `modified_name` tinytext NOT NULL,
 `body` text NOT NULL,

нет такого значения.

Далее...

Как я приводил код выше в своих сообщениях, то при написании сообщения в базу данных с помощью строки:
$this->db->insert(Config::item('TABLE_FR_MESSAGES'), $data);
передаются значения из массива $data.

Данный массив содержит значения:
           $data = array(
               'icon'            => $this->validate->post->getRaw('icon'),
               'subject'         => $this->validate->post->getEscaped('subject'),
               'body'            => $this->validate->post->getEscaped('body'),
               'poster_time'     => time(),
               'poster_id'       => USER_ID,
               'poster_name'     => USER_NAME,
               'poster_ip'       => Config::item('hdr_ip'),
               'smileys_enabled' => 1,
           );


Если из кода структуры базы данных (первый блок кода в этом сообщении) мы выкинем все строчки с параметром default '*****'
+
строку
`msg_id` int(10) NOT NULL auto_increment,
(т.к. auto_increment - это увеличение значения поля на +1 каждый раз при его добавлении),
то на мы получим:
 `subject` tinytext NOT NULL,
 `poster_name` tinytext NOT NULL,
 `poster_email` tinytext NOT NULL,
 `poster_ip` tinytext NOT NULL,
 `modified_name` tinytext NOT NULL,
 `body` text NOT NULL,


Если вы сопоставите названия данных полей с названиями тех полей, которые заносятся через массив $data, то вы увидите, что в строчках выше названия полей:
 `poster_email` tinytext NOT NULL,
 `modified_name` tinytext NOT NULL,

нигде не фигурируют.

Далее вы должны понимать, что когда какой-то скрипт даёт команду базе данных заполнить какую-то строку с полями, то база данных должна знать, чем их заполнять.

При этом в строке нельзя часть полей заполнить, а часть нет.

Если база данных не получает от скрипта значения, то она смотрит, а нет ли у неё указаний заполнять данное поле значением по умолчанию.

У некоторых наших полей такое указание есть - это default '0'.

А вот у поля `modified_name` такого значения нет.
И при этом скрипт никакие значения базе данных тоже не передал.

Поэтому вам база данных говорит о том, что у неё нет значения по умолчанию, а данные ей не прислали.

Поле `poster_email` мы удалили, потому что я не смог найти нигде в скрипте данные, которые бы использовали бы это поле.

С полем `modified_name` нужен другой подход.

Вам нужно было всего лишь в phpMyAdmin задать данному полю значение по умолчанию '0'.

Makc666

Quote from: Cubatao on April 08, 2010, 06:51:20 PM
Возникла другая маленькая проблема. При нажатии кнопки Enter (при переводе строки) в тексте сообщения зачем-то подставляет символы \r\n. Помогите, пожалуйста, решить этот вопрос.
Это больше похоже на проблемы браузера.
Попробуйте другой браузер.

Cubatao

Quote from: Makc666 on April 10, 2010, 02:26:11 AM
Вам нужно было всего лишь в phpMyAdmin задать данному полю значение по умолчанию '0'.
Я пробовал, но для значений типа TEXT и подобных СКУЛ этого делать не хочет. А там заявлено именно текстовое значение.

SQL-запрос:
ALTER TABLE `cpg15x_fr_messages` CHANGE `modified_name` `modified_name` TINYTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0'

Ответ MySQL: 
#1101 - BLOB/TEXT column 'modified_name' can't have a default value
То же самое писал он мне и с полем 'poster_email'.

Про проблему с дополнительными символами... И в Опере, и IE эти символы есть. Я так понял это символы переноса строки. Потму что, если писать всё одной строкой, то всё в порядке, только перевёл строку, сразу они.

Может тогда заменить на другй тип. Но тут я даже не представляю на какой...

Cubatao

Ребята, с символами вопрос ещё открыт!!! Хелп ми, плиз. :'(

Есть ещё вопрос. Настроил форум так, чтобы гости не могли его читать. Соответственно, при попытке чтения темы предлагается залогиниться. Ввожу всё, что надо, получаюсь залогиненым, но выдаётся ошибка следующего содержания:
Выбранный альбом/фото не существует! То есть он не открывает ту тему, с которой я логинился. Подскажите, пожалуйста, как и возможно ли это исправить?

Makc666

Quote from: Cubatao on April 10, 2010, 05:46:31 AM
Я пробовал, но для значений типа TEXT и подобных СКУЛ этого делать не хочет. А там заявлено именно текстовое значение.

SQL-запрос:
ALTER TABLE `cpg15x_fr_messages` CHANGE `modified_name` `modified_name` TINYTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0'

Ответ MySQL: 
#1101 - BLOB/TEXT column 'modified_name' can't have a default value
То же самое писал он мне и с полем 'poster_email'.
Хм, согласен с MySQL, это я ошибся. По умолчанию текст правда нельзя задать :(
Если тогда выставление для этих полей в свойствах флага NULL тоже не помагает, значит нужно дописывать/изменять сам скрипт.

Makc666

Quote from: Cubatao on April 25, 2010, 08:33:25 AM
Ребята, с символами вопрос ещё открыт!!! Хелп ми, плиз. :'(

Есть ещё вопрос.

Я, к сожалению, чтобы дальше тема сильно не развивалась дальше, вынужден сказать следующее. Вам нужно обращаться к разработчикам данного плагина.
Исправлять ошибки другого продукта, которые имеет косвенно отношение к Coppermine, да ещё в русском разделе этого форума - это бред и в корне не верно.

Ошибки нужно доносить до разработчиков, а не до русскоязычного населения. У меня такой возможности, доносить всё и вся до разработчиков, нет.

abeka

А если разработчикам нет дела до этой ошибки?

Почитал форум разработчика, там 4 человека просят разобраться с \n\r, разработчик "вежливо" отказал, сказал что у него всё работает хорошо :)

Так что придётся решать русскоязычному населению :) у меня таже проблема :(