1

Тема: Личные сообщения

Тема на оф. сайте - [MOD] PMv3 - 1.7.4 / 1.7.6
С помощью этого мода ваши пользователи смогут обмениваться личными сообщениями на сайте. Возможности мода:

управление в админке

  • включить/отключить систему Личных сообщений

  • разрешить/запретить HTML и BBCODE в сообщениях

  • разрешить/запретить Смайлики в сообщениях

  • бан определённого пользователя

управление в профиле пользователя

  • включить/отключить уведомление по эл.почте о новых сообщениях

  • включить/отключить всплывающее уведомление о новых сообщениях

  • включить/отключить звуковой сигнал при получении новых сообщений (если проинсталлировано)

Внимание! файлы в архиве и код приведённый ниже немного отличаются от оф.версии.

1. Разпаковываем архив, заливаем файлы на сервер, сохраняя иерархию.
Файл lang_russian_main.txt заливать не нужно, он пригодится во время установки.

2. файл includes/constants.php

найти

define('WORDMATCH_TABLE', $table_prefix.'wordmatch');

после добавить

define('PM_TABLE', $table_prefix.'pm');
define('PM_RDLT', 0);
define('PM_SDLT', 1);
define('PM_SENT', 2);
define('PM_UNREAD', 3);
define('PM_USDLT', 4);

3. модификация БД
- сделать резервную копию БД
- добавить новые таблицы с помощью pm_install_v3.php
- после удачной инсталляции удалить файл pm_install.php


4. файл logout.php

найти

if (!ereg("index.php", $url) && !ereg("lightbox.php", $url) && !ereg("login.php", $url) && !ereg("register.php", $url) && 

!ereg("member.php", $url)) {
  redirect($url);
}

заменить на

if (!ereg("index.php", $url) && !ereg("lightbox.php", $url) && !ereg("login.php", $url) && !ereg("register.php", $url) && 

!ereg("member.php", $url) && !ereg("pm.php", $url))  {
  redirect($url);
}

5. файл admin/settings.php

найти

show_form_footer($lang['save_changes'], "", 2);

перед этим добавить

  show_table_separator($setting_group[XX], 2, "setting_group_XX");
  show_setting_row("pm", "radio");
  show_setting_row("pm_html", "radio");
  show_setting_row("pm_bbcode", "radio");
  show_setting_row("pm_img", "radio");
  show_setting_row("pm_inbox");
  show_setting_row("pm_sentbox");
  show_setting_row("pm_outbox");

