ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
83   •   Посмотреть все темы

🔒 ОБНОВЛЕНИЯ и НОВЫЕ ФУНКЦИИ!

 

20089
Dimitry @Dimitry
Мелкие доработки по использованию userid и не только (только для чатов 5й версии)

Внимание!!! Данное обновление является необходимым для решения проблем с открытием русских анкет через Firefox.
На данный момент были затронуты почти все скрипты и все места где было возможно сделать доступ по UserID.
Там где это не сделано, вероятно будет сделано со временем позже, и выложено в теме багов.

И так приступим:

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

2. Теперь загружаемые файлы через чат имеют приставку chat_, а через почту post_ (время для чистки таких файлов после их загрузки теперь разное, 3 дня и 30 дней соответственно)

3. Шаблон search.inc открытие анкеты по ID изменяем синее:
for(var i=0;i<u.length;i++) document.write("<a href=?inc=info&userid="+u[i][3]+" target=_blank><font color="+u[i][1]+">"+u[i][0]+"</font></a><br>");

4. Шаблон gb.inc открытие анкеты по ID изменяем синее:
posts[i]="<table width=500 align=center style='table-layout:fixed;'><tr><td class=title align=left width=150>"+g_p[i][3]+"<td class=title align=right> #"+g_p[i][0]+"</tr><tr><td width=150 valign=top align=left style=padding:10px;padding-left:4px;><a href=# onclick='put(\""+g_p[i][1]+", \"); return false;'><font color='"+g_p[i][4]+"'>"+g_p[i][1]+"</font></a> [<a href=?inc=info&userid="+g_p[i][8] +" target=info>?</a>]<br>"+avator+"</td><td valign=top align=left style='padding:10px;word-wrap:break-word;'>"+message+"<tr><td align=left>"+g_p[i][6]+"<td align=right>"+mod+"</table><br>";

5. Шаблон forum.inc открытие анкеты по ID изменяем синее:
posts[i]="<table width=90% align=center style='table-layout:fixed;'><tr><td class=title width=150 align=left><a name=post"+f_p[i][0]+" href=?inc=forum&forum="+forum+"&topic="+topic+"&post="+f_p[i][0]+"#post"+f_p[i][0]+" class=title>"+f_p[i][3]+"</a></td><td class=title align=right> #"+num+"</td></tr><tr><td width=150 valign=top align=left style=padding-top:10px;><a href=# onclick='put(\""+f_p[i][1]+", \"); return false;'>"+f_p[i][1]+"</a> [<a href=?inc=info&userid="+f_p[i][13]+" target=info>?</a>]<br>"+avator+name+mw+rang(f_p[i][1],f_p[i][7])+"Сообщений:"+f_p[i][7]+"<br> <a href=?inc=post&act=new&nick="+mynick+"&id="+myid+"&tonick="+f_p[i][1]+" target=pm><font class=low>Написать письмо</font></a><br><font class=low>"+f_p[i][6]+"</font>&nbsp;</td><td valign=top align=left style='padding:10px; word-wrap: break-word;'>"+message+"<tr><td align=left>"+isonline+"<td align=right>"+mod+"</td></tr></table><br>";

6. Для форума выводим последнюю активную тему в списке форумов, добавляем синее в шаблоне forum.inc:
lasttopic=""; if(f_f[i][11]) lasttopic="<a href=?inc=forum&forum="+f_f[i][0]+"&topic="+f_f[i][11]+">"+f_f[i][12]+"</a><br>"+f_f[i][5]+" от "+f_f[i][4]+"";
forums[f_f[i][0]]="<tr><td width=20><div class="+icon+"></div></td><td align=left> <a href=?inc=forum&forum="+f_f[i][0]+" onclick='return access("+i+");'>"+f_f[i][1]+"</a><br>"+f_f[i][2]+moders+"</td><td align=center>"+f_f[i][6]+"</td><td align=center>"+f_f[i][7]+"</td><td>"+lasttopic+"</td></tr>";

7. Доступ к никам в галеереи по ID, в шаблоне gallery.inc меняем синее:
(все текущие базы были переведены с использованием ID)
if(gal_upload>0) info+=" [<a href='?inc=info&userid="+x[8]+"' target='"+x[2]+"'>?</a>]";

....

posts[i]="<table width=500 align=center style='table-layout:fixed;'><tr><td class=title align=left width=150>"+g_p[i][3]+"</td><td class=title align=right> #"+g_p[i][0]+"</tr><tr><td width=150 valign=top align=left style=padding:10px;padding-left:4px;><a href=# onclick='put(\""+g_p[i][1]+", \"); return false;'><font color='"+g_p[i][4]+"'>"+g_p[i][1]+"</font></a> [<a href=?inc=info&userid="+g_p[i][10]+" target=info>?</a>]<br>"+avator+"</td><td valign=top align=left style='padding:10px;word-wrap:break-word;'>"+message+"</td></tr><tr><td align=left>"+g_p[i][6]+"</td><td align=right>"+mod+"</td></tr></table><br>";

8. Информер теперь также знает ID пользователей: (подробнее https://vmeste.eu/forum?pid=5680#p5680)
- в послед. зарегистрированных
- в именинниках
- в списке кто онлайн
- в последних сообщениях
- в выводе фотографий
- в выводе последних тем
(не реализовано только в списке забаненых и темах форума )

9. Внутри чата (шаблон chat.inc) теперь переменная yourkey содержит userid, кто использует yourkey, делать ничего не потребуется.
В противном случае можно составлять свои ссылки используя переменные userid и id.

10. Однако для использования userid в скриптах чата jscripts.dat, например для открытия анкеты по ID, следует найти все ниже указанные строки и добавить или изменить синее:
...

if(nick_r) {loaded=1; f(room_r,6,nick_r,'',inchat_r,'',color_r,'',mw_r,st_r,icon_r,status_r,love_r,clan_r,userid_r);loaded=0;}

...

function add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan,userid){
if(loaded==0) return;
var l=us.length;
for(var i = 0;i<l;i++ ) if(us[i]!=null && us[i][0]==nick) break;
us[i]=new Array(nick,colornick,st,mw,icon,status,room,love,clan,userid);
if (i==l) {uc++; update(room,1);}
if(room==myroom) {
nickid="!"+nick;
obj=document.getElementById(nickid);
var ul=document.getElementById('ul');
if(obj) ul.deleteRow(obj.rowIndex);
index=ul.rows.length;
seprules(1,st,mw);
var obj=ul.insertRow(index); obj.id=nickid;
format(i,obj);
}}

function del(nick,colornick,st,mw,icon,status,inchat,time,room,userid) {
if(loaded==0) return;
for(var i=0; i<us.length; i++)
if( us[i] != null && us[i][0] == nick ) {uc--; update(us[i][6],-1); us[i] = null; break;}
if(room==myroom) {
nickid="!"+nick;
obj=document.getElementById(nickid);
var ul=document.getElementById('ul');
ul.deleteRow(obj.rowIndex);
seprules(-1,st,mw);
}}


/* Добавление ника в таблицу участников */
function format(i,tr){
if(us[i]==null) return "";
nick=us[i][0];
color=us[i][1];
stat=us[i][2];
stat2=us[i][5];
mw_u=us[i][3];
icon=us[i][4];
love=us[i][7];
clan=us[i][8];
userid=us[i][9];

...

set_mw="<a href=index.php?inc=info&userid="+userid+" onclick=\"parent.wo(this.href,'Анкета','400','320','yes');return false;\" target="+us[i][0]+">"+mw+"</a>";

...

function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14,userid) {

...

add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan,userid);

...

del(nick,colornick,st,mw,icon,status,inchat,time,room,userid);

...

window.setTimeout("for(var i=0;i<us.length;i++) if(us[i]!=null) add(us[i][0],us[i][1],us[i][2],us[i][3],us[i][4],us[i][5],'','',us[i][6],us[i][7],us[i][8],us[i][9]);",500);

...

f(a[0]*1,a[1]*1,a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]);

...

20089
Dimitry @Dimitry
Добавление нового движка WebSocket (решение всех проблем с движками)
(Обновление доработано! Если вы уже установили данное обновление, переустановите его!)

Установка (выполнить нужно все 4 пункта)

