/** * Starts the log for an evaluation. The log string is assembled in self::mLog. * * @param Title $title * @param User $user * @param string $action */ static function startLog($title, $user, $action) { global $wgRequest, $haclgEvaluatorLog, $haclgCombineMode; self::$mLogEnabled = $haclgEvaluatorLog && $wgRequest->getVal('hacllog', 'false') == 'true'; if (!self::$mLogEnabled) { // Logging is disabled return; } self::$mLog = ""; self::$mLog .= "IntraACL Evaluation Log\n"; self::$mLog .= "======================\n\n"; self::$mLog .= "Title: " . (is_null($title) ? "null" : $title->getFullText()) . "\n"; self::$mLog .= "User: "******"\n"; self::$mLog .= "Action: {$action}; mode: {$haclgCombineMode}\n"; }
/** * Run a single test - assert $user can/cannot do $action on (depending on $can) * by $user, report status and failure details, if any. */ protected function assertCan($user, $can, $action) { global $haclgCombineMode, $haclgOpenWikiAccess; $info = array_merge(array($haclgOpenWikiAccess ? 'OPEN' : 'CLOSED', $haclgCombineMode), array_keys($this->acls)); $result = false; if (class_exists('IACLEvaluator')) { IACLEvaluator::userCan($this->title, $user, $action, $result); } else { HACLEvaluator::userCan($this->title, $user, $action, $result); } $ok = $can == $result; if ($ok) { $str = "[OK] "; $this->numOk++; } else { $str = "[FAILED] "; $this->numFailed++; } $str = $this->pfx . sprintf("%5d ", $this->numFailed + $this->numOk) . $str . '[' . implode(' ', $info) . '] ' . $user->getName() . ($can ? " can " : " cannot ") . $action . ' ' . $this->title . ($ok ? $this->newline : "\n"); if (!$ok || !$this->onlyFailures) { print $str; } if (!$ok) { global $haclgCombineMode, $haclgOpenWikiAccess; $art = new WikiPage($this->title); print " Details:\n Open Wiki Access = " . ($haclgOpenWikiAccess ? 'true' : 'false') . "\n"; print " Combine Mode = {$haclgCombineMode}\n"; print " Article content = " . trim($art->getText()) . "\n"; if ($this->acls) { print " Applied ACLs:\n"; foreach ($this->acls as $key => $info) { print ' ' . $info['title'] . ' ' . trim((new WikiPage($info['title']))->getText()) . "\n"; } } else { print " No applied ACLs\n"; } wfGetDB(DB_MASTER)->commit(); if ($this->stopOnFailure) { exit; } } }