コード例 #1
0
ファイル: functions.php プロジェクト: CJloHuK/iou-web
/**
 * Export labs, configs and devices
 *
 * @param	array	$labs			List of labs to be exported
 * @param	array	$configs		List of configs to be exported
 * @param	string	$file_export	File where export data
 * @return	bool					True if successfully exported
 */
function export($labs, $configs, $file_export)
{
    $file_tmp = '/tmp/iou-web-export.db';
    // Delete destination file if exists
    if (file_exists($file_export) && !unlink($file_export)) {
        error_log('DB: cannot delete the database file' . $file_export . '.');
        return false;
    }
    // Create a database
    if (!database_init($file_tmp)) {
        error_log('DB: cannot reinitializate database file' . $file_tmp . '.');
        return false;
    }
    try {
        global $db;
        // Attach the temporary database
        $query = "ATTACH '" . $file_tmp . "' AS export_db;";
        $statement = $db->prepare($query);
        $statement->execute();
        $db->beginTransaction();
        // Current version is stored
        $query = "CREATE TABLE export_db.data (data_name TEXT, data_value TEXT)";
        $db->query($query);
        $query = "INSERT INTO export_db.data (data_name, data_value) VALUES ('db_version', '" . VERSION . "')";
        $db->query($query);
        // Export data
        if ($configs != false) {
            $query = "INSERT INTO export_db.configs (cfg_id, cfg_name, cfg_config) SELECT cfg_id, cfg_name, cfg_config FROM main.configs WHERE cfg_name LIKE '" . implode(" - %' OR cfg_name LIKE '", $configs) . " - %' ORDER BY cfg_id";
            $db->query($query);
        }
        if ($labs != false) {
            $query = "INSERT INTO export_db.devices (dev_id, lab_id, dev_name, bin_name, dev_ram, dev_nvram, dev_ethernet, dev_serial, dev_picture, cfg_id, dev_top, dev_left, dev_l2keepalive, dev_watchdog) SELECT dev_id, lab_id, dev_name, bin_name, dev_ram, dev_nvram, dev_ethernet, dev_serial, dev_picture, cfg_id, dev_top, dev_left, dev_l2keepalive, dev_watchdog FROM devices WHERE lab_id=" . implode(" OR lab_id=", $labs) . " ORDER BY lab_id";
            $db->query($query);
            $query = "INSERT INTO export_db.labs (lab_id, lab_name, lab_description, lab_info, lab_netmap, lab_diagram, lab_time, lab_points) SELECT lab_id, lab_name, lab_description, lab_info, lab_netmap, lab_diagram, lab_time, lab_points FROM labs WHERE lab_id=" . implode(" OR lab_id=", $labs) . " ORDER BY lab_id";
            $db->query($query);
            $query = "INSERT INTO export_db.rel_img_lab (img_id, lab_id) SELECT img_id, lab_id FROM main.rel_img_lab WHERE main.rel_img_lab.lab_id=" . implode(" OR main.rel_img_lab.lab_id=", $labs) . ";";
            $db->query($query);
            // INSERT OR REPLACE used because multiple labs can be linked to the same image (Integrity constraint violation: 19 PRIMARY KEY must be unique")
            $query = "INSERT OR REPLACE INTO export_db.images (img_id, img_name, img_info, img_content, img_map) SELECT DISTINCT img_id, img_name, img_info, img_content, img_map FROM main.images NATURAL JOIN main.rel_img_lab WHERE main.rel_img_lab.lab_id=" . implode(" OR main.rel_img_lab.lab_id=", $labs) . ";";
            $db->query($query);
        }
        $db->commit();
        $query = "DETACH 'export_db';";
        $statement = $db->prepare($query);
        $statement->execute();
    } catch (PDOException $e) {
        error_log('DB: cannot export data with error "' . $e->getMessage() . '" (query was "' . $query . '".');
        return false;
    }
    // Now optimize the DB
    if (!database_optimize($file_tmp)) {
        return false;
    }
    $exported_db = new PDO('sqlite:' . $file_tmp);
    $exported_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $fp = gzopen($file_export, 'w9');
        gzwrite($fp, file_get_contents($file_tmp));
        gzclose($fp);
        return true;
    } catch (Exception $e) {
        error_log('DB: cannot compress the database with error "' . $e->getMessage() . '".');
        return false;
    }
}
コード例 #2
0
ファイル: post.php プロジェクト: pstuifzand/pompiedom
<? 
require_once '../../../inc/database.inc.php';

if (isset($_POST['message'])) {
    $link = database_init();
    save_message($link, $_POST['message']);
}

header('Location: /status/admin/');
?>
コード例 #3
0
ファイル: ajax_helper.php プロジェクト: CJloHuK/iou-web
         }
     } else {
         $status = 'Error';
         $message = 'Admin privileges required.';
     }
     xml_message('AJAX ' . $action, $status, $message);
     break;
     /*************************************************************************
      * Database: wipe                                                        *
      *************************************************************************/
 /*************************************************************************
  * Database: wipe                                                        *
  *************************************************************************/
 case 'db_wipe':
     if (is_admin()) {
         if (database_init(DATABASE)) {
             $status = 'Informational';
             $message = 'Database reinitializated.';
             session_unset();
             unset($GLOBAL['all_configs']);
             unset($GLOBAL['all_configpack']);
             unset($GLOBAL['all_bins']);
             unset($GLOBAL['all_images']);
             unset($GLOBAL['all_folders']);
             unset($GLOBAL['all_labs']);
         } else {
             $status = 'Error';
             $message = 'Cannot reinitializated the database. Check logs (under Downloads page) for additional informations.';
         }
     } else {
         $status = 'Error';