fix link replacement (table / one-letter replacement)

This commit is contained in:
lutranf
2014-08-28 10:54:38 +02:00
parent 27df89b0aa
commit 52d117316f
6 changed files with 63 additions and 72 deletions

View File

@@ -7,8 +7,8 @@
class Databap extends PhpObject
{
//Common Constants
const VERSION = '1.0.0-RC5'; //Versioning: <Main_Version>.<Enhancement_Package>.<Patch>-<Release_Candidate>
const VERSION_DATE = '20/08/2014';
const VERSION = '1.0.0-RC6'; //Versioning: <Main_Version>.<Enhancement_Package>.<Patch>-<Release_Candidate>
const VERSION_DATE = '28/08/2014';
const EXPECTED_PAGE_COOKIE = 'exp_page';
const MAIN_SEPARATOR = ' ';
const DATE_FORMAT = 'd/m/Y';
@@ -130,15 +130,10 @@ class Databap extends PhpObject
const ART_TYPE = 'a';
const DOC_TYPE = 'd';
const TABLE_TYPE = 't';
public static $TYPES = array( self::CODE_TYPE =>array('table' => self::CODE_TABLE, 'title' => 'Code'),
self::PROC_TYPE =>array('table' => self::PROC_TABLE, 'title' => 'Procédure'),
self::ART_TYPE =>array('table' => self::ART_TABLE, 'title' => 'Article'),
self::DOC_TYPE =>array('table' => self::DOC_TABLE, 'title' => 'Documentation'),
self::TABLE_TYPE=>array('table' => self::TABL_TABLE, 'title' => 'Table'));
public static $HASH_TO_PAGE = array(self::CODE_TYPE=>'code', 'code'=>'code',
self::PROC_TYPE=>'proc', 'proc'=>'proc', 'procedure'=>'proc',
self::PROC_TYPE=>'procedure', 'proc'=>'procedure', 'procedure'=>'procedure',
self::TABLE_TYPE=>'table', 'table'=>'table',
self::DOC_TYPE=>'doc', 'doc'=>'doc', 'documentation'=>'doc',
self::DOC_TYPE=>'doc', 'documentation'=>'doc', 'doc'=>'doc',
self::ART_TYPE=>'article', 'art'=>'article', 'article'=>'article',
'list'=>'list', 'liste'=>'list',
'chat'=>'chat',
@@ -148,7 +143,16 @@ class Databap extends PhpObject
'accueil'=>'welcome',
'erreur'=>'error',
'logout'=>'logout');
public static $TYPES = array( self::CODE_TYPE =>array('table' => self::CODE_TABLE, 'title' => 'Code'),
self::PROC_TYPE =>array('table' => self::PROC_TABLE, 'title' => 'Procédure'),
self::ART_TYPE =>array('table' => self::ART_TABLE, 'title' => 'Article'),
self::DOC_TYPE =>array('table' => self::DOC_TABLE, 'title' => 'Documentation'),
self::TABLE_TYPE=>array('table' => self::TABL_TABLE, 'title' => 'Table'));
public static $PAGE_TITLES = array( 'code'=>'Code', 'chat'=>'Chat', 'doc'=>'Documentation', 'error'=>'Page introuvable',
'list'=>'La liste', 'options'=>'Paramètres', 'procedure'=>'Procédure', 'profile'=>'Profil',
'search'=>'Recherche', 'welcome'=>'Bienvenue', 'table'=>'Table', 'article'=>'Article de blog',
'logout'=>'Déconnexion');
//Doc constants
const DOC_FOLDER = 'docs/';
const DOC_TMP_FOLDER = 'docs/tmp/';
@@ -274,32 +278,38 @@ class Databap extends PhpObject
return $asOptions;
}
private function getTypeInfo($sInfo='', $sType='')
public static function getTypeInfo($oInfo=array(), $sType='')
{
if($sType!='')
{
if($sType!='' && !array_key_exists($sType, self::$TYPES)) $this->addError('Type "'.$sType.'" inconnu');
else $asTypeInfo = array($sType=>self::$TYPES[$sType]);
else $asResult = array($sType=>self::$TYPES[$sType]);
}
else $asTypeInfo = self::$TYPES;
else $asResult = self::$TYPES;
if($sInfo!='')
//info
if(is_string($oInfo)) $oInfo = array($oInfo);
$bUnique = (count($oInfo)==1);
if(!empty($oInfo))
{
foreach($asTypeInfo as $sType => $asInfo)
foreach($asResult as $sType=>$asTypeInfo)
{
if(!array_key_exists($sInfo, $asInfo)) $this->addError('Info "'.$sInfo.'" inconnue');
else $asTypeInfo[$sType] = $asInfo[$sInfo];
$asResult[$sType] = array();
foreach($oInfo as $sInfo)
{
if(!array_key_exists($sInfo, $asTypeInfo)) $this->addError('Info "'.$sInfo.'" inconnue');
else $asResult[$sType][$sInfo] = $asTypeInfo[$sInfo];
}
if($bUnique) $asResult[$sType] = $asResult[$sType][$sInfo];
}
}
return $asTypeInfo;
return $asResult;
}
private function getPageTitles($sPage='')
{
$asPageTitles = array( 'code'=>'Code', 'chat'=>'Chat', 'doc'=>'Documentation', 'error'=>'Page introuvable',
'list'=>'La liste', 'options'=>'Paramètres', 'proc'=>'Procédure', 'profile'=>'Profil',
'search'=>'Recherche', 'welcome'=>'Bienvenue', 'table'=>'Table ECC / BW', 'article'=>'Blog SAP', 'logout'=>'Déconnexion');
$asPageTitles = self::$PAGE_TITLES;
if($sPage!='' && !array_key_exists($sPage, $asPageTitles)) $this->addError('Page "'.$sPage.'" inconnu');
return $sPage==''?$asPageTitles:$asPageTitles[$sPage];
}
@@ -841,7 +851,7 @@ class Databap extends PhpObject
public function addDoc($asPost)
{
//Previous Doc Id
$iPrevDocId = $asPost['doc_id'];
$iPrevDocId = array_key_exists('doc_id', $asPost)?$asPost['doc_id']:0;
$bCreation = ($iPrevDocId==0);
//User
@@ -856,7 +866,7 @@ class Databap extends PhpObject
foreach($asPost as $sFormId=>$sValue)
{
preg_match($sImagePattern, $sFormId, $asMatches);
if($asMatches['doc_info'] == 'name' || $asMatches['doc_info'] == 'desc')
if(!empty($asMatches) && ($asMatches['doc_info'] == 'name' || $asMatches['doc_info'] == 'desc'))
{
$asDocs[$asMatches['doc_id']][$asMatches['doc_info']] = $sValue;
}
@@ -1106,7 +1116,7 @@ class Databap extends PhpObject
return $asCode;
}
private function getProcInfo($iProcId)
private function getProcedureInfo($iProcId)
{
$asProc = $this->oMySql->selectRow(self::PROC_TABLE, $iProcId);
$asProc['title'] = self::getDescriptionFormat($asProc['title']);
@@ -1896,7 +1906,7 @@ class Databap extends PhpObject
break;
case self::MESSAGE_ADD_PROC:
case self::MESSAGE_EDIT_PROC:
$asProc = $this->getProcInfo($asMessages['messages'][$iMessageId]['message']);
$asProc = $this->getProcedureInfo($asMessages['messages'][$iMessageId]['message']);
$asMessages['messages'][$iMessageId]['description'] = $asProc['title'];
break;
case self::MESSAGE_ADD_DOC:
@@ -2223,46 +2233,21 @@ class Databap extends PhpObject
$sIdUserColFull = MySqlManager::getId(self::USER_TABLE, true);
$sLedColFull = MySqlManager::getFullColumnName(self::CODE_TABLE, 'led') ;
//Get code Ids
$asInfo = array('select'=>array("MAX($sIdCodeCol) AS id_item"), //selecting last version among codes having the same refer_id
'from'=>self::CODE_TABLE,
'groupBy'=>array('refer_id'),
'orderBy'=>array('id_item'=>'desc'));
$asItemIds[Databap::CODE_TYPE] = $this->oMySql->selectRows($asInfo);
//get Proc Ids
$asInfo = array('select'=>array("MAX($sIdProcCol) AS id_item"),
'from'=>self::PROC_TABLE,
'groupBy'=>array('refer_id'),
'orderBy'=>array('id_item'=>'desc'));
$asItemIds[Databap::PROC_TYPE] = $this->oMySql->selectRows($asInfo);
//get Article Ids
$asInfo = array('select'=>array($sIdArtCol." AS id_item"),
'from'=>self::ART_TABLE,
'orderBy'=>array('id_item'=>'desc'));
$asItemIds[Databap::ART_TYPE] = $this->oMySql->selectRows($asInfo);
//Get documentation
$asInfo = array('select'=>array("MAX($sIdDocCol) AS id_item"), //selecting last version among docs having the same refer_id
'from'=>self::DOC_TABLE,
'groupBy'=>array('refer_id'),
'orderBy'=>array('id_item'=>'desc'));
$asItemIds[Databap::DOC_TYPE] = $this->oMySql->selectRows($asInfo);
//Get tables
$asInfo = array('select'=>array("MAX($sIdTableCol) AS id_item"), //selecting last version among tables having the same refer_id
'from'=>self::TABL_TABLE,
'groupBy'=>array('refer_id'),
'orderBy'=>array('id_item'=>'desc'));
$asItemIds[Databap::TABLE_TYPE] = $this->oMySql->selectRows($asInfo);
//Build code info structure
//TODO phrases for all item types?
$asUsers = $asCode = $asItemList = array();
foreach($asItemIds as $sType=>$asTypedItemIds)
$asTypes = $this->getTypeInfo('table');
foreach($asTypes as $sType=>$sTable)
{
$asTypedItemIds = array_filter($asTypedItemIds); //null value returned from query (MAX(...))
$sTableIdCol = MySqlManager::getId($sTable);
//selecting last version among codes having the same refer_id
$asInfo = array('select' => array("MAX({$sTableIdCol}) AS id_item"),
'from' => $sTable,
'groupBy' => array(($sType==self::ART_TYPE)?$sTableIdCol:'refer_id'), //except for articles
'orderBy' => array('id_item'=>'desc'));
//Build code info structure
$asTypedItemIds = array_filter($this->oMySql->selectRows($asInfo)); //null value returned from query (MAX(...))
foreach($asTypedItemIds as $iItemId)
{
$asItem = call_user_func(array($this, 'get'.ucfirst($this->getPagesFromHash($sType)).'Info'), $iItemId);

View File

@@ -247,9 +247,9 @@ class ToolBox
//Phase 1 : Identify internal links : merge cases /#code-1 and code 1, destroy link.
$asPatterns = array();
foreach(Databap::$HASH_TO_PAGE as $sAlt=>$sFinal)
foreach(Databap::$HASH_TO_PAGE as $sAlt=>$sPage)
{
$asPatterns['`(^|\ )(https?://|)'.$sServerPath.'/?\#'.$sAlt.'\-([\d]+)`sui'] = '$1$4'.$sFinal.' $3';
$asPatterns['`(^|\ )(https?://|)'.$sServerPath.'/?\#'.$sAlt.'\-([\d]+)`sui'] = '$1$4'.$sPage.' $3';
}
$sText = preg_replace(array_keys($asPatterns), array_values($asPatterns), $sText);
@@ -260,9 +260,14 @@ class ToolBox
//Phase 3: rebuild link
$asPatterns = array();
foreach(Databap::$HASH_TO_PAGE as $sAlt=>$sFinal)
foreach(Databap::$HASH_TO_PAGE as $sAlt=>$sPage)
{
$asPatterns['`(^|\ )'.$sAlt.'\ ([\d]+)(\ |$)`sui'] = '$1<a href="#'.$sFinal.'-$2" target="_blank" class="internal_link round"><i class="fa fa-inline fa-c-'.$sFinal.'"></i>'.$sFinal.' $2</a>$3';
if(mb_strlen($sAlt)>1)
{
$sTitle = Databap::$PAGE_TITLES[$sPage];
$asPatterns['`(^|\ )'.$sAlt.'\ ([\d]+)(\ |$)`sui'] = '$1<a href="#'.$sPage.'-$2" target="_blank" class="internal_link round"><i class="fa fa-inline fa-c-'.$sPage.'"></i>'.$sTitle.' n°$2</a>$3';
if($sPage=='table') $asPatterns['`(^|\ )'.$sAlt.'\ ([_A-Z0-9]+)(\ |$)`su'] = '$1<a href="#'.$sPage.'-$2" target="_blank" class="internal_link round"><i class="fa fa-inline fa-c-'.$sPage.'"></i>'.$sTitle.' $2</a>$3';
}
}
$sText = preg_replace(array_keys($asPatterns), array_values($asPatterns), $sText);