Exemplo n.º 1
0
function _localCleanup()
{
    // Remove the package directory, we do it backwards because the "deepest" files are last
    $contents = @array_reverse(BigTree::directoryContents(SERVER_ROOT . "cache/package/"));
    foreach ((array) $contents as $file) {
        @unlink($file);
        @rmdir($file);
    }
    @rmdir(SERVER_ROOT . "cache/package/");
}
Exemplo n.º 2
0
            }
        }
        // Include related CSS/JS files if named properly
        if (file_exists(SERVER_ROOT . "custom/admin/css/" . $module["route"] . ".css")) {
            $p["files"][] = SERVER_ROOT . "custom/admin/css/" . $module["route"] . ".css";
        }
        if (file_exists(SERVER_ROOT . "custom/admin/js/" . $module["route"] . ".js")) {
            $p["files"][] = SERVER_ROOT . "custom/admin/js/" . $module["route"] . ".js";
        }
    }
}
// Bring in files for templates
foreach ((array) $templates as $template) {
    if ($template) {
        if (is_dir(SERVER_ROOT . "templates/routed/{$template}/")) {
            $contents = BigTree::directoryContents(SERVER_ROOT . "templates/routed/{$template}/");
            foreach ($contents as $c) {
                if (is_file($c)) {
                    $p["files"][] = $c;
                }
            }
        } elseif (file_exists(SERVER_ROOT . "templates/basic/{$template}.php")) {
            $p["files"][] = SERVER_ROOT . "templates/basic/{$template}.php";
        }
    }
}
// Files for callouts
foreach ((array) $callouts as $callout) {
    if ($callout) {
        if (file_exists(SERVER_ROOT . "templates/callouts/{$callout}.php")) {
            $p["files"][] = SERVER_ROOT . "templates/callouts/{$callout}.php";
Exemplo n.º 3
0
            $type["use_cases"] = array("templates" => $type["pages"], "modules" => $type["modules"], "callouts" => $type["callouts"], "settings" => $type["settings"]);
        }
        $use_cases = is_array($type["use_cases"]) ? sqlescape(json_encode($type["use_cases"])) : sqlescape($type["use_cases"]);
        $self_draw = $type["self_draw"] ? "'on'" : "NULL";
        sqlquery("INSERT INTO bigtree_field_types (`id`,`name`,`use_cases`,`self_draw`) VALUES ('" . sqlescape($type["id"]) . "','" . sqlescape($type["name"]) . "','{$use_cases}',{$self_draw})");
    }
}
// Import files
foreach ($json["files"] as $file) {
    BigTree::copyFile(SERVER_ROOT . "cache/package/{$file}", SERVER_ROOT . $file);
}
// Run SQL
foreach ($json["sql"] as $sql) {
    sqlquery($sql);
}
// Empty view cache
sqlquery("DELETE FROM bigtree_module_view_cache");
// Remove the package directory, we do it backwards because the "deepest" files are last
$contents = @array_reverse(BigTree::directoryContents(SERVER_ROOT . "cache/package/"));
foreach ($contents as $file) {
    @unlink($file);
    @rmdir($file);
}
@rmdir(SERVER_ROOT . "cache/package/");
// Clear module class cache and field type cache.
@unlink(SERVER_ROOT . "cache/bigtree-module-class-list.json");
@unlink(SERVER_ROOT . "cache/bigtree-form-field-types.json");
sqlquery("INSERT INTO bigtree_extensions (`id`,`type`,`name`,`version`,`last_updated`,`manifest`) VALUES ('" . sqlescape($json["id"]) . "','package','" . sqlescape($json["title"]) . "','" . sqlescape($json["version"]) . "',NOW(),'" . sqlescape(json_encode($json)) . "')");
sqlquery("SET foreign_key_checks = 1");
$admin->growl("Developer", "Installed Package");
BigTree::redirect(DEVELOPER_ROOT . "packages/install/complete/");
Exemplo n.º 4
0
 function installExtension($manifest, $upgrade = false)
 {
     $bigtree["group_match"] = $bigtree["module_match"] = $bigtree["route_match"] = $bigtree["class_name_match"] = $bigtree["form_id_match"] = $bigtree["view_id_match"] = $bigtree["report_id_match"] = array();
     $extension = sqlescape($manifest["id"]);
     // Turn off foreign key checks so we can reference the extension before creating it
     sqlquery("SET foreign_key_checks = 0");
     // Upgrades drop existing modules, templates, etc -- we don't drop settings because they have user data
     if (is_array($upgrade)) {
         sqlquery("DELETE FROM bigtree_module_groups WHERE extension = '{$extension}'");
         sqlquery("DELETE FROM bigtree_modules WHERE extension = '{$extension}'");
         sqlquery("DELETE FROM bigtree_templates WHERE extension = '{$extension}'");
         sqlquery("DELETE FROM bigtree_callouts WHERE extension = '{$extension}'");
         sqlquery("DELETE FROM bigtree_field_types WHERE extension = '{$extension}'");
         sqlquery("DELETE FROM bigtree_feeds WHERE extension = '{$extension}'");
         // Import tables for new installs
     } else {
         foreach ($manifest["components"]["tables"] as $table_name => $sql_statement) {
             sqlquery("DROP TABLE IF EXISTS `{$table_name}`");
             sqlquery($sql_statement);
         }
     }
     // Import module groups
     foreach ($manifest["components"]["module_groups"] as &$group) {
         if ($group) {
             $bigtree["group_match"][$group["id"]] = $this->createModuleGroup($group["name"]);
             // Update the group ID since we're going to save this manifest locally for uninstalling
             $group["id"] = $bigtree["group_match"][$group["id"]];
             sqlquery("UPDATE bigtree_module_groups SET extension = '{$extension}' WHERE id = '" . $group["id"] . "'");
         }
     }
     // Import modules
     foreach ($manifest["components"]["modules"] as &$module) {
         if ($module) {
             $group = $module["group"] && isset($bigtree["group_match"][$module["group"]]) ? $bigtree["group_match"][$module["group"]] : "NULL";
             $gbp = sqlescape(is_array($module["gbp"]) ? BigTree::json($module["gbp"]) : $module["gbp"]);
             // Find a unique route
             $oroute = $route = $module["route"];
             $x = 2;
             while (sqlrows(sqlquery("SELECT * FROM bigtree_modules WHERE route = '" . sqlescape($route) . "'"))) {
                 $route = $oroute . "-{$x}";
                 $x++;
             }
             // Create the module
             sqlquery("INSERT INTO bigtree_modules (`name`,`route`,`class`,`icon`,`group`,`gbp`,`extension`) VALUES ('" . sqlescape($module["name"]) . "','" . sqlescape($route) . "','" . sqlescape($module["class"]) . "','" . sqlescape($module["icon"]) . "',{$group},'{$gbp}','{$extension}')");
             $module_id = sqlid();
             $bigtree["module_match"][$module["id"]] = $module_id;
             $bigtree["route_match"][$module["route"]] = $route;
             // Update the module ID since we're going to save this manifest locally for uninstalling
             $module["id"] = $module_id;
             // Create the embed forms
             foreach ($module["embed_forms"] as $form) {
                 $this->createModuleEmbedForm($module_id, $form["title"], $form["table"], is_array($form["fields"]) ? $form["fields"] : json_decode($form["fields"], true), $form["hooks"], $form["default_position"], $form["default_pending"], $form["css"], $form["redirect_url"], $form["thank_you_message"]);
             }
             // Create views
             foreach ($module["views"] as $view) {
                 $bigtree["view_id_match"][$view["id"]] = $this->createModuleView($module_id, $view["title"], $view["description"], $view["table"], $view["type"], is_array($view["options"]) ? $view["options"] : json_decode($view["options"], true), is_array($view["fields"]) ? $view["fields"] : json_decode($view["fields"], true), is_array($view["actions"]) ? $view["actions"] : json_decode($view["actions"], true), $view["suffix"], $view["preview_url"]);
             }
             // Create regular forms
             foreach ($module["forms"] as $form) {
                 $bigtree["form_id_match"][$form["id"]] = $this->createModuleForm($module_id, $form["title"], $form["table"], is_array($form["fields"]) ? $form["fields"] : json_decode($form["fields"], true), $form["hooks"], $form["default_position"], $form["return_view"] ? $bigtree["view_id_match"][$form["return_view"]] : false, $form["return_url"], $form["tagging"]);
             }
             // Create reports
             foreach ($module["reports"] as $report) {
                 $bigtree["report_id_match"][$report["id"]] = $this->createModuleReport($module_id, $report["title"], $report["table"], $report["type"], is_array($report["filters"]) ? $report["filters"] : json_decode($report["filters"], true), is_array($report["fields"]) ? $report["fields"] : json_decode($report["fields"], true), $report["parser"], $report["view"] ? $bigtree["view_id_match"][$report["view"]] : false);
             }
             // Create actions
             foreach ($module["actions"] as $action) {
                 $this->createModuleAction($module_id, $action["name"], $action["route"], $action["in_nav"], $action["class"], $bigtree["form_id_match"][$action["form"]], $bigtree["view_id_match"][$action["view"]], $bigtree["report_id_match"][$action["report"]], $action["level"], $action["position"]);
             }
         }
     }
     // Import templates
     foreach ($manifest["components"]["templates"] as $template) {
         if ($template) {
             $resources = sqlescape(is_array($template["resources"]) ? BigTree::json($template["resources"]) : $template["resources"]);
             sqlquery("INSERT INTO bigtree_templates (`id`,`name`,`module`,`resources`,`level`,`routed`,`extension`) VALUES ('" . sqlescape($template["id"]) . "','" . sqlescape($template["name"]) . "','" . $bigtree["module_match"][$template["module"]] . "','{$resources}','" . sqlescape($template["level"]) . "','" . sqlescape($template["routed"]) . "','{$extension}')");
         }
     }
     // Import callouts
     foreach ($manifest["components"]["callouts"] as $callout) {
         if ($callout) {
             $resources = sqlescape(is_array($callout["resources"]) ? BigTree::json($callout["resources"]) : $callout["resources"]);
             sqlquery("INSERT INTO bigtree_callouts (`id`,`name`,`description`,`display_default`,`display_field`,`resources`,`level`,`position`,`extension`) VALUES ('" . sqlescape($callout["id"]) . "','" . sqlescape($callout["name"]) . "','" . sqlescape($callout["description"]) . "','" . sqlescape($callout["display_default"]) . "','" . sqlescape($callout["display_field"]) . "','{$resources}','" . sqlescape($callout["level"]) . "','" . sqlescape($callout["position"]) . "','{$extension}')");
         }
     }
     // Import Settings
     foreach ($manifest["components"]["settings"] as $setting) {
         if ($setting) {
             $this->createSetting($setting);
             sqlquery("UPDATE bigtree_settings SET extension = '{$extension}' WHERE id = '" . sqlescape($setting["id"]) . "'");
         }
     }
     // Import Feeds
     foreach ($manifest["components"]["feeds"] as $feed) {
         if ($feed) {
             $fields = sqlescape(is_array($feed["fields"]) ? BigTree::json($feed["fields"]) : $feed["fields"]);
             $options = sqlescape(is_array($feed["options"]) ? BigTree::json($feed["options"]) : $feed["options"]);
             sqlquery("INSERT INTO bigtree_feeds (`route`,`name`,`description`,`type`,`table`,`fields`,`options`,`extension`) VALUES ('" . sqlescape($feed["route"]) . "','" . sqlescape($feed["name"]) . "','" . sqlescape($feed["description"]) . "','" . sqlescape($feed["type"]) . "','" . sqlescape($feed["table"]) . "','{$fields}','{$options}','{$extension}')");
         }
     }
     // Import Field Types
     foreach ($manifest["components"]["field_types"] as $type) {
         if ($type) {
             $self_draw = $type["self_draw"] ? "'on'" : "NULL";
             $use_cases = sqlescape(is_array($type["use_cases"]) ? json_encode($type["use_cases"]) : $type["use_cases"]);
             sqlquery("INSERT INTO bigtree_field_types (`id`,`name`,`use_cases`,`self_draw`,`extension`) VALUES ('" . sqlescape($type["id"]) . "','" . sqlescape($type["name"]) . "','{$use_cases}',{$self_draw},'{$extension}')");
         }
     }
     // Upgrades don't drop tables, we run the SQL revisions instead
     if (is_array($upgrade)) {
         $old_revision = $upgrade["revision"];
         $sql_revisions = $manifest["sql_revisions"];
         // Go through all the SQL updates, we ksort first to ensure if the manifest somehow got out of order that we run the SQL update sequentially
         ksort($sql_revisions);
         foreach ($sql_revisions as $key => $statements) {
             if ($key > $old_revision) {
                 foreach ($statements as $sql_statement) {
                     sqlquery($sql_statement);
                 }
             }
         }
         // Update the extension
         sqlquery("UPDATE bigtree_extensions SET name = '" . sqlescape($manifest["title"]) . "', version = '" . sqlescape($manifest["version"]) . "', last_updated = NOW(), manifest = '" . BigTree::json($manifest, true) . "' WHERE id = '" . sqlescape($manifest["id"]) . "'");
         // Straight installs move files into place locally
     } else {
         // Make sure destination doesn't exist
         $destination_path = SERVER_ROOT . "extensions/" . $manifest["id"] . "/";
         BigTree::deleteDirectory($destination_path);
         // Move the package to the extension directory
         rename(SERVER_ROOT . "cache/package/", $destination_path);
         BigTree::setDirectoryPermissions($destination_path);
         // Create the extension
         sqlquery("INSERT INTO bigtree_extensions (`id`,`type`,`name`,`version`,`last_updated`,`manifest`) VALUES ('" . sqlescape($manifest["id"]) . "','extension','" . sqlescape($manifest["title"]) . "','" . sqlescape($manifest["version"]) . "',NOW(),'" . BigTree::json($manifest, true) . "')");
     }
     // Re-enable foreign key checks
     sqlquery("SET foreign_key_checks = 1");
     // Empty view cache
     sqlquery("DELETE FROM bigtree_module_view_cache");
     // Move public files into the site directory
     $public_dir = SERVER_ROOT . "extensions/" . $manifest["id"] . "/public/";
     $site_contents = file_exists($public_dir) ? BigTree::directoryContents($public_dir) : array();
     foreach ($site_contents as $file_path) {
         $destination_path = str_replace($public_dir, SITE_ROOT . "extensions/" . $manifest["id"] . "/", $file_path);
         BigTree::copyFile($file_path, $destination_path);
     }
     // Clear module class cache and field type cache.
     @unlink(SERVER_ROOT . "cache/bigtree-module-class-list.json");
     @unlink(SERVER_ROOT . "cache/bigtree-form-field-types.json");
     return $manifest;
 }
