function upgrade_from_1() { global $wpdb; // Add columns to drainhole_access: version_id, user_id $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_access` ADD `user_id` int UNSIGNED NOT NULL;"); // Add columns to drainhole_files: name, description, created_at $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` ADD `name` varchar(150) NOT NULL default '';"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` ADD `description` TEXT default NULL;"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` ADD\t`version_id` int(11) unsigned NOT NULL;"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` ADD `options` mediumtext DEFAULT NULL ;"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` ADD `svn` varchar(150) DEFAULT NULL ;"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_access` ADD `version_id` int UNSIGNED NOT NULL DEFAULT '0';"); // Change columns in drainhole_files for: file $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` CHANGE `file` `file` varchar(150) NOT NULL default '';"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` CHANGE `downloads` `hits` int(10) UNSIGNED NOT NULL DEFAULT '0';"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_holes` CHANGE `role_error_id` `role_error_url` varchar(100) DEFAULT NULL;"); $files = DH_File::get_all(); // Remove columns $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` DROP `version`;"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}drainhole_files` DROP `force_download`;"); // Create the first version for each file and link it back to the file // Also link all access stats to the latest version if (count($files) > 0) { foreach ($files as $file) { $version = DH_Version::create($file, $file->version, $file->hits, $file->updated_at, __('First version', 'drain-hole')); $options = $wpdb->escape(serialize(array('force_download' => $file->force_download))); $wpdb->query("UPDATE {$wpdb->prefix}drainhole_files SET version_id='{$version}',options='{$options}' WHERE id='{$file->id}'"); $wpdb->query("UPDATE {$wpdb->prefix}drainhole_access SET version_id='{$version}' WHERE file_id='{$file->id}'"); } } }
/** * Delete a hole, removing all files (both from the database and the disk) * * @static * @param int $id ID of the hole to delete * @return void **/ function delete($id) { global $wpdb; $hole = DH_Hole::get($id); $files = DH_File::get_all($id); if (count($files) > 0) { foreach ($files as $file) { DH_File::delete($file->id); } } $options = get_option('drainhole_options'); if (isset($options['delete_file']) && $options['delete_file'] && is_writable($hole->directory)) { @unlink($hole->directory . '/.htaccess'); @rmdir($hole->directory); } $wpdb->query("DELETE FROM {$wpdb->prefix}drainhole_holes WHERE id='{$id}'"); }
if (count($stats) > 0) { foreach ($stats as $stat) { $csv = array(); $csv[] = $drainhole->csv_escape(date('Y-m-d', $stat->created_at)); $csv[] = $drainhole->csv_escape(date('H:i', $stat->created_at)); $csv[] = $drainhole->csv_escape($stat->ip); $csv[] = $drainhole->csv_escape($stat->speed); $csv[] = $drainhole->csv_escape($stat->time_taken); echo implode(',', $csv) . "\r\n"; } } } else { if ($type == 'files') { $hole = DH_Hole::get($id); header('Content-Disposition: attachment; filename="' . basename($hole->url) . '.csv"'); $files = DH_File::get_all($id); if (count($files) > 0) { foreach ($files as $file) { $csv = array(); $csv[] = $drainhole->csv_escape($file->file); $csv[] = $drainhole->csv_escape($file->version); $csv[] = $drainhole->csv_escape($file->hits); $csv[] = $drainhole->csv_escape(date('Y-m-d', $file->updated_at)); $csv[] = $drainhole->csv_escape(date('H:i', $file->updated_at)); echo implode(',', $csv) . "\r\n"; } } } else { if ($type == 'holes') { header('Content-Disposition: attachment; filename="drain-holes.csv"'); $holes = DH_Hole::get_all($id);
function editor($id) { $this->render_admin('editor', array('files' => DH_File::get_all())); }
/** * Replaces matched regular expressions with appropriate data * * @param array $matches An array of matches from preg_replace. $matches[1]=type, $matches[2]=ID, $matches[3]=command, $matches[4]=arguments * @return string New text with replaced tags **/ function tags($matches) { $type = $matches[1]; $id = intval($matches[2]); $cmd = $matches[3]; $args = $matches[4]; $options = $this->get_options(); if ($type == 'hole') { $hole = DH_Hole::get($id); if ($hole) { if ($cmd == 'hits') { return number_format($hole->hits); } else { if ($cmd == 'recent') { if ($args == 0) { $args = 1; } $files = DH_File::get_recent($hole->id, $args); return $this->capture('show_hole', array('files' => $files, 'hole' => $hole)); } else { if ($cmd == 'show' && !$this->excerpt) { if ($args == '') { $args = 'show_hole'; } $files = DH_File::get_all($hole->id); return $this->capture($args, array('files' => $files, 'hole' => $hole)); } } } } } else { if ($type == 'file') { $file = DH_File::get($id); if ($file) { $hole = DH_Hole::get($file->hole_id); if ($cmd == 'show' && !$this->excerpt) { if ($args == '') { $args = 'default_show'; } return $this->tags_inline($this->capture($args, array('file' => $file, 'hole' => $hole)), $hole, $file); } else { if ($cmd == 'versions') { $limit = 5; if ($args) { $limit = intval($args); } $versions = DH_Version::get_history($file->id, $file->version_id, $limit); if (count($versions) > 0 && $options['tracker']) { foreach ($versions as $pos => $version) { $versions[$pos]->reason = preg_replace('@\\#(\\d*)@', '<a href="' . $options['tracker'] . '$1">#$1</a>', $version->reason); } } return $this->capture('versions', array('versions' => $versions, 'file' => $file, 'hole' => $hole)); } else { if ($cmd == 'version') { return $file->version; } else { if ($cmd == 'hits') { return number_format($file->hits); } else { if ($cmd == 'name') { return $file->name(); } else { if ($cmd == 'md5') { return md5($file->file($hole)); } else { if ($cmd == 'url') { return $file->url($hole, $args == '' ? basename($file->file) : $args, $options['google']); } else { if ($cmd == 'href') { return $file->url_ref($hole); } else { if ($cmd == 'svn') { return $file->svn(); } else { if ($cmd == 'updated') { return date(get_option('date_format'), $file->updated_at); } else { if ($cmd == 'size') { return $file->bytes($file->filesize($hole)); } else { if ($cmd == 'icon') { return $file->icon($hole, $this->url(), $options['google']); } } } } } } } } } } } } } } } }