prooduction version 1
This commit is contained in:
commit
e4c3e2e1f4
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
*zip
|
||||||
|
*bak
|
||||||
|
*old
|
||||||
|
/file/*
|
||||||
|
|
404
VinylDownload.class.php
Normal file
404
VinylDownload.class.php
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
<?php
|
||||||
|
class VinylDownload {
|
||||||
|
|
||||||
|
const MAXDOWNLOADS = 3;
|
||||||
|
const TABLE = 'vinyl-codes';
|
||||||
|
public $database, $file, $code;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
@set_time_limit(0);
|
||||||
|
ini_set('memory_limit', '512M');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function db_connect(){
|
||||||
|
$db = new SQLite3( $this->database );
|
||||||
|
if (!$db) die ($error);
|
||||||
|
return $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function query_code($code) {
|
||||||
|
$db = $this->db_connect();
|
||||||
|
|
||||||
|
$c = SQLite3::escapeString ( $code ) ;
|
||||||
|
$q = "SELECT * FROM '" . self::TABLE . "' WHERE code='" . $c . "'" ;
|
||||||
|
|
||||||
|
$result = @$db->query( $q );
|
||||||
|
$row = @$result->fetchArray();
|
||||||
|
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
// row == false when no row was found
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function increase_count_in_db() {
|
||||||
|
$db = @$this->db_connect();
|
||||||
|
$db->exec( "UPDATE '" . self::TABLE . "' SET count = count + 1 WHERE code='" . $this->code . "'" );
|
||||||
|
$db->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reached_max_dl( $count ) {
|
||||||
|
$max = false;
|
||||||
|
$count += 1;
|
||||||
|
|
||||||
|
if ( $count > self::MAXDOWNLOADS ) $max = true;
|
||||||
|
|
||||||
|
return $max;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function gen_response( $c , $f ){
|
||||||
|
|
||||||
|
$this->code = $c;
|
||||||
|
$content = "Code ungültig oder abgelaufen.";
|
||||||
|
|
||||||
|
// row == false when no row was found
|
||||||
|
if ( $row = $this->query_code($this->code) ) {
|
||||||
|
// max count not reached
|
||||||
|
if ( false === $this->reached_max_dl( $row['count'] ) ) {
|
||||||
|
$content ='
|
||||||
|
|
||||||
|
<div id="1">
|
||||||
|
<form method=POST id="dl-trigger" action="https://www.rainervonvielen.de/digital-download"><p>
|
||||||
|
<input type="hidden" value="'. $this->code . '" name="c"</input>
|
||||||
|
<input type="hidden" value="'. $f . '" name="sel_format"</input>
|
||||||
|
<input type="submit" class ="btn middle" value="Start"></input>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
jQuery("#dl-trigger").submit(function(e) {
|
||||||
|
jQuery("#1").html( "<p><strong>Download ist gestartet.</strong> Du hast noch <strong>' . ( self::MAXDOWNLOADS - $row['count'] - 1 ) .'</strong> Downloads zur Verfügung bis der Code ungültig wird." );
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function dl_trigger($format) {
|
||||||
|
// Start Download
|
||||||
|
switch ($format) {
|
||||||
|
case 'mp3':
|
||||||
|
$file = $this->mp3_file;
|
||||||
|
$filename = 'Rainer_von_Vielen-Überall_Chaos_2017-MP3.zip';
|
||||||
|
break;
|
||||||
|
case 'wav':
|
||||||
|
$file = $this->wav_file;
|
||||||
|
$filename = 'Rainer_von_Vielen-Überall_Chaos_2017-WAV.zip';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->downloader( $file, $filename );
|
||||||
|
$this->increase_count_in_db();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function downloader( $file, $filename ){
|
||||||
|
// Force the browser to start the download automatically
|
||||||
|
|
||||||
|
// Variables:
|
||||||
|
// $file = real name of actual download file on the server
|
||||||
|
// $filename = new name of local download file - this is what the visitor's file will actually be called when he/she saves it
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
$mm_type='application/zip';
|
||||||
|
|
||||||
|
header("Content-Type: ".$mm_type);
|
||||||
|
header('Content-Disposition: attachment; filename="'.$filename.'"');
|
||||||
|
header("Content-Description: File Transfer");
|
||||||
|
header("Content-Length: " .(string)(filesize($file)) );
|
||||||
|
header("Cache-Control: public, must-revalidate");
|
||||||
|
header("Pragma: public");
|
||||||
|
header("Content-Transfer-Encoding: binary\n");
|
||||||
|
|
||||||
|
ob_end_clean();
|
||||||
|
readfile($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Nicht benoetigt::
|
||||||
|
*/
|
||||||
|
|
||||||
|
private function downloader_large_file( $filePath )
|
||||||
|
{
|
||||||
|
if(!empty($filePath)){
|
||||||
|
|
||||||
|
$fileInfo = pathinfo($filePath);
|
||||||
|
$fileName = $fileInfo['basename'];
|
||||||
|
$fileExtnesion = $fileInfo['extension'];
|
||||||
|
$default_contentType = "application/octet-stream";
|
||||||
|
$content_types_list = $this->mimeTypes();
|
||||||
|
|
||||||
|
// to find and use specific content type, check out this IANA page : http://www.iana.org/assignments/media-types/media-types.xhtml
|
||||||
|
|
||||||
|
if (array_key_exists($fileExtnesion, $content_types_list)) {
|
||||||
|
$contentType = $content_types_list[$fileExtnesion];
|
||||||
|
} else {
|
||||||
|
$contentType = $default_contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_exists($filePath)) {
|
||||||
|
$size = filesize($filePath);
|
||||||
|
$offset = 0;
|
||||||
|
$length = $size;
|
||||||
|
//HEADERS FOR PARTIAL DOWNLOAD FACILITY BEGINS
|
||||||
|
|
||||||
|
if ( isset( $_SERVER['HTTP_RANGE'] ) ) {
|
||||||
|
preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
|
||||||
|
$offset = intval($matches[1]);
|
||||||
|
$length = intval($matches[2]) - $offset;
|
||||||
|
$fhandle = fopen($filePath, 'r');
|
||||||
|
fseek($fhandle, $offset); // seek to the requested offset, this is 0 if it's not a partial content request
|
||||||
|
$data = fread($fhandle, $length);
|
||||||
|
fclose($fhandle);
|
||||||
|
header('HTTP/1.1 206 Partial Content');
|
||||||
|
header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $size);
|
||||||
|
}//HEADERS FOR PARTIAL DOWNLOAD FACILITY BEGINS
|
||||||
|
|
||||||
|
//USUAL HEADERS FOR DOWNLOAD
|
||||||
|
header("Content-Disposition: attachment;filename=".$fileName);
|
||||||
|
header('Content-Type: '.$contentType);
|
||||||
|
header("Accept-Ranges: bytes");
|
||||||
|
header("Pragma: public");
|
||||||
|
header("Expires: -1");
|
||||||
|
header("Cache-Control: no-cache");
|
||||||
|
header("Cache-Control: public, must-revalidate, post-check=0, pre-check=0");
|
||||||
|
header("Content-Length: ".filesize($filePath));
|
||||||
|
|
||||||
|
$chunksize = 8 * (1024 * 1024); //8MB (highest possible fread length)
|
||||||
|
|
||||||
|
if ($size > $chunksize){
|
||||||
|
$handle = fopen($_FILES["file"]["tmp_name"], 'rb');
|
||||||
|
$buffer = '';
|
||||||
|
while (!feof($handle) && (connection_status() === CONNECTION_NORMAL))
|
||||||
|
{
|
||||||
|
$buffer = fread($handle, $chunksize);
|
||||||
|
print $buffer;
|
||||||
|
ob_flush();
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
if(connection_status() !== CONNECTION_NORMAL){
|
||||||
|
echo "Connection aborted";
|
||||||
|
}
|
||||||
|
fclose($handle);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ob_clean();
|
||||||
|
flush();
|
||||||
|
readfile($filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
echo 'File does not exist!';
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
echo 'There is no file to download!';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function to get correct MIME type for download */
|
||||||
|
private function mimeTypes( $defaultType = null )
|
||||||
|
{
|
||||||
|
/* Just add any required MIME type if you are going to download something not listed here.*/
|
||||||
|
$mime_types = array("323" => "text/h323",
|
||||||
|
"acx" => "application/internet-property-stream",
|
||||||
|
"ai" => "application/postscript",
|
||||||
|
"aif" => "audio/x-aiff",
|
||||||
|
"aifc" => "audio/x-aiff",
|
||||||
|
"aiff" => "audio/x-aiff",
|
||||||
|
"asf" => "video/x-ms-asf",
|
||||||
|
"asr" => "video/x-ms-asf",
|
||||||
|
"asx" => "video/x-ms-asf",
|
||||||
|
"au" => "audio/basic",
|
||||||
|
"avi" => "video/x-msvideo",
|
||||||
|
"axs" => "application/olescript",
|
||||||
|
"bas" => "text/plain",
|
||||||
|
"bcpio" => "application/x-bcpio",
|
||||||
|
"bin" => "application/octet-stream",
|
||||||
|
"bmp" => "image/bmp",
|
||||||
|
"c" => "text/plain",
|
||||||
|
"cat" => "application/vnd.ms-pkiseccat",
|
||||||
|
"cdf" => "application/x-cdf",
|
||||||
|
"cer" => "application/x-x509-ca-cert",
|
||||||
|
"class" => "application/octet-stream",
|
||||||
|
"clp" => "application/x-msclip",
|
||||||
|
"cmx" => "image/x-cmx",
|
||||||
|
"cod" => "image/cis-cod",
|
||||||
|
"cpio" => "application/x-cpio",
|
||||||
|
"crd" => "application/x-mscardfile",
|
||||||
|
"crl" => "application/pkix-crl",
|
||||||
|
"crt" => "application/x-x509-ca-cert",
|
||||||
|
"csh" => "application/x-csh",
|
||||||
|
"css" => "text/css",
|
||||||
|
"dcr" => "application/x-director",
|
||||||
|
"der" => "application/x-x509-ca-cert",
|
||||||
|
"dir" => "application/x-director",
|
||||||
|
"dll" => "application/x-msdownload",
|
||||||
|
"dms" => "application/octet-stream",
|
||||||
|
"doc" => "application/msword",
|
||||||
|
"dot" => "application/msword",
|
||||||
|
"dvi" => "application/x-dvi",
|
||||||
|
"dxr" => "application/x-director",
|
||||||
|
"eps" => "application/postscript",
|
||||||
|
"etx" => "text/x-setext",
|
||||||
|
"evy" => "application/envoy",
|
||||||
|
"exe" => "application/octet-stream",
|
||||||
|
"fif" => "application/fractals",
|
||||||
|
"flr" => "x-world/x-vrml",
|
||||||
|
"gif" => "image/gif",
|
||||||
|
"gtar" => "application/x-gtar",
|
||||||
|
"gz" => "application/x-gzip",
|
||||||
|
"h" => "text/plain",
|
||||||
|
"hdf" => "application/x-hdf",
|
||||||
|
"hlp" => "application/winhlp",
|
||||||
|
"hqx" => "application/mac-binhex40",
|
||||||
|
"hta" => "application/hta",
|
||||||
|
"htc" => "text/x-component",
|
||||||
|
"htm" => "text/html",
|
||||||
|
"html" => "text/html",
|
||||||
|
"htt" => "text/webviewhtml",
|
||||||
|
"ico" => "image/x-icon",
|
||||||
|
"ief" => "image/ief",
|
||||||
|
"iii" => "application/x-iphone",
|
||||||
|
"ins" => "application/x-internet-signup",
|
||||||
|
"isp" => "application/x-internet-signup",
|
||||||
|
"jfif" => "image/pipeg",
|
||||||
|
"jpe" => "image/jpeg",
|
||||||
|
"jpeg" => "image/jpeg",
|
||||||
|
"jpg" => "image/jpeg",
|
||||||
|
"js" => "application/x-javascript",
|
||||||
|
"latex" => "application/x-latex",
|
||||||
|
"lha" => "application/octet-stream",
|
||||||
|
"lsf" => "video/x-la-asf",
|
||||||
|
"lsx" => "video/x-la-asf",
|
||||||
|
"lzh" => "application/octet-stream",
|
||||||
|
"m13" => "application/x-msmediaview",
|
||||||
|
"m14" => "application/x-msmediaview",
|
||||||
|
"m3u" => "audio/x-mpegurl",
|
||||||
|
"man" => "application/x-troff-man",
|
||||||
|
"mdb" => "application/x-msaccess",
|
||||||
|
"me" => "application/x-troff-me",
|
||||||
|
"mht" => "message/rfc822",
|
||||||
|
"mhtml" => "message/rfc822",
|
||||||
|
"mid" => "audio/mid",
|
||||||
|
"mny" => "application/x-msmoney",
|
||||||
|
"mov" => "video/quicktime",
|
||||||
|
"movie" => "video/x-sgi-movie",
|
||||||
|
"mp2" => "video/mpeg",
|
||||||
|
"mp3" => "audio/mpeg",
|
||||||
|
"mpa" => "video/mpeg",
|
||||||
|
"mpe" => "video/mpeg",
|
||||||
|
"mpeg" => "video/mpeg",
|
||||||
|
"mpg" => "video/mpeg",
|
||||||
|
"mpp" => "application/vnd.ms-project",
|
||||||
|
"mpv2" => "video/mpeg",
|
||||||
|
"ms" => "application/x-troff-ms",
|
||||||
|
"mvb" => "application/x-msmediaview",
|
||||||
|
"nws" => "message/rfc822",
|
||||||
|
"oda" => "application/oda",
|
||||||
|
"p10" => "application/pkcs10",
|
||||||
|
"p12" => "application/x-pkcs12",
|
||||||
|
"p7b" => "application/x-pkcs7-certificates",
|
||||||
|
"p7c" => "application/x-pkcs7-mime",
|
||||||
|
"p7m" => "application/x-pkcs7-mime",
|
||||||
|
"p7r" => "application/x-pkcs7-certreqresp",
|
||||||
|
"p7s" => "application/x-pkcs7-signature",
|
||||||
|
"pbm" => "image/x-portable-bitmap",
|
||||||
|
"pdf" => "application/pdf",
|
||||||
|
"pfx" => "application/x-pkcs12",
|
||||||
|
"pgm" => "image/x-portable-graymap",
|
||||||
|
"pko" => "application/ynd.ms-pkipko",
|
||||||
|
"pma" => "application/x-perfmon",
|
||||||
|
"pmc" => "application/x-perfmon",
|
||||||
|
"pml" => "application/x-perfmon",
|
||||||
|
"pmr" => "application/x-perfmon",
|
||||||
|
"pmw" => "application/x-perfmon",
|
||||||
|
"pnm" => "image/x-portable-anymap",
|
||||||
|
"pot" => "application/vnd.ms-powerpoint",
|
||||||
|
"ppm" => "image/x-portable-pixmap",
|
||||||
|
"pps" => "application/vnd.ms-powerpoint",
|
||||||
|
"ppt" => "application/vnd.ms-powerpoint",
|
||||||
|
"prf" => "application/pics-rules",
|
||||||
|
"ps" => "application/postscript",
|
||||||
|
"pub" => "application/x-mspublisher",
|
||||||
|
"qt" => "video/quicktime",
|
||||||
|
"ra" => "audio/x-pn-realaudio",
|
||||||
|
"ram" => "audio/x-pn-realaudio",
|
||||||
|
"ras" => "image/x-cmu-raster",
|
||||||
|
"rgb" => "image/x-rgb",
|
||||||
|
"rmi" => "audio/mid",
|
||||||
|
"roff" => "application/x-troff",
|
||||||
|
"rtf" => "application/rtf",
|
||||||
|
"rtx" => "text/richtext",
|
||||||
|
"scd" => "application/x-msschedule",
|
||||||
|
"sct" => "text/scriptlet",
|
||||||
|
"setpay" => "application/set-payment-initiation",
|
||||||
|
"setreg" => "application/set-registration-initiation",
|
||||||
|
"sh" => "application/x-sh",
|
||||||
|
"shar" => "application/x-shar",
|
||||||
|
"sit" => "application/x-stuffit",
|
||||||
|
"snd" => "audio/basic",
|
||||||
|
"spc" => "application/x-pkcs7-certificates",
|
||||||
|
"spl" => "application/futuresplash",
|
||||||
|
"src" => "application/x-wais-source",
|
||||||
|
"sst" => "application/vnd.ms-pkicertstore",
|
||||||
|
"stl" => "application/vnd.ms-pkistl",
|
||||||
|
"stm" => "text/html",
|
||||||
|
"svg" => "image/svg+xml",
|
||||||
|
"sv4cpio" => "application/x-sv4cpio",
|
||||||
|
"sv4crc" => "application/x-sv4crc",
|
||||||
|
"t" => "application/x-troff",
|
||||||
|
"tar" => "application/x-tar",
|
||||||
|
"tcl" => "application/x-tcl",
|
||||||
|
"tex" => "application/x-tex",
|
||||||
|
"texi" => "application/x-texinfo",
|
||||||
|
"texinfo" => "application/x-texinfo",
|
||||||
|
"tgz" => "application/x-compressed",
|
||||||
|
"tif" => "image/tiff",
|
||||||
|
"tiff" => "image/tiff",
|
||||||
|
"tr" => "application/x-troff",
|
||||||
|
"trm" => "application/x-msterminal",
|
||||||
|
"tsv" => "text/tab-separated-values",
|
||||||
|
"txt" => "text/plain",
|
||||||
|
"uls" => "text/iuls",
|
||||||
|
"ustar" => "application/x-ustar",
|
||||||
|
"vcf" => "text/x-vcard",
|
||||||
|
"vrml" => "x-world/x-vrml",
|
||||||
|
"wav" => "audio/x-wav",
|
||||||
|
"wcm" => "application/vnd.ms-works",
|
||||||
|
"wdb" => "application/vnd.ms-works",
|
||||||
|
"wks" => "application/vnd.ms-works",
|
||||||
|
"wmf" => "application/x-msmetafile",
|
||||||
|
"wps" => "application/vnd.ms-works",
|
||||||
|
"wri" => "application/x-mswrite",
|
||||||
|
"wrl" => "x-world/x-vrml",
|
||||||
|
"wrz" => "x-world/x-vrml",
|
||||||
|
"xaf" => "x-world/x-vrml",
|
||||||
|
"xbm" => "image/x-xbitmap",
|
||||||
|
"xla" => "application/vnd.ms-excel",
|
||||||
|
"xlc" => "application/vnd.ms-excel",
|
||||||
|
"xlm" => "application/vnd.ms-excel",
|
||||||
|
"xls" => "application/vnd.ms-excel",
|
||||||
|
"xlt" => "application/vnd.ms-excel",
|
||||||
|
"xlw" => "application/vnd.ms-excel",
|
||||||
|
"xof" => "x-world/x-vrml",
|
||||||
|
"xpm" => "image/x-xpixmap",
|
||||||
|
"xwd" => "image/x-xwindowdump",
|
||||||
|
"z" => "application/x-compress",
|
||||||
|
"rar" => "application/x-rar-compressed",
|
||||||
|
"zip" => "application/zip");
|
||||||
|
return $mime_types;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
66
code-gen.rb
Normal file
66
code-gen.rb
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
|
||||||
|
def generate_codes(length, count)
|
||||||
|
codes = Array.[]
|
||||||
|
|
||||||
|
for i in 1..count do
|
||||||
|
codes.push([*('a'..'z'),*('0'..'9'),*('A'..'Z')].shuffle[0,length].join)
|
||||||
|
end
|
||||||
|
|
||||||
|
return codes
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def make_codes_uniq(count,codes, length)
|
||||||
|
codes.uniq!
|
||||||
|
if codes.count < count
|
||||||
|
puts "dup\n"
|
||||||
|
puts codes.count
|
||||||
|
count = count - codes.count
|
||||||
|
c = generate_codes(length, count)
|
||||||
|
|
||||||
|
c.each{|elem| codes.push(elem)}
|
||||||
|
|
||||||
|
make_codes_uniq(count, codes, length)
|
||||||
|
else
|
||||||
|
return codes
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def write_out(codes)
|
||||||
|
## write the codes to csv and txt files
|
||||||
|
["txt", "csv"].each do |f|
|
||||||
|
of = File.open("unique-codes." + f , "w")
|
||||||
|
out = Array.[]
|
||||||
|
|
||||||
|
case f
|
||||||
|
when "txt"
|
||||||
|
codes.each {|c| out.push(c.chomp)}
|
||||||
|
when "csv"
|
||||||
|
## creates line suited for the rvv-dl application database
|
||||||
|
id = 0
|
||||||
|
codes.each {|c|
|
||||||
|
out.push("\"#{id}\";\"" + c.chomp + "\";\"\";\"\";\"" + Time.now.inspect + "\";\"" + Time.now.inspect + "\"" )
|
||||||
|
id += 1
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
out.each { |l| of.puts l }
|
||||||
|
of.close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_files()
|
||||||
|
## how long shall the codes be
|
||||||
|
length = 8
|
||||||
|
|
||||||
|
## how many codes do we need?
|
||||||
|
count = 1000
|
||||||
|
|
||||||
|
codes = generate_codes(length, count)
|
||||||
|
|
||||||
|
## make shure the codes are unique
|
||||||
|
codes = make_codes_uniq(count, codes, length)
|
||||||
|
write_out(codes)
|
||||||
|
end
|
||||||
|
|
||||||
|
build_files()
|
29
includes/js/ajax.js
Normal file
29
includes/js/ajax.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
jQuery(document).ready(function($) {
|
||||||
|
|
||||||
|
// Code submission
|
||||||
|
jQuery('#code_form').submit(function(e) {
|
||||||
|
e.preventDefault(); // this disables the submit button so the user stays on the page
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
if ( code.length < 8 ) {
|
||||||
|
jQuery('#resp').html('Code ist zu kurz!');
|
||||||
|
} else {
|
||||||
|
|
||||||
|
data = {'code' : $('input[name=code]').val(),
|
||||||
|
'action' : 'submit_code',
|
||||||
|
'format' : $('select[name=format]').val()
|
||||||
|
};
|
||||||
|
|
||||||
|
// ajax call
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
dataType: "json",
|
||||||
|
url: frontendajax.ajaxurl,
|
||||||
|
data: data})
|
||||||
|
.done(function(msg){
|
||||||
|
jQuery('#resp').html(msg.resp);
|
||||||
|
})
|
||||||
|
.fail( function(eins) { console.log("Fehler", eins);});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
140
includes/options.php
Normal file
140
includes/options.php
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
class DltDownloaderSettingsPage
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Holds the values to be used in the fields callbacks
|
||||||
|
*/
|
||||||
|
private $options;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start up
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
add_action( 'admin_menu', array( $this, 'add_plugin_page' ) );
|
||||||
|
add_action( 'admin_init', array( $this, 'page_init' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add options page
|
||||||
|
*/
|
||||||
|
public function add_plugin_page()
|
||||||
|
{
|
||||||
|
// This page will be under "Settings"
|
||||||
|
add_options_page(
|
||||||
|
'Downloader Settings',
|
||||||
|
'Downloader Settings',
|
||||||
|
'manage_options',
|
||||||
|
'downloader-setting-admin',
|
||||||
|
array( $this, 'create_admin_page' )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options page callback
|
||||||
|
*/
|
||||||
|
public function create_admin_page()
|
||||||
|
{
|
||||||
|
// Set class property
|
||||||
|
$this->options = get_option( 'dlt_downloader' );
|
||||||
|
?>
|
||||||
|
<div class="wrap">
|
||||||
|
<h2>My Settings</h2>
|
||||||
|
<form method="post" action="options.php">
|
||||||
|
<?php
|
||||||
|
// This prints out all hidden setting fields
|
||||||
|
settings_fields( 'dlt_downloader_group' );
|
||||||
|
do_settings_sections( 'dlt_downloader_admin' );
|
||||||
|
submit_button();
|
||||||
|
?>
|
||||||
|
</form>
|
||||||
|
Coded by Daniel Schubert <a href="http://www.schubertdaniel.de">www.schubertdaniel.de</a>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register and add settings
|
||||||
|
*/
|
||||||
|
public function page_init()
|
||||||
|
{
|
||||||
|
register_setting(
|
||||||
|
'dlt_downloader_group', // Option group
|
||||||
|
'dlt_downloader', // Option name
|
||||||
|
array( $this, 'sanitize' ) // Sanitize
|
||||||
|
);
|
||||||
|
|
||||||
|
add_settings_section(
|
||||||
|
'downloader_settings', // ID
|
||||||
|
'Downloader Settings', // Title
|
||||||
|
array( $this, 'print_section_info' ), // Callback
|
||||||
|
'dlt_downloader_admin' // Page
|
||||||
|
);
|
||||||
|
|
||||||
|
add_settings_field(
|
||||||
|
'downloader_downloader_zip_file', // ID
|
||||||
|
'Zip Datei', // Title
|
||||||
|
array( $this, 'downloader_zip_file_callback' ), // Callback
|
||||||
|
'dlt_downloader_admin', // Page
|
||||||
|
'downloader_settings' // Section
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
add_settings_field(
|
||||||
|
'downloader_sqlite_database',
|
||||||
|
'SQLite3 Datenbank',
|
||||||
|
array( $this, 'downloader_sqlite_database_callback' ),
|
||||||
|
'dlt_downloader_admin',
|
||||||
|
'downloader_settings'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sanitize each setting field as needed
|
||||||
|
*
|
||||||
|
* @param array $input Contains all settings fields as array keys
|
||||||
|
*/
|
||||||
|
public function sanitize( $input )
|
||||||
|
{
|
||||||
|
$new_input = array();
|
||||||
|
if( isset( $input['downloader_zip_file'] ) )
|
||||||
|
$new_input['downloader_zip_file'] = sanitize_text_field( $input['downloader_zip_file'] );
|
||||||
|
|
||||||
|
if( isset( $input['downloader_sqlite_database'] ) )
|
||||||
|
$new_input['downloader_sqlite_database'] = sanitize_text_field( $input['downloader_sqlite_database'] );
|
||||||
|
|
||||||
|
return $new_input;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print the Section text
|
||||||
|
*/
|
||||||
|
public function print_section_info()
|
||||||
|
{
|
||||||
|
print 'Enter your settings below:';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the settings option array and print one of its values
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function downloader_zip_file_callback()
|
||||||
|
{
|
||||||
|
printf(
|
||||||
|
'<input type="text" id="downloader_zip_file" size="80" required name="dlt_downloader[downloader_zip_file]" value="%s" />',
|
||||||
|
isset( $this->options['downloader_zip_file'] ) ? esc_attr( $this->options['downloader_zip_file']) : ''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function downloader_sqlite_database_callback()
|
||||||
|
{
|
||||||
|
printf(
|
||||||
|
'<input type="text" id="downloader_sqlite_database" size="60" required name="dlt_downloader[downloader_sqlite_database]" value="%s" />',
|
||||||
|
isset( $this->options['downloader_sqlite_database'] ) ? esc_attr( $this->options['downloader_sqlite_database']) : ''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( is_admin() )
|
||||||
|
$dlt_downloader_settings_page = new DltDownloaderSettingsPage();
|
1000
unique-codes.csv
Normal file
1000
unique-codes.csv
Normal file
File diff suppressed because it is too large
Load Diff
BIN
unique-codes.ods
Normal file
BIN
unique-codes.ods
Normal file
Binary file not shown.
1000
unique-codes.txt
Normal file
1000
unique-codes.txt
Normal file
File diff suppressed because it is too large
Load Diff
56
vinyl-downloader.php
Normal file
56
vinyl-downloader.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Plugin Name: Dan’s File Downloader
|
||||||
|
Plugin URI: https://github.com/danielschubert/
|
||||||
|
Description: Download Files upon Entering Valid Code
|
||||||
|
Author: Daniel Schubert <mail@schubertdaniel.de>
|
||||||
|
Version: 0.8
|
||||||
|
Author URI: http://www.schubertdaniel.de
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once(ABSPATH.'wp-admin/includes/plugin.php');
|
||||||
|
require_once(__DIR__ . '/VinylDownload.class.php');
|
||||||
|
|
||||||
|
/* include settings page for admin */
|
||||||
|
if (is_admin())
|
||||||
|
require_once(__DIR__ . '/includes/options.php');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ajax callback
|
||||||
|
*/
|
||||||
|
|
||||||
|
function submit_code() {
|
||||||
|
$d = new VinylDownload;
|
||||||
|
//$d->database = $this->options['downloader_sqlite_database']
|
||||||
|
//$d->file = $this->options['downloader_zip_file']
|
||||||
|
|
||||||
|
if (!empty($_POST)) {
|
||||||
|
|
||||||
|
/* TODO : validation */
|
||||||
|
$code = $_POST['code'];
|
||||||
|
$format = $_POST['format'];
|
||||||
|
|
||||||
|
$d->database = ( ABSPATH . 'db/vinyl-dl-codes.sqlite' );
|
||||||
|
|
||||||
|
$resp = $d->gen_response($code, $format);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$code = null;
|
||||||
|
$resp = 'POST leer';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode(array('code' => $code, 'resp' => $resp ));
|
||||||
|
wp_die();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
add_action('wp_ajax_nopriv_submit_code', 'submit_code');
|
||||||
|
add_action('wp_ajax_submit_code', 'submit_code');
|
||||||
|
wp_enqueue_script( 'ajax_submit_code',
|
||||||
|
plugins_url('includes/js/ajax.js', __FILE__ ),
|
||||||
|
array( 'jquery' )
|
||||||
|
);
|
||||||
|
wp_localize_script( 'ajax_submit_code',
|
||||||
|
'frontendajax',
|
||||||
|
array('ajaxurl' => admin_url( 'admin-ajax.php'))
|
||||||
|
);
|
Loading…
Reference in New Issue
Block a user