Beispiel #1
0
/**
* Imports a theme from a URL or Zip file to Atutor
* @access  private
* @author  Shozub Qureshi
*/
function import_theme()
{
    global $db;
    global $msg;
    if (isset($_POST['url']) && $_POST['url'] != 'http://') {
        if ($content = @file_get_contents($_POST['url'])) {
            // save file to /themes/
            $filename = pathinfo($_POST['url']);
            $filename = $filename['basename'];
            $full_filename = AT_CONTENT_DIR . '/' . $filename;
            if (!($fp = fopen($full_filename, 'w+b'))) {
                //Cannot open file ($filename)";
                $errors = array('CANNOT_OPEN_FILE', $filename);
                $msg->addError($errors);
                header('Location: index.php');
                exit;
            }
            if (fwrite($fp, $content, strlen($content)) === FALSE) {
                //"Cannot write to file ($filename)";
                $errors = array('CANNOT_WRITE_FILE', $filename);
                $msg->addError($errors);
                header('Location: index.php');
                exit;
            }
            fclose($fp);
        }
        $_FILES['file']['name'] = $filename;
        $_FILES['file']['tmp_name'] = $full_filename;
        $_FILES['file']['size'] = strlen($content);
        unset($content);
        $url_parts = pathinfo($_POST['url']);
        $package_base_name_url = $url_parts['basename'];
    }
    $ext = pathinfo($_FILES['file']['name']);
    $ext = $ext['extension'];
    //error in the file
    if ($_FILES['file']['error'] == 1) {
        $errors = array('FILE_MAX_SIZE', ini_get('upload_max_filesize'));
        $msg->addError($errors);
        header('Location: index.php');
        exit;
    }
    //If file has no name or no address or if the extension is not .zip
    if (!$_FILES['file']['name'] || !is_uploaded_file($_FILES['file']['tmp_name']) && !$_POST['url']) {
        $msg->addError('FILE_NOT_SELECTED');
        header('Location: index.php');
        exit;
    }
    if ($ext != 'zip') {
        $msg->addError('IMPORT_NOT_PROPER_FORMAT');
        header('Location: index.php');
        exit;
    }
    //check if file size is ZERO
    if ($_FILES['file']['size'] == 0) {
        $msg->addError('IMPORTFILE_EMPTY');
        header('Location: index.php');
        exit;
    }
    // new directory name is the filename minus the extension
    $fldrname = substr($_FILES['file']['name'], 0, -4);
    $fldrname = str_replace(' ', '_', $fldrname);
    $import_path = AT_SUBSITE_THEME_DIR . $fldrname;
    //check if Folder by that name already exists
    if (is_dir($import_path)) {
        $i = 1;
        while (is_dir($import_path . '_' . $i)) {
            $i++;
        }
        $fldrname = $fldrname . '_' . $i;
        $import_path = $import_path . '_' . $i;
    }
    //if folder does not exist previously
    if (!@mkdir($import_path, 0700)) {
        $msg->addError('IMPORTDIR_FAILED');
        header('Location: index.php');
        exit;
    }
    // unzip file and save into directory in themes
    $archive = new PclZip($_FILES['file']['tmp_name']);
    //extract contents to importpath/foldrname
    if (!$archive->extract($import_path)) {
        $errors = array('IMPORT_ERROR_IN_ZIP', $archive->errorInfo(true));
        clr_dir($import_path);
        $msg->addError($errors);
        header('Location: index.php');
        exit;
    }
    $handle = opendir($import_path);
    while ($file = readdir($handle)) {
        if (is_dir($import_path . '/' . $file) && $file != '.' && $file != '..') {
            $folder = $file;
        }
    }
    //copy contents from importpath/foldrname to importpath
    copys($import_path . '/' . $folder, $import_path);
    //delete importpath/foldrname
    clr_dir($import_path . '/' . $folder);
    $theme_xml = @file_get_contents($import_path . '/theme_info.xml');
    //Check if XML file exists (if it doesnt send error and clear directory)
    if ($theme_xml == false) {
        $version = '1.4.x';
        $extra_info = 'unspecified';
    } else {
        //parse information
        $xml_parser = new ThemeParser();
        $xml_parser->parse($theme_xml);
        $version = $xml_parser->theme_rows['version'];
        $extra_info = $xml_parser->theme_rows['extra_info'];
        $type = $xml_parser->theme_rows['type'];
    }
    $title = str_replace('_', ' ', $fldrname);
    $last_updated = date('Y-m-d');
    $status = '1';
    //if version number is not compatible with current Atutor version, set theme as disabled
    if ($version != VERSION) {
        $status = '0';
    }
    //save information in database
    $sql = "INSERT INTO %sthemes (title, version, dir_name, type, last_updated, extra_info, status, customized) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %d, 1)";
    $result = queryDB($sql, array(TABLE_PREFIX, $title, $version, $fldrname, $type, $last_updated, $extra_info, $status));
    global $sqlout;
    write_to_log(AT_ADMIN_LOG_INSERT, 'themes', $result, $sqlout);
    if (!$result) {
        $msg->addError('IMPORT_FAILED');
        header('Location: index.php');
        exit;
    }
    if (isset($_POST['url'])) {
        @unlink($full_filename);
    }
}
} else {
    if (isset($_POST["permission_granted"])) {
        $permission_granted = $_POST["permission_granted"];
    }
}
// copy theme from content folder into themes folder
if (isset($_GET["theme"])) {
    copys($theme_content_folder . $theme, AT_SUBSITE_THEME_DIR . $theme);
    $theme_xml = @file_get_contents(AT_SUBSITE_THEME_DIR . $theme . '/theme_info.xml');
    //Check if XML file exists (if it doesnt send error and clear directory)
    if ($theme_xml == false) {
        $version = '1.4.x';
        $extra_info = 'unspecified';
    } else {
        //parse information
        $xml_parser = new ThemeParser();
        $xml_parser->parse($theme_xml);
        $version = $xml_parser->theme_rows['version'];
        $type = $xml_parser->theme_rows['type'] ? $xml_parser->theme_rows['type'] : DESKTOP_DEVICE;
        // accommodate the old themes, set default type to "desktop"
        $extra_info = $xml_parser->theme_rows['extra_info'];
    }
    if ($title == '') {
        $title = str_replace('_', ' ', $theme);
    }
    $last_updated = date('Y-m-d');
    $status = '1';
    //if version number is not compatible with current Atutor version, set theme as disabled
    if ($version != VERSION) {
        $status = '0';
    }