Example #1
0
 protected function index($repo)
 {
     $db = new Database();
     $db->getIndexer()->addRepo($repo);
 }
Example #2
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;
 }
Example #3
0
<?php

//index repositories in elasticsearch
namespace phorkie;

require_once __DIR__ . '/../src/phorkie/autoload.php';
require_once __DIR__ . '/../data/config.default.php';
if (file_exists(__DIR__ . '/../data/config.php')) {
    require_once __DIR__ . '/../data/config.php';
}
if ($GLOBALS['phorkie']['cfg']['setupcheck']) {
    SetupCheck::run();
}
$db = new Database();
if ($db->prefix == '\\phorkie\\Database_Adapter_Null') {
    echo "Error: No search adapter configured.\n";
    exit(1);
}
$idx = $db->getIndexer();
//create mapping
echo "Index reset\n";
$db->getSetup()->reset();
$rs = new Repositories();
list($repos, $count) = $rs->getList(0, 10000);
foreach ($repos as $repo) {
    echo 'Indexing ' . $repo->id . "\n";
    $commits = $repo->getHistory();
    $first = count($commits) - 1;
    $idx->addRepo($repo, $commits[$first]->committerTime, $commits[0]->committerTime);
}
Example #4
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;
 }