public function forkRemote($cloneUrl, $originalUrl, $title = null) { $new = $this->fork($cloneUrl); $new->getVc()->getCommand('config')->addArgument('remote.origin.title')->addArgument($title)->execute(); if ($originalUrl != $cloneUrl) { $new->getVc()->getCommand('config')->addArgument('remote.origin.homepage')->addArgument($originalUrl)->execute(); } if ($title === null) { $title = 'Fork of ' . $originalUrl; } file_put_contents($new->gitDir . '/description', $title); $this->index($new); $not = new Notificator(); $not->create($new); return $new; }
function execute($par) { global $wgRequest, $wgOut, $wgUser; $this->setHeaders(); # Get request data from, e.g. $pageId = $wgRequest->getText('pageId'); $revId = $wgRequest->getText('revId'); $receiver = $wgRequest->getText('receiver'); if (!$pageId || !$revId || !$receiver) { $output = '<span class="error">' . htmlspecialchars(wfMsg('notificator-special-page-accessed-directly')) . '</span>'; } else { $titleObj = Title::newFromID($pageId); $pageTitle = $titleObj->getFullText(); $linkToPage = $titleObj->getFullURL(); if (!Notificator::receiverIsValid($receiver)) { $output = '<span class="error">' . htmlspecialchars(wfMsg('notificator-e-mail-address-invalid') . ' ' . wfMsg('notificator-notification-not-sent')) . '</span>'; $output .= Notificator::getReturnToText($linkToPage, $pageTitle); $wgOut->addHTML($output); return; } $oldRevId = Notificator::getLastNotifiedRevId($pageId, $revId, $receiver); if ($oldRevId >= 0) { if ($oldRevId > 0) { // Receiver has been notified before - send the diff to the last notified revision $mailSubjectPrefix = '[' . htmlspecialchars(wfMsg('notificator-change-tag')) . '] '; $wgOut->addModules('mediawiki.action.history.diff'); $diff = Notificator::getNotificationDiffHtml($oldRevId, $revId); $notificationText = wfMsg('notificator-notification-text-changes', htmlspecialchars($wgUser->getName()), Html::element('a', array('href' => $linkToPage), $pageTitle)) . Html::rawElement('div', array('style' => 'margin-top: 1em'), $diff); } else { // Receiver has never been notified about this page - so don't send a diff, just the link $mailSubjectPrefix = '[' . htmlspecialchars(wfMsg('notificator-new-tag')) . '] '; $notificationText = wfMsg('notificator-notification-text-new', htmlspecialchars($wgUser->getName()), Html::element('a', array('href' => $linkToPage), $pageTitle)); } $mailSubject = htmlspecialchars($mailSubjectPrefix . $pageTitle); if (Notificator::sendNotificationMail($receiver, $mailSubject, $notificationText)) { $output = '<strong>' . htmlspecialchars(wfMsg('notificator-following-e-mail-sent-to', $receiver)) . '</strong><div style="margin-top: 1em;"><h3>' . wfMsg('notificator-subject') . ' ' . $mailSubject . '</h3><p>' . $notificationText . '</p></div>'; Notificator::recordNotificationInDatabase($pageId, $revId, $receiver); } else { $output = '<span class="error">' . htmlspecialchars(wfMsg('notificator-error-sending-e-mail', $receiver)) . '</span>'; } } elseif ($oldRevId == -1) { $output = '<span class="error">' . htmlspecialchars(wfMsg('notificator-error-parameter-missing')) . '</span>'; } elseif ($oldRevId == -2) { $output = '<strong>' . htmlspecialchars(wfMsg('notificator-notified-already', $receiver) . ' ' . wfMsg('notificator-notification-not-sent')) . '</strong>'; } $output .= Notificator::getReturnToText($linkToPage, $pageTitle); } $wgOut->addHTML($output); }
private function logError($ex) { if (is_a($ex, dbException)) { $dbh = Connection::get(); // transakcia padla takze treba rollback // inac by spadlo aj toto pridanie dokonca bez hlasky $dbh->transactionRollback(); } // maly hack, nasimulujem pridanie pripomienky $chyba = new Suggestions(); // nastavime pozadovane parametre $chyba->id_pedagog = $this->controller->getUserID(); $chyba->pripomienka_typ_id = 1; // chyba v systéme $chyba->stav = 1; // nova $chyba->text = "Exception: {$ex->backtrace[0]['class']}\n" . "Message: {$ex->getMessage()}\n"; if (isset($ex->backtrace)) { foreach ($ex->backtrace as $backtrace) { $chyba->text .= "{$backtrace['file']} ({$backtrace['line']}) : "; $chyba->text .= "{$backtrace['class']} -> {$backtrace['function']}\n"; } } $chyba->save($this->controller->getUserID()); $notifikator = new Notificator(); $notifikator->setController($this->controller); $notifikator->sendSuggestionAddedMsg($chyba); }
public static function recordNotificationInDatabase($pageId, $revId, $receiver) { $lastNotifiedRevId = Notificator::getLastNotifiedRevId($pageId, $revId, $receiver); if ($lastNotifiedRevId > 0) { $dbw = wfGetDB(DB_MASTER); $res = $dbw->update('notificator', array('rev_id' => (int) $revId), array('page_id' => (int) $pageId, 'receiver_email' => $receiver)); return $res; } elseif ($lastNotifiedRevId == 0) { $dbw = wfGetDB(DB_MASTER); $res = $dbw->insert('notificator', array('page_id' => (int) $pageId, 'rev_id' => (int) $revId, 'receiver_email' => $receiver)); return $res; } elseif ($lastNotifiedRevId < 0) { return false; } }
/** * Permanently deletes the paste repository without any way to get * it back. * * @return boolean True if all went well, false if not */ public function delete() { $db = new Database(); $db->getIndexer()->deleteRepo($this); $bOk = Tools::recursiveDelete($this->workDir) && Tools::recursiveDelete($this->gitDir); $not = new Notificator(); $not->delete($this); return $bOk; }
/** * Processes the POST data, changes description and files * * @return boolean True if the post was successful */ public function process($postData, $sessionData) { if (!isset($postData['files'])) { return false; } if (!$this->hasContent($postData)) { return false; } if (!$this->repo) { $this->repo = $this->createRepo(); } $vc = $this->repo->getVc(); $bChanged = false; $bCommit = false; if ($postData['description'] != $this->repo->getDescription()) { $this->repo->setDescription($postData['description']); $bChanged = true; } $this->renameMap = array(); $this->newfileName = null; foreach ($postData['files'] as $num => $arFile) { $bUpload = false; if ($_FILES['files']['error'][$num]['upload'] == 0) { //valid file upload $bUpload = true; } else { if ($arFile['content'] == '' && $arFile['name'] == '') { //empty (new) file continue; } } $originalName = Tools::sanitizeFilename($arFile['original_name']); $name = Tools::sanitizeFilename($arFile['name']); if ($arFile['type'] == '_auto_') { //FIXME: upload $arFile['type'] = $this->getType($arFile['content']); } if ($name == '') { if ($bUpload) { $name = Tools::sanitizeFilename($_FILES['files']['name'][$num]['upload']); } else { $name = $this->getNextNumberedFile('phork') . '.' . $arFile['type']; } } $bNew = false; $bDelete = false; if (!isset($originalName) || $originalName == '') { //new file $bNew = true; if (strpos($name, '.') === false) { //automatically append file extension if none is there $name .= '.' . $arFile['type']; } $this->newfileName = $name; } else { if (!$this->repo->hasFile($originalName)) { //unknown file //FIXME: Show error message continue; } else { if (isset($arFile['delete']) && $arFile['delete'] == 1) { $bDelete = true; } else { if ($originalName != $name) { if (strpos($name, '/') === false) { //ignore names with a slash in it, would be new directory //FIXME: what to do with overwrites? $vc->getCommand('mv')->addArgument($originalName)->addArgument($name)->execute(); $bCommit = true; $this->renameMap[$originalName] = $name; } else { $name = $originalName; } } } } } $file = $this->repo->getFileByName($name, false); if ($originalName !== '') { $originalFile = $this->repo->getFileByName($originalName, false); } if ($bDelete) { $command = $vc->getCommand('rm')->addArgument($file->getFilename())->execute(); $bCommit = true; } else { if ($bUpload) { move_uploaded_file($_FILES['files']['tmp_name'][$num]['upload'], $file->getFullPath()); $command = $vc->getCommand('add')->addArgument($file->getFilename())->execute(); $bCommit = true; } else { if ($bNew || isset($arFile['content']) && isset($originalFile) && $originalFile->getContent() != $arFile['content']) { $dir = dirname($file->getFullPath()); if (!is_dir($dir)) { mkdir($dir, 0777, true); } file_put_contents($file->getFullPath(), $arFile['content']); $command = $vc->getCommand('add')->addArgument($file->getFilename())->execute(); $bCommit = true; } } } } if (isset($sessionData['identity'])) { $notes = $sessionData['identity']; } else { $notes = $sessionData['ipaddr']; } if ($bCommit) { $vc->getCommand('commit')->setOption('message', '')->setOption('allow-empty-message')->setOption('no-edit')->setOption('author', $sessionData['name'] . ' <' . $sessionData['email'] . '>')->execute(); //FIXME: git needs ref BEFORE add //quick hack until http://pear.php.net/bugs/bug.php?id=19605 is fixed //also waiting for https://pear.php.net/bugs/bug.php?id=19623 $vc->getCommand('notes --ref=identity add')->setOption('force')->setOption('message', "{$notes}")->execute(); //update info for dumb git HTTP transport //the post-update hook should do that IMO, but does not somehow $vc->getCommand('update-server-info')->execute(); //we changed the hash by committing, so reload it $this->repo->reloadHash(); $bChanged = true; } if ($bChanged) { //FIXME: index changed files only //also handle file deletions $db = new Database(); $not = new Notificator(); if ($bNew) { $db->getIndexer()->addRepo($this->repo); $not->create($this->repo); } else { $commits = $this->repo->getHistory(); $db->getIndexer()->updateRepo($this->repo, $commits[count($commits) - 1]->committerTime, $commits[0]->committerTime); $not->edit($this->repo); } } return true; }