dimka3210
Легенда
Вообще разрабатывалось с целью вживления в движок, но как то я так подумал... давайте для начала его потестим.
ajax.php
#найти
#ниже добавить
#найти
#ниже добавить
includes/function.php
#найти
#ниже добавить
#найти строкой ниже
#ниже добавить
upload/includes/ucp/usercp_register.php
#найти
#ниже добавить
#найти
#заменить на
#ниже добавить
#найти
#ниже добавить
#найти
#выше добавить
upload/includes/ucp/usercp_viewprofile.php
#найти
#ниже добавить
upload/language/lang_russian/lang_admin.php
upload/templates/default/usercp_register.tpl
#найти
#ниже добавить
upload/templates/default/usercp_viewprofile.tpl
#найти
#ниже добавить
upload/templates/default/viewtopic.tpl
#найти
#ниже добавить
#найти
#ниже добавить
viewtopic.php
#найти
#ниже добавить
#найти
#ниже добавить
#найти
#ниже добавить
#найти строкой ниже
#ниже добавить
#найти
#ниже добавить
SQL
ajax.php
#найти
PHP:
'manage_user' => array('admin'),
#ниже добавить
PHP:
'del_column' => array('admin'),
#найти
PHP:
function index_data()
{
require(AJAX_DIR .'index_data.php');
}
#ниже добавить
PHP:
function del_column()
{
global $userdata;
if($userdata['user_level'] == 1){
$sql = "DELETE FROM `bb_users_column` WHERE `id`=".(int)$this->request['id'];
DB()->query($sql);
$this->response['sql'][0] = $sql;
$sql = "DELETE FROM `bb_users_column_values` WHERE `key`='" . $this->request['key'] . "'";
DB()->query($sql);
$this->response['ok'] = "Готово!";
$this->response['sql'][1] = $sql;
}
else{
$this->response['error'] = 'No level!';
}
}
includes/function.php
#найти
PHP:
if ($userdata['user_id'] == ANONYMOUS)
{
CACHE('bb_cache')->set('anonymous_userdata', $userdata);
}
#ниже добавить
PHP:
// на момент создания инсталла я не мог вспомнить зачем эти строки
// возможно их можно будет удалить
$sql = "SELECT `t1`.*, `t2`.`column_key`, `t2`.`text`, `t2`.`id` AS `column_id` FROM `bb_users_column_values` AS `t1`, `bb_users_column` AS `t2` WHERE `t1`.`user_id` = {$userdata['user_id']} AND `t2`.`column_key`=`t1`.`key` ";
$userdata['user_columns'] = DB()->fetch_rowset($sql);
#найти строкой ниже
PHP:
return $userdata;
}
#ниже добавить
PHP:
function update_user_columns($userdata, $rows){
if(is_array($rows)){
foreach($rows as $key=>$val){
$row_db = DB()->fetch_row("SELECT * FROM `bb_users_column_values` WHERE `user_id`={$userdata['user_id']} AND `key`='{$key}'");
if($row_db){
DB()->query("UPDATE `bb_users_column_values` SET `value`='{$val}' WHERE `user_id`={$userdata['user_id']} AND `key`='{$key}'");
}else{
DB()->query("INSERT INTO `bb_users_column_values` (`user_id`, `key`, `value`) VALUES ({$userdata['user_id']}, '{$key}', '{$val}')");
}
}
}
}
upload/includes/ucp/usercp_register.php
#найти
PHP:
$tp_data = array(); // данные для tpl
#ниже добавить
PHP:
$update = false;
if (isset($_POST['user_column'])) {
foreach ($_POST['user_column'] as $item) {
if (!empty($item)) {
$update = true;
break;
}
}
}
#найти
PHP:
$profile_fields_sql = $profile_fields;
#заменить на
PHP:
#ниже добавить
PHP:
unset($profile_fields_to_sql['user_column']);
$profile_fields_sql = join(', ', array_keys($profile_fields_to_sql));
#найти
PHP:
bb_die($lang['PROFILE_UPDATED']);
}
#ниже добавить
PHP:
if ($bb_cfg['user_column_enable']) {
update_user_columns($userdata, $_POST['user_column']);
}
elseif ($update && $bb_cfg['user_column_enable']) {
update_user_columns($userdata, $_POST['user_column']);
meta_refresh('index.php', 10);
bb_die($lang['PROFILE_UPDATED']);
}
#найти
PHP:
$template->assign_vars($tp_data)
#выше добавить
PHP:
if ($bb_cfg['user_column_enable']) {
if ($mode != 'editprofile') {
$sql = $sql = "SELECT * FROM `bb_users_column`";
} else {
$sql = "SELECT `bb_users_column`.*, `bb_users_column_values`.`value` FROM `bb_users_column` LEFT JOIN `bb_users_column_values` ON (`bb_users_column_values`.`key` = `bb_users_column`.`column_key`)";
}
$rows_column = DB()->fetch_rowset($sql);
foreach ($rows_column as $row) {
$template->assign_block_vars('COLUMNS', array(
'TEXT' => $row['text'],
'KEY' => $row['column_key'],
'VALUE' => ($mode == 'editprofile') ? $row['value'] : ''
));
}
}
upload/includes/ucp/usercp_viewprofile.php
#найти
PHP:
'TRAF_STATS' => !(IS_AM || $profile_user_id),
));
#ниже добавить
PHP:
foreach($profiledata['user_columns'] as $user_column){
$template->assign_block_vars('USER_COLUMNS', array(
'KEY' => $user_column['text'],
'VALUE' => $user_column['value'],
));
}
upload/language/lang_russian/lang_admin.php
PHP:
$lang['USERS_COLUMN'] = 'Колонки в профиле';
upload/templates/default/usercp_register.tpl
#найти
PHP:
<tr>
<td>{L_SKYPE}:</td>
<td><input type="text" name="user_skype" size="30" maxlength="250" value="{USER_SKYPE}" /></td>
</tr>
#ниже добавить
PHP:
<!-- BEGIN COLUMNS -->
<tr>
<td>{COLUMNS.TEXT}:</td>
<td><input type="text" name="user_column[{COLUMNS.KEY}]" size="50" maxlength="100" value="{COLUMNS.VALUE}" /></td>
</tr>
<!-- END COLUMNS -->
upload/templates/default/usercp_viewprofile.tpl
#найти
PHP:
<!-- IF LOCATION -->
<tr>
<th class="vBottom">{L_LOCATION}:</th>
<td id="user_from"><b class="editable">{LOCATION}</b></td>
</tr>
<!-- ENDIF -->
#ниже добавить
PHP:
<!-- BEGIN USER_COLUMNS -->
<!-- IF USER_COLUMNS.VALUE -->
<tr>
<th>{USER_COLUMNS.KEY}:</th>
<td>{USER_COLUMNS.VALUE}</td>
</tr>
<!-- ENDIF / USER_COLUMNS.VALUE -->
<!-- END USER_COLUMNS -->
upload/templates/default/viewtopic.tpl
#найти
PHP:
<!-- IF postrow.POSTER_JOINED --><p class="joined" title="{postrow.POSTER_JOINED_DATE}"><em>{L_LONGEVITY}:</em> {postrow.POSTER_JOINED}</p><!-- ENDIF -->
#ниже добавить
PHP:
<!-- IF postrow.USER_COLUMNS -->{postrow.USER_COLUMNS}<!-- ENDIF -->
#найти
PHP:
#ниже добавить
PHP:
viewtopic.php
#найти
PHP:
$page_cfg['load_tpl_vars'] = array(
'post_buttons',
'post_icons',
'topic_icons',
);
#ниже добавить
PHP:
function compileLayout($array){
$s = '';
if(!is_array($array))
return $s;
foreach($array as $a){
$s .= "<p class=\"joined\" title=\"{$a['key']}\"><em>{$a['text']}:</em> {$a['value']}</p>\n";
}
return $s;
}
#найти
PHP:
LIMIT
$start, $posts_per_page
";
#ниже добавить
PHP:
/* Users columns */
$array_in = array();
$i = 1;
$sql_c = "SELECT poster_id FROM " . BB_POSTS . " WHERE `topic_id`=" . $topic_id;
$result_c = DB()->fetch_rowset($sql_c);
$array_count = count($result_c);
foreach ($result_c as $item) {
$array_in[] = $item['poster_id'];
}
$array_in = implode(',' , $array_in);
//$sql_c = "SELECT `t`.`key`, `t`.`value`, `t1`.`text` FROM `bb_users_column_values` `t` LEFT JOIN `bb_users_column` `t1` ON(`t1.`key`=`t`.`column_key`) WHERE `user_id` IN (" . $array_in . ")";
$sql_c = "SELECT `t`.`key`, `t`.`value`, `t`.`user_id`, `t1`.`text` FROM `bb_users_column_values` `t` LEFT JOIN `bb_users_column` `t1` ON(`t`.`key`=`t1`.`column_key`) WHERE `t`.`user_id` IN (" . $array_in . ") AND `t1`.`viewtopic_show`=1";
$rows_c = DB()->fetch_rowset($sql_c);
//foreach()
/* Users columns {END} */
#найти
PHP:
for ($i = 0; $i < $total_posts; $i++) {
#ниже добавить
PHP:
$j = 0;
#найти строкой ниже
PHP:
$poster_id = $postrow[$i]['user_id'];
#ниже добавить
PHP:
foreach ($rows_c as $r){
if($r['user_id'] == $poster_id){
$postrow[$i]['user_columns'][$j] = $r;
}
$j++;
}
$poster = ($poster_id == ANONYMOUS) ? $lang['GUEST'] : $postrow[$i]['username'];
#найти
PHP:
'POSTER_JOINED' => ($bb_cfg['show_poster_joined']) ? $poster_longevity : '',
#ниже добавить
PHP:
'USER_COLUMNS' => (!empty($postrow[$i]['user_columns'])) ? compileLayout($postrow[$i]['user_columns']) : "",
SQL
PHP:
INSERT INTO `bb_config` (`config_name`, `config_value`) VALUES ('user_column_enable', '1');
CREATE TABLE `bb_users_column` (
`id` INT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
`column_key` VARCHAR(32) NOT NULL,
`text` VARCHAR(64) NOT NULL,
`max_length` VARCHAR(3) NOT NULL,
`viewtopic_show` INT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
CREATE TABLE `bb_users_column_values` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`key` VARCHAR(32) NOT NULL,
`value` VARCHAR(64) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;