Exemple #1
0
 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;
     }
 }
Exemple #5
0
 /**
  * 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;
 }
Exemple #6
0
 /**
  * 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;
 }