$task, 'callback' => $callback )); } /** * Get all pending callbacks from the callback table. * * @return array list of array(taskid => list of callbacks) */ public static function getPendingCallbacks() { $retval = array(); $res = Database::simpleQuery("SELECT taskid, cbfunction FROM callback"); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { $retval[$row['taskid']][] = $row; } return $retval; } /** * Handle the given callback. Will delete the entry from the callback * table if appropriate. * * @param array $callback entry from the callback table (cbfunction + taskid) * @param array $status status of the task as returned by the taskmanager. If NULL it will be queried. */ public static function handleCallback($callback, $status = NULL) { if (is_null($status)) $status = Taskmanager::status($callback['taskid']); if ($status === false) // No reply from Taskmanager, retry later return; if (Taskmanager::isFailed($status) || Taskmanager::isFinished($status)) { $del = Database::exec("DELETE FROM callback WHERE taskid = :task AND cbfunction = :cb LIMIT 1", array('task' => $callback['taskid'], 'cb' => $callback['cbfunction'])); if ($del === 0) // No entry deleted, so someone else must have deleted it - race condition, do nothing return; } if (Taskmanager::isFinished($status)) { $func = array('TaskmanagerCallback', preg_replace('/\W/', '', $callback['cbfunction'])); if (!call_user_func_array('method_exists', $func)) { Eventlog::warning("handleCallback: Callback {$callback['cbfunction']} doesn't exist."); } else { call_user_func($func, $status); } } } // #################################################################### /** * Result of trying to (re)launch ldadp. */ public static function ldadpStartup($task) { if (Taskmanager::isFailed($task)) EventLog::warning("Could not start/stop LDAP-AD-Proxy instances", $task['data']['messages']); } public static function dbRestored($task) { error_log("dbRestored."); if (Taskmanager::isFinished($task) && !Taskmanager::isFailed($task)) { error_log("LOGGING."); EventLog::info('Configuration backup restored.'); } } }