Initial commit
This commit is contained in:
commit
78a4e70036
24 changed files with 1067 additions and 0 deletions
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
*.css
|
||||||
|
main.js
|
||||||
|
node_modules/
|
||||||
|
.hhconfig
|
||||||
|
assets/
|
||||||
|
templates/
|
||||||
|
lists/
|
||||||
|
vendor/
|
22
LICENSE.txt
Normal file
22
LICENSE.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
34
README.md
Normal file
34
README.md
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# Filespread
|
||||||
|
|
||||||
|
Filespread is a simple webapp to make file spreading over mail easy by providing the ability to manage different templates and different address lists.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Fork the git repo and run
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure you have gulp installed on your system and run
|
||||||
|
|
||||||
|
```
|
||||||
|
gulp sass
|
||||||
|
gulp coffee
|
||||||
|
```
|
||||||
|
|
||||||
|
Now make sure that the server can write in the folders `templates, assets and lists`.
|
||||||
|
|
||||||
|
Finally remove the example files.
|
||||||
|
|
||||||
|
# License
|
||||||
|
|
||||||
|
Filespread is licensed under the MIT license.
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
Please refer to the [Contributing Guidlines](https://mmk2410.org/contribute/)
|
14
composer.json
Executable file
14
composer.json
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"name": "mmk2410/filespread",
|
||||||
|
"description": "A simple program for sending a mail with attachments",
|
||||||
|
"require": {
|
||||||
|
"phpmailer/phpmailer": "^5.2"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "mmk2410",
|
||||||
|
"email": "marcelmichaelkapfer@yahoo.co.nz"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
78
composer.lock
generated
Executable file
78
composer.lock
generated
Executable file
|
@ -0,0 +1,78 @@
|
||||||
|
{
|
||||||
|
"_readme": [
|
||||||
|
"This file locks the dependencies of your project to a known state",
|
||||||
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
|
"This file is @generated automatically"
|
||||||
|
],
|
||||||
|
"hash": "ae00a14ff5f433c662a467156198e047",
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "phpmailer/phpmailer",
|
||||||
|
"version": "v5.2.13",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||||
|
"reference": "45df3a88f7f46071e10d0b600f228d19f95911b3"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/45df3a88f7f46071e10d0b600f228d19f95911b3",
|
||||||
|
"reference": "45df3a88f7f46071e10d0b600f228d19f95911b3",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.0.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpdocumentor/phpdocumentor": "*",
|
||||||
|
"phpunit/phpunit": "4.7.*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"league/oauth2-client": "Needed for Gmail's XOAUTH2 authentication system"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"class.phpmailer.php",
|
||||||
|
"class.phpmaileroauth.php",
|
||||||
|
"class.phpmaileroauthgoogle.php",
|
||||||
|
"class.smtp.php",
|
||||||
|
"class.pop3.php",
|
||||||
|
"extras/EasyPeasyICS.php",
|
||||||
|
"extras/ntlm_sasl_client.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"LGPL-2.1"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Jim Jagielski",
|
||||||
|
"email": "jimjag@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Marcus Bointon",
|
||||||
|
"email": "phpmailer@synchromedia.co.uk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andy Prevost",
|
||||||
|
"email": "codeworxtech@users.sourceforge.net"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Brent R. Matzelle"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||||
|
"time": "2015-09-14 09:18:12"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": [],
|
||||||
|
"aliases": [],
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"stability-flags": [],
|
||||||
|
"prefer-stable": false,
|
||||||
|
"prefer-lowest": false,
|
||||||
|
"platform": [],
|
||||||
|
"platform-dev": []
|
||||||
|
}
|
12
filespread.ini
Normal file
12
filespread.ini
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
; This is the config file for filespread
|
||||||
|
; Modify the values to your needs before running filespread
|
||||||
|
|
||||||
|
[filespread]
|
||||||
|
; Set your timezone (https://secure.php.net/manual/en/timezones.php)
|
||||||
|
timezone = "UTC"
|
||||||
|
|
||||||
|
[user]
|
||||||
|
; email address which is given as a sender address
|
||||||
|
email = "example@example.com"
|
||||||
|
; name which is given as a sender name
|
||||||
|
name = "John"
|
20
gulpfile.coffee
Executable file
20
gulpfile.coffee
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
# COPYRIGHT 2016 (c) Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
gulp = require 'gulp'
|
||||||
|
coffee = require 'gulp-coffee'
|
||||||
|
sass = require 'gulp-sass'
|
||||||
|
|
||||||
|
gulp.task 'coffee', ->
|
||||||
|
gulp.src './res/js/*.coffee'
|
||||||
|
.pipe coffee()
|
||||||
|
.pipe gulp.dest './res/js/'
|
||||||
|
|
||||||
|
gulp.task 'sass', ->
|
||||||
|
gulp.src './res/css/*.sass'
|
||||||
|
.pipe sass()
|
||||||
|
.pipe gulp.dest './res/css/'
|
||||||
|
|
||||||
|
gulp.task 'default', ->
|
||||||
|
gulp.watch './res/js/*.coffee', ['coffee']
|
||||||
|
gulp.watch './res/css/*.sass', ['sass']
|
175
index.html
Executable file
175
index.html
Executable file
|
@ -0,0 +1,175 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
FileSpread
|
||||||
|
A simple file-spread-over-mail web app
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
2015 - 2016 (c) Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>FileSpread</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
|
||||||
|
<meta name="description" content="A web file spreader over mail" />
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#9c27b0" />
|
||||||
|
|
||||||
|
<link rel="manifest" href="manifest.json" />
|
||||||
|
|
||||||
|
<meta name="msapplication-TileColor" content="#9c27b0"/>
|
||||||
|
|
||||||
|
<meta name="mobile-web-app-capable" content="yes"/>
|
||||||
|
<meta name="application-name" content="FileSpread"/>
|
||||||
|
<!--
|
||||||
|
<meta rel="icon" sizes="192x192" href="images/touch/chrome-touch-icon-192x192.png"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
||||||
|
<meta name="apple-mobile-web-app-title" content="FileSpread"/>
|
||||||
|
<!--
|
||||||
|
<link rel="apple-touch-icon" href="images/touch/apple-touch-icon.png" />
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<meta name="msapplication-TileImage" content="images/touch/ms-touch-icon0144x144.png" />
|
||||||
|
-->
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Roboto:400,600,300,700" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="./res/css/main.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<span class="title">FileSpread</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">File Upload</div>
|
||||||
|
<p>
|
||||||
|
Choose a file to spread
|
||||||
|
</p>
|
||||||
|
<form action="res/php/upload.php" enctype="multipart/form-data" method="POST">
|
||||||
|
<input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
|
||||||
|
<input name="userfile" type="file" value="Choose a file" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<input type="submit" class="button" style="padding: 0px;" value="UPLOAD" />
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Email content</div>
|
||||||
|
<p>
|
||||||
|
Select a template:
|
||||||
|
</p>
|
||||||
|
<select id="templates_list"></select>
|
||||||
|
<p>Change the text of the email if you want.</p>
|
||||||
|
<p>Title:</p><input id="mailtitle" name="title" class="itextfield" />
|
||||||
|
<p>Text:</p><textarea id="mailtext" name="text" class="itextarea"></textarea>
|
||||||
|
<p>Filename:</p><input id="filename" name="filename" class="itextfield" />
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Email Addresses</div>
|
||||||
|
<p>
|
||||||
|
Select a address list:
|
||||||
|
</p>
|
||||||
|
<select id="address_list"></select>
|
||||||
|
<p>These are the email addresses, the mail is going to be send.</p>
|
||||||
|
<div id="addresses"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Send Mail</div>
|
||||||
|
<p>
|
||||||
|
Send now the the mail with the file attachment to the listed addresses.
|
||||||
|
</p>
|
||||||
|
<span class="button" id="send">SEND</span>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Change Template</div>
|
||||||
|
<p>
|
||||||
|
Select a template you want to change:
|
||||||
|
</p>
|
||||||
|
<select id="edit_templates_list">
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
</select>
|
||||||
|
<p class="edit_template">Change the text of the template.</p>
|
||||||
|
<p class="edit_template">Title:</p><input id="edit_mailtitle" name="title" class="itextfield edit_template" />
|
||||||
|
<p class="edit_template">Text:</p><textarea id="edit_mailtext" name="text" class="itextarea edit_template"></textarea>
|
||||||
|
<p class="edit_template">Filename:</p><input id="edit_filename" name="filename" class="itextfield edit_template" />
|
||||||
|
<p class="edit_template">
|
||||||
|
<span class="button" id="save_template">SAVE</span>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Create Template</div>
|
||||||
|
<p>
|
||||||
|
Template name (filename.txt):
|
||||||
|
</p>
|
||||||
|
<input id="create_template_name" name="filename" class="itextfield" />
|
||||||
|
<p>
|
||||||
|
<span class="button" id="create_template">CREATE</span>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Delete Template</div>
|
||||||
|
<p>
|
||||||
|
Select the template you want to remove:
|
||||||
|
</p>
|
||||||
|
<select id="remove-template-list">
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
</select>
|
||||||
|
<p class="remove_template">
|
||||||
|
<span class="button" id="remove-template">REMOVE</span>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Change List</div>
|
||||||
|
<p>
|
||||||
|
Select the address list you want to change:
|
||||||
|
</p>
|
||||||
|
<select id="edit-address-list">
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
</select>
|
||||||
|
<p class="edit_address">Change the content of the list:</p>
|
||||||
|
<textarea id="edit-addresses" class="itextarea edit_address"></textarea>
|
||||||
|
<p class="edit_address">
|
||||||
|
<span class="button" id="save-addresses">SAVE</span>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Create List</div>
|
||||||
|
<p>
|
||||||
|
List name (filename.txt):
|
||||||
|
</p>
|
||||||
|
<input id="create-list-name" name="filename" class="itextfield" />
|
||||||
|
<p>
|
||||||
|
<span class="button" id="create-list">CREATE</span>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Delete List</div>
|
||||||
|
<p>
|
||||||
|
Select the list you want to remove:
|
||||||
|
</p>
|
||||||
|
<select id="remove-list-list">
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
</select>
|
||||||
|
<p class="remove_list">
|
||||||
|
<span class="button" id="remove-list">REMOVE</span>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<script src="./res/js/jquery-2.1.4.min.js"></script>
|
||||||
|
<script src="./res/js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
19
manifest.json
Executable file
19
manifest.json
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"name": "FileSpread",
|
||||||
|
"short_name": "FileSpread",
|
||||||
|
"icons" : [{
|
||||||
|
"src": "images/touch/icon-128x128.png",
|
||||||
|
"sizes": "128x128"
|
||||||
|
}, {
|
||||||
|
"src": "images/touch/apple-touch-icon.png",
|
||||||
|
"sizes": "152x152"
|
||||||
|
}, {
|
||||||
|
"src": "images/touch/ms-touch-icon-144x144-precomposed.png",
|
||||||
|
"sizes": "144x144"
|
||||||
|
}, {
|
||||||
|
"src": "images/touch/chrome-touch-icon-192x192.png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
}],
|
||||||
|
"start_url": "./",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
22
package.json
Normal file
22
package.json
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"name": "filespread",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "file spreader over mail",
|
||||||
|
"main": "index.html",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "Marcel Kaper (mmk2410)",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"gulp": "^3.9.1",
|
||||||
|
"gulp-coffee": "^2.3.1",
|
||||||
|
"gulp-sass": "^2.1.0",
|
||||||
|
"node-sass": "^3.4.2"
|
||||||
|
},
|
||||||
|
"repository" :
|
||||||
|
{
|
||||||
|
"type" : "git",
|
||||||
|
"url" : "https://git.mmk2410.org/filespread"
|
||||||
|
}
|
||||||
|
}
|
201
res/css/main.sass
Executable file
201
res/css/main.sass
Executable file
|
@ -0,0 +1,201 @@
|
||||||
|
// Variables
|
||||||
|
// COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
$primaryColor: #9c27b0
|
||||||
|
|
||||||
|
|
||||||
|
/* BODY */
|
||||||
|
|
||||||
|
body
|
||||||
|
font-family: "Roboto", sans-serif
|
||||||
|
background: #f6f6f6
|
||||||
|
color: #383838
|
||||||
|
margin-top: 94px
|
||||||
|
|
||||||
|
.main
|
||||||
|
height: 100%
|
||||||
|
width: 100%
|
||||||
|
margin-left: 0px
|
||||||
|
|
||||||
|
/* HEADER */
|
||||||
|
.header
|
||||||
|
background-color: $primaryColor
|
||||||
|
position: fixed
|
||||||
|
top: 0px
|
||||||
|
right: 0px
|
||||||
|
left: 0px
|
||||||
|
width: 100%
|
||||||
|
height: 64px
|
||||||
|
box-shadow: 2px 0px 2px 2px rgba(62, 62, 62, 0.45)
|
||||||
|
|
||||||
|
.title
|
||||||
|
color: #fff
|
||||||
|
font-size: 23px
|
||||||
|
text-decoration: none
|
||||||
|
line-height: 64px
|
||||||
|
vertical-align: middle
|
||||||
|
left: 75px
|
||||||
|
position: absolute
|
||||||
|
|
||||||
|
/* MAIN */
|
||||||
|
|
||||||
|
.card
|
||||||
|
margin-right: auto
|
||||||
|
margin-left: auto
|
||||||
|
width: 75%
|
||||||
|
background: #fff
|
||||||
|
border-radius: 2px
|
||||||
|
padding: 24px
|
||||||
|
box-shadow: 0px 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
margin-bottom: 40px
|
||||||
|
max-width: 1160px
|
||||||
|
|
||||||
|
|
||||||
|
.headline
|
||||||
|
font-size: 24px
|
||||||
|
color: #383838!important
|
||||||
|
text-decoration: none
|
||||||
|
display: block
|
||||||
|
padding-bottom: 8px
|
||||||
|
border-bottom: none!important
|
||||||
|
|
||||||
|
.card > p
|
||||||
|
font-size: 14px
|
||||||
|
line-height: 24px
|
||||||
|
|
||||||
|
.table-content
|
||||||
|
max-height: 200px
|
||||||
|
overflow: auto
|
||||||
|
|
||||||
|
/* FOOTER */
|
||||||
|
|
||||||
|
.footer
|
||||||
|
font-size: 12px
|
||||||
|
text-align: center
|
||||||
|
|
||||||
|
.footer a
|
||||||
|
color: #383838
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms
|
||||||
|
|
||||||
|
.footer a:hover
|
||||||
|
border-bottom-color: #383838
|
||||||
|
|
||||||
|
/* BUTTON */
|
||||||
|
|
||||||
|
.button
|
||||||
|
text-decoration: none
|
||||||
|
color: #fff
|
||||||
|
background-color: $primaryColor
|
||||||
|
line-height: 36px
|
||||||
|
min-width: 64px
|
||||||
|
text-align: center
|
||||||
|
height: 36px
|
||||||
|
padding: 8px
|
||||||
|
border-width: 1px
|
||||||
|
border-style: solid
|
||||||
|
border-color: $primaryColor
|
||||||
|
box-shadow: 0.4px 1px 1.5px 1px #aaa
|
||||||
|
-moz-box-shadow: 0.4px 1px 1.5px 1px #aaa
|
||||||
|
-webkit-box-shadow: 0.4px 1px 1.5px 1px #aaa
|
||||||
|
border-radius: 2px
|
||||||
|
margin-top: 4px
|
||||||
|
margin-bottom: 5px
|
||||||
|
letter-spacing: 0.4px
|
||||||
|
font-weight: 700
|
||||||
|
font-size: 14px
|
||||||
|
transition-property: box-shadow
|
||||||
|
transition-delay: 50ms
|
||||||
|
transition-duration: 125ms
|
||||||
|
transition-timing-function: ease
|
||||||
|
-moz-transition-property: box-shadow
|
||||||
|
-moz-transition-delay: 50ms
|
||||||
|
-moz-transition-duration: 125ms
|
||||||
|
-moz-transition-timing-function: ease
|
||||||
|
-webkit-transition-property: box-shadow
|
||||||
|
-webkit-transition-delay: 50ms
|
||||||
|
-webkit-transition-duration: 125ms
|
||||||
|
-webkit-transition-timing-function: ease
|
||||||
|
cursor: pointer
|
||||||
|
|
||||||
|
.button:hover, .button:hover
|
||||||
|
box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa
|
||||||
|
-moz-box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa
|
||||||
|
-webkit-box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa
|
||||||
|
|
||||||
|
input.button
|
||||||
|
padding: 0px 8px
|
||||||
|
|
||||||
|
/* INPUT FIELD */
|
||||||
|
|
||||||
|
.itextfield
|
||||||
|
border-color: transparent
|
||||||
|
border-width: 1px
|
||||||
|
font-size: 16px
|
||||||
|
line-height: 22px
|
||||||
|
width: 50%
|
||||||
|
border-bottom-color: #aaa
|
||||||
|
transition-property: border-bottom-color
|
||||||
|
transition-delay: 50ms
|
||||||
|
transition-duration: 125ms
|
||||||
|
transition-timing-function: ease
|
||||||
|
-moz-transition-property: border-bottom-color
|
||||||
|
-moz-transition-delay: 50ms
|
||||||
|
-moz-transition-duration: 125ms
|
||||||
|
-moz-transition-timing-function: ease
|
||||||
|
-webkit-transition-property: border-bottom-color
|
||||||
|
-webkit-transition-delay: 50ms
|
||||||
|
-webkit-transition-duration: 125ms
|
||||||
|
-webkit-transition-timing-function: ease
|
||||||
|
|
||||||
|
.itextfield:focus
|
||||||
|
border-bottom-color: #E91E63
|
||||||
|
border-width: 2px
|
||||||
|
outline: none
|
||||||
|
|
||||||
|
.itextarea
|
||||||
|
@extend .itextfield
|
||||||
|
min-height: 150px
|
||||||
|
|
||||||
|
.itextarea:focus
|
||||||
|
@extend .itextfield
|
||||||
|
|
||||||
|
/* FILESPREAD */
|
||||||
|
|
||||||
|
.edit_template
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.edit_list
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.remove_template
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.edit_address
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.remove_list
|
||||||
|
display: none
|
||||||
|
|
||||||
|
/* FORM */
|
||||||
|
form
|
||||||
|
margin-top: 20px
|
||||||
|
|
||||||
|
@media screen and (min-width: 1440px)
|
||||||
|
|
||||||
|
.card
|
||||||
|
width: 1160px
|
||||||
|
|
||||||
|
@media screen and (max-width: 720px)
|
||||||
|
|
||||||
|
.card
|
||||||
|
width: 82%
|
||||||
|
|
||||||
|
.title
|
||||||
|
left: 25px
|
||||||
|
|
||||||
|
.itextfield
|
||||||
|
width: 100%
|
4
res/js/jquery-2.1.4.min.js
vendored
Executable file
4
res/js/jquery-2.1.4.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
251
res/js/main.coffee
Executable file
251
res/js/main.coffee
Executable file
|
@ -0,0 +1,251 @@
|
||||||
|
# CoffeeScript for filespread
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
main = ->
|
||||||
|
|
||||||
|
$("#send").click ->
|
||||||
|
url = "./res/php/sendmail.php?list=" + $("#address_list").val() +
|
||||||
|
"&template=" + $("#templates_list").val()
|
||||||
|
$.get url, (data) ->
|
||||||
|
if data is "0"
|
||||||
|
alert "Mail sent!"
|
||||||
|
else
|
||||||
|
alert "Sending mail failed!"
|
||||||
|
|
||||||
|
updateAddressLists()
|
||||||
|
|
||||||
|
updateTemplateLists()
|
||||||
|
|
||||||
|
$("#address_list").change ->
|
||||||
|
updateAddresss $("#address_list").val()
|
||||||
|
|
||||||
|
$("#templates_list").change ->
|
||||||
|
updateTemplate $("#templates_list").val()
|
||||||
|
|
||||||
|
$("#edit_templates_list").change ->
|
||||||
|
template = $("#edit_templates_list").val()
|
||||||
|
if template is "none"
|
||||||
|
$(".edit_template").fadeOut()
|
||||||
|
else
|
||||||
|
updateEditTemplate template
|
||||||
|
|
||||||
|
$("#save_template").click ->
|
||||||
|
data =
|
||||||
|
template: $("#edit_templates_list").val()
|
||||||
|
subject: $("#edit_mailtitle").val()
|
||||||
|
filename: $("#edit_filename").val()
|
||||||
|
text: $("#edit_mailtext").val()
|
||||||
|
$.get "./res/php/savetemplate.php", {"data": data}, (data) ->
|
||||||
|
console.log data
|
||||||
|
if data is "0"
|
||||||
|
alert "Edit sucessfully saved."
|
||||||
|
if $("#edit_templates_list").val() is $("#templates_list").val()
|
||||||
|
updateTemplate $("#templates_list").val()
|
||||||
|
else
|
||||||
|
alert "Error while saving."
|
||||||
|
|
||||||
|
$("#create_template").click ->
|
||||||
|
filename = $("#create_template_name").val()
|
||||||
|
if filename.substring((filename.length - 4)) isnt ".txt"
|
||||||
|
alert "The filename has to end with \".txt\""
|
||||||
|
else
|
||||||
|
url = "./res/php/fileexists.php?file=templates/#{filename}"
|
||||||
|
$.get url, status = (data) ->
|
||||||
|
if data is "1"
|
||||||
|
data =
|
||||||
|
template: filename
|
||||||
|
subject: null
|
||||||
|
filename: null
|
||||||
|
text: null
|
||||||
|
$.get "./res/php/savetemplate.php", {"data": data}, (data) ->
|
||||||
|
if data is "0"
|
||||||
|
alert "Template created sucessfully"
|
||||||
|
$("#templates_list").append """
|
||||||
|
<option value="#{filename}">#{filename}</option>
|
||||||
|
"""
|
||||||
|
$("#edit_templates_list").append """
|
||||||
|
<option value="#{filename}">#{filename}</option>
|
||||||
|
"""
|
||||||
|
$("#remove-template-list").append """
|
||||||
|
<option value="#{template}">#{template}</option>
|
||||||
|
"""
|
||||||
|
else
|
||||||
|
alert "Error while creating template."
|
||||||
|
else
|
||||||
|
alert "A template with that filename already exists"
|
||||||
|
|
||||||
|
$("#remove-template-list").change ->
|
||||||
|
selected = $("#remove-template-list").val()
|
||||||
|
if selected == "none"
|
||||||
|
$(".remove_template").fadeOut()
|
||||||
|
else
|
||||||
|
$(".remove_template").fadeIn()
|
||||||
|
|
||||||
|
$("#remove-template").click ->
|
||||||
|
selected = $("#remove-template-list").val()
|
||||||
|
url = "./res/php/deletetemplate.php?template=#{selected}"
|
||||||
|
$.get url, (data) ->
|
||||||
|
if data == "0"
|
||||||
|
alert "Template deleted."
|
||||||
|
$("#templates_list").empty()
|
||||||
|
$("#edit_templates_list").empty()
|
||||||
|
$("#remove-template-list").empty()
|
||||||
|
$("#edit_templates_list").append """
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
"""
|
||||||
|
$("#remove-template-list").append """
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
"""
|
||||||
|
updateTemplateLists()
|
||||||
|
$(".remove_template").fadeOut()
|
||||||
|
else
|
||||||
|
alert "Failed to delete template."
|
||||||
|
|
||||||
|
$("#edit-address-list").change ->
|
||||||
|
selected = $("#edit-address-list").val()
|
||||||
|
if selected == "none"
|
||||||
|
$(".edit_address").fadeOut()
|
||||||
|
else
|
||||||
|
url = "./res/php/getaddresses.php?list=#{selected}"
|
||||||
|
$.getJSON url, (data) ->
|
||||||
|
text = ""
|
||||||
|
for address in data
|
||||||
|
text = text + address + "\n"
|
||||||
|
$("#edit-addresses").val(text)
|
||||||
|
$(".edit_address").fadeIn()
|
||||||
|
|
||||||
|
$("#save-addresses").click ->
|
||||||
|
data =
|
||||||
|
list: $("#edit-address-list").val()
|
||||||
|
addresses: $("#edit-addresses").val().split '\n'
|
||||||
|
if data.addresses[data.addresses.length - 1] is ""
|
||||||
|
data.addresses.pop()
|
||||||
|
$.get "./res/php/savelist.php", {"data": data}, (data) ->
|
||||||
|
if data == "0"
|
||||||
|
alert "List sucessfully changed!"
|
||||||
|
if data.list is $("#address_list")
|
||||||
|
updateAddresss data.list
|
||||||
|
else
|
||||||
|
alert "Error while saving the edit."
|
||||||
|
|
||||||
|
$("#create-list").click ->
|
||||||
|
filename = $("#create-list-name").val()
|
||||||
|
if filename.substring((filename.length - 4)) isnt ".txt"
|
||||||
|
alert "The filename has to end with \".txt\""
|
||||||
|
else
|
||||||
|
url = "./res/php/fileexists.php?file=lists/#{filename}"
|
||||||
|
$.get url, status = (data) ->
|
||||||
|
if data is "1"
|
||||||
|
data =
|
||||||
|
list: filename
|
||||||
|
addresses: [null]
|
||||||
|
$.get "./res/php/savelist.php", {"data": data}, (data) ->
|
||||||
|
if data is "0"
|
||||||
|
alert "Template created sucessfully"
|
||||||
|
$("#address_list").append """
|
||||||
|
<option value="#{filename}">#{filename}</option>
|
||||||
|
"""
|
||||||
|
$("#edit-address-list").append """
|
||||||
|
<option value="#{filename}">#{filename}</option>
|
||||||
|
"""
|
||||||
|
$("#remove-list-list").append """
|
||||||
|
<option value="#{filename}">#{filename}</option>
|
||||||
|
"""
|
||||||
|
else
|
||||||
|
alert "Error while creating template."
|
||||||
|
else
|
||||||
|
alert "A template with that filename already exists"
|
||||||
|
|
||||||
|
$("#remove-list-list").change ->
|
||||||
|
selected = $("#remove-list-list").val()
|
||||||
|
if selected == "none"
|
||||||
|
$(".remove_list").fadeOut()
|
||||||
|
else
|
||||||
|
$(".remove_list").fadeIn()
|
||||||
|
|
||||||
|
$("#remove-list").click ->
|
||||||
|
selected = $("#remove-list-list").val()
|
||||||
|
url = "./res/php/deletelist.php?list=#{selected}"
|
||||||
|
$.get url, (data) ->
|
||||||
|
if data == "0"
|
||||||
|
alert "List deleted."
|
||||||
|
$("#address_list").empty()
|
||||||
|
$("#edit-address-list").empty()
|
||||||
|
$("#remove-list-list").empty()
|
||||||
|
$("#edit-address-list").append """
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
"""
|
||||||
|
$("#remove-list-list").append """
|
||||||
|
<option value="none">None Selected</option>
|
||||||
|
"""
|
||||||
|
updateAddressLists()
|
||||||
|
$(".remove_list").fadeOut()
|
||||||
|
else
|
||||||
|
alert "Failed to delete template."
|
||||||
|
|
||||||
|
$("#edit-address-list").change ->
|
||||||
|
selected = $("#edit-address-list").val()
|
||||||
|
if selected == "none"
|
||||||
|
$(".edit_address").fadeOut()
|
||||||
|
else
|
||||||
|
url = "./res/php/getaddresses.php?list=#{selected}"
|
||||||
|
$.getJSON url, (data) ->
|
||||||
|
text = ""
|
||||||
|
for address in data
|
||||||
|
text = text + address + "\n"
|
||||||
|
$("#edit-addresses").val(text)
|
||||||
|
$(".edit_address").fadeIn()
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready main
|
||||||
|
|
||||||
|
updateTemplateLists = ->
|
||||||
|
$.getJSON './res/php/gettemplates.php', (data) ->
|
||||||
|
for templates, template of data.templates
|
||||||
|
$("#templates_list").append """
|
||||||
|
<option value="#{template}">#{template}</option>
|
||||||
|
"""
|
||||||
|
$("#edit_templates_list").append """
|
||||||
|
<option value="#{template}">#{template}</option>
|
||||||
|
"""
|
||||||
|
$("#remove-template-list").append """
|
||||||
|
<option value="#{template}">#{template}</option>
|
||||||
|
"""
|
||||||
|
updateTemplate data.templates[2]
|
||||||
|
|
||||||
|
updateAddresss = (list) ->
|
||||||
|
url = './res/php/getaddresses.php?list=' + list
|
||||||
|
$.getJSON url, (data) ->
|
||||||
|
$("#addresses").empty()
|
||||||
|
for address in data
|
||||||
|
$("#addresses").append "<p>#{address}</p>"
|
||||||
|
|
||||||
|
updateTemplate = (template) ->
|
||||||
|
url = './res/php/gettemplate.php?template=' + template
|
||||||
|
$.getJSON url, (data) ->
|
||||||
|
$("#mailtitle").val data.subject
|
||||||
|
$("#filename").val data.filename
|
||||||
|
$("#mailtext").val data.text
|
||||||
|
|
||||||
|
updateEditTemplate = (template) ->
|
||||||
|
url = './res/php/gettemplate.php?template=' + template
|
||||||
|
$.getJSON url, (data) ->
|
||||||
|
$(".edit_template").fadeIn()
|
||||||
|
$("#edit_mailtitle").val data.subject
|
||||||
|
$("#edit_filename").val data.filename
|
||||||
|
$("#edit_mailtext").val data.text
|
||||||
|
|
||||||
|
updateAddressLists = ->
|
||||||
|
$.getJSON './res/php/getlists.php', (data) ->
|
||||||
|
for lists, list of data.lists
|
||||||
|
$("#address_list").append """
|
||||||
|
<option value="#{list}">#{list}</option>
|
||||||
|
"""
|
||||||
|
$("#edit-address-list").append """
|
||||||
|
<option value="#{list}">#{list}</option>
|
||||||
|
"""
|
||||||
|
$("#remove-list-list").append """
|
||||||
|
<option value="#{list}">#{list}</option>
|
||||||
|
"""
|
||||||
|
updateAddresss data.lists[2]
|
11
res/php/deletelist.php
Normal file
11
res/php/deletelist.php
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$filename = "../../lists/" . $_GET["list"];
|
||||||
|
|
||||||
|
if (unlink($filename)) {
|
||||||
|
echo 0;
|
||||||
|
} else {
|
||||||
|
echo 1;
|
||||||
|
}
|
11
res/php/deletetemplate.php
Normal file
11
res/php/deletetemplate.php
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$filename = "../../templates/" . $_GET["template"];
|
||||||
|
|
||||||
|
if (unlink($filename)) {
|
||||||
|
echo 0;
|
||||||
|
} else {
|
||||||
|
echo 1;
|
||||||
|
}
|
10
res/php/fileexists.php
Normal file
10
res/php/fileexists.php
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$file = "../../" . $_GET["file"];
|
||||||
|
if (file_exists($file)) {
|
||||||
|
echo 0;
|
||||||
|
} else {
|
||||||
|
echo 1;
|
||||||
|
}
|
13
res/php/getaddresses.php
Executable file
13
res/php/getaddresses.php
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$file = "../../lists/" . $_GET["list"];
|
||||||
|
$addresses = file($file);
|
||||||
|
$res = array();
|
||||||
|
$i = 0;
|
||||||
|
foreach ($addresses as $address) {
|
||||||
|
$res[] = substr($address, 0, strlen($address) - 1);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
echo json_encode($res);
|
21
res/php/getlists.php
Normal file
21
res/php/getlists.php
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FileSpread
|
||||||
|
* php for json string of lists
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
* MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
$dir = '../../lists/';
|
||||||
|
$files = scandir($dir);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if ( in_array($file, array(".", "..")) ) {
|
||||||
|
unset($files[$i]);
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode(array("lists" => $files));
|
17
res/php/gettemplate.php
Normal file
17
res/php/gettemplate.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$file = "../../templates/" . $_GET["template"];
|
||||||
|
$content = file($file);
|
||||||
|
|
||||||
|
$title = substr($content[0], 7);
|
||||||
|
|
||||||
|
$filename = substr($content[1], 10);
|
||||||
|
|
||||||
|
$text = substr($content[2], 6);
|
||||||
|
for ($i = 3; $i < count($content); $i++) {
|
||||||
|
$text = $text . $content[$i];
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode(array("subject" => $title, "filename" => $filename, "text" => $text));
|
21
res/php/gettemplates.php
Normal file
21
res/php/gettemplates.php
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FileSpread
|
||||||
|
* php for json string of templates
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
* MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
$dir = '../../templates/';
|
||||||
|
$files = scandir($dir);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if ( in_array($file, array(".", "..")) ) {
|
||||||
|
unset($files[$i]);
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode(array("templates" => $files));
|
21
res/php/savelist.php
Normal file
21
res/php/savelist.php
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$content = $_GET["data"];
|
||||||
|
|
||||||
|
$filename = "../../lists/" . $content["list"];
|
||||||
|
|
||||||
|
$file = "";
|
||||||
|
|
||||||
|
foreach ($content["addresses"] as $address) {
|
||||||
|
$file = $file . $address . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$handle = fopen($filename, "w");
|
||||||
|
|
||||||
|
if (fwrite($handle, $file)) {
|
||||||
|
echo "0";
|
||||||
|
} else {
|
||||||
|
echo "1";
|
||||||
|
}
|
19
res/php/savetemplate.php
Normal file
19
res/php/savetemplate.php
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$content = $_GET["data"];
|
||||||
|
|
||||||
|
$filename = "../../templates/" . $content["template"];
|
||||||
|
|
||||||
|
$file = "Title: " . $content["subject"] . "\n";
|
||||||
|
$file = $file . "Filename: " . $content["filename"] . "\n";
|
||||||
|
$file = $file . "Text: " . $content["text"];
|
||||||
|
|
||||||
|
$handle = fopen($filename, "w");
|
||||||
|
|
||||||
|
if (fwrite($handle, $file)) {
|
||||||
|
echo "0";
|
||||||
|
} else {
|
||||||
|
echo "1";
|
||||||
|
}
|
53
res/php/sendmail.php
Executable file
53
res/php/sendmail.php
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
$ini = pParse_ini_file("../../filespread.ini");
|
||||||
|
|
||||||
|
date_default_timezone_set($ini["timezone"]);
|
||||||
|
|
||||||
|
require '../../vendor/autoload.php';
|
||||||
|
|
||||||
|
$list = "../../lists/" . $_GET["list"];
|
||||||
|
$template = "../../templates/" . $_GET["template"];
|
||||||
|
|
||||||
|
$addresses = file($list);
|
||||||
|
$content = file($template);
|
||||||
|
|
||||||
|
$email = new PHPMailer;
|
||||||
|
|
||||||
|
$email->setFrom($ini["email"], $ini["name"]);
|
||||||
|
$email->Subject = parseSubject($content);
|
||||||
|
$email->Body = parseText($content);
|
||||||
|
|
||||||
|
foreach ($addresses as $address) {
|
||||||
|
$email->AddAddress($address);
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_to_attach = '../../assets/file.bin';
|
||||||
|
$filename = parseFilename($content);
|
||||||
|
|
||||||
|
$email->AddAttachment($file_to_attach, $filename);
|
||||||
|
|
||||||
|
if (!$email->Send()) {
|
||||||
|
echo "-1";
|
||||||
|
echo $email->ErrorInfo;
|
||||||
|
} else {
|
||||||
|
echo "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseSubject($content) {
|
||||||
|
return substr($content[0], 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseFilename($content) {
|
||||||
|
return substr($content[1], 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseText($content) {
|
||||||
|
$text = substr($content[2], 6);
|
||||||
|
for ($i = 3; $i < count($content); $i++) {
|
||||||
|
$text = $text . $content[$i];
|
||||||
|
}
|
||||||
|
return $text;
|
||||||
|
}
|
10
res/php/upload.php
Executable file
10
res/php/upload.php
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
# COPYRIGHT (c) 2016 Marcel Kapfer (mmk2410)
|
||||||
|
# MIT License
|
||||||
|
|
||||||
|
if (0 < $_FILES['userfile']['error']) P{
|
||||||
|
echo "Error: " . $_FILES['userfile']['error'] . "<br>";
|
||||||
|
} else {
|
||||||
|
move_uploaded_file($_FILES['userfile']['tmp_name'], "../../assets/file.bin");
|
||||||
|
header("Location: ../../");
|
||||||
|
}
|
Reference in a new issue