Exemplo n.º 5
0
            $package["sql_revisions"][$revision][] = $create_statement;
        }
    }
    // Clean up the revisions (if we don't have any)
    $package["sql_revisions"] = array_filter($package["sql_revisions"]);
}
// Write the manifest file
$json = BigTree::json($package);
BigTree::putFile(SERVER_ROOT . "extensions/{$id}/manifest.json", $json);
// Create the zip, clear caches since we may have moved the routes of field types and modules
@unlink(SERVER_ROOT . "cache/package.zip");
@unlink(SERVER_ROOT . "cache/bigtree-form-field-types.json");
@unlink(SERVER_ROOT . "cache/bigtree-module-class-list.json");
include BigTree::path("inc/lib/pclzip.php");
$zip = new PclZip(SERVER_ROOT . "cache/package.zip");
$zip->create(BigTree::directoryContents(SERVER_ROOT . "extensions/{$id}/"), PCLZIP_OPT_REMOVE_PATH, SERVER_ROOT . "extensions/{$id}/");
// Store it in the database for future updates -- existing packages might be replaced
if (sqlrows(sqlquery("SELECT id FROM bigtree_extensions WHERE id = '" . sqlescape($id) . "'"))) {
    sqlquery("UPDATE bigtree_extensions SET type = 'extension', name = '" . sqlescape($title) . "', version = '" . sqlescape($version) . "', last_updated = NOW(), manifest = '" . sqlescape($json) . "' WHERE id = '" . sqlescape($id) . "'");
} else {
    sqlquery("INSERT INTO bigtree_extensions (`id`,`type`,`name`,`version`,`last_updated`,`manifest`) VALUES ('" . sqlescape($id) . "','extension','" . sqlescape($title) . "','" . sqlescape($version) . "',NOW(),'" . sqlescape($json) . "')");
}
// Turn foreign key checks back on
sqlquery("SET foreign_key_checks = 1");
?>
<div class="container">
	<section>
		<p>Extension created successfully.</p>
	</section>
	<footer>
		<a href="<?php 