1. В скрпитах чата jscripts.dat, сначала находим функцию onloaded() и изменяем строку на синюю:
/* Дозагрузка - выполняется после загрузки фрейма сообщений */
function onloaded() {
window.setTimeout('scrolled=1;',5000);
if(interval) {window.clearTimeout(interval); interval="";}
if(topic) wr(topic);
...

2. Далее для чатов 5й версии заменим полностью функции disconnect() и loadengines() в скриптах jscripts.dat (для старых версий в irc2.html)
Синим показано добавленное или изменённое, а зелёным рекомендуемое для отладки: (можно полностью заменить функции)

/* [NEW ENGINES - обработка и функции новых движков] */
var engine="";
var engine_url="";
var engine_uri="";

/* Обработчик ошибок подключения */
function disconnect(type,error) {
if(type=="io") {wr("<font color=red>Ошибка подключения к серверу "+error+", подождите окончания загрузки ...</font>"); }
else if(type=="security") {return; wr("<font color=red>Ошибка безопасности при подключении к серверу "+error+", подождите окончания загрузки ...</font>"); }
else if(!interval) {
wr("<font color=red>По какой то причине Вы были отключены от сервера, переподключение через <b id=restarter>10</b> секунд ...</font>");
interval=window.setInterval("var obj=document.getElementById('restarter'); obj.innerHTML=obj.innerHTML-1; if(obj.innerHTML<=0) loadframes();",1000);
}
}



...


/* Определение и загрузка движков чата */
var ws="";
function loadengine() {
//fix for reconnect
if(ws) ws.onclose = function(e) {};
if(engine=="postMessage") parent.left.location.href="about:blank";
if(engine=="flash" && myObject) myObject.close();
if(ajaxon) window.clearInterval(ajaxon);
//load new engine
var flashver=0; var ver = swfobject.getFlashPlayerVersion(); if(ver["major"]) flashver=ver['major'] +"."+ ver['minor'] +"."+ ver['release'];
var browser=navigator.userAgent.match(/(Chrome|Firefox|Opera|Safari|MSIE|K-Meleon)( |\/)(\w+\.\w+)/i); if(!browser) var browser=new Array('','unknown','',0);
if(!engine_on) {
if(window.WebSocket && (!window.chrome || browser[3]>=16)) engine_on="WebSocket";
else if(window.postMessage && window.chrome) engine_on="postMessage";
else if(flashver) engine_on="flash";
else engine_on="ajax";
}
wr("<font color=green>Браузер <b>"+browser[1]+"/"+browser[3]+"</b>, версия <b>Flash "+flashver+"</b>, движок <b>"+engine_on+"</b>, подключение ...</font>");
engine=engine_on;

engine_uri="/?sess="+myid+"&engine="+engine;
engine_url="http://"+engine_host+":"+engine_port+engine_uri;
if(engine=="WebSocket") {
ws = new WebSocket("ws://"+engine_host+":"+engine_port+engine_uri);
ws.onopen = function(e) {};
ws.onmessage = function(e) {eval(e.data.replace(new RegExp('<scr'+'ipt>','gm'),'').replace(new RegExp('</scr'+'ipt>','gm'),''));};
ws.onerror = function(e) {disconnect("io","websocket");};
ws.onclose = function(e) {window.setTimeout("disconnect();",1000);};
}

if(engine=="postMessage") parent.left.location.href=engine_url+"&r="+Math.random();
if(engine=="flash") {
if(!document.getElementById('socket')) {var newdiv = document.createElement('div'); newdiv.setAttribute('id','socket'); document.body.appendChild(newdiv);}
swfobject.embedSWF("socket.swf?"+Math.random(), "socket", "0", "0", "9", "expressInstall.swf", {scope:"myObject"}, {allowscriptaccess:"always"});
window.onunload=function(){myObject.close();}
}
if(engine=="ajax") {
if(engine_path) engine_url="/"+engine_path+"?sess="+myid+"&engine="+engine;
if(ajaxon) window.clearInterval(ajaxon);
ajax(engine_url+"&start=1&r="+Math.random());
ajaxon=window.setInterval('ajax(engine_url+"&r="+Math.random());',10000);
}
}

3. Ну этот шаг простой но рекомендуемый, в chat.inc (в старых версиях irc2.html) там где грузятся сообщения, если там пусто, написать Загрузка..., так:
<!-- LEFT FRAME -->
<div id=leftdiv class=header-body style="position:absolute; overflow-y:scroll; padding-left:10px; left:0px; right:295px; top:45px; bottom:65px; border:1px gray solid;">
Загрузка ...
</div>

4. Возвращаемся к скриптам чатов jscripts.dat и перед движками, меняем красное на синее:
(в старых версиях возможны отличия которые нужно внимательно сравнить и вероятно оставить без изменения)

/* Проверка непрерывного соединения */
interval=window.setTimeout(
'if(!ajaxon && confirm("Проблема подключения к потоковому движку на порту "+engine_port+". Нажмите OK если хотите перейти на Ajax движок или Отмена для продолжения загрузки.")) {engine_on="ajax"; loadframes();} '+
'else alert("Не удалось подключиться к потоковому движку на порту "+engine_port+" или Ваш браузер просто не поддерживает новые технологии. Попробуйте использовать браузер Google Chrome.");'
,1000*10); /* Время для проверки потокового движка 10 сек */
/* Загрузка движка сообщений */
document.getElementById("leftdiv").innerHTML='Загрузка ...';
loadengine();
}
var interval=window.setTimeout("if(confirm('Чат не был загружен в установленное время, вероятно некоторые элементы страницы грузятся очень долго, продолжить загрузку?')) loadframes();",10000);

на
/* Проверка непрерывного соединения */
interval=window.setTimeout(
'if(engine_on!="ajax" && !ajaxon) {wr("<font color=red>Проблема подключения к потоковому движку на порту "+engine_port+". Пробуем подключиться через <b>ajax</b> движок ...</font>"); window.setTimeout("engine_on=\\"ajax\\"; loadframes();",5000);} ' +
'else wr("<font color=red>Не удалось подключиться к движку чата, вероятно Ваш браузер просто не поддерживает новые технологии.<br>Попробуйте использовать новый современный браузер <a href=http://google.com/chrome target=_blank>Google Chrome</a>.</font>");'
,1000*10); /* Время для проверки потокового движка 10 сек */
/* Загрузка движка сообщений */
document.getElementById("leftdiv").innerHTML='Загрузка ...';
loadengine();
}
var interval=window.setTimeout('wr("<font color=red>Чат не был загружен в установленное время, вероятно некоторые элементы страницы грузятся очень долго, <a href=# onclick=\'loadframes(); return false;\'>нажмите для продолжения</a> ...</font>");',10000);

Как работает новая система оповещения о проблемах и смены движков

Ддя начала следует сказать что теперь при отключении от чата, при плохой связи, или при перезагрузке севрера, больше нет алерта, а начинается отсчёт 10 секунд после которого окно автоматически переподключается! Вот пример:
По какой то причине Вы были отключены от сервера, переподключение через 10 секунд ...

Далее опишем саму процедуру проблемных подключений к чату:

1. Пользователь входит в чат и видит в окне сообщений слово:
Загрузка ...

2. Если сам чат не может загрузиться за 10 секунд, например много картинок или внешние файлы которые не грузятся, то пользователь увидит в окне:
Загрузка ...
Чат не был загружен в установленное время, вероятно некоторые элементы страницы грузятся очень долго, нажмите для продолжения ...

3. Если пользователь ничего не нажмёт то чат ещё может сам загрузиться, если нажмёт, то сразу начнётся загрузка и подключение движка, т.е. стартанёт loadframes();
Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок WebSocket, подключение ...

4. Спустя 10 секунд, если сообщения не загрузились в окне будет так:
Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок WebSocket, подключение ...
Проблема подключения к потоковому движку на порту 7777. Пробуем подключиться через ajax движок ...

5. Ура!!! Ничего делать не нужно, через 5 секунд будет автоматическая загрузка ajax движка, окно выглядит так:
Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок ajax, подключение ...

6. В случае если и ajax движок не загрузится за 10 секунд, в окне будет так:
Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок ajax, подключение ...
Не удалось подключиться к движку чата, вероятно Ваш браузер просто не поддерживает новые технологии.
Попробуйте использовать новый современный браузер Google Chrome.

7. The End. Такое практически исключено, так как ажакс движок работает во всех браузерах, ну не считая конечно IE 5.

Все таймеры можно изменять на своё усмотрение, например увеличить для загрузки чата, если в чате очень много картинок большого размера.
В результате, если у пользователя нет никаких проблем с потоковыми движками, он просто увидит моргнувшую зелёную надпись, а может и не увидит вообще. Если же порт 7777 заблокирован, например человек заходит с работы, то будет та самая красная надпись на 5 секунд, а после неё загрузится ажакс.
Прощай надоедливые алерты и мороки с выбором движков, в этом обновлении система автоматически выберет идеальный движок и запустит чат без лишних движений! Различные селекты и кнопки переключения движков при входе и внутри чата, теперь больше не нужны.

20089
Dimitry @Dimitry
Добавление LIVE уведомлений в чат

В чат приходят мгновенные уведомления о новой почте (включая подарки и загс), о новых регистрациях, о новых сообщениях в гостевой и форуме, о вступлении пользователя в сообщество, и добавлении пользователями новых фотографий! Можно много на что прикрутить данную фишку, но я пока сделал на самое основное! Все уведомления приходят для всех пользователей, но для почтовых уведомлений присутствует условие - только для получателя.

В скриптах чата jscripts.dat в функции f() в самом конце перед /* Конец функции f() */ добавляем этот код:

/* Функция вывода уведомлений */
if(cmd==11) {
if(text=="post" && tonick==mynick) wr(set_time+"Уведомление: <i>У Вас новая почта от <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> с заголовком \"<a href=?inc=post&"+yourkey+"&read="+var10+" target=_blank>"+var9+"</a>\"</i><br>");
if(text=="reg") wr(set_time+"Уведомление: <i>Зарегистрировался новый пользователь <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a>.</i><br>");
if(text=="clan") wr(set_time+"Уведомление: <i>Пользователь <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> вступил в сообщество \""+var9+"\".</i><br>");
if(text=="gallery") wr(set_time+"Уведомление: <i>Пользователь <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> добавил новую <a href=?inc=gallery&gallery="+nick+"&foto="+var9+" target=_blank>фотографию</a> в галерею.</i><br>");
if(text=="gb") wr(set_time+"Уведомление: <i>Новое сообщение от <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> в <a href=?inc=gb target=_blank>гостевой</a>.</i><br>");
if(text=="forum") wr(set_time+"Уведомление: <i>Новое сообщение от <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> в теме форума \"<a href=?inc=forum&forum="+var11+"&topic="+var10+"&post="+var12+"#post"+var12+" target=_blank>"+var9+"</a>\"</i><br>");
}

20089
Dimitry @Dimitry
Поставим запятую в развитии mpchat - переход на UTF-8 (все чаты переведены на UTF-8)

Наступил новый год и была создана копия движка чата в кодировке UTF-8.
Все чаты с 31.01.13 работают только на UTF-8 кодировке, восстановление старых чатов больше не выполняется.

20089
Dimitry @Dimitry
Новая функция транслитерации текста в реальном времени
- данный транслит поддерживается всеми браузермани кроме IE<9
- пример можно увидеть в главном чате - кнопка TR, обновление только для безфреймовых чатов

