updated dedimaniaplugin

This commit is contained in:
kremsy 2017-05-08 17:45:16 +02:00
parent 6bb342f26e
commit 9b5aabab5e
2 changed files with 105 additions and 41 deletions

View File

@ -2,6 +2,8 @@
namespace ManiaControl\Callbacks\Models; namespace ManiaControl\Callbacks\Models;
use ManiaControl\Players\Player;
/** /**
* Base Model Class for Callbacks * Base Model Class for Callbacks
* *
@ -22,9 +24,10 @@ class RecordCallback extends BaseCallback {
* Public Properties * Public Properties
*/ */
public $time = null; public $time = null;
/** @var Player $player */
public $player = null; public $player = null;
public $racetime = null; public $racetime = null;
public $laptime = null; public $lapTime = null;
public $stuntsscore = null; public $stuntsscore = null;
public $checkpointinrace = null; public $checkpointinrace = null;
public $checkpointinlap = null; public $checkpointinlap = null;

View File

@ -14,7 +14,7 @@ use ManiaControl\Callbacks\Callbacks;
use ManiaControl\Callbacks\Models\RecordCallback; use ManiaControl\Callbacks\Models\RecordCallback;
use ManiaControl\Callbacks\TimerListener; use ManiaControl\Callbacks\TimerListener;
use ManiaControl\Commands\CommandListener; use ManiaControl\Commands\CommandListener;
use ManiaControl\Files\AsynchronousFileReader; use ManiaControl\Files\AsyncHttpRequest;
use ManiaControl\Logger; use ManiaControl\Logger;
use ManiaControl\ManiaControl; use ManiaControl\ManiaControl;
use ManiaControl\Manialinks\ManialinkManager; use ManiaControl\Manialinks\ManialinkManager;
@ -35,7 +35,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
* Constants * Constants
*/ */
const ID = 8; const ID = 8;
const VERSION = 0.1; const VERSION = 0.2;
const AUTHOR = 'MCTeam'; const AUTHOR = 'MCTeam';
const NAME = 'Dedimania Plugin'; const NAME = 'Dedimania Plugin';
const MLID_DEDIMANIA = 'Dedimania.ManialinkId'; const MLID_DEDIMANIA = 'Dedimania.ManialinkId';
@ -147,6 +147,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect'); $this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect');
$this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'handlePlayerDisconnect'); $this->maniaControl->getCallbackManager()->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'handlePlayerDisconnect');
$this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::CHECKPOINT, $this, 'handleCheckpointCallback'); $this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::CHECKPOINT, $this, 'handleCheckpointCallback');
//$this->maniaControl->getCallbackManager()->registerCallbackListener(Callbacks::TM_ONWAYPOINT, $this, 'handleCheckpointCallback');
$this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::LAPFINISH, $this, 'handleLapFinishCallback'); $this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::LAPFINISH, $this, 'handleLapFinishCallback');
$this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::FINISH, $this, 'handleFinishCallback'); $this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::FINISH, $this, 'handleFinishCallback');
@ -158,11 +159,9 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
// Open session // Open session
$serverInfo = $this->maniaControl->getServer()->getInfo(); $serverInfo = $this->maniaControl->getServer()->getInfo();
$packMask = $this->maniaControl->getServer()->titleId;
$serverVersion = $this->maniaControl->getClient()->getVersion(); $serverVersion = $this->maniaControl->getClient()->getVersion();
if ($packMask !== 'Trackmania_2@nadeolabs') {
$packMask = substr($this->maniaControl->getServer()->titleId, 2); $packMask = $this->maniaControl->getMapManager()->getCurrentMap()->environment;
}
$dedimaniaCode = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_DEDIMANIA_CODE . $serverInfo->login . '$l'); $dedimaniaCode = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_DEDIMANIA_CODE . $serverInfo->login . '$l');
if (!$dedimaniaCode) { if (!$dedimaniaCode) {
@ -171,7 +170,6 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
//$this->request = AsynchronousFileReader::newRequestTest(self::DEDIMANIA_URL); //$this->request = AsynchronousFileReader::newRequestTest(self::DEDIMANIA_URL);
$this->dedimaniaData = new DedimaniaData($serverInfo->login, $dedimaniaCode, $serverInfo->path, $packMask, $serverVersion); $this->dedimaniaData = new DedimaniaData($serverInfo->login, $dedimaniaCode, $serverInfo->path, $packMask, $serverVersion);
$this->openDedimaniaSession(); $this->openDedimaniaSession();
@ -195,7 +193,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
//$this->maniaControl->fileReader->postDataTest($this->request, self::DEDIMANIA_URL, function ($data, $error) { //$this->maniaControl->fileReader->postDataTest($this->request, self::DEDIMANIA_URL, function ($data, $error) {
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$asyncHttpRequest->setCallable(function ($data, $error) {
Logger::log("Try to connect on Dedimania"); Logger::log("Try to connect on Dedimania");
if (!$data || $error) { if (!$data || $error) {
@ -230,7 +229,11 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
var_dump("Dedi Debug: DedimaniaData after Startup"); var_dump("Dedi Debug: DedimaniaData after Startup");
var_dump($this->dedimaniaData); var_dump($this->dedimaniaData);
} }
}, $content, true); });
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(true);
$asyncHttpRequest->postData();
} }
/** /**
@ -293,17 +296,21 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$data = array($this->dedimaniaData->sessionId, $mapInfo, $gameMode, $serverInfo, $playerInfo); $data = array($this->dedimaniaData->sessionId, $mapInfo, $gameMode, $serverInfo, $playerInfo);
$content = $this->encode_request(self::DEDIMANIA_GET_RECORDS, $data); $content = $this->encode_request(self::DEDIMANIA_GET_RECORDS, $data);
//var_dump("get recs"); //var_dump("get recs");
//$this->maniaControl->fileReader->postDataTest($this->request,self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest->setCallable(function ($data, $error) {
if ($error) { if ($error) {
Logger::logError('Dedimania Error: ' . $error); Logger::logError('Dedimania Error: ' . $error);
} }
$data = $this->decode($data); $data = $this->decode($data);
if (!is_array($data) || empty($data)) {
//Data[0][0] can be false in error case like map has no checkpoints
if (!is_array($data) || empty($data) || $data[0][0] == false) {
return; return;
} }
//var_dump($data);
$methodResponse = $data[0]; $methodResponse = $data[0];
if (xmlrpc_is_fault($methodResponse)) { if (xmlrpc_is_fault($methodResponse)) {
$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_GET_RECORDS); $this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_GET_RECORDS);
@ -311,8 +318,9 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
} }
$responseData = $methodResponse[0]; $responseData = $methodResponse[0];
if (!isset($responseData['Players']) || !isset($responseData['Records'])) { if (!isset($responseData['Players']) || !isset($responseData['Records'])) {
$this->maniaControl->getErrorHandler()->triggerDebugNotice('Invalid Dedimania response!', $responseData); $this->maniaControl->getErrorHandler()->triggerDebugNotice('Invalid Dedimania response! ' . json_encode($responseData));
return; return;
} }
@ -332,7 +340,11 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$this->updateManialink = true; $this->updateManialink = true;
$this->maniaControl->getCallbackManager()->triggerCallback(self::CB_DEDIMANIA_UPDATED, $this->dedimaniaData->records); $this->maniaControl->getCallbackManager()->triggerCallback(self::CB_DEDIMANIA_UPDATED, $this->dedimaniaData->records);
}, $content, true); });
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(true);
$asyncHttpRequest->postData();
return true; return true;
} }
@ -346,15 +358,15 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
return null; return null;
} }
if ($this->maniaControl->getPlayerManager()->getPlayerCount(false) <= 0 if ($this->maniaControl->getPlayerManager()->getPlayerCount(false) <= 0) {
) {
return null; return null;
} }
$playerCount = $this->maniaControl->getPlayerManager()->getPlayerCount(); $playerCount = $this->maniaControl->getPlayerManager()->getPlayerCount();
$spectatorCount = $this->maniaControl->getPlayerManager()->getSpectatorCount(); $spectatorCount = $this->maniaControl->getPlayerManager()->getSpectatorCount();
return array('SrvName' => $server->name, 'Comment' => $server->comment, 'Private' => (strlen($server->password) > 0), 'NumPlayers' => $playerCount, 'MaxPlayers' => $server->currentMaxPlayers, 'NumSpecs' => $spectatorCount, 'MaxSpecs' => $server->currentMaxSpectators); return array('SrvName' => $server->name, 'Comment' => $server->comment, 'Private' => (strlen($server->password) > 0), 'NumPlayers' => $playerCount, 'MaxPlayers' => $server->currentMaxPlayers,
'NumSpecs' => $spectatorCount, 'MaxSpecs' => $server->currentMaxSpectators);
} }
/** /**
@ -448,8 +460,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
var_dump("Dedimania Debug: Update Manialink"); var_dump("Dedimania Debug: Update Manialink");
} }
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE) if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE)) {
) {
$manialink = $this->buildManialink(); $manialink = $this->buildManialink();
$this->maniaControl->getManialinkManager()->sendManialink($manialink); $this->maniaControl->getManialinkManager()->sendManialink($manialink);
} }
@ -567,9 +578,10 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
} }
$content = $this->encode_request(self::DEDIMANIA_CHECK_SESSION, array($this->dedimaniaData->sessionId)); $content = $this->encode_request(self::DEDIMANIA_CHECK_SESSION, array($this->dedimaniaData->sessionId));
//var_dump("check session"); //TODO remove
//$this->maniaControl->fileReader->postDataTest($this->request, self::DEDIMANIA_URL, function ($data, $error) { //$this->maniaControl->fileReader->postDataTest($this->request, self::DEDIMANIA_URL, function ($data, $error) {
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$asyncHttpRequest->setCallable(function ($data, $error) {
if ($error) { if ($error) {
Logger::logError("Dedimania Error: " . $error); Logger::logError("Dedimania Error: " . $error);
} }
@ -596,7 +608,10 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
var_dump("Dedi Debug: Session Check ResponseData "); var_dump("Dedi Debug: Session Check ResponseData ");
var_dump($responseData); var_dump($responseData);
} }
}, $content, true); });
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(true);
$asyncHttpRequest->postData();
} }
/** /**
@ -613,7 +628,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$data = array($this->dedimaniaData->sessionId, $player->login, $player->rawNickname, $player->path, $player->isSpectator); $data = array($this->dedimaniaData->sessionId, $player->login, $player->rawNickname, $player->path, $player->isSpectator);
$content = $this->encode_request(self::DEDIMANIA_PLAYERCONNECT, $data); $content = $this->encode_request(self::DEDIMANIA_PLAYERCONNECT, $data);
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) use (&$player) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$asyncHttpRequest->setCallable(function ($data, $error) use (&$player) {
if ($error) { if ($error) {
Logger::logError("Dedimania Error: " . $error); Logger::logError("Dedimania Error: " . $error);
} }
@ -634,17 +650,19 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$this->dedimaniaData->addPlayer($dediPlayer); $this->dedimaniaData->addPlayer($dediPlayer);
// Fetch records if he is the first who joined the server // Fetch records if he is the first who joined the server
if ($this->maniaControl->getPlayerManager()->getPlayerCount(false) === 1 if ($this->maniaControl->getPlayerManager()->getPlayerCount(false) === 1) {
) {
$this->fetchDedimaniaRecords(true); $this->fetchDedimaniaRecords(true);
} }
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE) if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WIDGET_ENABLE)) {
) {
$manialink = $this->buildManialink(); $manialink = $this->buildManialink();
$this->maniaControl->getManialinkManager()->sendManialink($manialink, $player->login); $this->maniaControl->getManialinkManager()->sendManialink($manialink, $player->login);
} }
}, $content, true); }, $content, true);
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(true);
$asyncHttpRequest->postData();
} }
/** /**
@ -662,7 +680,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$data = array($this->dedimaniaData->sessionId, $player->login, ''); $data = array($this->dedimaniaData->sessionId, $player->login, '');
$content = $this->encode_request(self::DEDIMANIA_PLAYERDISCONNECT, $data); $content = $this->encode_request(self::DEDIMANIA_PLAYERDISCONNECT, $data);
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$asyncHttpRequest->setCallable(function ($data, $error) {
if ($error) { if ($error) {
Logger::logError("Dedimania Error: " . $error); Logger::logError("Dedimania Error: " . $error);
} }
@ -676,7 +695,11 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
if (xmlrpc_is_fault($methodResponse)) { if (xmlrpc_is_fault($methodResponse)) {
$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_PLAYERDISCONNECT); $this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_PLAYERDISCONNECT);
} }
}, $content, true); });
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(true);
$asyncHttpRequest->postData();
} }
/** /**
@ -684,6 +707,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
*/ */
public function handleBeginMap() { public function handleBeginMap() {
unset($this->dedimaniaData->records); unset($this->dedimaniaData->records);
$this->updateManialink = true;
$this->fetchDedimaniaRecords(true); $this->fetchDedimaniaRecords(true);
} }
@ -695,6 +719,11 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
return; return;
} }
//Finish Counts as CP somehow
if ($this->maniaControl->getMapManager()->getCurrentMap()->nbCheckpoints < 2) {
return;
}
// Send dedimania records // Send dedimania records
$gameMode = $this->getGameModeString(); $gameMode = $this->getGameModeString();
$times = array(); $times = array();
@ -722,16 +751,15 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
xmlrpc_set_type($replays['VReplay'], 'base64'); xmlrpc_set_type($replays['VReplay'], 'base64');
xmlrpc_set_type($replays['Top1GReplay'], 'base64'); xmlrpc_set_type($replays['Top1GReplay'], 'base64');
//var_dump($replays);
$data = array($this->dedimaniaData->sessionId, $this->getMapInfo(), $gameMode, $times, $replays); $data = array($this->dedimaniaData->sessionId, $this->getMapInfo(), $gameMode, $times, $replays);
//var_dump($data);
$content = $this->encode_request(self::DEDIMANIA_SET_CHALLENGE_TIMES, $data); $content = $this->encode_request(self::DEDIMANIA_SET_CHALLENGE_TIMES, $data);
if (self::DEDIMANIA_DEBUG) { if (self::DEDIMANIA_DEBUG) {
var_dump("Dedimania Debug: Submitting Times at End-Map", $content); var_dump("Dedimania Debug: Submitting Times at End-Map", $content);
} }
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$asyncHttpRequest->setCallable(function ($data, $error) {
if ($error) { if ($error) {
Logger::logError("Dedimania Error: " . $error); Logger::logError("Dedimania Error: " . $error);
} }
@ -763,7 +791,10 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
var_dump("Dedimania Data"); var_dump("Dedimania Data");
var_dump($this->dedimaniaData); var_dump($this->dedimaniaData);
} }
}, $content, false); });
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(false);
$asyncHttpRequest->postData();
} }
/** /**
@ -781,7 +812,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$data = array($this->dedimaniaData->sessionId, $serverInfo, $votesInfo, $playerList); $data = array($this->dedimaniaData->sessionId, $serverInfo, $votesInfo, $playerList);
$content = $this->encode_request(self::DEDIMANIA_UPDATE_SERVER_PLAYERS, $data); $content = $this->encode_request(self::DEDIMANIA_UPDATE_SERVER_PLAYERS, $data);
$this->maniaControl->getFileReader()->postData(self::DEDIMANIA_URL, function ($data, $error) { $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL);
$asyncHttpRequest->setCallable(function ($data, $error) {
if ($error) { if ($error) {
Logger::logError("Dedimania Error: " . $error); Logger::logError("Dedimania Error: " . $error);
} }
@ -795,7 +827,11 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
if (xmlrpc_is_fault($methodResponse)) { if (xmlrpc_is_fault($methodResponse)) {
$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_UPDATE_SERVER_PLAYERS); $this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_UPDATE_SERVER_PLAYERS);
} }
}, $content, true); });
$asyncHttpRequest->setContent($content);
$asyncHttpRequest->setCompression(true);
$asyncHttpRequest->postData();
} }
/** /**
@ -830,6 +866,20 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$this->checkpoints[$callback->login][$callback->lapCheckpoint] = $callback->lapTime; $this->checkpoints[$callback->login][$callback->lapCheckpoint] = $callback->lapTime;
} }
/*public function handleCheckpointCallback(OnWayPointEventStructure $structure) {
//var_dump($callback->lapTime); //new structure but that change isnt enough
if (!$structure->getLapTime()) {
return;
}
$login = $structure->getPlayer()->login;
if (!isset($this->checkpoints[$login])) {
$this->checkpoints[$login] = array();
}
$this->checkpoints[$login][$structure->getCheckPointInLap()] = $structure->getLapTime();
}*/
/** /**
* Handle LapFinish Callback * Handle LapFinish Callback
* *
@ -845,7 +895,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
* @param RecordCallback $callback * @param RecordCallback $callback
*/ */
public function handleFinishCallback(RecordCallback $callback) { public function handleFinishCallback(RecordCallback $callback) {
if (!isset($this->dedimaniaData) || !$this->dedimaniaData->records) { if (!isset($this->dedimaniaData)) {
return; return;
} }
if ($callback->isLegacyCallback) { if ($callback->isLegacyCallback) {
@ -861,11 +911,20 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
return; return;
} }
if ($map->nbCheckpoints < 2) {
return;
}
$oldRecord = $this->getDedimaniaRecord($callback->login); $oldRecord = $this->getDedimaniaRecord($callback->login);
if ($oldRecord->nullRecord || $oldRecord && $oldRecord->best > $callback->lapTime) { if ($oldRecord->nullRecord || $oldRecord && $oldRecord->best > $callback->lapTime) {
// Save time // Save time
$newRecord = new RecordData(null); $newRecord = new RecordData(null);
$newRecord->constructNewRecord($callback->login, $callback->player->nickname, $callback->lapTime, $this->getCheckpoints($callback->login), true);
$checkPoints = $this->getCheckpoints($callback->login);
$checkPoints = $checkPoints . "," . $callback->lapTime;
$newRecord->constructNewRecord($callback->login, $callback->player->nickname, $callback->lapTime, $checkPoints, true);
if ($this->insertDedimaniaRecord($newRecord, $oldRecord)) { if ($this->insertDedimaniaRecord($newRecord, $oldRecord)) {
// Get newly saved record // Get newly saved record
foreach ($this->dedimaniaData->records as &$record) { foreach ($this->dedimaniaData->records as &$record) {
@ -937,6 +996,8 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
return $string; return $string;
} }
//TODO some bug if no dedimania time is existing
/** /**
* Inserts the given new Dedimania record at the proper position * Inserts the given new Dedimania record at the proper position
* *
@ -945,7 +1006,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
* @return bool * @return bool
*/ */
private function insertDedimaniaRecord(RecordData &$newRecord, RecordData $oldRecord) { private function insertDedimaniaRecord(RecordData &$newRecord, RecordData $oldRecord) {
if (!isset($this->dedimaniaData) || !$this->dedimaniaData->records || $newRecord->nullRecord) { if (!isset($this->dedimaniaData) || !isset($this->dedimaniaData->records) || $newRecord->nullRecord) {
return false; return false;
} }
@ -1139,7 +1200,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene
$pageFrame = new Frame(); $pageFrame = new Frame();
$frame->addChild($pageFrame); $frame->addChild($pageFrame);
$posY = $height / 2 - 10; $posY = $height / 2 - 10;
$paging->addPage($pageFrame); $paging->addPageControl($pageFrame);
} }
$recordFrame = new Frame(); $recordFrame = new Frame();