Exemplo n.º 6
0
// Files for field types -- we use the $p version here because we may have added some when checking the module
foreach ((array) $p["field_types"] as $type) {
    if ($type) {
        if (file_exists(SERVER_ROOT . "custom/admin/form-field-types/draw/{$type}.php")) {
            $p["files"][] = SERVER_ROOT . "custom/admin/form-field-types/draw/{$type}.php";
        }
        if (file_exists(SERVER_ROOT . "custom/admin/form-field-types/process/{$type}.php")) {
            $p["files"][] = SERVER_ROOT . "custom/admin/form-field-types/process/{$type}.php";
        }
        if (file_exists(SERVER_ROOT . "custom/admin/ajax/developer/field-options/{$type}.php")) {
            $p["files"][] = SERVER_ROOT . "custom/admin/ajax/developer/field-options/{$type}.php";
        }
    }
}
// Add all the files in the extension directories
$contents = array_merge((array) BigTree::directoryContents(SITE_ROOT . "extensions/" . $p["id"] . "/"), (array) BigTree::directoryContents(SERVER_ROOT . "extensions/" . $p["id"] . "/"));
foreach ($contents as $file) {
    if (!is_dir($file) && file_exists($file)) {
        $p["files"][] = $file;
    }
}
// Make sure we have no dupes
$p["module_groups"] = array_unique($p["module_groups"]);
$p["modules"] = array_unique($p["modules"]);
$p["templates"] = array_unique($p["templates"]);
$p["callouts"] = array_unique($p["callouts"]);
$p["settings"] = array_unique($p["settings"]);
$p["feeds"] = array_unique($p["feeds"]);
$p["field_types"] = array_unique($p["field_types"]);
$p["files"] = array_unique($p["files"]);
$p["tables"] = array_unique($p["tables"]);
Exemplo n.º 7
0
    $package["components"]["tables"][] = $table;
}
$package["sql"][] = "SET foreign_key_checks = 1";
foreach ((array) $files as $file) {
    $file = str_replace(SERVER_ROOT, "", $file);
    BigTree::copyFile(SERVER_ROOT . $file, SERVER_ROOT . "cache/package/" . $file);
    $package["files"][] = $file;
}
// Write the manifest file
$json = BigTree::json($package);
BigTree::putFile(SERVER_ROOT . "cache/package/manifest.json", $json);
// Create the zip
@unlink(SERVER_ROOT . "cache/package.zip");
include BigTree::path("inc/lib/pclzip.php");
$zip = new PclZip(SERVER_ROOT . "cache/package.zip");
$zip->create(BigTree::directoryContents(SERVER_ROOT . "cache/package/"), PCLZIP_OPT_REMOVE_PATH, SERVER_ROOT . "cache/package/");
// Remove the package directory
BigTree::deleteDirectory(SERVER_ROOT . "cache/package/");
// Store it in the database for future updates
if (sqlrows(sqlquery("SELECT * FROM bigtree_extensions WHERE id = '" . sqlescape($id) . "'"))) {
    sqlquery("UPDATE bigtree_extensions SET name = '" . sqlescape($title) . "', version = '" . sqlescape($version) . "', last_updated = NOW(), manifest = '" . sqlescape($json) . "' WHERE id = '" . sqlescape($id) . "'");
} else {
    sqlquery("INSERT INTO bigtree_extensions (`id`,`type`,`name`,`version`,`last_updated`,`manifest`) VALUES ('" . sqlescape($id) . "','package','" . sqlescape($title) . "','" . sqlescape($version) . "',NOW(),'" . sqlescape($json) . "')");
}
?>
<div class="container">
	<section>
		<p>Package created successfully.</p>
	</section>
	<footer>
		<a href="<?php 