1. в скриптах чата jscripts.dat в функциях нижнего фрейма находим такой код:
/* Транслирует текст на русский по звучанию */
document.write("<"+"script src=http://mpchat.com/blank/translit.js></"+"script>");
function translit(msg){
if (document.fmsg.trans.value == 1 && msg) {
for (i=0; i<engRegSmall.length; i++) {msg = msg.replace(engRegSmall[i], rusSmall[i])}
for (i=0; i<engRegBig.length; i++) {msg = msg.replace(engRegBig[i], rusBig[i])}
}
return msg;
}

и заменяем на такой
/* Транслирует текст на русский по звучанию */
var tr={'а':'a','б':'b','в':'v','г':'g','д':'d','е':'e','ё':'jo','ж':'zh','з':'z','и':'i','й':'j','к':'k','л':'l','м':'m','н':'n','о':'o','п':'p','р':'r','с':'s','т':'t','у':'u','ф':'f','х':'h','ц':'c','ш':'sh','щ':'w','ы':'y','ь':"'",'ъ':"''",'э':'je','ю':'ju','я':'ja'};
var enabletrans=0;
function checktrans() {
var obj=document.getElementById('trbutton');
if(enabletrans==1) {enabletrans=0; obj.style.fontWeight='normal';}
else {enabletrans=1; obj.style.fontWeight='bold';}
document.fmsg.text0.focus();
}
function autotrans(el,e) {
var e=e || window.event;
var code = e.which;
if(typeof el.selectionStart != "number" || !((code>=65 && code<=123) || code==35 || code==39)) return true;
var txt=String.fromCharCode(code);
var pos=el.selectionStart;
el.value=el.value.substr(0,el.selectionStart)+el.value.substr(el.selectionEnd);
var pre=""; if(pos) {pre=el.value.substr(pos-1,1); if(tr[pre]) pre=tr[pre]; else pre="";}
var pretxt = pre+txt; var r=""; var del=0;
if(pretxt.length==2) for(k in tr) if(tr[k]==pretxt) {r=k; del=1; break;}
if(!r) for(k in tr) if(tr[k]==txt) {r=k; break;}
el.value=el.value.substr(0,pos-del)+r+el.value.substr(pos);
pos=pos+1-del; el.setSelectionRange(pos, pos);
return false;
}

2. далее чуть ниже в функции msg_send удаляем такую строку:
msg_text=translit(msg_text);

3. теперь открываем шаблон чата внутри chat.inc и перед <!-- CHAT FRAME --> добавляем:

<!-- TRANSLIT HELP -->
<script>
var out='<table id=trlist style="display:none; position:absolute; z-index:10; right:10px; bottom:55px; ">';
out+='<tr>'; for(i in tr) out+='<td>'+i+'</td>'; out+='</tr>';
out+='<tr>'; for(i in tr) out+='<td>'+tr[i]+'</td>'; out+='</tr>';
out+='</table>';
document.write(out);
</script>

4. ниже в любом месте добавляем кнопку TR
<input id=trbutton type=button onclick="checktrans();" onmouseover="var obj=document.getElementById('trlist'); obj.style.display='inline-table';" onmouseout="var obj=document.getElementById('trlist'); obj.style.display='none';" value="TR" title="Включить автоматическую транслитерацию Ctrl+Alt">

5. ну и само поле ввода текста должно выглядеть так: (синее добавлено)
<input type=text name=text0 maxlength=500 style="width:400px;" onkeypress="if(enabletrans) return autotrans(this,event);" onkeydown="if(event.ctrlKey && event.altKey) {checktrans(); return false;}">

20089
Dimitry @Dimitry
Переход викторины на WebSocket с полным редактированием

В связи с тем что старый движок викторины значительно устарел, викторина была переведена на новый движок через WebSocket.
Старый движок больше не работает, поэтому всем кто использует викторину необходимо провести это обновление:

1. В файле стилей style.css меняем #gamecode на #gamediv:
(это действие выполнено автоматически, но можно проверить всё ли нормально)
/* стиль для игры - викторина */
#gamediv table {border-collapse:collapse;}
#gamediv td {padding:2px; font:18px Verdana;text-align:center; width:20px; height:15px;}

2. В файле chat.inc вырезаем iframe, находим такой кусок кода:
(это действие выполнено автоматически, но можно проверить всё ли нормально)
<!-- GAME FRAME -->
<div id=gamediv class=header-body style="position:absolute; height:60px; left:0px; right:295px; top:45px; display:none; z-index:1; border:1px gray solid;">
<iframe name=gameframe src=start.html style="position:absolute; width:100%; height:100%; border:0px;"></iframe>
</div>

и заменяем на этот код:
<!-- GAME FRAME -->
<div id=gamediv class=header-body style="position:absolute; padding:10px 10px 0 10px; height:60px; left:0px; right:295px; top:45px; display:none; z-index:1; background-color:inherit; border:1px gray solid;">
</div
>

3. В скриптах чата jscripts.dat находим такой кусок кода:
/* Загружает викторину в верхушку чата */
var gameon=0;
function startgame(){
if(gameon==0){
gameframe.location.href='http://'+engine_host+':'+engine_port+'/?chat='+chatlogin;
gameon=1; document.getElementById('gamediv').style.display="block";
}
else {
gameframe.location.href='start.html';
gameon=0; document.getElementById('gamediv').style.display="none";
}
}

заменяем на новый код:
/* Загружает викторину в верхушку чата */
var gameon=0;
var gamews="";
function startgame() {
if(gameon==0){
if(!window.WebSocket) return false;
gameon=1; document.getElementById('gamediv').style.display="block";
document.getElementById('gamediv').innerHTML='Загрузка...';
if(location.protocol=="https:") gamews = new WebSocket("wss://"+engine_host+":"+(engine_port+1)+"/?app=game&chat="+chatlogin+"&engine=WebSocket"); else
gamews = new WebSocket("ws://"+engine_host+":"+engine_port+"/?app=game&chat="+chatlogin+"&engine=WebSocket");
gamews.onmessage = function(e) {eval(e.data.replace(new RegExp('<scr'+'ipt>','gm'),'').replace(new RegExp('</scr'+'ipt>','gm'),''));};
}
else {
gameon=0; document.getElementById('gamediv').style.display="none";
if(gamews) {gamews.close(); gamews="";}
}
}
function setgame(sec,word,ask) {
if(ask) document.getElementById('gamediv').innerHTML='<div id=gameword></div><a href=? onclick="alert(\'Чтобы ответить на вопрос вы должны в течении указанного времени ввести предполагаемое слово или фразу в поле ввода чата поставив перед ним знак процента! (Например:%ответ) Не забудьте включить транслит, если у вас нет русских букв! Рейтинг викторины находится в Топ100 участников. Более 100 000 вопросов не дадут вам скучать.\'); return false;">[?]</a> <font size=2 face=Verdana>'+ask+'</font>';
var obj=document.getElementById('gameword'); if(!obj) return;
var sym=''; var html='<table border=1><tr>';
for(i=0;i<word.length;i++){
sym=word.substr(i,1); if(sym==' ') sym='&nbsp;';
html+='<td>'+sym+'</td>';
}
obj.innerHTML=html+'<td style=color:red>'+sec+'</td></tr></table>';
}

4. Это действие только для выкупленных чатов, добавляем в файле write.php синее:
$check=0; if($txt) $check=(int)file_get_contents("http://$config[engine_host]:$config[engine_port]/?app=game&chat=$chat&word=".urlencode($txt)."&hash=$config[engine_hash]",false,stream_context_create($opt));

Если вы всё сделали правильно, то викторина будет работать.

20089
Dimitry @Dimitry
Изменения в сервисе с целью перехода на Mpchat CMS 6 версию сервиса для совместимости

Около года назад были разработаны некоторые отдельные части системы, но по сей день они не интегрированы в сервис.
Чтобы поставить точку в старых разработках, я решил всё таки доделать и вставить данные новшества, обозвав новую версию Mpchat CMS v6.

Особенности новой версии системы Mpchat CMS 6
- общий шаблонизатор для inc файлов putinclude() и компоненты CMS шаблонов
- добавлена переменная %loadtime% для всех шаблонов
- добавлена вставка переменных шаблонов (title|keys|description|...)
- новая динамическая система комментариев с MySQL (которая будет использоваться везде)
- api.js - базовый JS модуль для системы CMS (подключает JSLib.js мини аналог jQuery), содержит функции авторизации и комментариев
- общая динамическая система авторизации через Cookie (гостем или пользователем)
- легкий ключ (i_aidn) теперь генерируется через api.js и хранится в Cookie
- вход в чат теперь возможен просто перейдя по ссылке, вводить данные или использовать <form> больше ненужно
- используется корень системы в качестве базы для API <base href="./">
- Загружено за теперь ссумирует время информера и время шаблонного скрипта
- ошибки теперь выводятся в редактируемый шаблон error.inc
- зарезервирована переменная $r для выдачи API запросов или возврата в функциях
- вырезана возможность перехода на UTF-8 (давно все перешли)
- зарезервирована переменная $cfg массив в котором теперь хранятся все настройки
- изменены все участки кода работы с settings.sys, теперь для этого есть функция getconfig() и setconfig()
- новый файл настроек config.sys будет в формате json (старый settings.sys был в текстовом)
- настройки анкеты теперь принимают input поле type=color, таким образом можно удобно выбирать цвет средствами браузера
- движок теперь не проверяет IP адрес по умолчанию, но можно настроить проверку IP провайдера, или как раньше жёскую проверку (не рекомендуется)
- движок теперь поддерживает Websocket соединения на стандартном порту 443 (тестируется), ajax планируется удалить совсем, если упадёт спрос!
- сервис больше не даёт выбор движка пользователю, даже в мобильной версии, поэтому необходимо исправить функцию loadframes() в mobile.inc
- галочка запомнить ник больше не нужна, запоминание через COOKIE активно всегда, поэтому вход одновременно несколькими никами больше не возможен, для второго ника нужно открыть другой браузер
- все скрипты более не нуждаются в параметрах сессий id и sess и переменных $sess, $id, %id% и %myid%, можно удалять из шаблонов и ссылок везде кроме скриптов jscripts.dat (там myid нужен для движка), а также определитель старой авторизации в informer.php, gb.inc, forum.inc, gallery.inc
- параметр engrus_on теперь включен всегда, т.е. совместное использование латиницы и кирилицы запрещено для всех


