예제 #1
0
 /**
  * Perform cleanup of all items in arrays.
  */
 private function doClean()
 {
     $this->numnuked += count($this->cleanup['nuke']);
     $this->nummiscd += count($this->cleanup['misc']);
     if (!$this->echoonly) {
         $releases = new \Releases(['Settings' => $this->pdo]);
         foreach (array_keys($this->cleanup['nuke']) as $id) {
             $releases->delete($id);
         }
         if (count($this->cleanup['misc'])) {
             $sql = 'update releases set categoryid = ' . Category::CAT_MISC_OTHER . ' where categoryid != ' . Category::CAT_MISC_OTHER . ' and id in (' . implode(array_keys($this->cleanup['misc']), ',') . ')';
             $this->pdo->queryExec($sql);
         }
     }
     $this->cleanup = array('nuke' => array(), 'misc' => array());
 }
 /**
  * Reset all stats about a group and delete all releases and binaries associated with that group.
  */
 public function purge($id)
 {
     require_once WWW_DIR . "/lib/binaries.php";
     $db = new DB();
     $releases = new Releases();
     $binaries = new Binaries();
     $this->reset($id);
     $rels = $db->query(sprintf("select ID from releases where groupID = %d", $id));
     foreach ($rels as $rel) {
         $releases->delete($rel["ID"]);
     }
     $bins = $db->query(sprintf("select ID from binaries where groupID = %d", $id));
     foreach ($bins as $bin) {
         $binaries->delete($bin["ID"]);
     }
 }
예제 #3
0
<?php

