예제 #1
0
}
// Fix licenses into an array
if (array_filter((array) $licenses)) {
    $license_array = array();
    foreach ($licenses as $license) {
        $license_array[$license] = $available_licenses["Open Source"][$license];
    }
} elseif ($license_name) {
    $license_array = array($license_name => $license_url);
} elseif ($license) {
    $license_array = array($license => $available_licenses["Closed Source"][$license]);
}
// Create extension directory if it doesn't exist
$extension_root = SERVER_ROOT . "extensions/{$id}/";
if (!file_exists($extension_root)) {
    BigTree::makeDirectory($extension_root);
}
// Setup JSON manifest
$package = array("type" => "extension", "id" => $id, "version" => $version, "revision" => 1, "compatibility" => $compatibility, "title" => $title, "description" => $description, "keywords" => $keywords, "author" => $author, "licenses" => $license_array, "components" => array("module_groups" => array(), "modules" => array(), "templates" => array(), "callouts" => array(), "settings" => array(), "feeds" => array(), "field_types" => array(), "tables" => array()));
// We're going to be associating things to the extension before creating it
sqlquery("SET foreign_key_checks = 0");
$used_forms = array();
$used_views = array();
$used_reports = array();
$extension = sqlescape($id);
foreach (array_filter((array) $module_groups) as $group) {
    $package["components"]["module_groups"][] = $admin->getModuleGroup($group);
}
foreach (array_filter((array) $callouts) as $callout) {
    if (strpos($callout, "*") === false) {
        sqlquery("UPDATE bigtree_callouts SET extension = '{$extension}', id = '{$extension}*" . sqlescape($callout) . "' WHERE id = '" . sqlescape($callout) . "'");
예제 #2
0
<?php

// First we need to package the file so they can download it manually if they wish.
if (!BigTree::isDirectoryWritable(SERVER_ROOT . "cache/package/")) {
    ?>
<div class="container">
	<section>
		<h3>Error</h3>
		<p>Your cache/ and cache/package/ directories must be writable.</p>
	</section>
</div>
<?php 
    $admin->stop();
}
BigTree::makeDirectory(SERVER_ROOT . "cache/package/");
// Fix keywords into an array
$keywords = explode(",", $keywords);
foreach ($keywords as &$word) {
    $word = trim($word);
}
// Fix licenses into an array
if ($license_name) {
    $license_array = array($license_name => $license_url);
} elseif ($license) {
    $license_array = array($license => $available_licenses["Closed Source"][$license]);
} else {
    $license_array = array();
    if (is_array($licenses)) {
        foreach ($licenses as $license) {
            $license_array[$license] = $available_licenses["Open Source"][$license];
        }
예제 #3
0
} elseif ($error == 3) {
    $_SESSION["upload_error"] = "File upload failed.";
}
if ($error) {
    BigTree::redirect(DEVELOPER_ROOT . "packages/install/");
}
// We've at least got the file now, unpack it and see what's going on.
$file = $_FILES["file"]["tmp_name"];
if (!$file) {
    $_SESSION["upload_error"] = "File upload failed.";
    BigTree::redirect(DEVELOPER_ROOT . "packages/install/");
}
// Clean up existing area
$cache_root = SERVER_ROOT . "cache/package/";
BigTree::deleteDirectory($cache_root);
BigTree::makeDirectory($cache_root);
// Unzip the package
include BigTree::path("inc/lib/pclzip.php");
$zip = new PclZip($file);
$files = $zip->extract(PCLZIP_OPT_PATH, $cache_root);
if (!$files) {
    BigTree::deleteDirectory($cache_root);
    $_SESSION["upload_error"] = "The zip file uploaded was corrupt.";
    BigTree::redirect(DEVELOPER_ROOT . "packages/install/");
}
// Read the manifest
$json = json_decode(file_get_contents($cache_root . "manifest.json"), true);
// Make sure it's legit
if ($json["type"] != "package" || !isset($json["id"]) || !isset($json["title"])) {
    BigTree::deleteDirectory($cache_root);
    $_SESSION["upload_error"] = "The zip file uploaded does not appear to be a BigTree package.";
예제 #4
0
 static function unzip($file, $destination)
 {
     // If we can't write the output directory, we're not getting anywhere.
     if (!BigTree::isDirectoryWritable($destination)) {
         return false;
     }
     // Up the memory limit for the unzip.
     ini_set("memory_limit", "512M");
     $destination = rtrim($destination) . "/";
     BigTree::makeDirectory($destination);
     // If we have the built in ZipArchive extension, use that.
     if (class_exists("ZipArchive")) {
         $z = new ZipArchive();
         if (!$z->open($file)) {
             // Bad zip file.
             return false;
         }
         for ($i = 0; $i < $z->numFiles; $i++) {
             if (!($info = $z->statIndex($i))) {
                 // Unzipping the file failed for some reason.
                 return false;
             }
             // If it's a directory, ignore it. We'll create them in putFile.
             if (substr($info["name"], -1) == "/") {
                 continue;
             }
             // Ignore __MACOSX and all it's files.
             if (substr($info["name"], 0, 9) == "__MACOSX/") {
                 continue;
             }
             $content = $z->getFromIndex($i);
             if ($content === false) {
                 // File extraction failed.
                 return false;
             }
             BigTree::putFile($destination . $file["name"], $content);
         }
         $z->close();
         return true;
         // Fall back on PclZip if we don't have the "native" version.
     } else {
         // WordPress claims this could be an issue, so we'll make sure multibyte encoding isn't overloaded.
         if (ini_get('mbstring.func_overload') && function_exists('mb_internal_encoding')) {
             $previous_encoding = mb_internal_encoding();
             mb_internal_encoding('ISO-8859-1');
         }
         $z = new PclZip($file);
         $archive = $z->extract(PCLZIP_OPT_EXTRACT_AS_STRING);
         // If we saved a previous encoding, reset it now.
         if (isset($previous_encoding)) {
             mb_internal_encoding($previous_encoding);
             unset($previous_encoding);
         }
         // If it's not an array, it's not a good zip. Also, if it's empty it's not a good zip.
         if (!is_array($archive) || !count($archive)) {
             return false;
         }
         foreach ($archive as $item) {
             // If it's a directory, ignore it. We'll create them in putFile.
             if ($item["folder"]) {
                 continue;
             }
             // Ignore __MACOSX and all it's files.
             if (substr($item["filename"], 0, 9) == "__MACOSX/") {
                 continue;
             }
             BigTree::putFile($directory . $item["filename"], $item["content"]);
         }
         return true;
     }
 }
예제 #5
0
 function installLocal()
 {
     // Create backups folder
     BigTree::makeDirectory(SERVER_ROOT . "backups/");
     // Doing a core upgrade
     if ($this->Extension === false) {
         // Move old core into backups
         rename(SERVER_ROOT . "core/", SERVER_ROOT . "backups/core-" . BIGTREE_VERSION . "/");
         // Backup database
         global $admin;
         $admin->backupDatabase(SERVER_ROOT . "backups/core-" . BIGTREE_VERSION . "/backup.sql");
         // Move new core into place
         rename(SERVER_ROOT . "cache/update/core/", SERVER_ROOT . "core/");
         // Doing an extension upgrade
     } else {
         $extension = $this->Extension;
         // Create a backups folder for this extension
         BigTree::makeDirectory(SERVER_ROOT . "backups/extensions/{$extension}/");
         // Read manifest file for current version
         $current_manifest = json_decode(file_get_contents(SERVER_ROOT . "extensions/{$extension}/manifest.json"), true);
         $old_version = $current_manifest["version"];
         // Get a unique directory name
         $old_version = BigTree::getAvailableFileName(SERVER_ROOT . "backups/extensions/{$extension}/", $old_version);
         // Move old extension into backups
         rename(SERVER_ROOT . "extensions/{$extension}/", SERVER_ROOT . "backups/extensions/{$extension}/{$old_version}/");
         // Move new extension into place
         rename(SERVER_ROOT . "cache/update/", SERVER_ROOT . "extensions/{$extension}/");
     }
     $this->cleanup();
 }
예제 #6
0
<?php

$email .= $d["label"] . "\n";
$email .= str_repeat("-", strlen($d["label"])) . "\n";
if ($_FILES[$field_name]["tmp_name"]) {
    if ($d["directory"]) {
        $directory = rtrim($d["directory"], "/") . "/";
    } else {
        $directory = "files/form-builder/";
    }
    if (BigTree::directoryContents($directory) === false) {
        BigTree::makeDirectory($directory);
    }
    $value = $storage->store($_FILES[$field_name]["tmp_name"], $_FILES[$field_name]["name"], $directory);
    $email .= $cms->replaceRelativeRoots($value);
} else {
    $email .= "No File Uploaded";
    if ($d["required"]) {
        $errors[] = $field_name;
    }
    $value = "";
}
$email .= "\n\n";