Шаблоны
index.inc - в шаблон добавлены вставки header и body, а также вставлено содержимое из файла index.html (удалён) вместо %include%
feedback.inc - в шаблон добавлены вставки header и body
top100.inc - в шаблон добавлены вставки header и body
search.inc - в шаблон добавлены вставки header и body
who.inc - в шаблон добавлены вставки header и body
reg.inc - в шаблон добавлены вставки header и body
mail.inc - в шаблон добавлены вставки header и body
gb.inc - шаблон гостевой полностью переписан с header и body и использованием новой библиотеки api.js с поддержкой новой системы комментариев и динамической авторизации (без перезагрузки страницы)
gallery.inc - шаблон галереи частично переписан с header и body и использованием новой библиотеки api.js с поддержкой новой системы комментариев и динамической авторизации (без перезагрузки страницы), кроме этого загрузка фото и ссылки на галереи теперь привязаны к ID пользователя
info.inc - в шаблон анкеты добавлен api.js и комментарии к анкете
error.inc - новый шаблон страницы ошибок, добавлены вставки header и body
exit.inc - новый шаблон страницы выхода из чата или выхода при бане, добавлены вставки header и body (переименован из exit.html)
prav.inc - новый шаблон страницы правил чата, добавлены вставки header и body (переименован из prav.html)
help.inc - новый шаблон страницы помощи чата, добавлены вставки header и body (переименован из help.html)

PHP файлы
informer.php - добавлена поддержка json и jsonp через json=1 и jsonp=varname соответственно, добавлены переменные авторизации
feedback.php - удалёна вставка JS переменных var mynick='$mpnick'; var myid='$id'; var xcode='';
top100.php - удалёна вставка JS переменных var loadtime='$loadtime'; var mynick='$mpnick';\nvar myid='$id';\n
search.php - удалёна вставка JS переменных var loadtime='$loadtime';
gb.php - СКРИПТ УСТАРЕЛ И БУДЕТ ПОЛНОСТЮ УДАЛЁН, а пока удалена вставка JS переменных var loadtime='$loadtime';
reg.php - удалёна вставка JS переменных var xcode='';
mail.php - удалёна вставка JS переменных var xcode='';
index_chat.php - СКРИПТ УДАЛЁН, функционал внедрён в ini.php


Изменения в скриптах и шаблонах чата для перехода на новую версию
(для чатов размещенных на сервисе выполняются автоматически)

1. Переименовываем файл exit.html в exit.inc, а потом в скриптах чатов jscripts.dat и шаблоне чата chat.inc находим exit.html? и заменяем на ?inc=exit&
2. В шаблоне exit.inc заменим var nick=get['nick']; на var nick='%mynick%';
3. В шаблоне gallery.inc находим строку и заменяем 2 на 8.
info+="<a href=?inc=gallery&gallery="+x[2]+">"+x[2]+"</a>";

а также находим строку и заменяем 0 на 2
for(var i=0;i<g_g.length;i++) wr("<a href='?inc=gallery&gallery="+g_g[i][0]+"'>"+g_g[i][0]+"("+g_g[i][1]+")</a> ");

а также чуть ниже найдём похожую строку и добавим синее:
if(gallery) wr("<b>"+galleryname+"</b><br><br>");

ещё ниже найдём строку и заменим mynick на myuserid:
if(mynick) wr("<b>"+mynick+"</b> (<a href=?inc=gallery&gallery="+mynick+">моя галерея</a>)");

4. В шаблоне info.inc найдём gallery=%nick% и заменим на gallery=%userid%

20089
Dimitry @Dimitry
Ускоренная загрузка чата и отключение AJAX движка

Технология WebSocket есть практически в каждом браузере, её популярность достигает 98% и постоянно растёт, в связи с этим пришло время отказаться от комплексного решения с использованием старого AJAX движка. Движок вскоре будет удалён из системы, а поэтому рекомендуется привести в порядок скрипты чата. Кроме этого были произведены изменения по ускорению загрузки чата с медленным интернетом.

Что будет если не сделать это обновление?

В случае если вы не сделаете это обновление, после полного отключения движка AJAX, примерно у 3% пользователей чат не будет загружаться вообще, а также чат не будет загружаться достаточно быстро на медленном интернете.

Обновление

На всякий случай, перед обновлением, сохраните ваши скрипты чата на ПК.

1. Откроем шаблон чат внутри chat.inc и найдя тег body удалим в нем красное:
<body class=chat-body style="margin:0px; padding:0px; overflow:hidden;" onload="document.fmsg.text0.focus(); loadframes();">

(красное удалено автоматически для всех чатов на сервисе)
-----------

2. Ваш чат перестал загружаться как следует, не пугайтесь! Так и должно быть, проведя изменения в этом шаге, всё опять заработает.
Открываем скрипты чата jscripts.dat и идём в самый низ, будьте внимательны, удалите красное, обновите синее и добавьте новый зеленый код.
/* Подготовка таблицы никлиста */
uc = 0;
us = new Array();
ucc= new Array();
document.getElementById('users').innerHTML=userlist;
/* Проверка непрерывного соединения */
interval=window.setTimeout('wr("<font color=red>Не удалось подключиться к движку чата.<br>Попробуйте использовать новый современный браузер <a href=https://www.google.com/chrome target=_blank>Google Chrome</a>.</font>");',10000);

/* Загрузка движка сообщений */
document.getElementById("leftdiv").innerHTML='Загрузка ...';
loadengine();
}
var interval=window.setTimeout('wr("<font color=red>Чат не был загружен в установленное время, вероятно некоторые элементы страницы грузятся очень долго, <a href=# onclick=\'loadframes(); return false;\'>нажмите для продолжения</a> ...</font>");',10000);

/* [NEW ENGINES - обработка и функции новых движков] */
var engine="";
var engine_url="";
var engine_uri="";

/* Обработчик ошибок подключения */
function disconnect(type,error) {
if(type=="io") {wr("<font color=red>Ошибка подключения к серверу "+error+", подождите окончания загрузки ...</font>"); }
else if(type=="security") {return; wr("<font color=red>Ошибка безопасности при подключении к серверу "+error+", подождите окончания загрузки ...</font>"); }
else if(!interval) {
wr("<font color=red>По какой то причине Вы были отключены от сервера, переподключение через <b id=restarter>10</b> секунд ...</font>");
interval=window.setInterval("var obj=document.getElementById('restarter'); obj.innerHTML=obj.innerHTML-1; if(obj.innerHTML<=0) loadframes();",1000);
}
}

/* Анализ полученной строки и передача в функцию f() */
function r(msg) {
if(msg=="started") {document.getElementById("leftdiv").innerHTML=""; return;}
if(msg=="loaded") {up(); loaded=1; return;}
if(msg=="disconnected") {if(ajaxon) window.clearInterval(ajaxon); disconnect(); return;}
var a=msg.split('|');
f(a[0]*1,a[1]*1,a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]);
}

/* Обработчик AJAX подключений */
var ajaxon=0;
var ajaxreq=0;
function ajax(url,post) {
if(!XMLHttpRequest) {alert("Ваш браузер не поддерживает технологию Ajax, попробуйте обновить браузер!"); return false;}
var http = new XMLHttpRequest();
//IE8+ Crossdomain fix
var XDR=0; if(!engine_path && window.XDomainRequest) {http = new XDomainRequest();XDR=1;}
//check run and get request
if(!url) url=engine_url+"&r="+Math.random();
if(ajaxreq) return; ajaxreq=1;
http.open('GET', url, true);
var response = function() {
if(http.readyState && http.readyState != 4) return;
var msg=http.responseText;
eval(msg.replace(new RegExp('<scr'+'ipt>','gm'),'').replace(new RegExp('</scr'+'ipt>','gm'),''));
ajaxreq=0;
}
if(XDR) http.onload = response;
else http.onreadystatechange = response;
http.send(post);
}


/* Определение и загрузка движков чата */
var ws="";
function loadengine() {
//fix for reconnect
if(ws) ws.onclose = function(e) {};
if(ajaxon) window.clearInterval(ajaxon);
//load new engine
var browser=navigator.userAgent.match(/(Chrome|Firefox|Opera|Safari|MSIE|K-Meleon)( |\/)(\w+\.\w+)/i); if(!browser) var browser=new Array('','unknown','',0);
if(!engine_on) {
if(window.WebSocket) engine_on="WebSocket";
else { wr("<font color=red>Ваш браузер не поддерживает технологию WebSocket.<br>Попробуйте использовать новый современный браузер <a href=https://www.google.com/chrome target=_blank>Google Chrome</a>.</font>"); return; }
}

wr("<font color=green>Браузер <b>"+browser[1]+"/"+browser[3]+"</b>, движок <b>"+engine_on+"</b>, подключение ...</font>");
engine=engine_on;
engine_uri="/?chat="+chatlogin+"&sess="+myid+"&engine="+engine;
engine_url="http://"+engine_host+":"+engine_port+engine_uri;
if(engine=="WebSocket") {
if(location.protocol=="https:") ws = new WebSocket("wss://"+engine_host+":"+(engine_port+1)+engine_uri); else
ws = new WebSocket("ws://"+engine_host+":"+engine_port+engine_uri);
ws.onopen = function(e) {};
ws.onmessage = function(e) {eval(e.data.replace(new RegExp('<scr'+'ipt>','gm'),'').replace(new RegExp('</scr'+'ipt>','gm'),''));};
ws.onerror = function(e) {disconnect("io","websocket");};
ws.onclose = function(e) {window.setTimeout("disconnect();",1000);};
}
if(engine=="ajax") {
if(engine_path) engine_url="/"+engine_path+"?chat="+chatlogin+"&sess="+myid+"&engine="+engine;
if(ajaxon) window.clearInterval(ajaxon);
ajax(engine_url+"&start=1&r="+Math.random());
ajaxon=window.setInterval('ajax(engine_url+"&r="+Math.random());',10000);
}

}

