本文整理汇总了PHP中manager::getNewEngine方法的典型用法代码示例。如果您正苦于以下问题:PHP manager::getNewEngine方法的具体用法?PHP manager::getNewEngine怎么用?PHP manager::getNewEngine使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类manager
的用法示例。
在下文中一共展示了manager::getNewEngine方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: testManyInsDel
function testManyInsDel()
{
$model = manager::loadModel(0);
//$logoot = new logootEngine($model);
$logoot = manager::getNewEngine($model);
$oldContent = "";
for ($i = 0; $i < 500; $i++) {
//500 inserts / 499 deletion
//insert X
$newContent = "{$i}";
$listOp1 = $logoot->generate($oldContent, $newContent);
if ($i == 0) {
//ins first line
$this->assertEquals(1, $listOp1->size());
} else {
$this->assertEquals(2, $listOp1->size());
}
$oldContent = $newContent;
}
$modelAssert = $logoot->getModel();
$this->assertEquals(3, count($modelAssert->getPositionlist()));
}
示例2: testConcDelOpIntegration
function testConcDelOpIntegration()
{
$oldtext = "";
$conctext = "line1\nline2\nline3\nline4";
$model = manager::loadModel(0);
//$logoot = new logootEngine($model);
$logoot = manager::getNewEngine($model);
$listOp = $logoot->generate($oldtext, $conctext);
//$model has 4 lines created by 4 ins operations
$tmpMod = $logoot->getModel();
$this->assertEquals(6, count($tmpMod->getPositionlist()));
$this->assertEquals(6, count($tmpMod->getLinelist()));
$oldtext = "line1\nline2\nline3\nline4";
$actualtext = "line1\nline2\nline4";
$listOp1 = $logoot->generate($oldtext, $actualtext);
$tmpMod = $logoot->getModel();
$this->assertEquals(5, count($tmpMod->getPositionlist()));
$this->assertEquals(5, count($tmpMod->getLinelist()));
$logoot->integrate($listOp1);
$modelAssert = $logoot->getModel();
$this->assertEquals(5, count($modelAssert->getPositionlist()));
$this->assertEquals(5, count($modelAssert->getLinelist()));
}
示例3: logootIntegrate
/**
*Integrates the operation(LogootOp) into the article via the logoot algorithm
*
* @param <Object> $operation
* @param <String or Object> $article
*/
function logootIntegrate($operations, $article)
{
global $wgCanonicalNamespaceNames;
$indexNS = 0;
wfDebugLog('p2p', '@@@@@@@@@@@@@@@@@@@@@@@ - function logootIntegrate : ' . $article);
$dbr = wfGetDB(DB_SLAVE);
$dbr->immediateBegin();
if (is_string($article)) {
//if there is a space in the title, repalce by '_'
$article = str_replace(" ", "_", $article);
if (strpos($article, ":") === false) {
$pageid = $dbr->selectField('page', 'page_id', array('page_title' => $article));
} else {
//if there is a namespace
preg_match("/^(.+?)_*:_*(.*)\$/S", $article, $tmp);
$articleWithoutNS = $tmp[2];
$NS = $tmp[1];
if (in_array($NS, $wgCanonicalNamespaceNames)) {
foreach ($wgCanonicalNamespaceNames as $key => $value) {
if ($NS == $value) {
$indexNS = $key;
}
}
}
$pageid = $dbr->selectField('page', 'page_id', array('page_title' => $articleWithoutNS, 'page_namespace' => $indexNS));
}
// get the page namespace
$pageNameSpace = $dbr->selectField('page', 'page_namespace', array('page_id' => $pageid));
/*the ns must not be a pullfeed, pushfeed, changeset or patch namespace.
If the page name is the same in different ns we can get the wrong
* page id
*/
if ($pageNameSpace == PULLFEED || $pageNameSpace == PUSHFEED || $pageNameSpace == PATCH || $pageNameSpace == CHANGESET) {
$pageid = 0;
}
$lastRev = Revision::loadFromPageId($dbr, $pageid);
if (is_null($lastRev)) {
$rev_id = 0;
} else {
$rev_id = $lastRev->getId();
}
wfDebugLog('p2p', ' -> pageId : ' . $pageid);
wfDebugLog('p2p', ' -> rev_id : ' . $rev_id);
$title = Title::newFromText($article);
$article = new Article($title);
} else {
$rev_id = $article->getRevIdFetched();
}
$listOp = array();
//$blobInfo = BlobInfo::loadBlobInfo($rev_id);
$model = manager::loadModel($rev_id);
$logoot = manager::getNewEngine($model, DSMWSiteId::getInstance()->getSiteId());
// new logootEngine($model);
foreach ($operations as $operation) {
wfDebugLog('p2p', ' - operation : ' . $operation);
wfDebugLog('testlog', ' - operation : ' . $operation);
if (!$operation instanceof LogootOperation) {
$operation = operationToLogootOp($operation);
}
if ($operation != false && is_object($operation)) {
$listOp[] = $operation;
wfDebugLog('testlog', ' -> Operation: ' . $operation->getLogootPosition()->toString());
//$blobInfo->integrateBlob($operation);
}
}
//end foreach operations
$p = new LogootPatch($rev_id, $listOp);
$logoot->integrate($p);
$modelAfterIntegrate = $logoot->getModel();
//$revId = utils::getNewArticleRevId();
$status = $article->doEdit($modelAfterIntegrate->getText(), $summary = "");
$revId = $status->value['revision']->getId();
manager::storeModel($revId, $sessionId = session_id(), $modelAfterIntegrate, $blobCB = 0);
return array($revId, $p);
}
示例4: attemptSave
function attemptSave($editpage)
{
global $wgServerName, $wgScriptPath;
$urlServer = 'http://' . $wgServerName . $wgScriptPath;
wfDebugLog('p2p', "@@@@@@@@@@@@@@@@@@@@@ attemptSave : {$wgServerName}, {$wgScriptPath} - ");
$ns = $editpage->mTitle->getNamespace();
if ($ns == PATCH || $ns == PUSHFEED || $ns == PULLFEED || $ns == CHANGESET) {
return true;
}
$actualtext = $editpage->textbox1;
//V2
$dbr = wfGetDB(DB_SLAVE);
$lastRevision = Revision::loadFromTitle($dbr, $editpage->mTitle);
if (is_null($lastRevision)) {
$conctext = "";
$rev_id = 0;
} elseif (($ns == NS_FILE || $ns == NS_IMAGE || $ns == NS_MEDIA) && $lastRevision->getRawText() == "") {
$rev_id = 0;
$conctext = $lastRevision->getText();
} else {
$conctext = $lastRevision->getText();
//V1 conc
$rev_id = $lastRevision->getId();
}
//if there is no modification on the text
if ($actualtext == $conctext) {
return true;
}
$model = manager::loadModel($rev_id);
$logoot = manager::getNewEngine($model, DSMWSiteId::getInstance()->getSiteId());
// new logootEngine($model);
//get the revision with the edittime==>V0
$rev = Revision::loadFromTimestamp($dbr, $editpage->mTitle, $editpage->edittime);
if (is_null($rev)) {
$text = "";
$rev_id1 = 0;
} else {
$text = $rev->getText();
//VO
$rev_id1 = $rev->getId();
}
if ($conctext != $text) {
//if last revision is not V0, there is editing conflict
wfDebugLog('p2p', ' -> CONCURRENCE: ');
wfDebugLog('p2p', ' -> + conctext :' . $conctext . '+(' . $rev_id . ') ts ' . $lastRevision->getTimestamp());
wfDebugLog('p2p', ' -> + text ' . $text . '+(' . $rev_id1 . ') ts ' . $editpage->edittime . ' ' . $rev->getTimestamp());
$model1 = manager::loadModel($rev_id1);
$logoot1 = manager::getNewEngine($model1, DSMWSiteId::getInstance()->getSiteId());
// new logootEngine($model1);
wfDebugLog('p2p', "========== Conc - {$urlServer} : \n" . $conctext . "\n--\n" . $text . "\n--\n" . $actualtext . "\n--\n");
$listOp1 = $logoot1->generate($text, $actualtext);
wfDebugLog('p2p', $listOp1 . "===\n\n");
//creation Patch P2
$tmp = serialize($listOp1);
$patch = new Patch(false, false, $listOp1, $urlServer, $rev_id1);
if ($editpage->mTitle->getNamespace() == 0) {
$title = $editpage->mTitle->getText();
} else {
$title = $editpage->mTitle->getNsText() . ':' . $editpage->mTitle->getText();
}
//integration: diffs between VO and V2 into V1
$logoot->integrate($listOp1);
$modelAfterIntegrate = $logoot->getModel();
} else {
//no edition conflict
wfDebugLog('p2p', "=========== Std - {$urlServer} : \n" . $conctext . "\n--\n" . $actualtext . "\n--\n");
$listOp = $logoot->generate($conctext, $actualtext);
wfDebugLog('p2p', $listOp . "===\n\n");
$modelAfterIntegrate = $logoot->getModel();
$tmp = serialize($listOp);
$patch = new Patch(false, false, $listOp, $urlServer, $rev_id1);
if ($editpage->mTitle->getNamespace() == 0) {
$title = $editpage->mTitle->getText();
} else {
$title = $editpage->mTitle->getNsText() . ':' . $editpage->mTitle->getText();
}
}
$revId = utils::getNewArticleRevId() + 1;
wfDebugLog('p2p', ' -> store model rev : ' . $revId . ' session ' . session_id() . ' model ' . $modelAfterIntegrate->getText());
manager::storeModel($revId, $sessionId = session_id(), $modelAfterIntegrate, $blobCB = 0);
$patch->storePage($title, $revId);
//stores the patch in a wikipage
$editpage->textbox1 = $modelAfterIntegrate->getText();
return true;
}
示例5: run
function run()
{
global $wgServerName, $wgScriptPath, $wgServer, $wgScriptExtension;
$urlServer = 'http://' . $wgServerName;
wfProfileIn('DSMWUpdateJob::run()');
$revids = array();
$revids1 = array();
$page_ids = array();
//Getting all the revision ids of pages having been logootized
$db = wfGetDB(DB_SLAVE);
$model_table = $db->tableName('model');
$sql = "SELECT `rev_id` FROM {$model_table}";
$res = $db->query($sql);
while ($row = $db->fetchObject($res)) {
$revids[] = $row->rev_id;
}
$db->freeResult($res);
//if (count($revids)==0) $revids=array();
//Getting all the revision ids without the pages in the DSMW namespaces and
//Administration_pull_site_addition and Administration_pull_site_addition pages
$rev_table = $db->tableName('revision');
$page_table = $db->tableName('page');
$sql = "SELECT {$rev_table}.`rev_id` FROM {$rev_table}, {$page_table} WHERE\n `rev_page`=`page_id` and `page_namespace`!= 110 and `page_namespace`!= 200\n and `page_namespace`!= 210 and `page_namespace`!= 220 \nand `page_title`!= \"Administration_pull_site_addition\"\nand `page_title` != \"Administration_push_site_addition\"";
$res1 = $db->query($sql);
while ($row = $db->fetchObject($res1)) {
$revids1[] = $row->rev_id;
}
$db->freeResult($res1);
//if (count($revids1)==0) $revids1=array();
//Array_diff returns an array containing all the entries from $revids1 that are
//not present in $revids.
$diff = array_diff($revids1, $revids);
//get page ids of these revisions (each id must be unique in the array)
foreach ($diff as $id) {
$page_id = $db->selectField('revision', 'rev_page', array('rev_id' => $id));
$page_ids[] = $page_id;
}
$page_ids = array_unique($page_ids);
sort($page_ids);
//Now we can logootize:
if (count($page_ids) != 0) {
foreach ($page_ids as $pageid) {
$title = Title::newFromID($pageid);
$ns = $title->getNamespace();
$lastRev = Revision::loadFromPageId($db, $pageid);
$pageText = $lastRev->getText();
//load an empty model
$model = manager::loadModel(0);
$logoot = manager::getNewEngine($model, DSMWSiteId::getInstance()->getSiteId());
// new logootEngine($model);
$listOp = $logoot->generate("", $pageText);
$modelAfterIntegrate = $logoot->getModel();
$tmp = serialize($listOp);
$patchid = sha1($tmp);
if ($ns == NS_FILE || $ns == NS_IMAGE || $ns == NS_MEDIA) {
$apiUrl = $wgServer . $wgScriptPath . "/api" . $wgScriptExtension;
$onPage = str_replace(array(' '), array('%20'), $lastRev->getTitle()->getText());
$download = $apiUrl . "?action=query&titles=File:" . $onPage . "&prop=imageinfo&format=php&iiprop=mime|url|size";
$resp = Http::get($download);
$resp = unserialize($resp);
$a = $resp['query']['pages'];
$a = current($a);
$a = $a['imageinfo'];
$a = current($a);
$mime = $a['mime'];
$size = $a['size'];
$url = $a['url'];
$patch = new Patch(false, true, null, $urlServer . $wgScriptPath, 0, null, null, null, $mime, $size, $url, null);
$patch->storePage('File:' . $lastRev->getTitle()->getText(), $lastRev->getId());
} else {
$patch = new Patch(false, false, $listOp, $urlServer, 0);
$patch->storePage($lastRev->getTitle()->getText(), $lastRev->getId());
}
manager::storeModel($lastRev->getId(), $sessionId = session_id(), $modelAfterIntegrate, $blobCB = 0);
}
}
wfProfileOut('DSMWUpdateJob::run()');
return true;
}
示例6: test5
function test5()
{
$model = manager::loadModel(0);
$logoot = manager::getNewEngine($model, 3);
$logoot->compute("Space-filling_curve.xml");
$doc = simplexml_load_file("Space-filling_curve.xml");
$ota = explode("\n", $doc->current_page);
$nta = explode("\n", $logoot->getModel()->getText());
$counter = 0;
if (count($ota) == 1 && $ota[0] == "") {
unset($ota[0]);
}
$diffs = new Diff1($ota, $nta);
$ok = true;
foreach ($diffs->edits as $operation) {
switch ($operation->type) {
case "add":
$adds = $operation->closing;
ksort($adds, SORT_NUMERIC);
foreach ($adds as $lineNb => $linetxt) {
echo "Add {$lineNb} : '{$linetxt}'\n";
}
$ok = false;
break;
case "delete":
foreach ($operation->orig as $lineNb => $linetxt) {
echo "Del {$lineNb} : '{$linetxt}'\n";
}
$ok = false;
break;
case "change":
foreach ($operation->orig as $lineNb => $linetxt) {
echo "Change/Del {$lineNb} : '{$linetxt}'\n";
}
$adds1 = $operation->closing;
ksort($adds1, SORT_NUMERIC);
foreach ($adds1 as $lineNb => $linetxt) {
echo "Change/Add {$lineNb} : '{$linetxt}'\n";
}
$ok = false;
break;
case "copy":
break;
default:
}
}
$this->assertTrue($ok);
}