require_once "config.php";
$page = new AdminPage();
if (isset($_GET['id'])) {
    $releases = new Releases();
    $releases->delete($_GET['id']);
}
if (isset($_GET['from'])) {
    $referrer = $_GET['from'];
} else {
    $referrer = $_SERVER['HTTP_REFERER'];
}
header("Location: " . $referrer);
     # regular expression entry abort futher checks
     $strerr = str_pad((int) $errcnt, 2, " ", STR_PAD_LEFT);
     if (isset($bl["ID"])) {
         echo "{$strerr}. id=" . $bl["ID"] . ", ";
     }
     echo " name=" . $header["name"] . "\n";
     echo "\t regex={$regex}\n";
     echo "\t error=" . $e->getMessage() . "\n\n";
     exit(1);
 }
 if ($blacklist_check) {
     $errcnt++;
     echo 'BL: /' . $bl['regex'] . '/i matched ' . $header['ID'] . '/' . $header['name'] . " (" . $header['groupname'] . ")\n";
     if ($purgeMatched && isset($header['ID']) && $header['ID'] > 0) {
         // Support purging if enabled
         $release->delete($header['ID']);
     }
     # ensure whitelist flags are off to avoid extra processing
     # at the end of this loop (Below)
     $whitelist = array();
     break;
 }
 if ($use_CategorySizeRestrictions == true && $header['categoryID']) {
     $sizes = null;
     if ($use_NNCategorySizeRestrictions) {
         $sizes = $category->getSizeRangeById($header['categoryID']);
     } else {
         if (array_key_exists($header['categoryID'], $categoryRestrictions)) {
             $sizes = $categoryRestrictions[$header['categoryID']];
         }
     }
//
//$sql = "select ID from releases where fromname = 'PowerBUS@gmail.com (PowerBUS)'";
//
// [5] delete all under a certain amount of completion
//
//$sql = "select ID from releases where completion != 0 and completion != 100 and completion < 99";
//
// [6] all audio which contains a file with .exe in
//
//$sql = "select distinct r.ID from releasefiles rf inner join releases r on r.id = rf.releaseID and r.categoryID like '3%' where rf.name like '%.exe'";
//
// [7] delete all releases for a name
//
//$sql = "select ID from releases where searchname like '%Friday The 13th The Series S03 -enjoy-%'";
//
// [8] delete all releases for a regex
//
//$sql = "select ID from releases where regexID = 1307";
//
// [9] delete all releases under a certain size (100MB) for a category
//
//$sql = "select ID from releases where categoryID like '2%' and size < 104857600";
if ($sql == "") {
    echo "You must uncomment one of the sql selects above to determine which releases are to be deleted.";
} else {
    $rel = $db->query($sql);
    echo "about to delete " . count($rel) . " release(s)";
    foreach ($rel as $r) {
        $releases->delete($r['ID']);
    }
}
예제 #6
0
 public function processUnwanted()
 {
     $r = new Releases();
     $currTime_ori = $this->pdo->queryOneRow("SELECT NOW() as now");
     //
     // Delete any passworded releases
     //
     if ($this->pdo->getSetting('deletepasswordedrelease') == 1) {
         echo "PostPrc : Removing unwanted releases\n";
         $result = $this->pdo->query("select id from releases where passwordstatus > 0");
         foreach ($result as $row) {
             $r->delete($row["id"]);
         }
     }
     //
     // Delete any releases which are older than site's release retention days
     //
     if ($this->pdo->getSetting('releaseretentiondays') != 0) {
         echo "PostPrc : Deleting releases older than " . $this->pdo->getSetting('releaseretentiondays') . " days\n";
         $result = $this->pdo->query(sprintf("select id from releases where postdate < %s - interval %d day", $this->pdo->escapeString($currTime_ori["now"]), $this->pdo->getSetting('releaseretentiondays')));
         foreach ($result as $row) {
             $r->delete($row["id"]);
         }
     }
     //
     // Delete any audiopreviews older than site->audiopreviewprune days
     //
     if ($this->pdo->getSetting('audiopreviewprune') > 0) {
         $result = $this->pdo->query(sprintf("select guid from releases where categoryid in (select id from category where parentid = " . Category::CAT_PARENT_MUSIC . ") and haspreview = 2 and adddate < %s - interval %d day", $this->pdo->escapeString($currTime_ori["now"]), $this->pdo->getSetting('audiopreviewprune')));
         if (sizeof($result) > 0) {
             echo "PostPrc : Deleting " . count($result) . " audio previews older than " . $this->pdo->getSetting('audiopreviewprune') . " days\n";
             foreach ($result as $row) {
                 $r->updateHasPreview($row["guid"], 0);
                 $this->deleteAudioSample($row["guid"]);
             }
         }
     }
     //
     // Delete any releases suspected of being spam/virus
     //
     if ($this->pdo->getSetting('removespam') != 0) {
         $spamIDs = array();
         //
         // all releases where the only file inside the rars is *.exe and they are not in the PC category
         //
         $sql = "select releasefiles.releaseid as id from releasefiles inner join  ( select releaseid, count(*) as totnum from  releasefiles group by releaseid ) x on x.releaseid = releasefiles.releaseid and x.totnum = 1 inner join releases on releases.id = releasefiles.releaseid left join releasenfo on releasenfo.releaseid = releases.id where (releasefiles.name like '%.exe' or releasefiles.name like '%.scr') and (releases.categoryid not in (select id from category where parentid = " . Category::CAT_PARENT_PC . ") or (releases.categoryid in (select id from category where parentid = " . Category::CAT_PARENT_PC . ") and releasenfo.id is null)) group by releasefiles.releaseid";
         $result = $this->pdo->query($sql);
         $spamIDs = array_merge($result, $spamIDs);
         //
         // all releases containing exe not in permitted categories
         //
         if ($this->pdo->getSetting('exepermittedcategories') != '') {
             $sql = sprintf("select releasefiles.releaseid as id from releasefiles  inner join releases on releases.id = releasefiles.releaseid  left join releasenfo on releasenfo.releaseid = releases.id  where releasefiles.name like '%%.exe'  and releases.categoryid not in (%s)  group by releasefiles.releaseid", $this->pdo->getSetting('exepermittedcategories'));
             $result = $this->pdo->query($sql);
             $spamIDs = array_merge($result, $spamIDs);
         }
         //
         // delete all releases which contain a file with password.url in it
         //
         $sql = "select distinct releasefiles.releaseid as id from releasefiles where name = 'password.url'";
         $result = $this->pdo->query($sql);
         $spamIDs = array_merge($result, $spamIDs);
         //
         // all releases where the only file inside the rars is *.rar
         //
         $sql = "select releasefiles.releaseid as id from releasefiles  inner join  ( select releaseid, count(*) as totnum from releasefiles group by releaseid ) x on x.releaseid = releasefiles.releaseid and x.totnum = 1 inner join releases on releases.id = releasefiles.releaseid where releasefiles.name like '%.rar' group by releasefiles.releaseid";
         $result = $this->pdo->query($sql);
         $spamIDs = array_merge($result, $spamIDs);
         //
         // all audio which contains a file with .exe in
         //
         $sql = "select distinct r.id from releasefiles rf inner join releases r on r.id = rf.releaseid and r.categoryid in (select id from category where parentid = " . Category::CAT_PARENT_MUSIC . ") where (rf.name like '%.exe' or rf.name like '%.bin')";
         $result = $this->pdo->query($sql);
         $spamIDs = array_merge($result, $spamIDs);
         if (count($spamIDs) > 0) {
             echo "PostPrc : Deleting " . count($spamIDs) . " spam releases\n";
             foreach ($spamIDs as $row) {
                 $r->delete($row["id"]);
             }
         }
     }
 }
예제 #7
0
             }
             if (!file_exists($importedpath . basename($nzbFile))) {
                 rename($nzbFile, $importedpath . basename($nzbFile));
             }
         }
     } else {
         echo sprintf("%0" . $digits . "d %.2f%% Error : Failed to write file to disk %s\n", $items - $num, $num / $items * 100, $nzbfilename);
         if ($movefiles) {
             if (!file_exists($errorpath)) {
                 mkdir($errorpath);
             }
             if (!file_exists($errorpath . basename($nzbFile))) {
                 rename($nzbFile, $errorpath . basename($nzbFile));
             }
         }
         $releases->delete($relid);
     }
 } else {
     $numbins = 0;
     $numparts = 0;
     $binaryId = 0;
     $groupRegexes = $releaseRegex->getForGroup($groupName);
     foreach ($nzbInfo->nzb as $postFile) {
         $regexMatches = [];
         foreach ($groupRegexes as $groupRegex) {
             $regexCheck = $releaseRegex->performMatch($groupRegex, $postFile["subject"]);
             if ($regexCheck !== false) {
                 $regexMatches = $regexCheck;
                 break;
             }
         }
$releases = new Releases();
$category = new Category();
// set the current action
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
$id = isset($_REQUEST['id']) && is_array($_REQUEST['id']) ? $_REQUEST['id'] : '';
$page->smarty->assign('action', $action);
$page->smarty->assign('idArr', $id);
switch ($action) {
    case 'doedit':
    case 'edit':
        $success = false;
        if ($action == 'doedit') {
            $upd = $releases->updatemulti($_REQUEST["id"], $_REQUEST["category"], $_REQUEST["grabs"], $_REQUEST["tvinfoID"], $_REQUEST["season"], $_REQUEST['imdbID']);
            if ($upd !== false) {
                $success = true;
            } else {
            }
        }
        $page->smarty->assign('success', $success);
        $page->smarty->assign('from', isset($_REQUEST['from']) ? $_REQUEST['from'] : '');
        $page->smarty->assign('catlist', $category->getForSelect());
        $page->content = $page->smarty->fetch('ajax_release-edit.tpl');
        echo $page->content;
        break;
    case 'dodelete':
        $releases->delete($_REQUEST["id"], true);
        break;
    default:
        $page->show404();
        break;
}
 public function processGID($limit = 500, $batch = 5000, $delete_broken_releases = false)
 {
     // Process until someone presses cntrl-c
     $db = new DB();
     $nzb = new NZB();
     $processed = 0;
     // We need an offset for tracking unhandled issues
     $offset = 0;
     $fsql = 'SELECT ID, name, guid FROM releases ' . 'WHERE GID IS NULL ORDER BY adddate DESC LIMIT %d,%d';
     $usql = "UPDATE releases SET GID = '%s' WHERE ID = %d";
     while (1) {
         // finish
         if ($limit > 0 && $processed >= $limit) {
             break;
         }
         $batch = $limit > 0 && $batch > $limit ? $limit : $batch;
         $res = $db->query(sprintf($fsql, $offset, $batch));
         if (!$res) {
             break;
         }
         if (count($res) <= 0) {
             break;
         }
         $offset += $batch;
         foreach ($res as $r) {
             $nzbfile = $nzb->getNZBPath($r["guid"]);
             if ($nzbfile === Null) {
                 continue;
             }
             $nzbInfo = new NzbInfo();
             if (!$nzbInfo->loadFromFile($nzbfile)) {
                 if ($delete_broken_releases) {
                     $release = new Releases();
                     $release->delete($r['ID']);
                     // Free the variable in an attempt to recover memory
                     unset($release);
                     echo '-';
                 } else {
                     // Skip over this one for future fetches
                     $offset++;
                 }
                 continue;
             }
             $gid = false;
             if (!empty($nzbInfo->gid)) {
                 $gid = $nzbInfo->gid;
             }
             // Free the variable in an attempt to recover memory
             unset($nzbInfo);
             if (!$gid) {
                 if ($delete_broken_releases) {
                     $release = new Releases();
                     $release->delete($r['ID']);
                     unset($release);
                     echo '-';
                 } else {
                     // Skip over this one for future fetches
                     $offset++;
                 }
                 continue;
             }
             // Update DB With Global Identifer
             $ures = $db->exec(sprintf($usql, $gid, $r['ID']));
             if ($ures < 0) {
                 printf("\nPostPrc : Failed to update: %s\n", $r['name']);
             }
             // make noise...
             echo '.';
             $processed += 1;
         }
     }
     # Batch update for comment table
     $usql = 'UPDATE releasecomment, releases ' . 'SET releasecomment.GID = releases.GID ' . 'WHERE releases.ID = releasecomment.releaseID ' . 'AND releasecomment.GID IS NULL ' . 'AND releases.GID IS NOT NULL ';
     $affected = $db->exec(sprintf($usql));
     if ($affected > 0) {
         $processed += $affected;
     }
     return $processed;
 }