/* Загрузка чата сразу после загрузки HTML */
if(document.addEventListener) document.addEventListener('DOMContentLoaded', loadframes, false);
else if(document.attachEvent) document.attachEvent('onreadystatechange', loadframes);

(зеленое добавлено автоматически для всех чатов на сервисе)
-----------

3. Теперь открываем шаблон мобильной версии mobile.inc и повторяем шаги 1 и 2. (всё в одном шаблоне)
Также следует убрать выбор движка который находится почти в самом низу шаблона, просто удаляем этот ненужный код:
Движок<br>
<select name=engine_on style="width:140px;">
<option value="">непрерывный</option>
<option value="ajax">AJAX движок</option>
</select><br>

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

20089
Dimitry @Dimitry
Переход на SSL https, отказ от Flash технологии и полезные советы

Переход на SSL - завершен

Для всех субдоменов mpchat.com был куплен SSL сертификат, SSL уже работает.
С сегодняшнего дня, все чаты работающие на бесплтаных доменах mpchat автоматически перенаправляются на https соединение на поддомен вида ********** Чаты у которых свой собственный домен, могут активировать в параметрах SSL для всех доменов и поставить галочку - перенаправлять всех на главный домен с https. Кроме этого, для очень старых чатов с использованием irc2.html автоматически исправлена загрузка через SSL. Теперь эти чаты также работают. Проверьте работу вашего чата, а также ссылки в админ панели.

Конец для flash - эпилог

Как уже и так многие вкурсе, флеш уже давно не жилец, если он и работает у 30% посетителей, то не всегда и не все скрипты.
В связи с этим мы перешли только на HTML5 технологии, и теперь можно избавиться от Flash полностью.
Всем кто использует где либо флеш в своих чатах рекомендуется его заменить на HTML5 решения.
Чуть подробнее про смерть flash тут: **********

Зачистка Flash

Старый сервер вебкамер работающий через Flash уже отключен.

Все сервисные ненужные флеш файлы удалены из системы:
mpchat.com/blank/player.swf
mpchat.com/blank/color.swf
mpchat.com/blank/webcam.swf
mpchat.com/blank/expressInstall.swf

Если кто-то начнёт чудить и всё таки захочет использовать эти ненужные файлы, их можно скачать с архива по ссылке.
**********

Перестали работать звуки от Pegass или другие звуки на базе flash player.swf?

Замените в коде строчку:
document.getElementById("Sound").innerHTML="<embed type='application/x-shockwave-flash' src='https://mpchat.com/blank/player.swf' allowfullscreen='false' flashvars='file="+sound+"&autostart=true' width='0' height='0'>";

на эту
document.getElementById("Sound").innerHTML="<audio src='"+sound+"' autoplay>";

Если у вас другая строка, заменяйте тег embed или object по аналогии на audio.
Искать и удалять флеш файлы в коде можно по слову .swf.

Полезные советы для совместимости и избежания проблем

- больше не используйте flash скрипты в чатах
- все стили, картинки и прочие элементы старайтесь загружать только в чат
- используйте по возможности короткие URL адреса всегда без домена, например: "img/fon.jpg", "styles/style.css", "js/script.js", "?inc=forum"
- если необходимо использовать полный URL адрес с чужим доменом, старайтесь указывать его с https:// (если поддерживает)

У вас не загружается чат?

Если ваш чат после данных обновлений перестал загружаться, и вы не можете в этом никак разобраться, можно просто восставноить стандартные скрипты и шаблон внутри чата. Если же вы не хотите этого делать, напишите мне лично, я постараюсь помочь в решении критических проблем с загрузкой чата!!!
(в зависимости от объёма работы, бесплатно или платно)

20089
Dimitry @Dimitry
Вебкамеры v2.1 через новую HTML5 WebRTC технологию (без flash) и переход на защищенное SSL соединение

Обновление доработано (необходимо повторить)
- вебкамеры теперь отображаются в виде окон
- добавлена возможность вывода сообщения: Смотрю вашу вебкамеру.
- добавлено правильное закрытие просмотра вебкамер для разных случаев
- добавлено описание простой установки модальных вебкамер от Pegass поверх стандарта (пункт 4)


Новые вебкамеры будут доступны на всех тарифах, включая тариф Стандарт.
Побробнее о новой вверсии в этой теме: https://vmeste.eu/forum?tid=17997

Установка

Замена стандартного кода проходит очень просто:

1. В скриптах чата jscripts.dat находим Разрешение на приватный просмотр и добавляем 2 синие строчки:
/* Разрешение на приватный просмотр вебкамеры */
if(webcam && cmd==1) {
if(text.indexOf("nocam")!=-1) text=text.replace("nocam","Просмотр не разрешен.");
if(text.indexOf("yescam")!=-1) {var key=text.split("yescam"); text=text.replace("yescam"+key[1],"Просмотр разрешен."); if(tonick==mynick) text+=" (<a href=# onclick='loadvideo(\"webcam"+nick+"\",\""+webcamhost+"\",\""+nick+"\",0,\""+key[1]+"\"); return false;'>Начать просмотр</a>)";}
if(text.indexOf("privatcam")!=-1) {text=text.replace("privatcam","Прошу разрешить просмотр вещания."); if(tonick==mynick) text+=" (<a href=# onclick='window.hidden.location.href = \"index.php?inc=write&r="+Math.random()+"&text=/privat "+nick+": yescam\"+privatcamkey;return false;'>Да</a> | <a href=# onclick='window.hidden.location.href = \"index.php?inc=write&r="+Math.random()+"&text=/privat "+nick+": nocam\";return false;'>Нет</a>)";}
if(text.indexOf("iseeyourcam")!=-1) text = text.replace("iseeyourcam","Смотрю вашу трансляцию.</i>");
}
if(cmd==7 || cmd==8 || cmd==10) loadvideo("webcam"+nick,"",nick);

-----------------

2. Далее в скриптах чата jscripts.dat выберите в поле быстрого перехода "Функции - нижнего фрейма" и прокрутите вниз до блока /* Функция включения и выключения вебкамер */ Затем замените найденный блок целиком на нижеуказанный:

/* Функция включения и выключения вебкамер */
document.write("<scr"+"ipt src=https://myradio24.com/player/webcam.js?"+Math.random()+"></scr"+"ipt>");
function loadvideo(obj,host,nick,rec,key) {
var sharekey=""; if(nick) sharekey=nick; if(key) sharekey+="_"+key;
var nickid=0; for(var i=0; i<sharekey.length; i++) nickid=(nickid*31+sharekey.charCodeAt(i))|0; nickid=Math.abs(nickid);
var camid="mpchat-"+chatlogin+"_"+nickid;
var obj1=document.getElementById(obj);
if(!obj1) {
var obj1=document.createElement('DIV'); obj1.id=obj;
document.getElementById("cams").appendChild(obj1);
}
//destroy always
if(window['class_'+obj]) window['class_'+obj].clickDestroy('class_'+obj);
if(host=="") {obj1.innerHTML="&nbsp;"; obj1.style.display="none"; return;}
//broadcast
if(rec) {
obj1.style.width="240px";
obj1.innerHTML="<div style='background:#f3f3f3; padding:7px; text-align:left; font:bold 11px Verdana;'>Моя Камера <a href=# onclick='gettime=new Date().getTime(); setstatus(0); return false;' style='display:block; float:right; font-size:11px;'>закрыть</a></div> <div id=media_"+obj+" style='position:relative;'></div><br>";
window['class_'+obj]=new WebCam(camid,nick,"vga","media_"+obj,0,"100%");
}
//watch
else {
window.hidden.location.href = "index.php?inc=write&text=/privat "+nick+": iseeyourcam";
obj1.style.width="240px";
obj1.innerHTML="<div style='background:#f3f3f3; padding:7px; text-align:left; font:bold 11px Verdana;'>"+nick+" <a href=# onclick='loadvideo(\""+obj+"\",\"\"); return false;' style='display:block; float:right; font-size:11px;'>закрыть</a></div> <div id=media_"+obj+" style='position:relative;'></div><br>";
window['class_'+obj]=new WebCam(camid,nick,"vga",0,"media_"+obj,"100%");
}
obj1.style.display="block";
}

-----------------

3. Также для правильной работы рекомендуется настроить работу чата через https/SSL защищенное соединение.
Чаты на бесплатном домене вида chat.mpchat.com автоматически перенаправляются на адрес с SSL вида **********
Чаты тарифа профи могут в параметрах по ссылке активации для своего домена Активировать SSL сертификат.
Чаты тарифа владелец, при использовании панели Webserv24, могут просто в настройках своего домена активировать Бесплатный SSL сертификат letsencrypt.
Если вы используете свой купленный домен, то РЕКОМЕНДУЕТСЯ в параметрах поставить галочку - перенаправлять всех на главный домен чата с https.
Если вы не хотите ставить эту галочку, то можно в титульник чата где вход, добавить JS скрипт перенаправления на https:
<script>if(location.protocol != 'https:') location.href=location.href.replace("http://","https://");</script>

-----------------

