page answer action regex draft
This commit is contained in:
parent
8b83825344
commit
f0e7a96e0e
@ -41,6 +41,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
*/
|
||||
private $maniaControl = null;
|
||||
private $pageAnswerListeners = array();
|
||||
private $pageAnswerRegexListener = array();
|
||||
|
||||
/**
|
||||
* Create a new manialink manager
|
||||
@ -69,19 +70,45 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
public function registerManialinkPageAnswerListener($actionId, ManialinkPageAnswerListener $listener, $method) {
|
||||
if (!method_exists($listener, $method)) {
|
||||
trigger_error("Given listener for actionId '{$actionId}' doesn't have callback method '{$method}'!");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!array_key_exists($actionId, $this->pageAnswerListeners) || !is_array($this->pageAnswerListeners[$actionId])) {
|
||||
// Init listeners array
|
||||
$this->pageAnswerListeners[$actionId] = array();
|
||||
}
|
||||
|
||||
// Register page answer listener
|
||||
array_push($this->pageAnswerListeners[$actionId], array($listener, $method));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new manialink page answer reg ex listener
|
||||
*
|
||||
* @param string $actionIdRegex
|
||||
* @param ManialinkPageAnswerListener $listener
|
||||
* @param string $method
|
||||
* @return bool
|
||||
*/
|
||||
public function registerManialinkPageAnswerRegexListener($actionIdRegex, ManialinkPageAnswerListener $listener, $method) {
|
||||
if (!method_exists($listener, $method)) {
|
||||
trigger_error("Given listener for actionIdRegex '{$actionIdRegex}' doesn't have callback method '{$method}'!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!array_key_exists($actionIdRegex, $this->pageAnswerRegexListener) || !is_array($this->pageAnswerRegexListener[$actionIdRegex])) {
|
||||
// Init regex listeners array
|
||||
$this->pageAnswerRegexListener[$actionIdRegex] = array();
|
||||
}
|
||||
|
||||
// Register page answer reg exlistener
|
||||
array_push($this->pageAnswerRegexListener[$actionIdRegex], array($listener, $method));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a Manialink Page Answer Listener
|
||||
*
|
||||
@ -90,9 +117,10 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
*/
|
||||
public function unregisterManialinkPageAnswerListener(ManialinkPageAnswerListener $listener) {
|
||||
$removed = false;
|
||||
foreach($this->pageAnswerListeners as &$listeners) {
|
||||
foreach($listeners as $key => &$listenerCallback) {
|
||||
if ($listenerCallback[0] != $listener) {
|
||||
$allListeners = array_merge($this->pageAnswerListeners, $this->pageAnswerRegexListener);
|
||||
foreach ($allListeners as &$listeners) {
|
||||
foreach ($listeners as $key => &$listenerCallback) {
|
||||
if ($listenerCallback[0] !== $listener) {
|
||||
continue;
|
||||
}
|
||||
unset($listeners[$key]);
|
||||
@ -111,13 +139,22 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
$actionId = $callback[1][2];
|
||||
$login = $callback[1][1];
|
||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||
if (!array_key_exists($actionId, $this->pageAnswerListeners) || !is_array($this->pageAnswerListeners[$actionId])) {
|
||||
// No page answer listener registered
|
||||
return;
|
||||
}
|
||||
|
||||
if (array_key_exists($actionId, $this->pageAnswerListeners) && is_array($this->pageAnswerListeners[$actionId])) {
|
||||
// Inform page answer listeners
|
||||
foreach($this->pageAnswerListeners[$actionId] as $listener) {
|
||||
call_user_func(array($listener[0], $listener[1]), $callback, $player);
|
||||
foreach ($this->pageAnswerListeners[$actionId] as $listener) {
|
||||
call_user_func($listener, $callback, $player);
|
||||
}
|
||||
}
|
||||
|
||||
// Check regex listeners
|
||||
foreach ($this->pageAnswerRegexListener as $actionIdRegex => $pageAnswerRegexListeners) {
|
||||
if (preg_match($actionIdRegex, $actionId)) {
|
||||
// Inform page answer regex listeners
|
||||
foreach ($pageAnswerRegexListeners as $listener) {
|
||||
call_user_func($listener, $callback, $player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,7 +168,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
* @return bool
|
||||
*/
|
||||
public function sendManialink($manialinkText, $logins = null, $timeout = 0, $hideOnClick = false) {
|
||||
$manialinkText = (string)$manialinkText;
|
||||
$manialinkText = (string) $manialinkText;
|
||||
|
||||
if (!$manialinkText) {
|
||||
return true;
|
||||
@ -151,7 +188,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
}
|
||||
if (is_array($logins)) {
|
||||
$success = true;
|
||||
foreach($logins as $login) {
|
||||
foreach ($logins as $login) {
|
||||
$subSuccess = $this->maniaControl->client->sendDisplayManialinkPage($login, $manialinkText, $timeout, $hideOnClick);
|
||||
if (!$subSuccess) {
|
||||
$success = false;
|
||||
@ -160,7 +197,8 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
|
||||
return $success;
|
||||
}
|
||||
} catch(LoginUnknownException $e) {
|
||||
}
|
||||
catch (LoginUnknownException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -176,7 +214,8 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
public function enableAltMenu(Player $player) {
|
||||
try {
|
||||
$success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_EnableAltMenu', $player->login);
|
||||
} catch(NotInScriptModeException $e) {
|
||||
}
|
||||
catch (NotInScriptModeException $e) {
|
||||
return false;
|
||||
}
|
||||
return $success;
|
||||
@ -191,7 +230,8 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
public function disableAltMenu(Player $player) {
|
||||
try {
|
||||
$success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_DisableAltMenu', $player->login);
|
||||
} catch(NotInScriptModeException $e) {
|
||||
}
|
||||
catch (NotInScriptModeException $e) {
|
||||
return false;
|
||||
}
|
||||
return $success;
|
||||
@ -209,7 +249,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
$this->sendManialink($maniaLink, $player->login);
|
||||
|
||||
if ($widgetName != '') {
|
||||
//TODO make check by manialinkId, getter is needed to avoid uses on non main widgets
|
||||
// TODO make check by manialinkId, getter is needed to avoid uses on non main widgets
|
||||
$this->disableAltMenu($player);
|
||||
// Trigger callback
|
||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAIN_WINDOW_OPENED, $player, $widgetName);
|
||||
@ -240,7 +280,8 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
|
||||
// Trigger callback
|
||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAIN_WINDOW_CLOSED, $player);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$emptyManialink = new ManiaLink($widgetId);
|
||||
$this->sendManialink($emptyManialink, $player->login);
|
||||
}
|
||||
@ -263,7 +304,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
||||
$profile = (isset($properties['profile']) ? $properties['profile'] : false);
|
||||
|
||||
$labels = array();
|
||||
foreach($labelStrings as $text => $x) {
|
||||
foreach ($labelStrings as $text => $x) {
|
||||
$label = new Label_Text();
|
||||
$frame->add($label);
|
||||
$label->setHAlign($hAlign);
|
||||
|
Loading…
Reference in New Issue
Block a user