Starting SP3

fixing file download + replacing message types
This commit is contained in:
lutranf
2014-11-27 18:56:36 +01:00
parent 12c1cf8001
commit f9b4505626
3 changed files with 61 additions and 50 deletions

View File

@@ -7,8 +7,8 @@
class Databap extends PhpObject class Databap extends PhpObject
{ {
//Common Constants //Common Constants
const VERSION = '1.0.2'; //Versioning: <Main_Version>.<Enhancement_Package>.<Patch>-<Release_Candidate> const VERSION = '1.0.3'; //Versioning: <Main_Version>.<Enhancement_Package>.<Patch>-<Release_Candidate>
const VERSION_DATE = '24/10/2014'; const VERSION_DATE = '27/11/2014';
const EXPECTED_PAGE_COOKIE = 'exp_page'; const EXPECTED_PAGE_COOKIE = 'exp_page';
const MAIN_SEPARATOR = ' '; const MAIN_SEPARATOR = ' ';
const DATE_FORMAT = 'd/m/Y'; const DATE_FORMAT = 'd/m/Y';
@@ -90,6 +90,26 @@ class Databap extends PhpObject
const MESSAGE_REBOOT = 'R'; const MESSAGE_REBOOT = 'R';
const MESSAGE_ARTICLE = 'B'; const MESSAGE_ARTICLE = 'B';
const MESSAGE_NEWS = 'NW'; const MESSAGE_NEWS = 'NW';
private static $MESSAGE_TYPES = array( 'user'=>self::MESSAGE_USER,
'add'=> array( 'code'=>self::MESSAGE_ADD_CODE,
'proc'=>self::MESSAGE_ADD_PROC,
'doc'=>self::MESSAGE_ADD_DOC,
'table'=>self::MESSAGE_ADD_TABLE),
'edit'=>array( 'code'=>self::MESSAGE_EDIT_CODE,
'proc'=>self::MESSAGE_EDIT_PROC,
'doc'=>self::MESSAGE_EDIT_DOC,
'table'=>self::MESSAGE_EDIT_TABLE),
'action'=>self::MESSAGE_ACTION,
'private'=>self::MESSAGE_PRIVATE,
'img'=>self::MESSAGE_IMG,
'9gag'=>self::MESSAGE_9GAG,
'nick'=>self::MESSAGE_NICK,
'status'=>self::MESSAGE_STATUS,
'conn'=>self::MESSAGE_CONN,
'invite'=>self::MESSAGE_INVITE,
'reboot'=>self::MESSAGE_REBOOT,
'article'=>self::MESSAGE_ARTICLE,
'news'=>self::MESSAGE_NEWS);
const DEFAULT_COMPANY_LOGO = 'logo_unknown_24.png'; const DEFAULT_COMPANY_LOGO = 'logo_unknown_24.png';
const ALL_CHAN_ID = 1; const ALL_CHAN_ID = 1;
const ALL_CHAN_TEXT = 'A.l.l_C.h.a.n_I.n.c.l.u.d.e.d'; const ALL_CHAN_TEXT = 'A.l.l_C.h.a.n_I.n.c.l.u.d.e.d';
@@ -409,7 +429,8 @@ class Databap extends PhpObject
'reboot_delay'=>self::REBOOT_DELAY, 'reboot_delay'=>self::REBOOT_DELAY,
'versionHtml'=>$this->getItemBlock(), 'versionHtml'=>$this->getItemBlock(),
'opt_console_no'=>self::OPT_CONSOLE_NO, 'opt_console_no'=>self::OPT_CONSOLE_NO,
'types'=>$this->getTypeInfo('title')); 'types'=>$this->getTypeInfo('title'),
'msg_types'=>self::$MESSAGE_TYPES);
$oPage->setTag('constants', $this->jsonConvert($asConstants)); $oPage->setTag('constants', $this->jsonConvert($asConstants));
//Variables //Variables
@@ -1034,53 +1055,48 @@ class Databap extends PhpObject
public function getFile($iFileId) public function getFile($iFileId)
{ {
$sFileName = $this->oMySql->selectValue(self::FILE_TABLE, 'file_name', $iFileId); //File info
$asFileInfo = $this->oMySql->selectRow(self::FILE_TABLE, $iFileId);
$sFileName = $asFileInfo['file_name'];
$sFileExt = mb_strtolower(pathinfo($sFileName, PATHINFO_EXTENSION));
$sFileDesc = str_replace("&", '\&', str_replace(" ", '\ ', addslashes($asFileInfo['description']))).'.'.$sFileExt;
$sFilePath = self::DOC_FOLDER.$sFileName; $sFilePath = self::DOC_FOLDER.$sFileName;
$sFileFullPath = dirname($_SERVER['SCRIPT_FILENAME'])."/".$sFilePath; $sFileFullPath = dirname($_SERVER['SCRIPT_FILENAME'])."/".$sFilePath;
$sResult = '';
if(!file_exists($sFilePath))
{ if(!file_exists($sFilePath)) header("HTTP/1.0 404 Not Found");
die();
}
else else
{ {
//get mime type //Get mime type & set headers
if(class_exists('finfo')) if(!class_exists('finfo')) $sMimetype = 'application/force-download';
else
{ {
$oFileInfo = new finfo(FILEINFO_MIME); $oFileInfo = new finfo(FILEINFO_MIME);
$sMimetype = $oFileInfo->file($sFileFullPath); $sMimetype = $oFileInfo->file($sFileFullPath);
} }
else
{
$sMimetype = 'application/force-download';
}
//set headers
header('Pragma: public'); header('Pragma: public');
header('Expires: 0'); header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public'); header('Cache-Control: public');
header('Content-Description: File Transfer'); header('Content-Description: File Transfer');
header('Content-Type: '.$sMimetype); header('Content-Type: '.$sMimetype);
header('Content-Disposition: attachment; filename='.$sFileName); header('Content-Disposition: attachment; filename='.$sFileDesc);
header('Content-Transfer-Encoding: binary'); header('Content-Transfer-Encoding: binary');
header('Content-Length: '.@filesize($sFilePath)); header('Content-Length: '.@filesize($sFilePath));
// download //Download
if ($oFile = @fopen($sFilePath, 'rb')) if ($oFile = @fopen($sFilePath, 'rb'))
{ {
while(!feof($oFile)) while(!feof($oFile))
{ {
print(fread($oFile, 1024*8)); $sResult .= print_r(fread($oFile, 1024*8), true);
flush(); flush();
if(connection_status() != 0) if(connection_status() != 0) @fclose($oFile);
{
@fclose($oFile);
}
} }
@fclose($oFile); @fclose($oFile);
} }
} }
return $sResult;
} }
public function uploadImage() public function uploadImage()