4. При желании ставим эксклюзивное решение вебкамер от пользователя Pegass.
ВАЖНО!!! Если у вас старое решение от Pegass, то необходимо удалить все строки из скриптов jscripts.dat где есть слово "close_webcam". Также нужно удалить все старые скрипты и стили js/css из шаблона чата chat.inc. (искать по слову "webcam")

Установка очень проста, создаем папку в корне чата pegass_webcam и закачиваем в неё 3 файла из архива **********
Затем просто в шаблон чата chat.inc после кода скриптов:
<script>
%scripts%
</script>

добавляем эти строки:
<link rel="stylesheet" type="text/css" href="pegass_webcam/pegass_webcam.css?0.0.013">
<script type="text/javascript" src="pegass_webcam/interact.js"></script>
<script type="text/javascript" src="pegass_webcam/pegass_webcam.js?0.0.046"></script>

Готово!
Изменить ширину камер по умолчанию можно в самом низу pegass_webcam.js файла найдя width: 200

20089
Dimitry @Dimitry
Новая удобная авторизация через соц. сети в один клик

Старая авторизация через соц сети перестала работать ещё с переходом на Mpchat 6.
Сегодня я переписал скрипт авторизации/регистрации под новую версию сервиса.

Что нового?
- теперь в параметрах есть только один вид авторизации через соц сети - мгновенный вход с авто-регистрацией
- при авторизации система ищет в базе E-mail или идентификатор соц сети, если находит, то берёт самый старый ник из базы и авторизует его
- если ничего не найдено, система предлагает изменить подобранный ник вида Имя123 и затем полноценно регистрирует его с подтвержденным E-mail адресом
- новая система позволяет авторизовываться старым пользователям через соц сети, главное чтобы совпал E-mail
- рекомендуется в связке использовать опцию регистрации с подтверждением E-mail

Как установить?

1. Для начала в параметрах нужно активировать вход в чат через соц. сети.

2. Для старых форм входа без использования api.js достаточно в любом месте прописать такой код:
<script src="//ulogin.ru/js/ulogin.js"></script>
Войти через &nbsp;<div id="uLogin" style="display:inline-block;" data-ulogin="callback=;display=small;theme=flat;fields=first_name,email;sort=default;providers=vkontakte,facebook,google,yandex,mailru;redirect_uri=;mobilebuttons=0;"></div>

Или для модальной авторизации, если вы используете api.js из главного чата, то в нём уже обновлена функция mp_authform(check), но если вы скачали этот файл себе, то вам вручную нужно обновить эту функцию.

3. У вас выкупленный чат? Тут всё сложнее и зависит от новизны ваших PHP скриптов.
Если ваши скрипты от Mpchat 6, то можно попробовать заменить файл ini.php и chat.php (желательно).

Будут вопросы или возникнут проблемы, пишите в отдельной теме.

20089
Dimitry @Dimitry
Перенос всех чатов на новую версию работы движка с PHP хостингом

Почему это произошло?
Ранее было 2 вида использования чата, это или на сервисе Mpchat или выкупив скрипты чата размещая чат на своём хостинге. Так как многим не достаточно возможностей в рамках сервиса и хочется выкупить чат с доступом к PHP скриптам, но кому то это просто дорого, появилась идея промежуточного решения. Кроме этого, как показало время, выкупленные чаты которые ещё живы всё больше устаревают, владельцы этих чатов не в состоянии обновлять PHP скрипты, не в состоянии исправлять все важные ошибки самостоятельно, а уж про адаптацию чатов на новую версию PHP вообще можно забыть. Таким образом после покупки чата на тарифе владелец этот чат проживёт не более нескольких лет, но ведь многие планируют использовать чат и дальше. Кроме этого, размещение чата вдали от движка, например на хостинге в России, создавало проблемы в соединениях, чат мог работать нестабильно. Поэтому важно размещать чат недалеко от движка. На основании всего этого, принято решение больше не обслуживать тарифы Владелец (без поддержки и обновлений) и создать новую схему использования чатов, которая более приближённая и похожа на тариф Владелец.

Тариф ВЛАДЕЛЕЦ - информация для старых выкупленных чатов
Нет, не волнуйтесь, ваши чаты будут работать как и раньше с размещением на любом PHP хостинге, при условии продления лицензии или хостинга у нас. Просто дальше нет возможности осуществлять какие либо обновления и техническую поддержку для таких чатов. За последние 2 недели PHP скрипты были на столько переписаны под PHP 7.1 и новый способ взаимодействия по API, что вносить какие то отдельные правки уже бесполезно. Поэтому, если вы хотите самостоятельно работать над чатом и ничего не ожидать от сервиса, то лучше оставить всё как есть. Если вам нужны обновления и различные исправления в системе, то вам необходимо перейти на новые тарифы с новыми PHP скриптами. К сожалению старые чаты Владелец уже не имеют статус VIP и могут вообще пропадать из общего списка чатов, так как интеграция через API устарела. Это обусловлено значительными изменениями в системе. В связи с этим, всем чатам Владелец рекомендуется переходить на новые тарифы. Учтите что после перехода на новые тарифы, для вас будут действовать все условия как для выбранных тарифов. На начальном этапе в тарифах мало доступного места, но всем тарифам Владелец после перехода будет назначено 5Гб места чтобы поместились все файлы. Переходить или нет, решать только вам, но я считаю для развития без этого никак. Если есть вопросы, а также если нужна какая то помощь по переходу, пишите мне лично. Не забывайте, тариф владелец официально больше не существует и связь с сервисом минимальна.

Проблемы возникшие при переносе чатов на новые тарифы
Технически возникла одна серьезная проблема, логины чатов должны совпадать с логинами PHP хостинга. Это значит что некоторые логины чатов пришлось изменить, не волнуйтесь, старые адреса вида ********** продолжат работать без проблем!!! Изменено 17 логинов: из логинов удалены все знаки тире и они обрезаны по длинне до 10 символов. Ваш новый логин вы получите с новыми данными в письме.

Какая структура будет у чата на PHP хостинге
- логин хостинга = логину чата = например login
- база данных чата: login_mp
- папка в которой должен быть чат со всеми файлами: /home/login/login/
- файлы чата это теже самые файлы которые видны через webftp в админке чата
- а также 3 важных и новых файла, которые лучше не менять: index.php config.php .htaccess
- рекомендуется не размещать и не менять никакие другие PHP файлы в папке чата: /home/login/login/
- мпчат динамически подгрузит ваши собственные PHP файлы (модули) из папки чата /home/login/login/

Как использовать свои модули
Для вашего удобства, и конечно только для тех кто хорошо разбирается в PHP, можно загружать свои модули в корень аккаунта хостинга /home/login/. Например если вы хотите создать свой PHP файл info.php для анкеты пользователя, то создать его нужно тут: /home/login/info.php Мпчат автоматически подгрузит новый модуль, а если вы удалите этот модуль, то мпчат будет загружать модуль по умолчанию. Однако настоятельно рекомендуется так не делать. Лучше добавлять новые модули с другими именами. Например в данном случае создать userinfo.php. О том как правильно создавать модули не совершая критических ошибок будет написано позже.


Новые тарифы и масса изменений в системе!

Во время подготовки новых тарифов было очень много изменено в сервисе и в PHP скриптах чатов. Перечислим некоторые из них:

1. Новые тарифы доступны на сайте сервиса, доступное место позднее будет увеличено:
**********

2. Полная поддержка чатов на PHP 7.1, добавлен лог файл errors.dat для отслеживания PHP ошибок

3. Чат больше не ограничен по занятому месту в панели, все ограничения теперь на вашем PHP хостинг аккаунте на Webserv24

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

5. Удалена опция запрет входа через прокси, функция давно не работает, так как список прокси устарел и блокировал нормальных пользователей, а не прокси, для защиты от вредителей рекомендуется использовать обычный бан и вход в чат через соц. сети или с подтверждением E-mail

6. Скрипты чата больше не привязаны к оплате, поэтому дату окончания оплаты можно увидеть только в Заказах - https://vmeste.eu/orders

7. Теперь у всех полноценный PHP хостинг Webserv24 с FTP/MAIL/MySQL/DNS/CRON, можно разместить также и другие сайты рядом с чатом (не рекомендуется засорять систему), в связи с этим управление DNS и добавление доменов для чата осуществляется через панель Webserv24

8. Старые резервные копии базы пользователей файлы вида dbmysql.sys больше не создаются, но при этом есть полноценная система резервных копий от Webserv24 - например восстановить чат или базу за вчера можно в пару кликов, также можно легко скачать все резервные копии на ПК

9. Модульная система чата, можно создавать и загружать свои PHP модули, можно менять текущие модули простым закачиванием изменённого модуля в корень PHP аккаунта, тогда закаченный модуль будет запускаться в приоритете, а текущий от сервиса мпчат будет игнорироваться. Все PHP скрипты можно будет скачивать позднее, но возможно не на всех тарифах. 3 PHP файла ядра будут закодированы для защиты скриптов и правильной работы чатов - однако это может быть изменено позднее.

10. Автоматическое обновление текущих PHP файлов чата и в будущем возможность выпуска авто-обновлений файлов чата. Как это стало возможным? Удалось реализовать PHP файлы в виде библиотеки сервера, таким образом каждый кто заказывает хостинг аккаунт на нашем сервере получает чат и доступ ко всем PHP файлам чата. Чат автоматически сам находит их и подгружает, а как уже писалось выше, можно подсунуть свои файлы которые будут запускаться в приоритете.

11. Для загрузки подарков был увеличен лимит картинок до 30кб, также теперь для всех тарифов условный лимит регистраций 100 000 - можно изменить. Лимит регистраций добавлен для защиты от несанкционированного спама регистраций чтобы защитить базу, в нормальных условиях достичь его не возможно.

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

