ourDB == NULL)
{
$this->ourDB = e107::getDb('ourDB');
$result = $this->ourDB->database($database,$prefix,true);
$this->DBPrefix = "`".$database."`.".$prefix;
if ($result)
{
return $result;
}
}
return TRUE;
}
/**
* Set up a query for the specified task. If $blank_user is TRUE, user ID Data in source data is ignored
* @return boolean TRUE on success. FALSE on error
*/
function setupQuery($task, $blank_user=FALSE)
{
return FALSE;
}
function saveData($dataRecord)
{
switch($this->currentTask)
{
case 'users' :
return $this->saveUserData($dataRecord);
break;
case 'userclass' :
return $this->saveUserClassData($dataRecord);
break;
case 'news' :
return $this->saveNewsData($dataRecord);
break;
case 'newscategory' :
return $this->saveNewsCategoryData($dataRecord);
break;
case 'page' :
return $this->savePageData($dataRecord);
break;
case 'pagechapter' :
return $this->savePageChapterData($dataRecord);
break;
case 'links' :
return $this->saveLinksData($dataRecord);
break;
case 'media' :
return $this->saveMediaData($dataRecord);
break;
case 'forum' :
return $this->saveForumData($dataRecord);
break;
case 'forumthread' :
return $this->saveForumThreadData($dataRecord);
break;
case 'forumpost' :
return $this->saveForumPostData($dataRecord);
break;
case 'forumtrack' :
return $this->saveForumTrackData($dataRecord);
break;
case 'polls' :
break;
}
return FALSE;
}
// Return the next record as an array. All data has been converted to the appropriate E107 formats
// Return FALSE if no more data
// Its passed a record initialised with the default values
function getNext($initial,$mode='db')
{
if($mode == 'db')
{
$result = $this->ourDB->fetch();
}
else
{
$result = current($this->arrayData);
next($this->arrayData);
}
if (!$result) return FALSE;
switch($this->currentTask)
{
case 'users' :
return $this->copyUserData($initial, $result);
break;
case 'userclass' :
return $this->copyUserClassData($initial, $result);
break;
case 'news' :
return $this->copyNewsData($initial, $result);
break;
case 'newscategory' :
return $this->copyNewsCategoryData($initial, $result);
break;
case 'page' :
return $this->copyPageData($initial, $result);
break;
case 'pagechapter' :
return $this->copyPageChapterData($initial, $result);
break;
case 'links' :
return $this->copyLinksData($initial, $result);
break;
case 'media' :
return $this->copyMediaData($initial, $result);
break;
case 'forum' :
return $this->copyForumData($initial, $result);
break;
case 'forumthread' :
return $this->copyForumThreadData($initial, $result);
break;
case 'forumpost' :
return $this->copyForumPostData($initial, $result);
break;
case 'forumtrack' :
return $this->copyForumTrackData($initial, $result);
break;
case 'polls' :
break;
}
return FALSE;
}
// Called to signal that current task is complete; tidy up as required
function endQuery()
{
$this->currentTask = '';
}
// Empty functions which descendants can inherit from
function init()
{
return;
}
function copyUserData(&$target, &$source)
{
return $target;
}
function copyUserClassData(&$target, &$source)
{
return $target;
}
function copyNewsData(&$target, &$source)
{
return $target;
}
function copyNewsCategoryData(&$target, &$source)
{
return $target;
}
function copyPageData(&$target, &$source)
{
return $target;
}
function copyPageChapterData(&$target, &$source)
{
return $target;
}
function copyLinksData(&$target, &$source)
{
return $target;
}
function copyMediaData(&$target, &$source)
{
return $target;
}
function copyForumData(&$target, &$source)
{
return $target;
}
function copyForumPostData(&$target, &$source)
{
return $target;
}
function copyForumThreadData(&$target, &$source)
{
return $target;
}
function copyForumTrackData(&$target, &$source)
{
return $target;
}
/**
* @param $source
* @param $target
*/
public function debug($source,$target)
{
echo "
Source CMS | Target e107 |
".$this->renderTable($source)." |
".$this->renderTable($target)." |
";
}
private function renderTable($source)
{
$text = "
Field | Data |
";
foreach($source as $k=>$v)
{
$text .= "
".$k." |
".htmlentities($v)." |
";
}
$text .= "
";
return $text;
}
//===========================================================
// UTILITY ROUTINES
//===========================================================
// Process all bbcodes in the passed value; return the processed string.
// Works recursively
// Start by assembling matched pairs. Then map and otherwise process as required.
// Divide the value into five bits:
// Preamble - up to the identified bbcode (won't contain bbcode)
// BBCode start code
// Inner - text between the two bbcodes (may contain another bbcode)
// BBCode end code
// Trailer - remaining unprocessed text (may contain more bbcodes)
// (Note: preg_split might seem obvious, but doesn't pick out the actual codes
function proc_bb($value, $options = "", $maptable = null)
{
$bblower = (strpos($options,'bblower') !== FALSE) ? TRUE : FALSE; // Convert bbcode to lower case
$bbphpbb = (strpos($options,'phpbb') !== FALSE) ? TRUE : FALSE; // Strip values as phpbb
$nextchar = 0;
$loopcount = 0;
while ($nextchar < strlen($value))
{
$firstbit = '';
$middlebit = '';
$lastbit = '';
$loopcount++;
if ($loopcount > 10) return 'Max depth exceeded';
unset($bbword);
$firstcode = strpos($value,'[',$nextchar);
if ($firstcode === FALSE) return $value; // Done if no square brackets
$firstend = strpos($value,']',$firstcode);
if ($firstend === FALSE) return $value; // Done if no closing bracket
$bbword = substr($value,$firstcode+1,$firstend - $firstcode - 1); // May need to process this more if parameter follows
$bbparam = '';
$temp = strpos($bbword,'=');
if ($temp !== FALSE)
{
$bbparam = substr($bbword,$temp);
$bbword = substr($bbword,0,-strlen($bbparam));
}
if (($bbword) && ($bbword == trim($bbword)))
{
$laststart = strpos($value,'[/'.$bbword,$firstend); // Find matching end
$lastend = strpos($value,']',$laststart);
if (($laststart === FALSE) || ($lastend === FALSE))
{ // No matching end character
$nextchar = $firstend; // Just move scan pointer along
}
else
{ // Got a valid bbcode pair here
$firstbit = '';
if ($firstcode > 0) $firstbit = substr($value,0,$firstcode);
$middlebit = substr($value,$firstend+1,$laststart - $firstend-1);
$lastbit = substr($value,$lastend+1,strlen($value) - $lastend);
// Process bbcodes here
if ($bblower) $bbword = strtolower($bbword);
if ($bbphpbb && (strpos($bbword,':') !== FALSE)) $bbword = substr($bbword,0,strpos($bbword,':'));
if ($maptable)
{ // Do mapping
if (array_key_exists($bbword,$maptable)) $bbword = $maptable[$bbword];
}
$bbbegin = '['.$bbword.$bbparam.']';
$bbend = '[/'.$bbword.']';
return $firstbit.$bbbegin.$this->proc_bb($middlebit,$options,$maptable).$bbend.$this->proc_bb($lastbit,$options,$maptable);
}
}
else
{
$nextchar = $firstend+1;
}
} //endwhile;
}
}