/**
 * This method deletes the Transmission transfer with the matching hash, and its data
 *
 * @return void
 * TODO: test delete :)
 */
function deleteTransmissionTransferWithData($uid, $hash)
{
    deleteTransmissionTransfer($uid, $hash, true);
}
 /**
  * deletes a transfer
  *
  * @param $transfer name of the transfer
  * @return boolean of success
  */
 function delete($transfer)
 {
     global $cfg;
     // set vars
     $this->_setVarsForTransfer($transfer);
     // log
     $this->logMessage($this->client . "-delete : " . $transfer . "\n", true);
     // only if vuze running and transfer exists in fluazu
     if (!Transmission::isRunning()) {
         array_push($this->messages, "Transmission not running, cannot stop transfer " . $transfer);
         return false;
     }
     $hash = getTransferHash($transfer);
     deleteTransmissionTransfer($cfg['uid'], $hash, false);
     // delete
     return $this->_delete();
 }
/**
 * multi
 *
 * @param $action
 */
function dispatcher_multi($action)
{
    global $cfg;
    // is enabled ?
    if ($cfg["enable_multiops"] != 1) {
        AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use multi-op " . $action);
        @error("multiops are disabled", "", "");
    }
    // messages-ary
    $dispatcherMessages = array();
    // loop
    if (empty($_POST['transfer'])) {
        return;
    }
    foreach ($_POST['transfer'] as $key => $element) {
        // url-decode
        $transfer = urldecode($element);
        $isTransmissionTorrent = false;
        if ($cfg["transmission_rpc_enable"] && isHash($transfer)) {
            require_once 'inc/functions/functions.rpc.transmission.php';
            $theTorrent = getTransmissionTransfer($transfer, array('id'));
            $isTransmissionTorrent = is_array($theTorrent);
            //	$torrentId = $theTorrent['id'];
            if ($isTransmissionTorrent) {
                switch ($action) {
                    case "transferData":
                        deleteTransmissionTransfer($cfg['uid'], $transfer, true);
                        $dispatcherMessages[] = "Torrent deleted with data";
                        break;
                    case "transfer":
                        deleteTransmissionTransfer($cfg['uid'], $transfer, false);
                        $dispatcherMessages[] = "Torrent deleted";
                        break;
                }
            }
        }
        if (!$isTransmissionTorrent) {
            // is valid transfer ? + check permissions
            $invalid = true;
            if (tfb_isValidTransfer($transfer) === true) {
                if (substr($transfer, -8) == ".torrent") {
                    // this is a torrent-client
                    $invalid = false;
                } else {
                    if (substr($transfer, -5) == ".wget") {
                        // this is wget.
                        $invalid = false;
                        // is enabled ?
                        if ($cfg["enable_wget"] == 0) {
                            $invalid = true;
                            AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use wget");
                            array_push($dispatcherMessages, "wget is disabled : " . $transfer);
                        } else {
                            if ($cfg["enable_wget"] == 1) {
                                if (!$cfg['isAdmin']) {
                                    $invalid = true;
                                    AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use wget");
                                    array_push($dispatcherMessages, "wget is disabled for users : " . $transfer);
                                }
                            }
                        }
                    } else {
                        if (substr($transfer, -4) == ".nzb") {
                            // This is nzbperl.
                            $invalid = false;
                            if ($cfg["enable_nzbperl"] == 0) {
                                $invalid = true;
                                AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use nzbperl");
                                array_push($dispatcherMessages, "nzbperl is disabled : " . $transfer);
                            } else {
                                if ($cfg["enable_nzbperl"] == 1) {
                                    if (!$cfg['isAdmin']) {
                                        $invalid = true;
                                        AuditAction($cfg["constants"]["error"], "ILLEGAL ACCESS: " . $cfg["user"] . " tried to use nzbperl");
                                        array_push($dispatcherMessages, "nzbperl is disabled for users : " . $transfer);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if ($invalid) {
                AuditAction($cfg["constants"]["error"], "INVALID TRANSFER: " . $cfg["user"] . " tried to " . $action . " " . $transfer);
                array_push($dispatcherMessages, "Invalid Transfer : " . $transfer);
                continue;
            }
            // client
            $client = getTransferClient($transfer);
        }
        // is transfer running ?
        $tRunningFlag = isTransferRunning($transfer);
        // action switch
        switch ($action) {
            case "transferStart":
                /* transferStart */
                if (!$tRunningFlag) {
                    $ch = ClientHandler::getInstance($client);
                    $ch->start($transfer, false, FluxdQmgr::isRunning());
                    if (count($ch->messages) > 0) {
                        $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages);
                    }
                }
                break;
            case "transferStop":
                /* transferStop */
                if ($tRunningFlag) {
                    $ch = ClientHandler::getInstance($client);
                    $ch->stop($transfer);
                    if (count($ch->messages) > 0) {
                        $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages);
                    }
                }
                break;
            case "transferEnQueue":
                /* transferEnQueue */
                if (!$tRunningFlag) {
                    // enqueue it
                    $ch = ClientHandler::getInstance($client);
                    $ch->start($transfer, false, true);
                    if (count($ch->messages) > 0) {
                        $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages);
                    }
                }
                break;
            case "transferDeQueue":
                /* transferDeQueue */
                if (!$tRunningFlag) {
                    // dequeue it
                    FluxdQmgr::dequeueTransfer($transfer, $cfg['user']);
                }
                break;
            case "transferResetTotals":
                /* transferResetTotals */
                $msgs = resetTransferTotals($transfer, false);
                if (count($msgs) > 0) {
                    $dispatcherMessages = array_merge($dispatcherMessages, $msgs);
                }
                break;
            default:
                if ($tRunningFlag) {
                    // stop first
                    $ch = ClientHandler::getInstance($client);
                    $ch->stop($transfer);
                    if (count($ch->messages) > 0) {
                        $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages);
                    }
                    // is transfer running ?
                    $tRunningFlag = isTransferRunning($transfer);
                }
                // if it was running... hope the thing is down...
                // only continue if it is
                if (!$tRunningFlag) {
                    switch ($action) {
                        case "transferWipe":
                            /* transferWipe */
                            $msgsDelete = deleteTransferData($transfer);
                            if (count($msgsDelete) > 0) {
                                $dispatcherMessages = array_merge($dispatcherMessages, $msgsDelete);
                            }
                            $msgsReset = resetTransferTotals($transfer, true);
                            if (count($msgsReset) > 0) {
                                $dispatcherMessages = array_merge($dispatcherMessages, $msgsReset);
                            }
                            break;
                        case "transferData":
                            /* transferData */
                            $msgsDelete = deleteTransferData($transfer);
                            if (count($msgsDelete) > 0) {
                                $dispatcherMessages = array_merge($dispatcherMessages, $msgsDelete);
                            }
                        case "transfer":
                            /* transfer */
                            $ch = ClientHandler::getInstance($client);
                            $ch->delete($transfer);
                            if (count($ch->messages) > 0) {
                                $dispatcherMessages = array_merge($dispatcherMessages, $ch->messages);
                            }
                    }
                }
        }
        // end switch
    }
    // end loop
    // error if messages
    if (count($dispatcherMessages) > 0) {
        @error("There were Problems", "", "", $dispatcherMessages);
    }
}