Обсуждения на эту тему можно найти тут:
https://vmeste.eu/forum?tid=18110

20089
Dimitry @Dimitry
Вебкамеры v2.2 - обновление сервера и ИСПРАВЛЕНИЕ ключей вещания

В связи с тем что сервер вебкамер падал достаточно часто и напрягал всех, я установил новую версию сервера вебкамер.
- сервер больше не должен падать, но время покажет
- теперь поддерживается значительно больше версий браузеров и совместимость лучше
- потребляет мало трафика, можно вещать с мобильной сети (около 250кбит одна вебка)
- новый сервер может обслужить более 1000 подключений


ОШИБКА: Исправление параллельного появления чужого вещания

В некоторых чатах, где ведётся много вещаний одновременно, могла возникнуть ситуация при которой 2 вещающих объединяются в одну комнату, при этом тот кто смотрит одного из них, может видеть и другого. В случае приватных вещаний это может рассматриваться как подглядывание за чужой вебкой. Проблема в слабом ключе идентификаторе для вебкамер в функции loadvideo() => nickid.

Нужно в файле скриптов jscripts.dat заменить старую строку: (искать можно по sharekey.length)
var nickid=0; for(var i=0; i<sharekey.length; i++) nickid+=sharekey.charCodeAt(i)*(i+1);

на новую:
var nickid=0; for(var i=0; i<sharekey.length; i++) nickid=(nickid*31+sharekey.charCodeAt(i))|0; nickid=Math.abs(nickid);

Важно! Обратите внимание что данный код может быть также в других файлах например в модальных Webcam от Pegass если вы их используете. Там есть точно такой же код, только выглядит чуть иначе, его нужно тоже заменить. Мы сделали автоматическую замену кода в ваших скриптах jscripts.dat, и в найденных файлах pegass_webcam.js. Сбросить кеш для модальных камер можно добавлением версии в файле chat.inc в строке с pegass_webcam.js?v2 - добавьте красное. Если вы используете свои файлы вебкамер или другие названия, то их нужно обновить самостоятельно.

Поиск и исправление через консоль для продвинутых:
grep 'sharekey.charCodeAt' /home/chat/*/*.inc|grep -v 31

sed -i "s/nickid+=sharekey\.charCodeAt(i)\*(i+1);/nickid=(nickid*31+sharekey.charCodeAt(i))|0; nickid=Math.abs(nickid);/g" /home/chat/*/*.inc

20089
Dimitry @Dimitry
Нововведения

Изменение работы бана

Изменена логика работы бана. Теперь бан "везде" полностью блокирует пользователя на всех страницах, кроме страницы форма обратной связи для написания администрации. Бан "chat" блокирует вход в чат в обычную и мобильную версию. Также существуют отдельные баны на форум, галерею, гостевую. Ранее бан запрещал писать в данных разделах, теперь бан блокирует также и просмотр. Кроме этого исправлен бан по кукам, он не работал уже пару лет.


Добавление обработки тегов [file] и [media] разных форматов

Как многие уже знают, чаты теперь поддерживают не только загрузку картинок, но также звуков, музыки и видеозаписей.
Для новых чатов теперь по умолчанию будет обработка загруженных файлов через BB-тег [file].
Для правильной обработки загруженных файлов, а также медиа файлов из интернета и ссылок YouTube добавлен новый код.
Обратите внимание, данный код более безопасный чем все другие варианты на нашем форуме.
Попробовать работу медиа можно в главном чате в верхнем меню:
**********

Установка

1. В админ панели в параметрах включаем загрузку медиа файлов через BB-тег [file].
2. В chat.inc - добавляем возможность отключить медиа файлы, тогда они будут как ссылки. (по умолчанию включено)
<a href=# title="Отображать картинки, музыку и видео"><input type=checkbox name=nomedia checked onchange="if(this.checked) nomedia=0; else nomedia=1; setcookie('nomedia',nomedia);"> Медиа файлы</a>
<script>var nomedia=getcookie('nomedia')*1; if(nomedia) document.getElementsByName('nomedia')[0].checked=false;</script>
<a href=# title="Указать медиа ссылку на картинку, музыку, видео или YouTube" onclick="var url=prompt('Укажите ссылку на картинку, музыку, видео или YouTube, форматы: jpeg jpg gif png bmp ico tif tiff mp3 m4a ogg weba mp4 webm mov',''); if(url) sendto(' [media]'+url+'[/media] '); return false;"><img src=//mpchat.com/blank/img/image.png> Медиа ссылка</a>

