Мод на персональные смайлы для JohnCMS 4.5.1
Мод позволяет добавлять, удалять и использовать личные смайлы.
Для настройка данного мода есть конфиг-файл,который находиться
по пути users/includes/profile/settings_personalsmile.ini
Мод полностью локализован lng файл: incfiles/languages/ru/smileys.lng
Смайлы храняться по пути images/smileys/user/personal/ID юзера

Содаржание:
1.Список добавляемых файлов
2.Список изменяемых стандартных файлов
3.Изменения в стандартных файлах
4.Как использовать.
5.Ссылка на тему разработчика.
1.
	1)addpersonalsmile.php
	2)deletepersonalsmile.php
	3)personalsmile.php
	4)settings_personalsmile.ini
2.
	1)users/profile.php
	2)users/includes/profile/office.php
	3)incfiles/classes/functions.php
	4)forum/index.php
3.
	1)users/profile.php

	В массив: 
		<?php
		/*
		-----------------------------------------------------------------
		Переключаем режимы работы
		-----------------------------------------------------------------
		*/
		$array = array(
		    'activity'          => 'includes/profile',
		    'ban'               => 'includes/profile',
		    'edit'              => 'includes/profile',
		    'images'            => 'includes/profile',
		    'info'              => 'includes/profile',
		    'ip'                => 'includes/profile',
		    'guestbook'         => 'includes/profile',
		    'karma'             => 'includes/profile',
		    'office'            => 'includes/profile',
		    'password'          => 'includes/profile',
		    'reset'             => 'includes/profile',
		    'settings'          => 'includes/profile',
		    'stat'              => 'includes/profile',
		    'personalsmile'     => 'includes/profile',
		    'addpersonalsmile'  => 'includes/profile',
		    'deletepersonalsmile'  => 'includes/profile',
		    'friends'           => 'includes/profile'
		);
		?>

		Добавлено 
			<?php
				'personalsmile'     => 'includes/profile',
			    'addpersonalsmile'  => 'includes/profile',
			    'deletepersonalsmile'  => 'includes/profile',
			?>

	2)Office.php 

		<?php
		// Блок настроек
		echo '<div class="bmenu"><p><h3>' . $lng['settings'] . '</h3>' .
		    '<div>' . functions::image('settings.png') . '<a href="profile.php?act=settings">' . $lng['system_settings'] . '</a></div>' .
		    '<div>' . functions::image('user-edit.png') . '<a href="profile.php?act=edit">' . $lng_profile['profile_edit'] . '</a></div>' .
		    '<div>' . functions::image('smile.png') . '<a href="profile.php?act=personalsmile">' . $lng_smile['personalsmile'] . '</a></div>' .
		    '<div>' . functions::image('lock.png') . '<a href="profile.php?act=password">' . $lng['change_password'] . '</a></div>';
		?>
	Добавлено
		<?php
			'<div>' . functions::image('smile.png') . '<a href="profile.php?act=personalsmile">' . $lng_smile['personalsmile'] . '</a></div>' .
		?>
	Также в Office.php сверху был подключен языковой файл строчкой:
		<?php
			$lng_smile = core::load_lng('smile');
		?>

4. functions.php
	Добавлено
	<?php

    /*
      -----------------------------------------------------------------
      Обработка персональных смайлов смайлов by Fenixrus
      -----------------------------------------------------------------
     */

    public static function update_personal_smileys() {
        //Функция обновления кеша личных смайлов
        static $listSmile = array();
        static $personal_smileys=array();
        $ext = array('gif', 'jpg', 'jpeg', 'png'); // Список разрешенных расширений
        $path = '../images/smileys/user/personal/' . core::$user_id . '/';
        static $count;
        $listSmile = array_diff(scandir('../images/smileys/user/personal/' . core::$user_id . '/'), array('.', '..', 'index.php','cache.dat'));
        $count = count($listSmile);
        if ($count > 0) {

            foreach (glob($path.'*') as $value) {
                $file = basename($value);
                $name = explode(".", $file);
                if (in_array($name[1], $ext)) {
                    $personal_smileys[':' . $name[0]] = '<img src="'.$path.$file . '" alt="" />';
                    $personal_smileys[':' . self::trans($name[0]) . ':'] = '<img src="'.$path.$file . '" alt="" />';
                }
            }
            file_put_contents('../images/smileys/user/personal/' . core::$user_id . '/cache.dat', serialize($personal_smileys));
        }
    }

    public static function personal_smileys($str,$id_author) {
        //функция обработки личных смайлов
        static $personal_smileys_cache = array();
        $file = '../images/smileys/user/personal/' . $id_author . '/cache.dat';
        if (file_exists($file) && ($personal_smileys = file_get_contents($file)) !== FALSE) {
            $personal_smileys_cache = unserialize($personal_smileys);
            return strtr($str, $personal_smileys_cache);
        }
    }

?>


4.Как использовать?

Для обработки сообщения нужно вызвать функцию вот так

<?php
$text = functions::personal_smileys(ПАРАМЕТР_1, ПАРАМЕТР_2);
?>

ПАРАМЕТР_1 - это текст который обрабатываеться
ПАРАМЕТР_2 - это ID юзер который этот пост написал

Вот код из forum/new_index_fenixrus.php(это стандартый индекс только с обработкой персональных смайлов)
строка 624

<?php
	if ($set_user['smileys']){
	    $text = functions::personal_smileys($text, $res['user_id']); //обработка персональных
	    $text = functions::smileys($text, $res['rights'] ? 1 : 0); //обработка обычных
	}
?>

5.LINK: http://johncms.com/forum/index.php?id=864629