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

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

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

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

Previous topic - Next topic

0 Members and 2 Guests 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, разработчик "вежливо" отказал, сказал что у него всё работает хорошо :)

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