3. В скриптах jscripts.dat в функции f() обновлен код обработки BB-тегов:
/* BB-коды, например для загруженного файла [file] или [media] из интеренета */
var etags=new Array(); var i=0;
/* Если выкл. медиа, то меняем все [media] и [file] на обычные ссылки */
if(window['nomedia']) {
etags[i]=new Array(/\[(media|file)\]((http|tmp|data)[^ "]+)\[\/(media|file)\]/mig,'<a href="$2" target="_blank" >$2</a>'); i++;
}
/* Преобразование [file] загруженных файлов */
etags[i]=new Array(/\[file\]((tmp|data)[^ "]+\.(jpeg|jpg|gif|png|bmp|ico|tif|tiff))\[\/file\]/i,'<br><a href="$1" target="_blank" ><img src="$1" style="max-height:258px;" ></a>',1); i++;
etags[i]=new Array(/\[file\]((tmp|data)[^ "]+\.(mp3|m4a|ogg|weba))\[\/file\]/i,'<br><audio src="$1" controls></audio>'); i++;
etags[i]=new Array(/\[file\]((tmp|data)[^ "]+\.(mp4|webm|mov))\[\/file\]/i,'<br><video src="$1" controls style="max-height:258px;"></video>'); i++;
/* Преобразование [media] ссылок из интернета */
etags[i]=new Array(/\[media\](https?:\/\/[^ "]+\.(jpeg|jpg|gif|png|bmp|ico|tif|tiff))\[\/media\]/i,'<br><a href="$1" target="_blank" ><img src="$1" style="max-height:258px;" ></a>'); i++;
etags[i]=new Array(/\[media\](https?:\/\/[^ "]+\.(mp3|m4a|ogg|weba))\[\/media\]/i,'<br><audio src="$1" controls></audio>'); i++;
etags[i]=new Array(/\[media\](https?:\/\/[^ "]+\.(mp4|webm|mov))\[\/media\]/i,'<br><video src="$1" controls style="max-height:258px;"></video>'); i++;
etags[i]=new Array(/\[media\]https:\/\/(www\.youtube\.com\/watch\?v=|youtu\.be\/)([a-z0-9\?=_-]+)\[\/media\]/i,'<br><iframe src="https://www.youtube.com/embed/$2" width=458 height=258 frameborder=0 allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'); i++;
/* Выполним все замены */
for(k=0;k<etags.length;k++) text=text.replace(etags[k][0],etags[k][1]);

20089
Dimitry @Dimitry
Удаление сообщений прямо в окне чата
(без удаления сообщений в логе)

Просто выберите в селекторе команд удалить сообщения, и потом нажимайте на время сообщений.
На форуме существует подобная версия удаления сообщений внутри чата, это более улучшенный код от нас.
Позволяет не только модераторам, но и пользователям удалять свои сообщения.
Чтобы пользователи не могли удалять свои сообщения, удалите синий код.

На верху скриптов чата jscripts.dat можно задать ники модераторов:
/* Ники модераторов удаляющих сообщения командой /remove */
var remover = new Array();
remover['adm']=1;


Ниже в функции f() после кода автоответчика добавляем такой код:
if(text.substr(0,7)=="/remove") {
var timeremovez;
var deleted=0;
text=text.replace("/remove", "");
timeremovez = text.match(/см\.\s(\d\d.\d\d.\d\d)|[^\s\(\)]{3,50}/g);
if(timeremovez==null) return;
var obj=document.getElementById("leftdiv");
var div=obj.getElementsByTagName('div');
for (var i=0; i<timeremovez.length; i++) {
for (var k=0; k<div.length; k++) {
if (div[k].innerHTML.indexOf(timeremovez[i])>=0 && (remover[nick] || div[k].innerHTML.indexOf(">"+nick+":<")>=0) ) {
obj.removeChild(div[k]); k--; deleted++;
}
}
}
if(nick!=mynick || !deleted) return;
text='Вы удалили сообщение/я с '+timeremovez;
}


А теперь в шаблоне чата chat.inc в селектор команд добавим команду удаления сообщений:
<option value='/remove '>удалить сообщения</option>

20089
Dimitry @Dimitry
Mpchat переходит на PHP 7.4

Как быстро летит время и официальная поддержка PHP 7.1 закончилась. Наш хостинг поддерживает самый новый PHP 7.4, но Mpchat его не поддерживал. Весь движок и файлы сервиса уже переведены на версию PHP 7.4, для новых чатов она также теперь по умолчанию.

Основные проблемы при переходе и их решение

1. Основная проблема это устаревшее со времён PHP 4 использование массивов в виде $array[var]
Такое использование начиная с версии 7.2 не допускается. Для удачного перехода нужно все переменные массивов привести к такому виду: $array['var']
Кроме этого нельзя забывать про редкие многомерные массивы: $array['var1']['var2']

2. Если переменная использовалась напрямую в строке или echo, то также обрамить скобками, например:
echo "Привет {$u['name']}, как дела?";
или можно вынести переменную из строки, например так:
echo "Привет ".$u['name'].", как дела?";

3. У некоторых может появиться ошибка на функцию each(), её нужно заменить на новый вид с foreach().
В стандартных скриптах можно всегда посмотреть исправленный код.


Как перейти на версию PHP 7.4

Чатам которые не используют свои PHP скрипты и работают полностью на стандартных от мпчата, делать ничего не нужно.
Дальше вам можно просто не читать, ниже для тех у кого свои или модифицированные PHP скрипты.


Как исправить свои PHP скрипты

Если вы используете старые модифицированные скрипты от мпчата или какие либо свои скрипты, например стол заказов, то вам нужно произвести проверку и исправления. Чтобы найти все переменные я написал скрипт конвертер fix.php для поиска и автозамены, там где это возможно. Обратите внимание, файл config.php был для всех чатов исправлен автоматически, его можно не трогать! Для упрощения кода в ini.php также добавлена переменная $myid, которая содержит ID авторизованного пользователя.

Приступим:
Сохраните файл правой кнопкой мышки и переименуйте его в fix.php => **********
Файл fix.php нужно загружать в ту папку в которой вы хотите проверить файлы.

1. Для проверки PHP файлов в корневой папке /home/mychat/ нужно загрузить файл fix.php как модуль в эту же папку,
а затем открывать ссылку вида: **********

2. Для проверки PHP файлов в папке /home/mychat/mychat/ нужно загрузить файл fix.php в эту же папку,
а затем открывать ссылку вида: **********
(если будет ошибка 404, пишите, подскажу как исправить)

3. Для проверки вложенных папок, например /home/mychat/mychat/stol/, нужно загрузить файл fix.php в эту же папку,
а затем открывать ссылку вида: **********


Как работает скрипт?

Скрипт абсолютно безопасен и не портит ваши файлы при запуске.
Сначала он проверяет первый файл и если найдёт там устаревшие массивы то выведет строки выделив красным.
Вам нужно проверить, если переменные в echo или внутри строки, то нужно вынести их от туда как описывал выше.
Затем можно смело нажимать кнопку FIX FILE и открывать ссылку в браузере.
Если ошибок нет, то всё ок. Нажимаем на странице скрипта Reload page.
F5 нажимать нельзя - сразу исправит следующий файл!!!
Если возникла ошибка, то смотрим на какой строке и выносим переменную из строки, других проблем не попадалось.
Все ошибки можно увидеть в файле: /home/mychat/errors.dat

20089
Dimitry @Dimitry
Перенос Mphat на другой сервер

В целях улучшения инфраструктуры, mpchat будет перенесён на новый сервер:
**********
Перенос будет проведен завтра в ночь, с пятницы на субботу 21.03.2020 00:00 - 02:00 по МСК.
Во время переноса примерно 1 час чаты будут работать со сбоями и проводить изменения в файлах не рекомендуется.
Обратите внимание на то, что ссылка на панель Webserv24 изменится на указанную выше.
Если ваши личные домены ещё не направлены на наши NS адреса, обязательно направьте их, иначе чат перестанет работать.
ns1.webserv24.com
ns2.webserv24.com

В случае возникновения проблем после переноса, пишите в тему про Ошибки.
Рассылка с данным уведомлением уже отправлена всем админам чатов.

PS> Перенос прошёл практически без сбоев.

20089
Dimitry @Dimitry
Звуковые сообщения в чате с мобильного и с ПК + исправление загрузки

Ранее можно было только с телефона отправить звуковое сообщения прямо в чате, просто выбрав загрузку файла.
В скрипты движка я добавил возможность размещения кнопки микрофона для записи звука с ПК.
Для установки достаточно разместить этот код в шаблоне чата chat.inc.
В коде стилей можно указать свою иконку микрофона и поменять размеры на нужные.

<style>
.mp_record {
display:inline-flex;
background: url('https://mpchat.com/blank/img/mic.png') no-repeat 50% 50%;
width: 28px;
height: 28px;
line-height:28;
background-size: contain;
cursor: pointer;
text-align:center;
color:white;
font:normal 11px Verdana;
vertical-align: middle;
}
.mp_recording {
border-radius:14px;
background:red;
background-image: none;
}
</style>
<div class="mp_record" onclick="mp_recording();"></div>

.

Исправление загрузки файлов

Если у пользователя медленный интернет, то отправление файла может зациклиться, так как файл не успевает отправиться и отправляется повторно. Чтобы исправить это, достаточно найти функцию msg_send() в скриптах чата jscripts.dat и в самый низ внутри функции добавить этот код:
//clear loadfile
setTimeout(function() {form.loadfile.value='';}, 500);

Также проверьте в файле chat.inc наличие функции msg_reset(); - если есть, просто удалите её!


PHP модуль админ панели теперь доступен

Для любителей поковыряться в PHP коде теперь доступен модуль adm_modules.php.
Также для удобства в разделе Обновления теперь выделяются синим цветом свои модули PHP.

20089
Dimitry @Dimitry
MPCHAT CMS 7 - новая версия и новые возможности

При вопросах, пишите сюда => https://vmeste.eu/forum?tid=18436

- добавлен новый раздел Проверка файлов для модерирования загруженных файлов
- index.php во всех чатах заменён на новый, где только инициализация ini.php
- в PHP файлах в критических местах с (COOKIE|cookie|md5|sendmsg) заменена переменная $chat на константу CHAT (позже $chat будет заменен на папку "data" куда будут перемещены все технические файлы)
- добавлена обработка ЧПУ адресов вида /gallery /forum /chat /gb
- в разделе Обновления появился мигратор файлов в папку data/
- удалён старый код, а также скрипты go.php и unsubscribe.php (перенесено в subscribe.php)
- обратный адрес от любых писем теперь вида noreply@domain.com
- последний лог теперь хранит от 150-200 сообщений - при входе в чат можно вывести 200 штук, а также увеличен размер загрузки медиа-файлов в чат до 50мб
- пользователи теперь сами могут удалять свои аккаунты через настройки
- новая версия clan.php кланы/сообщества, все ссылки управления теперь после выбора клана, кланы переведены на работу через userid, список ников теперь цветной (обновить структуру можно в обновлениях)
- новая функция магазина: в параметрах можно указать стоимость смены ника
- теперь в магазине администратору отображаются все товары и больше не нужно выбирать модератора , а также добавлена возможность изменить изготовителя у товара
- новая версия вебкамер WebCams 3.0 => возможность транслировать дисплей или программу, более стабильная работа без зависания ников или сервера, улучшенное качество картинки и звука при 400кбит, совсем старые браузеры больше не поддерживаются
- создан новый шаблонизатор, который позволяет лучше обрабатывать HTML шаблоны и делать вставки PHP функций
- в главную админку добавлен пункт лог ошибок в котором можно посмотреть PHP ошибки сервисных или своих личных модулей. Лог читается из файла errors.dat и сделан для удобства проверки ошибок
- в настройки добавлен параметр указания своей ссылки для проверки информации о IP
- добавлена поддержка загрузки файлов формата .webp
- для магазина можно настроить размер картинок от 100x100 до 200x200


Миграция файлов в папку data/
Миграция уже выполнена для всех чатов.
Что было сделано:
1. Все перечисленные папки и файлы будут перенесены в папку data/
2. Почти для всех чатов будет создан новый файл .htaccess с возможностью ЧПУ (у кого стандартный)
3. Автоматически в указанные файлы для путей и регулярок будет добавлено синее:
jscripts.dat: tmp -> (tmp|data)
jscripts.dat: data/icon/ data/clan/
gallery.inc: data/gallery/
index.inc: data/gallery/ (для информера)
4. Если вы используете свои измененные PHP скрипты, то для них будет выполнена авто-замена всех chatlogin/ на data/ и они будут перенесены в папку чата, туда где index.php/config.php (если не перенесены, то был конфликт)

Пользователи могут сами удалить свой аккаунт
Теперь в настройках можно разместить галочку - удалить свой аккаунт.
Для подтверждения требуется ввести текущий пароль, поэтому размещаем возле него, пример вставки нового кода:
<input type=password name=altpass class=text> - текущий пароль<br>
<input type=password name=newpass class=text> - новый пароль<br>
<input type=checkbox name=delaccount onclick='if(this.checked) return confirm("Для удаления необходимо ввести текущий пароль. Вы уверены что хотите удалить свой аккаунт полностью? ");'> - полностью удалить свой аккаунт<br>



Для тех кто восстанавливает свой чат из 6й версии
(нужно заменить везде chatlogin на свой логин чата)
1. Закачайте файлы 6й версии как и было раньше в папку:
/home/chatlogin/chatlogin/
2. Отредактируйте старый файл index.php заменив содержимое, его путь:
/home/chatlogin/chatlogin/index.php
<?php
include("/usr/share/php/mpchat/ini.php");

3. В настройках домена пропишите open_basedir так:
/home/chatlogin/
4. Если всё сделали верно, откройте главную страницу чата и нажмите Выполнить миграцию до 7й версии. ГОТОВО!

20089
Dimitry @Dimitry
MPCHAT CMS 8 - поддержка последнего PHP 8.1, улучшение кода и безопасности

Что нового в 8й версии:
✓ перевод переменных конфига из глобальных $var в $cfg['var']
✓ отключение глобальных переменных register_globals из POST/GET
✓ открытый репозиторий кода для отслеживания всех изменений
(там все изменения по 8й версии кроме перевода параметров с $var на $cfg['var'] в модулях)
✓ разделение главной админки adm_modules.php на отдельные модули
✓ поддержка PHP 8.1
✓ улучшение безопасности
✓ отключение вывода PHP шибок в браузер (теперь только в логах)
✓ в параметрах можно указать имя отправителя для всех писем
- доработать оставшиеся пункты из 7й версии

Недоделано в 7й версии:
- будут добавлены HTML шаблоны на те скрипты в которых их ещё нет
- будет улучшенная версионность шаблонов, чтобы в случае проблем можно было легко вернуть старый шаблон
- улучшенный редактор HTML кода, позволит лучше искать текст и автоматически проводить замены

Обновление и все подробности про 8ю версию в отдельной теме:
https://vmeste.eu/forum?tid=18540


В закрытой теме нельзя отправлять сообщения.