View File

@@ -717,56 +717,56 @@ function addMessage(message_info, bReset)
switch(message_info.msg_class) switch(message_info.msg_class)
{ {
case 'U': case databap.consts.msg_types.user:
msg_body = sMsgPrefix+'<span class="text">'+message_info.message+'</span>'; msg_body = sMsgPrefix+'<span class="text">'+message_info.message+'</span>';
break; break;
case 'NW': case databap.consts.msg_types.news:
databap.tmp('get_news', true); databap.tmp('get_news', true);
msg_body = '<span class="text action">'+message_info.nickname+' a une news : <span class="news"><i class="fa fa-30 fa-c-news"></i> '+message_info.message+' <i class="fa fa-30 fa-c-news"></i></span></span>'; msg_body = '<span class="text action">'+message_info.nickname+' a une news : <span class="news"><i class="fa fa-30 fa-c-news"></i> '+message_info.message+' <i class="fa fa-30 fa-c-news"></i></span></span>';
break; break;
case 'A': case databap.consts.msg_types.add.code:
var url = databap.getInternalLink('code', message_info.message); var url = databap.getInternalLink('code', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; un nouveau code : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; un nouveau code : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'E': case databap.consts.msg_types.edit.code:
var url = databap.getInternalLink('code', message_info.message); var url = databap.getInternalLink('code', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; le code <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; le code <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'PA': case databap.consts.msg_types.add.proc:
var url = databap.getInternalLink('proc', message_info.message); var url = databap.getInternalLink('proc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle proc&eacute;dure : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle proc&eacute;dure : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'PE': case databap.consts.msg_types.edit.proc:
var url = databap.getInternalLink('proc', message_info.message); var url = databap.getInternalLink('proc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la proc&eacute;dure <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la proc&eacute;dure <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'M': case databap.consts.msg_types.action:
msg_body = '<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>'; msg_body = '<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
break; break;
case 'P': case databap.consts.msg_types['private']:
slicePos = message_info.message.indexOf(' '); slicePos = message_info.message.indexOf(' ');
msgTargetUser = message_info.message.substr(1, slicePos - 1); msgTargetUser = message_info.message.substr(1, slicePos - 1);
var msg = message_info.message.slice(slicePos + 1); var msg = message_info.message.slice(slicePos + 1);
msg_body = '<a class="user clickable" title="Ecrire un PM &agrave; '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"> <span class="highlight">&#64;'+msgTargetUser+'</span>&gt;</span><span class="text">'+msg+'</span>'; msg_body = '<a class="user clickable" title="Ecrire un PM &agrave; '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"> <span class="highlight">&#64;'+msgTargetUser+'</span>&gt;</span><span class="text">'+msg+'</span>';
break; break;
case 'N': case databap.consts.msg_types.nick:
msg_body = '<span class="text">'+message_info.message+' ('+message_info.name+')</span>'; msg_body = '<span class="text">'+message_info.message+' ('+message_info.name+')</span>';
updateUsersList = true; updateUsersList = true;
break; break;
case 'C': case databap.consts.msg_types.conn:
updateUsersList = true; updateUsersList = true;
msg_body = (self.vars2('opt_console')==self.consts.opt_console_no)?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>'; msg_body = (self.vars2('opt_console')==self.consts.opt_console_no)?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
bSystemMsg = true; bSystemMsg = true;
break; break;
case 'I': case databap.consts.msg_types.img:
var msg = '<a href="'+message_info.message[3]+'" target="_blank"><img src="'+message_info.message[0]+'" width="'+message_info.message[1]+'" height="'+message_info.message[2]+'" class="proxy"></a>'; var msg = '<a href="'+message_info.message[3]+'" target="_blank"><img src="'+message_info.message[0]+'" width="'+message_info.message[1]+'" height="'+message_info.message[2]+'" class="proxy"></a>';
msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>'; msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>';
break; break;
case '9': case databap.consts.msg_types['9gag']:
var msg = '<a href="'+message_info.message.url+'" target="_blank" title="'+message_info.message.title+'"><img src="'+message_info.message.url_img+'" width="'+message_info.message.width+'" height="'+message_info.message.height+'" class="proxy" /></a>'; var msg = '<a href="'+message_info.message.url+'" target="_blank" title="'+message_info.message.title+'"><img src="'+message_info.message.url_img+'" width="'+message_info.message.width+'" height="'+message_info.message.height+'" class="proxy" /></a>';
msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>'; msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>';
break; break;
case 'R': case databap.consts.msg_types.reboot:
if(!bReset) if(!bReset)
{ {
msg_body = '<span class="text action">'+message_info.message+'</span>'; msg_body = '<span class="text action">'+message_info.message+'</span>';
@@ -774,33 +774,33 @@ function addMessage(message_info, bReset)
bSystemMsg = true; bSystemMsg = true;
} }
break; break;
case 'V': case databap.consts.msg_types.invite:
if(!bReset) joinChan(sChanKeyName, false, [], false); if(!bReset) joinChan(sChanKeyName, false, [], false);
bSystemMsg = true; bSystemMsg = true;
break; break;
case 'B': case databap.consts.msg_types.article:
var url = databap.getInternalLink('a', message_info.message); var url = databap.getInternalLink('a', message_info.message);
msg_body = '<span class="text action">Nouvel article sur un blog BI ('+message_info.domain+') : <a href="'+url+'" target="_blank">'+message_info.art_title+'</a> '; msg_body = '<span class="text action">Nouvel article sur un blog BI ('+message_info.domain+') : <a href="'+url+'" target="_blank">'+message_info.art_title+'</a> ';
msg_body+= 'par <a title="Lien vers la page de l\'auteur" href="'+message_info.link_auth+'" target="_blank">'+message_info.name+'</a> ('+message_info.art_date+')'+'</span>'; msg_body+= 'par <a title="Lien vers la page de l\'auteur" href="'+message_info.link_auth+'" target="_blank">'+message_info.name+'</a> ('+message_info.art_date+')'+'</span>';
break; break;
case 'S': case databap.consts.msg_types.status:
updateUsersList = true; updateUsersList = true;
databap.tmp('get_news', true); databap.tmp('get_news', true);
msg_body = '<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>'; msg_body = '<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
break; break;
case 'DA': case databap.consts.msg_types.add.doc:
var url = databap.getInternalLink('doc', message_info.message); var url = databap.getInternalLink('doc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle documentation : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle documentation : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'DE': case databap.consts.msg_types.edit.doc:
var url = databap.getInternalLink('doc', message_info.message); var url = databap.getInternalLink('doc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la documentation <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la documentation <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'TA': case databap.consts.msg_types.add.table:
var url = databap.getInternalLink('table', message_info.message); var url = databap.getInternalLink('table', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle table : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle table : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;
case 'TE': case databap.consts.msg_types.edit.table:
var url = databap.getInternalLink('table', message_info.message); var url = databap.getInternalLink('table', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la table <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>'; msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la table <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break; break;

View File

@@ -35,12 +35,7 @@ databap.pageInit = function()
//Add EHP improvements, SP bug fixes and WIP //Add EHP improvements, SP bug fixes and WIP
var $ActivityBox, sIcon; var $ActivityBox, sIcon;
var asActivityTypes = { var asActivityTypes = {
sp_fixes: [ 'Réparation des messages non lus dans le chat', sp_fixes: [ 'Réparation des fichiers téléchargés (documentation)'],
'Plantage lors de la recherche infructueuse de table',
'Bon rafraichissement de la barre de défilement dans la recherche',
'Réinsertion des nicknames absent du chan lors des tab dans le cas d\'un /invite',
'Suppression de la redescente automatique de la scrollbar dans le chat si elle n\'est pas déjà en bas',
'Liste complète: ajout d\'un bouton pour supprimer les filtres appliqués'],
ehp_improvements: [ 'Utilisation des # pour les accès aux pages, compatible avec les boutons prec/suiv des navigateurs. Ex: <a href="#chat">databap.lutran.fr#chat</a>', ehp_improvements: [ 'Utilisation des # pour les accès aux pages, compatible avec les boutons prec/suiv des navigateurs. Ex: <a href="#chat">databap.lutran.fr#chat</a>',
'Mot de passe personnalisé et modifiable dans les <a href="#options">options</a>', 'Mot de passe personnalisé et modifiable dans les <a href="#options">options</a>',
'paramètre dans les <a href="#options">options</a> pour supprimer les messages d\'arrivée et de départ des gens (console)', 'paramètre dans les <a href="#options">options</a> pour supprimer les messages d\'arrivée et de départ des gens (console)',