найти в этом файле последний блок, начинающийся с
show_table_separator($setting_group[
к числу в квадратных скобках прибавить 1
заменить XX в нашем коде на получившееся число.
запомнить число XX, оно нам ещё понадобится


6. файл lang/russian/admin.php

перед ?> добавить

/*-- Setting-Group XX --*/
$setting_group[XX]="Личные Сообщения";
$setting['pm'] = "Разрешить Личные Сообщения";
$setting['pm_html'] = "Разрешить использовать HTML в сообщениях";
$setting['pm_bbcode'] = "Разрешить использовать BBCODE в сообщениях";
$setting['pm_img'] = "Разрешить использовать Смайлы в сообщениях";
$setting['pm_inbox'] = "Входящие : макс. количество сообщений<span class=\"smalltext\"><br />если<b>0</b> - без 

ограничения</span>";
$setting['pm_sentbox'] = "Отправленные : макс. количество сообщений<span class=\"smalltext\"><br />если<b>0</b> - без 

ограничения</span>";
$setting['pm_outbox'] = "Исходящие : макс. количество сообщений<span class=\"smalltext\"><br />если <b>0</b> - без 

ограничения</span>";

заменить ХХ на ваше число из предыдущего шага


7. файл includes/functions.php

найти

  else {
    $user_name = format_text($lang['userlevel_guest'], 2);
    $user_name_link = $user_name;
  }

после этого добавить

// Mod PM Start
     if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_info['user_id'] != $image_row['user_id'] && 

$image_row['user_id'] != -1 && $image_row['owner_pm_ban'] == 0) {
     $details_user_pm = "<a 

href=\"".$site_sess->url(ROOT_PATH."pm.php?action=new&user_id=".$image_row['user_id']."&username=".$image_row['user_name'])."\"><

img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_user_pm_alt']."\" /></a>";
      } elseif ($user_info['user_level'] == GUEST){
     $details_user_pm = "<img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_hinweis']."\" />";
     }else {
     $details_user_pm = "";
     }
// Mod PM END

7.1 найти

  $site_template->register_vars(array(
    "image_id" => $image_row['image_id'],

после этого добавить

// Mod PM Start
    "details_user_pm" => $details_user_pm,
// Mod PM END

7.2 найти

function format_text($text, $html = 0, $word_wrap = 0, $bbcode = 0, $bbcode_img = 0) {

перед этим добавить

//-----------------------------------------------------
//--- Stat PM / Smilies  ------------------------------
//-----------------------------------------------------
function smiles($text,$enablesmilies = 1) {
  global $smileyfromcache, $smileytocache;
  $imagesdir = TEMPLATE_PATH."/smiles";
  if(gettype($smileyfromcache) != "array") {
   $smilesfrom = get_smiles();
   foreach ($smilesfrom as $key => $val) {
            $smileyfromcache[] ='/(((>[^<]*)|(^[^<]*))([\s\n\r]|^|<br( \/)?[>]))('.str_replace('|','\|', quotemeta(str_replace("<", "&lt;", str_replace(">", 

"&gt;", str_replace("\/", "\\\/", $key))))).')/s';
            $smileytocache[] = "\\1<img src=\"$imagesdir/$val.gif\" border=\"0\" alt=\"\" />";
   }
  }
  if ($enablesmilies) {
   $text = parsesmilies($text);
  }
  return $text;
}

function parsesmilies($text) {
  global $smileyfromcache, $smileytocache;
  $oldtext = "";
  while($oldtext != $text) {
   $oldtext = $text;
   $text = preg_replace($smileyfromcache, $smileytocache, $text);
  }
  return $text;
}

function get_smiles(){
  $smilesfrom = array(
      ":-))" => "very_happy",
      ":)" => "happy",
      "X(" => "angry",
      ":B" => "nerd",
      ":lol:" => "very_happy",
      ":D" => "big_smile",
      ":O" => "surprised",
      ":o" => "surprised",
      ";)" => "wink",
      ":wink:" => "wink",
      ":(" => "sad",
      ":*(" => "very_sad",
      ":cry:" => "very_sad",
      ":confused:" => "confused",
      ":shy:" => "embarrassed",
      ":vicious:" => "vicious",
      ":|" => "undecided",
      "(:" => "happy",
      ":P" => "tongue",
      ":p" => "tongue",
      "B)" => "cool",
      ":pig:" => "pig",
      ":X" => "in_love",
      "|)" => "asleep",
      "=;" => "talk_to_hand",
      "0:)" => "angel",
      ":devil:" => "devil",
      ":clown:" => "clown",
      "3:O" => "cow",
      "3:o" => "cow",
      ":monkey:" => "monkey",
      "(~~)" => "pumpkin",
      "[-(" => "huff",
      "*:)" => "bulb",
      ":$" => "shhh",
      "b(" => "beat_up",
      ":E:" => "peace",
      ":gr" => "sick",
      "=*" => "kiss",
      ";;)" => "flirt",
      ":?)" => "what",
      ":mad:" => "mad",
      ":R:" => "praying",
      "[-x" => "nono",
      "[:D]" => "hugging",
      ":dance:" => "dancing",
      "=D" => "applause",
      "(?)" => "thinking",
      ":^o" => "liar",
      "@)" => "hypnotized",
      "8|" => "rolleyes",
      "8}" => "crazy",
      "?|" => "tired",
      "=p~" => "drooling",
      "$)" => "money",
      ":whistle:" => "whistling",
      "#o" => "doh",
      ":alien:" => "alien2",
      ":S" => "scared"
  );
   return $smilesfrom;
}

function get_smiles_text() {
    global $lang;
     $smiles_text = "";
     $smilesfrom = get_smiles();
     $val_old = "";
     $i = 0;
     $val_old = array();
        foreach ($smilesfrom as $key => $val) {
           if (!in_array($val, $val_old)) {
              $smiles_text .= "<a href=\"javascript:emoticon('$key')\"><img src=\"".TEMPLATE_PATH."/smiles/$val.gif\" border=\"0\" 

alt=\"$key\" /></a> ";
            }
            $val_old[] = $val;
            $i++;
            if ($i > 15) {
//          $smiles_text .= "<a href=\"smiles.php\" onclick=\"window.open('smiles.php', '_4imagessmilies', 

'HEIGHT=310,resizable=yes,scrollbars=yes,WIDTH=225');return false;\" 

target=\"_4imagessmilies\">&nbsp;&nbsp;&nbsp;".$lang['all']."</a>";
            return $smiles_text;
            }
   }
   return $smiles_text;
}
//-----------------------------------------------------
//--- SMILIES END  ------------------------------------
//-----------------------------------------------------
//-----------------------------------------------------
//--- Start PM  ---------------------------------------
//-----------------------------------------------------

function strip_brackets($text){
  global $lang;
   $code_entities_match = array('#<#', '#>#', '#"#', '#:#', '#\[#', '#\]#', '#\(#', '#\)#', '#\{#', '#\}#');
   $code_entities_replace = array('&lt;', '&gt;', '&quot;', ':', '[', ']', '(', ')', '&#123;', '&#125;');
  return preg_replace($code_entities_match, $code_entities_replace, $text);
}
function thumb($id, $dim = 50, $align = "bottom") {
  global $site_db, $user_info, $site_sess;
  if (empty($dim)) $dim = 50;
  if (empty($align)) $align = "bottom";
  $text = "";
  $sql = "SELECT image_name, image_id, image_media_file, image_thumb_file, cat_id
          FROM ".IMAGES_TABLE."
          WHERE image_id = ".$id;
  if ($row = $site_db->query_firstrow($sql)) {
    if (!get_file_path($row['image_thumb_file'], "thumb", $row['cat_id'], 0, 0)) {
      $file_src = ICON_PATH."/".get_file_extension($row['image_media_file']).".gif";
    }else{
      $file_src = get_file_path($row['image_thumb_file'], "thumb", $row['cat_id'], 0, 1);
    }
    $image_info = @get_imagesize($file_src, $info);
    $width = $image_info[0];
    $height = $image_info[1];
    $wh = get_resize($image_info[0], $image_info[1], $dim, $dim);
    $text = "<a href=\"".$site_sess->url(ROOT_PATH."details.php?".URL_IMAGE_ID."=".$row['image_id'])."\"><img width = \"".$wh[0]."\" 

height=\"".$wh[1]."\" src=\"".$file_src."\" alt=\"".str_replace("\"", "&quot;", $row['image_name'])."\" align=\"".$align."\" border=\"1\" /></a>";
  }
  return $text;
}

function bb_code($text){
  global $lang, $config;
  $text = strip_brackets($text);
  $text = str_replace("  ", "&nbsp; ", $text);
// now Replace 2 spaces with " &nbsp;" to catch odd #s of spaces.
   $text = str_replace("  ", " &nbsp;", $text);
// Replace tabs with "&nbsp; &nbsp;" so tabbed code indents sorta right without making huge long lines.
   $text = str_replace("\t", "&nbsp; &nbsp;", $text);

  $text = "<div class=\"codehead\"><b>".$lang['code'].":</b><div class=\"codeblock\">".stripslashes($text)."</div></div>";
  return $text;
}

function format_text_pm($text, $html = 0, $word_wrap = 0, $bbcode = 0, $bbcode_img = 0, $smiles = 1, $brackets = 1){
  global $lang, $config;
  $text = trim($text);

  if ($html == 0 || $html == 2) {
//  $text = str_replace("&lt;", "&amp;lt;", $text);
//  $text = str_replace("&gt;", "&amp;gt;", $text);
    $text = str_replace("<br>", "\r", $text);
    $text = str_replace("<br />", "\n", $text);
    $text = str_replace("<", "&lt;", $text);
    $text = str_replace(">", "&gt;", $text);
    $text = str_replace('"', "''", $text);

    $text = safe_htmlspecialchars($text);
  }

  // Replace { to prevent parsing in templates
  global $site_template;
  $text = preg_replace(
    '='.preg_quote($site_template->start).'([A-Z0-9_]+)'.preg_quote($site_template->end).'=Usi',
    '&#123;\1&#125;',
    $text
  );

  if ($html !== 2) {
    $text = nl2br(trim($text));
    $text = replace_url($text);
  }

//$text = preg_replace("/(\[)(php)(])(\r\n)*(.*)(\[\/php\])/esiU", "phphighlite('\\5')", $text);
  if ($config['pm_img']) {
  $text = ($smiles) ? smiles($text) : $text;
  }
  if ($bbcode == 1) {
      $text = preg_replace("/\[php\](.*?)\[\/php\]/esi", "phphighlite('\\1')", $text);
      $text = preg_replace("/\[code\](.*?)\[\/code\]/esi", "bb_code('\\1')", $text);
  }
  if ($brackets) {
      $entities_match = array('{', '}');
      $entities_replace = array('&#123;', '&#125;');
    $text = str_replace($entities_match, $entities_replace, $text);
  }

  if ($bbcode == 1) {
      $text = preg_replace("/\[thumb=([0-9]+)(,([0-9]+)?)?(,([a-zA-Z]+))?\]/esi","thumb('\\1','\\3','\\5')",$text);
      $search_array = array(
         "/\[b\](.*?)\[\/b\]/si",
         "/\[i\](.*?)\[\/i\]/si",
         "/\[u\](.*?)\[\/u\]/si",
         "/\[email\](.*?)\[\/email\]/si",
         "/\[email=(.*?)\](.*?)\[\/email\]/si",
         "/\[quote=(.*?)\](.*?)/si",
         "/\[quote\](.*?)/si",
         "/\[\/quote\]/si",
         "/\[url=(.*?)\](.*?)\[\/url\]/si",
         "/\[url\](.*?)\[\/url\]/si",
         "/\[urlb=(.*?)\](.*?)\[\/urlb\]/si",
         "/\[urlb\](.*?)\[\/urlb\]/si",
         "/\[sub\](.*?)\[\/sub\]/si",
         "/\[sup\](.*?)\[\/sup\]/si",
         "/\[color=(.*?)\](.*?)\[\/color\]/si",
         "/\[size=(.*?)\](.*?)\[\/size\]/si",
         "/\[tt\](.*?)\[\/tt\]/si",
         "/\[s\](.*?)\[\/s\]/si",
         "/\[move\](.*?)\[\/move\]/si",
//       "/\[align=(.*?)\](.*?)\[\/align\]/si",
         "/\[align=(.*?)\](.*?)\[\/align\](.<br \/>)?/si",
         "/\[font=(.*?)\](.*?)\[\/font\]/si",
         "/\[shadow=(.*?)\,(.*?)\,(.*?)\](.*?)\[\/shadow\]/si",
         "/\[glow=(.*?)\,(.*?)\,(.*?)\](.*?)\[\/glow\]/si",
         "/\[quote2=(.*?)\,(.*?)(\(.*?\))?\](.*?)/si",
         "/\[\/quote2\]/si",
         "/(\[)(list)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/list)(((=)(\\4)([^\"']*)(\\4]))|(\]))/siU",
         "/(\[)(list)(])(.*)(\[\/list\])/siU",
         "/(\[\*\])/siU",
         "/(\[\/\*\])/siU",
         "/javascript:/si",
         "/about:/si"
      );
      $replace_array = array(
         "<b>\\1</b>",
         "<i>\\1</i>",
         "<u>\\1</u>",
         "<a href=mailto:\\1>\\1</a>",
         "<a href=mailto:\\1>\\2</a>",
         "<div class=\"quotehead\"><b>\\1</b> ".$lang['wrote'].":<div class=\"quoteblock\">\\2",
         "<div class=\"quotehead\"><b>".$lang['quote'].":</b><div class=\"quoteblock\">\\1",
         "</div></div>",
         "<a href=\"\\1\" target=_blank>\\2</a>",
         "<a href=\\1 target=_blank>\\1</a>",
         "<b><a href=\"\\1\" target=_blank>\\2</a></b>",
         "<b><a href=\\1 target=_blank>\\1</a></b>",
         "<sub>\\1</sub>",
         "<sup>\\1</sup>",
         "<font color=\"\\1\">\\2</font>",
         "<font style=\"font-size: \\1px\">\\2</font>",
         "<tt>\\1</tt>",
         "<s>\\1</s>",
         "<marquee>\\1</marquee>",
         "<div align=\"\\1\">\\2</div>",
         "<font face=\"\\1\">\\2</font>",
         "<font style=\"Filter: Shadow(color=\\1, Direction=\\2); Width=\\3px;\">\\4</font>",
         "<font style=\"Filter: Glow(color=\\1, Strength=\\2); Width=\\3px;\">\\4</font>",
//        function getbrowser() {
//        if (strstr($_SERVER['HTTP_USER_AGENT'],'Firefox')) {
//        "<font style=\"Filter: Glow(color=\\1, Strength=\\2); Width=\\3px;\"></font>",
//        }else {
//        "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"display: inline; vertical-align: middle; font: inherit;\"><tr><td 

style=\"filter: Glow(color=red, strength=2); font: inherit;\">\\4</td></tr></table>",
//        }
//       "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"display: inline; vertical-align: middle; font: inherit;\"><tr><td 

style=\"filter: Glow(color=red, strength=2); font: inherit;\">\\4</td></tr></table>",
         "<div class=\"quotehead\">\\1<b>\\2</b>\\3:<div class=\"quoteblock\">\\4",
         "</div></div>",
         "<ol type=\"\\5\">\\7</ol>",
         "<ul>\\4</ul>",
         "<li>",
         "</li>",
         "java script",
         "about :"
      );
     preg_match_all("/(\[quote=(.+?)\])|(\[quote\])/", $text, $regs);
     $quoteopen =  count($regs[0]);
     preg_match_all("/(\[\/quote\])/", $text, $regs);
     $quoteclose =  count($regs[0]);

     if($quoteopen > $quoteclose) {
        $toclose = $quoteopen - $quoteclose;
        for($i = 0 ; $i < $toclose ; $i++) {
           $text .= "[/quote]";
        }
     } elseif($quoteclose > $quoteopen) {
        $toopen = $quoteclose - $quoteopen;
        for($i = 0 ; $i < $toopen ; $i++) {
           $text = "[quote]$text";
        }
     }
    $text = preg_replace($search_array, $replace_array, $text);
    if (!$bbcode_img)         {
         $text = preg_replace("/\[img\](.*?)\[\/img\]/si", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $text);
         $text = preg_replace("/\[img=(.*?)\,(.*?)\](.*?)\[\/img\]/si","<a href=\"\\3\" target=\"_blank\">\\3</a>",$text);
         $text = preg_replace("/\[img height=(.*?)\ width=(.*?)\](.*?)\[\/img\]/si","<a href=\"\\3\" target=\"_blank\">\\3</a>",$text);
         $text = preg_replace("/\[img width=(.*?)\ height=(.*?)\](.*?)\[\/img\]/si","<a href=\"\\3\" target=\"_blank\">\\3</a>",$text);
         $text = preg_replace("/\[flash=(.*?)\,(.*?)\](.*?)\[\/flash\]/si","<a href=\"\\3\" target=\"_blank\">\\3</a>",$text);
    } else                                {
         $text = preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\">", $text);
         $text = preg_replace("/\[img=(.*?)\,(.*?)\](.*?)\[\/img\]/si","<img src=\"\\3\" height=\"\\2\" width=\"\\1\">",$text);
         $text = preg_replace("/\[img height=(.*?)\ width=(.*?)\](.*?)\[\/img\]/si","<img src=\"\\3\" height=\"\\1\" width=\"\\2\">",$text);
         $text = preg_replace("/\[img width=(.*?)\ height=(.*?)\](.*?)\[\/img\]/si","<img src=\"\\3\" width=\"\\1\" height=\"\\2\">",$text);
         $text = preg_replace("/\[flash=(.*?)\,(.*?)\](.*?)\[\/flash\]/si","<object classid=\"clsid: D27CDB6E-AE6D-11cf-96B8-444553540000\" 

width=\\1 height=\\2><param name=movie value=\\3><param name=play value=true><param name=loop value=true><param name=quality 

value=high><embed src=\\3 width=\\1 height=\\2 play=true loop=true quality=high></embed></object>",$text);
    }
     $text = str_replace("[hr]", "<hr>", $text);
           $text = replace_badwords($text);
  }
  $text = str_replace("\\'", "'", $text);
  $text = str_replace("\\\"", "&quot;", $text);
  return $text;
}
//-----------------------------------------------------
//--- End PM / Smilies  -------------------------------
//-----------------------------------------------------

8. файл includes/page_header.php

найти

} else {
  $data = unserialize($data);

  $total_images = $data['total_images'];
  $total_categories = $data['total_categories'];
  $auth_cat_sql['auth_viewcat']['IN'] = $data['auth_viewcat']['IN'];
  $auth_cat_sql['auth_viewcat']['NOTIN'] = $data['auth_viewcat']['NOTIN'];
}

после этого добавить

//-----------------------------------------------------
//--- Start Mod: PM -----------------------------------
//-----------------------------------------------------
$user_pm_banned = "";
$pm_popup_script = "";
$pm_popup_header ="";
$pm_popup_head = "";
$pm_new_count = "";
$pm_new_total ="";
$pm_sentbox = "";
$pm_outbox = "";
$pm_inbox = "";
$sentbox = "";
$outbox = "";
$inbox = "";
$newpm ="";
$pm = "";

if ($config['pm'] && $user_info['user_level'] > GUEST) {
$user_pm_banned = $user_info['user_pm_ban'];
  $sql = "SELECT COUNT(pm_id) AS total
              FROM ".PM_TABLE."
              WHERE pm_to = ".$user_info['user_id']." AND (pm_type = ".PM_SENT." OR pm_type = ".PM_SDLT." OR pm_type = 

".PM_UNREAD." OR pm_type = ".PM_USDLT.")";
  $result = $site_db->query_firstrow($sql);
  $pm_inbox = $result['total'];
  $sql = "SELECT COUNT(pm_id) AS total
              FROM ".PM_TABLE."
              WHERE pm_from = ".$user_info['user_id']." AND (pm_type = ".PM_UNREAD." OR pm_type = ".PM_USDLT.")";
  $result = $site_db->query_firstrow($sql);
  $pm_outbox = $result['total'];
  $sql = "SELECT COUNT(pm_id) AS total
              FROM ".PM_TABLE."
              WHERE pm_from = ".$user_info['user_id']." AND (pm_type = ".PM_SENT." OR pm_type = ".PM_RDLT.")";
  $result = $site_db->query_firstrow($sql);
  $pm_sentbox = $result['total'];
  $sql = "SELECT COUNT(pm_id) AS new
              FROM ".PM_TABLE."
              WHERE pm_to = ".$user_info['user_id']." AND (pm_type = ".PM_UNREAD." OR pm_type = ".PM_USDLT.")
              ORDER BY pm_date DESC";
  $result = $site_db->query_firstrow($sql);
  $pm_new_count = $result['new'];
  $sql = "SELECT pm_date
              FROM ".PM_TABLE."
              WHERE pm_to = ".$user_info['user_id']." AND (pm_type = ".PM_UNREAD." OR pm_type = ".PM_USDLT.")
              ORDER BY pm_date DESC";
  $result = $site_db->query_firstrow($sql);
  $pm_new = "<a href=\"".$site_sess->url(ROOT_PATH."pm.php")."\">".(($pm_new_count) ? "<blink>".$pm_new_count."</blink>" : 

0)."</a>";
  $pm = preg_replace("/".$site_template->start."msg_new_count".$site_template->end."/siU", $pm_new, $lang['pm_link']);
  $pm = preg_replace("/".$site_template->start."inbox".$site_template->end."/siU", "<a 

href=\"".$site_sess->url(ROOT_PATH."pm.php")."\">".$lang['pm_inbox']."</a>", $pm);
  $blink = "<script language=\"JavaScript\">\n<!--\nvar flg=0;\nfunction blink(){\nvar 

myElement=document.getElementById('blnk');\nflg^=1;\nif(flg==1){\nmyElement.style.visibility='hidden';\n}\nelse{\nmyElement.style.visibility

='visible';\n}\ntimerID = setTimeout( 'blink()' , 500 );\n}\n//-->\n</script>\n";
  if ($user_info['user_pm_sound'] == 1) {
  $sound = "<embed src=\"".TEMPLATE_PATH."/sounds/".$config['language_dir']."/post.wav\" hidden=\"true\">";
  $show_inbox = ($pm_new_count) ? $blink. $sound."<span id=\"blnk\">".$lang['pm_inbox']."</span><script 

language=\"JavaScript\">blink();</script>": $lang['pm_inbox'];
  }else{
  $show_inbox = ($pm_new_count) ? $blink. "<span id=\"blnk\">".$lang['pm_inbox']."</span><script 

language=\"JavaScript\">blink();</script>": $lang['pm_inbox'];
  }
  $inbox = "<a href=\"".$site_sess->url(ROOT_PATH."pm.php?action=inbox")."\" title=\"".(($pm_new_count) ? $lang['pm_new_messages'].": 

".$pm_new_count."\n" : "").$lang['pm_total'].": ".$pm_inbox."\">".$show_inbox."</a>";
  $sentbox = "<a href=\"".$site_sess->url(ROOT_PATH."pm.php?action=sentbox")."\" title=\"".$lang['pm_total'].": 

".$pm_sentbox."\">".$lang['pm_sentbox']."</a>";
  $outbox = "<a href=\"".$site_sess->url(ROOT_PATH."pm.php?action=outbox")."\" title=\"".$lang['pm_total'].": 

".$pm_outbox."\">".$lang['pm_outbox']."</a>";
  $newpm = "<a href=\"".$site_sess->url(ROOT_PATH."pm.php?action=new")."\">".$lang['pm_new']."</a>";

  if ($result && $user_info['user_pm_popup']) {
     $cookie_name = (defined("COOKIE_NAME")) ? COOKIE_NAME : "4images_";
     $cookie_pmnewpopup = isset($HTTP_COOKIE_VARS[$cookie_name.'pmnewpopup']) ? 

unserialize(stripslashes($HTTP_COOKIE_VARS[$cookie_name.'pmnewpopup'])) : 0;
     if ($cookie_pmnewpopup < $result['pm_date']) {
      if (ereg("pm.php", $self_url) && $action == "inbox") {
          $cookie_expire = time() + 60 * 60 * 24 * 90;
          setcookie($cookie_name.'pmnewpopup', serialize($result['pm_date']), $cookie_expire, COOKIE_PATH, COOKIE_DOMAIN, 

COOKIE_SECURE);
      }elseif (!ereg("pm.php", $self_url) || (ereg("pm.php", $self_url) && ($action == "sentbox" || $action == "outbox"))){
        $cookie_expire = gmdate('D, d M Y H:i:s \G\M\T', time() + 60 * 60 * 24 * 90);
        $pm_popup_script = " <script language=\"JavaScript\">
        <!--
        function SetCookie (name, value, expire, path, domain, secure) {
          document.cookie = name + '=' + escape(value) + ((expire)?(';expires=' + expire):'') + ((path)?';path=' + path:'') + ((domain)?';domain=' 

+ domain:'') + ((secure && (secure == true))?'; secure':'');
        }
        function confirm_newpm() {
          input_box=confirm('".$lang['pm_popup_confirm']."');
          if (input_box==true) { // Output when OK is clicked
            second_box=confirm('".$lang['pm_popup_newwindow']."');
            if (second_box==true) {
              

SetCookie('".$cookie_name."pmnewpopup','".serialize($result['pm_date'])."','".$cookie_expire."','".COOKIE_PATH."','".COOKIE_DOMAIN."','".

COOKIE_SECURE."');
              

window.open('".$site_sess->url(ROOT_PATH."pm.php")."','pmnew','width=600,height=500,menubar=yes,scrollbars=yes,toolbar=yes,location

=yes,directories=yes,resizable=yes,top=50,left=50');
            } else {
              

SetCookie('".$cookie_name."pmnewpopup','".serialize($result['pm_date'])."','".$cookie_expire."','".COOKIE_PATH."','".COOKIE_DOMAIN."','".

COOKIE_SECURE."');
              window.location='".$site_sess->url(ROOT_PATH."pm.php")."';
            }
          } else {
            

SetCookie('".$cookie_name."pmnewpopup','".serialize($result['pm_date'])."','".$cookie_expire."','".COOKIE_PATH."','".COOKIE_DOMAIN."','".

COOKIE_SECURE."');
          }
        }
        // -->
      </script>";
        $pm_popup_header = " onload=\"Javascript:confirm_newpm()\"";
      }
    }
  }
}
//-----------------------------------------------------
//--- End Mod: PM -------------------------------------
//-----------------------------------------------------

8.1 найти

"media_url" => MEDIA_PATH,

после этого добавить

//-----------------------------------------------------
//--- Start Mod: PM -----------------------------------
//-----------------------------------------------------
  "pm_show" => $config['pm'],
  "pm" => $pm,
  "pm_boxes" => ($inbox) ? 

$inbox."&nbsp;&nbsp;|&nbsp;&nbsp;".$sentbox."&nbsp;&nbsp;|&nbsp;&nbsp;".$outbox."&nbsp;&nbsp;|&nbsp;&nbsp;".$newpm : "",
  "pm_inbox" => $inbox,
  "pm_sentbox" => $sentbox,
  "pm_outbox" => $outbox,
  "pm_newpm" => $newpm,
  "pm_popup_script" => $pm_popup_script,
  "pm_popup_header" => $pm_popup_header,
  "pm_inbox_total" => ($pm_inbox) ? $pm_inbox : 0,
  "pm_outbox_total" => ($pm_outbox) ? $pm_outbox : 0,
  "pm_sentbox_total" => ($pm_sentbox) ? $pm_sentbox : 0,
  "pm_new_total" => ($pm_new_count) ? $pm_new_count : 0,
  "lang_pm_preview" => $lang['pm_preview'],
  "user_pm_banned" => $user_pm_banned,
//-----------------------------------------------------
//--- End Mod: PM -------------------------------------
//-----------------------------------------------------

9. файл includes/db_field_definitions.php

перед ?> добавить

$additional_user_fields['user_pm_ban'] = array($lang['pm_user_ban'], "radio", 0);
$additional_user_fields['user_pm_inbox'] = array($lang['pm_inbox'], "text", 0);
$additional_user_fields['user_pm_sentbox'] = array($lang['pm_sentbox'], "text", 0);
$additional_user_fields['user_pm_outbox'] = array($lang['pm_outbox'], "text", 0);
$additional_user_fields['user_pm_email'] = array($lang['pm_email'], "radio", 0);
$additional_user_fields['user_pm_popup'] = array($lang['pm_popup'], "radio", 0);
$additional_user_fields['user_pm_sound'] = array($lang['pm_sound'], "radio", 0);

10. файл includes/paging.php

найти

  var $first,$last,$total_pages,$config,$desc,$next,$back;

  function Paging($page = 1, $perpage = 0, $num_rows_all = 0, $link_args = "") {

заменить на

  var $first,$last,$total_pages,$config,$desc,$next,$back,$extra;

  function Paging($page = 1, $perpage = 0, $num_rows_all = 0, $link_args = "", $text = "", $extra = "", $page_text = "", $style = "") {
  

10.1 найти

global $lang, $config;

после этого добавить

//-------- Config ------------
//Change $this->alt to 1 if u want display number of pages not more then u set in the settings, no metter on witch page u are.
//by default if u have 20 pages, for example, and in the settings set to show only 10, it will actualy show u 20 pages when u go to 10th page.
                $this->alt = 1;
//------- End Config ---------

    $this->style = ($style) ? $style : "paging";
    $this->extra = ($extra) ? "#".$extra : "";
    $this->page_text = ($page_text) ? $page_text : "page";
    $this->desc = ($text) ? $text : $lang['paging_stats'];

10.2 найти

    $link_args = ereg_replace("&page=[0-9]*", "", $link_args);
    $link_args = ereg_replace("page=[0-9]*&", "", $link_args);

заменить на

    $link_args = ereg_replace("&".$this->page_text."=[0-9]*", "", $link_args);
    $link_args = ereg_replace($this->page_text."=[0-9]*&", "", $link_args);

10.3 найти и удалить

    $this->desc = $lang['paging_stats'];

10.4 найти

  function get_paging() {
    $html = "";
    if ($this->total_pages > 1) {
      $page_back = $this->page - 1;
      $page_next = $this->page + 1;

      if ($page_back > 0) {
        $html .= "<a href=\"".$this->link_args."page=1\" class=\"paging\">".$this->paging_firstpage."</a>&nbsp;&nbsp;";
        $html .= "<a href=\"".$this->link_args."page=$page_back\" class=\"paging\">".$this->paging_back."</a>&nbsp;&nbsp;";
      }
      for ($page_num = 1; $page_num <= $this->total_pages; $page_num++) {
        if ($page_num >= ($this->page-$this->range) && $page_num <= ($this->page+$this->range)) {
          if ($this->page == $page_num) {
            $html .= "<b class=\"pagingon\">$page_num</b>&nbsp;&nbsp;";
          }
          else {
            $html .= "<a href=\"".$this->link_args."page=$page_num\" class=\"paging\">$page_num</a>&nbsp;&nbsp;";
          }
        }
      }
      if ($page_next <= $this->total_pages) {
        $html .= "<a href=\"".$this->link_args."page=$page_next\" class=\"paging\">".$this->paging_next."</a>&nbsp;&nbsp;";
        $html .= "<a href=\"".$this->link_args."page=$this->total_pages\" class=\"paging\">".$this->paging_lastpage."</a>";
      }
    }
    return $html;

заменить на

  function get_paging() {
    $html = "";
    if ($this->total_pages > 1) {
      $page_back = $this->page - 1;
      $page_next = $this->page + 1;

                        if ($this->alt) {
              if ($page_back > 0) {
                $html .= "<a href=\"".$this->link_args.$this->page_text."=1".$this->extra."\" 

class=\"".$this->style."\">".$this->paging_firstpage."</a>&nbsp;&nbsp;";
                $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_back.$this->extra."\" 

class=\"".$this->style."\">".$this->paging_back."</a>&nbsp;&nbsp;";
              }
              $page_num2 = ceil($this->range / 2);
              $page_num3 = $this->range;
              $page_left = 1;
              if (($this->page - $page_num2) > 0) {
                      $html .= "<a href=\"".$this->link_args.$this->page_text."=".(($this->page - $this->range < $page_num2) ? $page_num2 : 

(($this->page <= ($this->total_pages - $page_num2)) ? $this->page - $this->range : $this->total_pages - $this->range - $page_num2 + 

1)).$this->extra."\" class=\"".$this->style."\">...</a>&nbsp;&nbsp;";
                                }
              for ($page_num = 1; $page_num <= $this->total_pages; $page_num++){
                      if ($page_num3) {
                              if ($page_left) {
                                      if (($page_num >= $this->page - ($this->range - $page_num2)) || ($page_num > $this->total_pages - $this->range 

&& $this->page > $this->total_pages - $this->range )) {
                                  if ($this->page == $page_num) {
                                          $page_left--;
                                          $page_num2--;
                                          $page_num3--;
                                    $html .= "[<b class=\"".$this->style."on\">".$page_num."</b>]&nbsp;&nbsp;";
                                  }
                                  else {
                                          $page_num2--;
                                          $page_num3--;
                                    $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_num.$this->extra."\" 

class=\"".$this->style."\">".$page_num."</a>&nbsp;&nbsp;";
                                  }
                                }
                              }else{
                              if ($page_num <= $this->page + ($this->range - $page_num2)) {

                                  if ($this->page == $page_num) {
                                    $html .= "[<b class=\"".$this->style."on\">".$page_num."</b>]&nbsp;&nbsp;";
                                  }
                                  else {
                                          $page_num2--;
                                          $page_num3--;
                                    $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_num.$this->extra."\" 

class=\"".$this->style."\">".$page_num."</a>&nbsp;&nbsp;";
                                  }
                                }
                                                }
                                        }
                                }
                                $page_num2 = ceil($this->range / 2);
              if (($this->page + $page_num2) <= $this->total_pages) {
                      $html .= "<a href=\"".$this->link_args.$this->page_text."=".(($this->page + $page_num2 <= $this->total_pages - 

$this->range) ? (($this->page < $page_num2) ? $this->range + $page_num2 : $this->page + $this->range) : $this->total_pages - 

$page_num2 + 1).$this->extra."\" class=\"".$this->style."\">...</a>&nbsp;&nbsp;";
                                }
              if ($page_next <= $this->total_pages) {
                $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_next.$this->extra."\" 

class=\"".$this->style."\">".$this->paging_next."</a>&nbsp;&nbsp;";
                $html .= "<a href=\"".$this->link_args.$this->page_text."=".$this->total_pages.$this->extra."\" 

class=\"".$this->style."\">".$this->paging_lastpage."</a>";
              }
                        }else{
              if ($page_back > 0) {
                $html .= "<a href=\"".$this->link_args.$this->page_text."=1".$this->extra."\" 

class=\"".$this->style."\">".$this->paging_firstpage."</a>&nbsp;&nbsp;";
                $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_back.$this->extra."\" 

class=\"".$this->style."\">".$this->paging_back."</a>&nbsp;&nbsp;";
              }
                          for ($page_num = 1; $page_num <= $this->total_pages; $page_num++) {
                if ($page_num >= ($this->page - $this->range) && $page_num <= ($this->page + $this->range)) {
                  if ($this->page == $page_num) {
                    $html .= "<b class=\"".$this->style."on\">".$page_num."</b>&nbsp;&nbsp;";
                  }else{
                    $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_num.$this->extra."\" 

class=\"".$this->style."\">".$page_num."</a>&nbsp;&nbsp;";
                  }
                }
              }
              if ($page_next <= $this->total_pages) {
                $html .= "<a href=\"".$this->link_args.$this->page_text."=".$page_next.$this->extra."\" 

class=\"".$this->style."\">".$this->paging_next."</a>&nbsp;&nbsp;";
                $html .= "<a href=\"".$this->link_args.$this->page_text."=".$this->total_pages.$this->extra."\" 

class=\"".$this->style."\">".$this->paging_lastpage."</a>";
              }
      }
    }
    return $html;

11. файл member.php

найти

if ($user_row = get_user_info($user_id)) {
    if (isset($user_row['user_showemail']) && $user_row['user_showemail'] == 0) {
      $content = $lang['invalid_user_id'];
    }

перед этим добавить

// Mod PM Start
     if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_row['user_pm_ban'] == 0) {
     $lang_send_pm = "<a 

href=\"".$site_sess->url(ROOT_PATH."pm.php?action=new&user_id=".$user_row['user_id']."&username=".$user_row['user_name'])."\"><img 

src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_user_pm_alt']."\" /></a>";
     }elseif ($user_info['user_level'] < GUEST){
     $lang_send_pm = "<img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_hinweis']."\" />";
     } else {
     $lang_send_pm = "";
     }
// Mod PM End

11.1 найти

      $site_template->register_vars(array(
        "user_id" => $user_row['user_id'],
        "user_name" => format_text($user_row['user_name'], 2),

после этого добавить

// Mod PM Start
        "lang_pm" => $lang_pm,
// Mod PM End

11.2 найти

    $site_template->register_vars(array(
      "user_id" => $user_row['user_id'],
      "user_name" => (isset($user_row['user_name'])) ? format_text($user_row['user_name'], 2) : REPLACE_EMPTY,

перед этим добавить

// Mod PM Start
     if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_row['user_pm_ban'] == 0) {
     $lang_send_pm = "<a 

href=\"".$site_sess->url(ROOT_PATH."pm.php?action=new&user_id=".$user_row['user_id']."&username=".$user_row['user_name'])."\"><img 

src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_user_pm_alt']."\" /></a>";
     }elseif ($user_info['user_level'] < GUEST){
     $lang_send_pm = "<img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_hinweis']."\" />";
     } else {
     $lang_send_pm = "";
     }
// Mod PM End

11.3 найти

    $site_template->register_vars(array(
      "user_id" => $user_row['user_id'],
      "user_name" => (isset($user_row['user_name'])) ? format_text($user_row['user_name'], 2) : REPLACE_EMPTY,

после этого добавить

// Mod PM START
      "lang_pm" => $lang['pm'],
      "lang_send_pm" => $lang_send_pm,
// Mod PM END

11.4 найти

    "lang_edit_profile_msg" => $edit_profile_msg,

после этого добавить

// Mod PM
    "lang_pm" => $lang['pm'],
// Mod PM

12. файл details.php

найти

      $site_template->register_vars(array(
        "comment_id" => $comment_row[$i]['comment_id'],

перед этим добавить

// Mod PM Start
     if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $comment_row[$i]['owner_pm_ban'] == 0 && 

$comment_row[$i]['user_id'] != -1) {
     $comment_user_pm = "<a 

href=\"".$site_sess->url(ROOT_PATH."pm.php?action=quote&mode=comment&id=".$comment_row[$i]['comment_id']."&user_id=".$comme

nt_row[$i]['user_id']."&username=".$comment_row[$i]['user_name'])."\" /><img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" 

alt=\"".$lang['pm_user_pm_alt']."\" /></a>";
     } elseif ($user_info['user_level'] == GUEST){
     $comment_user_pm = "<img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_hinweis']."\" />";
     }else {
     $comment_user_pm = "";
     }
// Mod PM END

12.1 найти

      $site_template->register_vars(array(
        "comment_id" => $comment_row[$i]['comment_id'],

после этого добавить

// Mod PM Start
        "comment_user_pm" => $comment_user_pm,
// Mod PM Start

12.2 найти

$sql = "SELECT i.image_id, i.cat_id, i.user_id, i.image_name, i.image_description, i.image_keywords, i.image_date, i.image_active, 

i.image_media_file, i.image_thumb_file, i.image_download_url, i.image_allow_comments, i.image_comments, i.image_downloads, 

i.image_votes, i.image_rating, i.image_hits".$additional_sql.", c.cat_name".get_user_table_field(", u.", "user_name").get_user_table_field(", 

u.", "user_email")."

заменить на

$sql = "SELECT i.image_id, i.cat_id, i.user_id, i.image_name, i.image_description, i.image_keywords, i.image_date, i.image_active, 

i.image_media_file, i.image_thumb_file, i.image_download_url, i.image_allow_comments, i.image_comments, i.image_downloads, 

i.image_votes, i.image_rating, i.image_hits, u.user_pm_ban AS owner_pm_ban".$additional_sql.", c.cat_name".get_user_table_field(", u.", 

"user_name").get_user_table_field(", u.", "user_email")."

12.3 найти

$sql = "SELECT c.comment_id, c.image_id, c.user_id, c.user_name AS comment_user_name, c.comment_headline, 

c.comment_text, c.comment_ip, c.comment_date".get_user_table_field(", u.", "user_level").get_user_table_field(", u.", 

"user_name").get_user_table_field(", u.", "user_email").get_user_table_field(", u.", "user_showemail").get_user_table_field(", u.", 

"user_invisible").get_user_table_field(", u.", "user_joindate").get_user_table_field(", u.", "user_lastaction").get_user_table_field(", u.", 

"user_comments").get_user_table_field(", u.", "user_homepage").get_user_table_field(", u.", "user_icq")."

заменить на

$sql = "SELECT c.comment_id, c.image_id, c.user_id, c.user_name AS comment_user_name, c.comment_headline, 

c.comment_text, c.comment_ip, c.comment_date, u.user_pm_ban AS owner_pm_ban".get_user_table_field(", u.", 

"user_level").get_user_table_field(", u.", "user_name").get_user_table_field(", u.", "user_email").get_user_table_field(", u.", 

"user_showemail").get_user_table_field(", u.", "user_invisible").get_user_table_field(", u.", "user_joindate").get_user_table_field(", u.", 

"user_lastaction").get_user_table_field(", u.", "user_comments").get_user_table_field(", u.", "user_homepage").get_user_table_field(", u.", 

"user_icq")."

13. файл lang/russian/main.php

не получилось у меня вставить этот код здесь на форуме, так что просто скопируйте всё из файла lang_russian_main.txt в ваш файл lang/russian/main.php


14. файл templates/[ваш_шаблон]/header.html

перед </head>

вставить

{pm_popup_script}

14.1 найти

<body 

заменить на

<body {pm_popup_header}

15. файл templates/[ваш_шаблон]/style.css

добавить

.msg0 {
background-color: #FFCECE;
color: #2F6B9D;
}
.msg1 {
background-color: #CEFFDD;
color: #2F6B9D;
}

.msg_good {
  background-color: #CEFFDD;
  font-weight: bold;
   border: 1px solid #5E6C80;
   padding: 3px 3px 3px 3px ;
   margin: 3px 0px 3px 0px ;
}

.msg_error {
  background-color: #FFCECE;
  font-weight: bold;
   border: 1px solid #5E6C80;
   padding: 3px 3px 3px 3px ;
   margin: 3px 0px 3px 0px ;
}

.msg_plain {
  background-color: transparent;
  font-weight: bold;
   border: 1px solid #5E6C80;
   padding: 3px 3px 3px 3px ;
   margin: 3px 0px 3px 0px ;
}
/*--BBCode--------------------------------------------------*/
input.bbcbutton {
   background-color : #EFEFEF;
   color : #000000;
   font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif;
}
.helpline {
  width: 300px;
  height: 30px;
  overflow: hidden;
   background-color: transparent;
   border-style: none;
   font-family: Verdana,Tahoma,Arial,Helvetica,sans-serif;
   font-size : 10px;
   color: #666666;
}
div.quotehead {
   font-size: 11px;
   color: black;
   padding: 0px 24px 0px 24px ;
}
div.quoteblock {
   border: 1px solid #5E6C80;
   font-size: 10px;
   padding: 8px 8px 8px 8px ;
}
div.codehead {
   font-size: 11px;
   color: black;
   padding: 0px 24px 0px 24px ;
}
div.codeblock {
   border: 1px solid #5E6C80;
   font-family: Courier, 'Courier New', sans-serif;
   font-size: 10px;
   padding: 8px 8px 8px 8px ;
   background-color: #F5F5F5;
   white-space: pre;
}
/*--PM Mod--------------------------------------------------*/
.username_input {
  font-family: Tahoma,Verdana,Arial,Helvetica,sans-serif;
  color: #0f5475;
  font-size: 11px;
  width: 140px;
}
.username_input_button {
  font-family:  Tahoma,Verdana,Arial, Helvetica, sans-serif;
  background-color: #003366;
  color: #fcdc43;
  font-size: 11px;
  font-weight: bold;
  width: 120px;
}

16. файл templates/[ваш_шаблон]/user_logininfo.html

найти

&raquo; <a href="{url_logout}">{lang_logout}</a>

после этого добавить

<!-- Start Mod: PM ------------------------------------------------------------>
      {if pm_show}
      {ifnot user_pm_banned}
       <br />
       <br />
      &raquo; {pm_inbox} ({pm_inbox_total})<br />
      &raquo; {pm_sentbox} ({pm_sentbox_total})<br />
      &raquo; {pm_outbox} ({pm_outbox_total})<br />
      &raquo; {pm_newpm}<br /><br />
      {pm}
      {endifnot user_pm_banned}
      {endif pm_show}
<!-- End Mod: PM -------------------------------------------------------------->

17. файл templates/[ваш_шаблон]/member_editprofile.html

найти

          <tr>
            <td class="row1"><b>{lang_invisible}</b></td>
            <td class="row1">
              <input type="radio" name="user_invisible" value="1"{user_invisible_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_invisible" value="0"{user_invisible_no} />
              {lang_no}
           </td>
          </tr>

после этого добавить

<!-- Mod PM -->
         {ifnot user_pm_banned}
          <tr>
            <td colspan="2" valign="top" class="head1"><b>{lang_pm}</b></td>
          </tr>
          <tr>
            <td class="row2"><b>{lang_user_pm_email}</b></td>
            <td class="row2">
              <input type="radio" name="user_pm_email" value="1"{user_pm_email_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_pm_email" value="0"{user_pm_email_no} />
              {lang_no}
            </td>
          </tr>
          <tr>
            <td class="row1"><b>{lang_user_pm_popup}</b></td>
            <td class="row1">
              <input type="radio" name="user_pm_popup" value="1"{user_pm_popup_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_pm_popup" value="0"{user_pm_popup_no} />
              {lang_no}
            </td>
          </tr>
          {endifnot user_pm_banned}
<!-- Mod PM -->

17.1 для добавления звукового сигнала - найти

          <tr>
            <td class="row1"><b>{lang_user_pm_popup}</b></td>
            <td class="row1">
              <input type="radio" name="user_pm_popup" value="1"{user_pm_popup_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_pm_popup" value="0"{user_pm_popup_no} />
              {lang_no}
            </td>
          </tr>

после этого добавить

          <tr>
            <td class="row1"><b>{lang_user_pm_sound}</b></td>
            <td class="row1">
              <input type="radio" name="user_pm_sound" value="1"{user_pm_sound_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_pm_sound" value="0"{user_pm_sound_no} />
              {lang_no}
            </td>
          </tr>

18. файл templates/[ваш_шаблон]/member_profile.html

найти

        <tr>
          <td class="row2"><b>{lang_icq}</b></td>
          <td class="row2">{if user_icq}<a href="http://www.icq.com/people/about_me.php?uin={user_icq}" target="_blank">{user_icq}</a> 

(<b>{user_icq_status}</b>){endif user_icq}</td>
        </tr>

после этого добавить

<!-- Mod PM -->
        {ifnot user_pm_banned}
        <tr>
          <td class="row1"><b>{lang_pm}</b></td>
          <td class="row1">{lang_send_pm}</td>
        </tr>
        {endifnot user_pm_banned}
<!-- Mod PM -->

19. файл templates/[ваш_шаблон]/comment_bit.html

найти

{comment_user_icq_button}

после этого добавить

<!-- Mod PM -->
    {ifnot user_pm_banned}
    {comment_user_pm}
    {endifnot user_pm_banned}
<!-- Mod PM -->

20. файл templates/[ваш_шаблон]/details.html

найти

{user_name_link}

после этого добавить

&nbsp;&nbsp; {details_user_pm}

21. файл admin/backup.php

найти

WORDLIST_TABLE,

после этого добавить

PM_TABLE,

22. файл search.php

найти

$sql = "SELECT i.image_id, i.cat_id, i.user_id, i.image_name, i.image_description, i.image_keywords, i.image_date, i.image_active, 

i.image_media_file, i.image_thumb_file, i.image_download_url, i.image_allow_comments, i.image_comments, i.image_downloads, 

i.image_votes, i.image_rating, i.image_hits".$additional_sql.", c.cat_name".get_user_table_field(", u.", "user_name")."

заменить на

$sql = "SELECT i.image_id, i.cat_id, i.user_id, i.image_name, i.image_description, i.image_keywords, i.image_date, i.image_active, 

i.image_media_file, i.image_thumb_file, i.image_download_url, i.image_allow_comments, i.image_comments, i.image_downloads, 

i.image_votes, i.image_rating, i.image_hits".$additional_sql.", c.cat_name, u.user_pm_ban AS owner_pm_ban".get_user_table_field(", u.", 

"user_name")."

ДОПОЛНЕНИЕ
если у вас установлен мод: memberlist

23. файл memberlist.php

найти

$userlist .="<tr>\n<td class=\"head2\" align=\"center\">".$lang['user_name']."</td>\n<td class=\"head2\" 

align=\"center\">".$lang['join_date']."</td>\n<td class=\"head2\" align=\"center\">".$lang['email']."</td>\n<td class=\"head2\" 

align=\"center\">".$lang['homepage']."</td>\n<td class=\"head2\" align=\"center\">".$lang['lang_total_user_comments']."</td>\n<td 

class=\"head2\" align=\"center\">".$lang['lang_total_user_images']."</td>\n</tr>\n";

заменить на

  $userlist .="<tr>\n<td class=\"head2\" align=\"center\">".$lang['user_name']."</td>\n<td class=\"head2\" 

align=\"center\">".$lang['join_date']."</td>\n<td class=\"head2\" align=\"center\">".$lang['email']."</td>\n<td class=\"head2\" 

align=\"center\">".$lang['homepage']."</td>\n<td class=\"head2\" align=\"center\">".$lang['lang_total_user_comments']."</td>\n<td 

class=\"head2\" align=\"center\">".$lang['lang_total_user_images']."</td>\n";
//-- Start Mod: PM -------------------------------------------------------------
  if ($user_info['user_pm_ban'] == 0 && $config['pm']) {
  $userlist .="<td class=\"head2\" align=\"center\">".$lang['pm_user_pm'].":</td>\n";
  }
//-- End Mod: PM ---------------------------------------------------------------
  $userlist .="</tr>\n";

23.1 найти

$user_email_button = "";

после этого добавить

//-- Start Mod: PM -------------------------------------------------------------
  $user_pm_button = "";
//-- End Mod: PM ---------------------------------------------------------------

23.2 найти

$user_join_date = (isset($user_row['user_joindate'])) ? format_date($config['date_format'], $user_row['user_joindate']) : 

REPLACE_EMPTY;

перед этим добавить

//-- Start Mod: PM -------------------------------------------------------------
     if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $config['pm']) {
     $user_pm_button = "<a 

href=\"".$site_sess->url(ROOT_PATH."pm.php?action=new&user_id=".$user_row['user_id']."&username=".$user_row['user_name'])."\"><img 

src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_user_pm_alt']."\" /></a>";
     } elseif ($user_info['user_level'] < GUEST){
     $user_pm_button = "<img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_hinweis']."\" />";
     } else {
     $user_pm_button = "";
     }
//-- End Mod: PM ---------------------------------------------------------------

23.3 найти

$userlist .= "<td valign=\"top\" align=\"center\">".$total_user_images_link."</td>";

после этого добавить

//-- Start Mod: PM -------------------------------------------------------------
    if ($user_info['user_pm_ban'] == 0 && $config['pm']) {
    $userlist .= "<td valign=\"top\" align=\"center\">".$user_pm_button."</td>";
    }
//-- End Mod: PM ---------------------------------------------------------------
Attachment icon [MOD] PM_v3.zip, 93.74 kb, 36 downloads since 2009-01-25

2

Re: Личные сообщения

Очень интересная модификация. Все подробно описано. А где можно скачать архив с pm_install_v3.php и lang_russian_main.txt.  С уважением. Camel.

3

Re: Личные сообщения

Хороший вопрос :D
Вообще-то я его к посту приклепляла. Загрузила ещё раз, посмотрим сколько продержится этот...

4

Re: Личные сообщения

Мне кажется чтото не то с двумя файлами. При загрузке модифицированного файла functions.php выдает следующюю ошибку-

Parse error: syntax error, unexpected ')' in /home/***/public_html/clybs/includes/functions.php on line 924

При загрузке модифицированного файла paging.php выдает следующюю ошибку-

Parse error: syntax error, unexpected ';', expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/***/public_html/clybs/includes/paging.php on line 232

Все перерыл. functions.php может из за того что у меня стоит модификация смайлики в комментариях.

// Smilie Mod
  $text = show_smilies($text);
  // End Smilie Mod

Alekinna помоги пожалуйта разобратся. Заранее благодарен. Camel.

Отредактировано camel (2009-01-26 21:56:37)

5

Re: Личные сообщения

У меня тоже выдает ошибку
Parse error: parse error, unexpected ')' in T:\home\localhost\4images\includes\functions.php on line 1149

эта строка:
'HEIGHT=310,resizable=yes,scrollbars=yes,WIDTH=225');return false;\"

6

Re: Личные сообщения

Похоже на форуме некорректно работает таг code, он разбил одну строку на несколько частей. В файле functions.php это должно быть в одну строчку

//          $smiles_text .= "<a href=\"smiles.php\" onclick=\"window.open('smiles.php', '_4imagessmilies', 'HEIGHT=310,resizable=yes,scrollbars=yes,WIDTH=225');return false;\" target=\"_4imagessmilies\">&nbsp;&nbsp;&nbsp;".$lang['all']."</a>";

Возможно и другие проблемы из-за этих разрывов. В сообщениях ошибки обычно указывается в какой строке. Процитируйте эту строку.

7

Re: Личные сообщения

В details.php тоже есть разрыв.

href=\"".$site_sess->url(ROOT_PATH."pm.php?action=quote&mode=comment&id=".$comment_row[$i]['comment_id']."&user_id=".$comme

nt_row[$i]['user_id']."&username=".$comment_row[$i]['user_name'])."\" /><img src=\"".get_gallery_image("pm.gif")."\" border=\"0\"
----

Отредактировано bma2004 (2009-01-27 16:10:14)

8

Re: Личные сообщения

У меня в  functions.php выбивают ошибки дв стороки:
style=\"filter: Glow(color=red, strength=2); font: inherit;\">\\4</td></tr></table>",

больше багов пока не обнаружено

9

Re: Личные сообщения

Разорванные строки просто соединить в одну.
Установить-то удалось?

10

Re: Личные сообщения

Да. строка style=\ - продолжеие предидущей.

Отредактировано bma2004 (2009-01-27 23:32:42)

11

Re: Личные сообщения

Все переделал. Все заработало. Огромное спасибо!

12

Re: Личные сообщения

Еще нашел ошибку:
в member.php

// Mod PM Start
     if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_row['user_pm_ban'] == 0) {
     $lang_send_pm = "<a href=\"".$site_sess->url(ROOT_PATH."pm.php?action=new&user_id=".$user_row['user_id']."&username=".$user_row['user_name'])."\"><img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_user_pm_alt']."\" /></a>";
     }elseif ($user_info['user_level'] < GUEST){
     $lang_send_pm = "<img src=\"".get_gallery_image("pm.gif")."\" border=\"0\" alt=\"".$lang['pm_hinweis']."\" />";
     } else {
     $lang_send_pm = "";
     }
// Mod PM End

gbitn jib,rf d cnhjrt 1044
if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_row['user_pm_ban'] == 0) {

13

Re: Личные сообщения

эта ошибка возникает при попытке просмотра данных какого либо пользователя и даже при просмотре своих данных! А также при попытке добавления фото и восстановления пароля

Отредактировано bma2004 (2009-01-28 00:03:40)

14

Re: Личные сообщения

удали из этой строки

 && $user_row['user_pm_ban'] == 0

15

Re: Личные сообщения

При эксплуатации данной модификации возник вопрос .  Как добавить ссылку на отправку сообщения каждому автору добавленного комментария. В поле где ссылочки на маил ,аску добавить еще одну ссылку. Заранее благодарен. CAMEL.

16

Re: Личные сообщения

Вы уверены, что выполнили все шаги ?
Особенно шаги 12 (все пункты) и 19?

17

Re: Личные сообщения

Все проверил. Просто Вы меня не правильно поняли. 
   {comment_user_status_img}
    {comment_user_profile_button}
    {comment_user_email_button}
    {comment_user_homepage_button}
    {comment_user_icq_button}
Как сдесь добавить еще одну ссылку. На отправку ЛС автору комментария. Заранее благодарен. CAMEL.

18

Re: Личные сообщения

А не ошибка ли в 18 шаге?

<!-- Mod PM -->
        {ifnot user_pm_banned}
        <tr>
          <td class="row1"><b>{lang_pm}</b></td>
          <td class="row1">{lang_send_pm}</td>
        </tr>
        {endifnot user_pm_banned}
<!-- Mod PM -->

что это за неопознанный lang_send_pm?

19

Re: Личные сообщения

Все получилось. Работает как часы. Огромное спасибо Alekinna.

20

Re: Личные сообщения

Доброе время суток, прошу помощи у вас дорогие форумчане при отправке сообщения PM вылазиет ошибка

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\AppServ\www\foto\includes\email.php on line 171

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\foto\includes\email.php:171) in C:\AppServ\www\foto\pm.php on line 321

сообщения доходит до человека, ткните носом , где нужно поправить :(

ps: Галерея работает в локалке, без интернета.

на половину разобрался, все дело в pm_email, подскажите как сделать по умолчанию отключенной этой функции ?

Отредактировано marozov (2009-02-04 14:33:25)

21

Re: Личные сообщения

Установка по умолчанию для новых пользователей:

в БД зайти в структуру таблицы 4images_users, выделить галочкой строку user_pm_email , выбрать "редактировать". В поле "По умолчанию" установить 0


Установка для всех уже существующих пользователей:

в БД галереи выполнить запрос

UPDATE `4images_users`
SET `user_pm_email`= 0

Чтобы пользователи не могли изменить данную настройку удалите из файла member_editprofile.html примерно такой код

<tr>
            <td class="row2"><b>{lang_user_pm_email}</b></td>
            <td class="row2">
              <input type="radio" name="user_pm_email" value="1"{user_pm_email_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_pm_email" value="0"{user_pm_email_no} />
              {lang_no}
            </td>
          </tr>

22

Re: Личные сообщения

alekinna пишет:

Установка по умолчанию для новых пользователей:

в БД зайти в структуру таблицы 4images_users, выделить галочкой строку user_pm_email , выбрать "редактировать". В поле "По умолчанию" установить 0


Установка для всех уже существующих пользователей:

в БД галереи выполнить запрос

UPDATE `4images_users`
SET `user_pm_email`= 0

Чтобы пользователи не могли изменить данную настройку удалите из файла member_editprofile.html примерно такой код

<tr>
            <td class="row2"><b>{lang_user_pm_email}</b></td>
            <td class="row2">
              <input type="radio" name="user_pm_email" value="1"{user_pm_email_yes} />
              {lang_yes}&nbsp;&nbsp;&nbsp;
              <input type="radio" name="user_pm_email" value="0"{user_pm_email_no} />
              {lang_no}
            </td>
          </tr>

Большое спасибо за помощь! :)

23

Re: Личные сообщения

Небольшой вопрос - можно ли сделать так, чтобы при просмотре своего профиля не было ссылки для отправки сообщения? (то есть чтобы не отправлять сообщения самому себе)

24

Re: Личные сообщения

файл member.php

найти дважды

if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_row['user_pm_ban'] == 0) {

заменить на

if ($user_info['user_level'] > GUEST && $user_info['user_pm_ban'] == 0 && $user_row['user_pm_ban'] == 0 && $user_info['user_id'] != $user_row['user_id']) {

25

Re: Личные сообщения

Please German and English langfile!!

Отредактировано BoeseBZ (2010-06-22 01:13:55)