Exemplo n.º 8
0
 static function directoryContents($directory, $recurse = true, $extension = false)
 {
     $contents = array();
     $d = @opendir($directory);
     if (!$d) {
         return false;
     }
     while ($r = readdir($d)) {
         if ($r != "." && $r != ".." && $r != ".DS_Store") {
             $path = rtrim($directory, "/") . "/" . $r;
             if ($extension === false || substr($path, -1 * strlen($extension)) == $extension) {
                 $contents[] = $path;
             }
             if (is_dir($path) && $recurse) {
                 $contents = array_merge($contents, BigTree::directoryContents($path, $recurse, $extension));
             }
         }
     }
     return $contents;
 }
Exemplo n.º 9
0
			<input type="submit" class="button blue" value="Set FTP Directory" />
		</footer>
	</div>
</form>
<?php 
        } else {
            $ftp_root = "/" . trim($ftp_root, "/") . "/";
            // Create backups folder
            $ftp->createDirectory($ftp_root . "backups/");
            // Move old core
            $ftp->rename($ftp_root . "core/", $ftp_root . "backups/core-" . BIGTREE_VERSION . "/");
            // Backup database
            $admin->backupDatabase(SERVER_ROOT . "cache/backup.sql");
            $ftp->rename($ftp_root . "cache/backup.sql", $ftp_root . "backups/core-" . BIGTREE_VERSION . "/backup.sql");
            // Move new core into place
            $ftp->rename($ftp_root . "cache/update/core/", $ftp_root . "core/");
            // Delete old files
            $contents = array_reverse(BigTree::directoryContents(SERVER_ROOT . "cache/update/"));
            foreach ($contents as $file) {
                if (is_dir($file)) {
                    rmdir($file);
                } else {
                    unlink($file);
                }
            }
            rmdir(SERVER_ROOT . "cache/update/");
            unlink(SERVER_ROOT . "cache/update.zip");
            BigTree::redirect(DEVELOPER_ROOT . "upgrade/database/");
        }
    }
}
Exemplo n.º 10
0
 function extract()
 {
     include_once SERVER_ROOT . "core/inc/lib/pclzip.php";
     $zip = new PclZip(SERVER_ROOT . "cache/update.zip");
     // If the temporary update directory doesn't exist, create it
     BigTree::makeDirectory(SERVER_ROOT . "cache/update/");
     // Figure out if we have just a single directory at the root
     $zip_root = $this->zipRoot($zip);
     if ($zip_root) {
         $zip->extract(PCLZIP_OPT_PATH, SERVER_ROOT . "cache/update/", PCLZIP_OPT_REMOVE_PATH, $zip_root);
     } else {
         $zip->extract(PCLZIP_OPT_PATH, SERVER_ROOT . "cache/update/");
     }
     // Error occurred extracting? Return false
     if ($zip->errorName() != "PCLZIP_ERR_NO_ERROR") {
         return false;
     }
     // Make sure everything extracted is 777 -- if we're writing as Apache we want bust permissions for the user.
     $contents = BigTree::directoryContents(SERVER_ROOT . "cache/update/");
     foreach ($contents as $file) {
         chmod($file, 0777);
     }
     return true;
 }
Exemplo n.º 11
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";