| 
<?phpinclude_once 'func.php';
 
 use Ifsnop\Mysqldump;
 
 if (false == check_cookie()) {
 die('Unauthorized access!');
 }
 
 $excludes_options = array('cache', 'uploads', 'themes', 'plugins');
 
 /** TODO **/
 // Exlcude hidden files, wp-config.php
 
 if (isset($_POST['Submitform'])) {
 $type = ($_POST['typebackup'] == 'full') ? 'full' : 'part';
 $description = filter_var($_POST['description'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
 $dirname = $type.'_'.date('Y-m-d_H:i:s').'_'.rand(1000,9999);
 $partbackup = false;
 if ($type == 'full') {
 $backup_src = ABSPATH;
 $backup_targ = DATAPATH.$dirname.'/files/';
 } else {
 $backup_src = ABSPATH.'wp-content/';
 $backup_targ = DATAPATH.$dirname.'/files/wp-content';
 $partbackup = true;
 }
 mkdir($backup_targ, 0755, true);
 $excl_str = " --exclude '*.zip' --exclude '*.wpress' --exclude '".trim(MBDIRNAME, '/')."'";
 $excl_array = array();
 $info = '';
 if (!empty($_POST['exclude'])) {
 $info .= 'Excl. ';
 foreach ($_POST['exclude'] as $excl) {
 if (in_array($excl, $excludes_options)) {
 $pathpart = ($partbackup) ? $excl : 'wp-content/'.$excl;
 $excl_str .= ' --exclude '.$pathpart;
 $excl_array[] = $excl;
 }
 }
 }
 $database = 0;
 if (empty($_POST['excldb'])) {
 $conn = get_db_conn_vals(ABSPATH);
 
 if (isset($conn['DB_NAME'], $conn['DB_USER'], $conn['DB_PASSWORD'])) {
 $database = 1;
 
 
 $dump = new Ifsnop\Mysqldump\Mysqldump('mysql:host='.$conn['DB_HOST'].';dbname='.$conn['DB_NAME'], $conn['DB_USER'], $conn['DB_PASSWORD'], array('add-drop-table' => true));
 $dump->start(DATAPATH.$dirname.'/database.sql');
 }
 }
 $sync = sprintf('rsync -av %s %s %s', $excl_str, $backup_src, $backup_targ);
 exec($sync);
 $dirsize = dirSize(DATAPATH.$dirname);
 if ($db = new SQLite3(DATAPATH.'wpbackupsDb.sqlite')) {
 $stmt = $db->prepare("INSERT INTO wpbackups (dirname, dirsize, insertdate, excludedata, backuptype, database, description) VALUES (:dirname, :dirsize, :insertdate, :excludedata, :backuptype, :database, :description)");
 $stmt->bindValue(':dirname', $dirname, SQLITE3_TEXT);
 $stmt->bindValue(':dirsize', $dirsize, SQLITE3_INTEGER);
 $stmt->bindValue(':insertdate', time(), SQLITE3_INTEGER);
 $stmt->bindValue(':excludedata', serialize($excl_array), SQLITE3_TEXT);
 $stmt->bindValue(':backuptype', $type, SQLITE3_TEXT);
 $stmt->bindValue(':database', $database, SQLITE3_INTEGER);
 $stmt->bindValue(':description', $description, SQLITE3_TEXT);
 if ($stmt->execute()) {
 echo 'okay';
 }
 }
 }
 
 |