Пример #1
0
<?php

//!BigTree Warnings
$warnings = array();
$writable_directories = array("cache/", "custom/inc/modules/", "custom/admin/ajax/developer/field-options/", "custom/admin/form-field-types/draw/", "custom/admin/form-field-types/process/", "templates/routed/", "templates/basic/", "templates/callouts/", "site/files/");
foreach ($writable_directories as $directory) {
    if (!BigTree::isDirectoryWritable(SERVER_ROOT . $directory)) {
        $warnings[] = array("parameter" => "Directory Permissions Error", "rec" => "Make " . SERVER_ROOT . $directory . " writable.", "status" => "bad");
    }
}
// Go through every module form and look for uploads, make sure the directories exist and are writable.
$forms = array_merge($admin->getModuleForms(), $admin->getModuleEmbedForms());
foreach ($forms as $form) {
    foreach (array_filter((array) $form["fields"]) as $key => $data) {
        if ($data["directory"]) {
            if (!BigTree::isDirectoryWritable(SITE_ROOT . $data["directory"])) {
                $warnings[] = array("parameter" => "Directory Permissions Error", "rec" => "Make " . SITE_ROOT . $data["directory"] . " writable.", "status" => "bad");
            }
        }
    }
}
// Search all content for links to the admin.
$bad = $admin->getPageAdminLinks();
foreach ($bad as $f) {
    $warnings[] = array("parameter" => "Bad Admin Links", "rec" => 'Remove links to Admin on <a href="' . ADMIN_ROOT . 'pages/edit/' . $f["id"] . '/">' . $f["nav_title"] . '</a>', "status" => "ok");
}
if (!file_exists(SITE_ROOT . "favicon.ico")) {
    $warnings[] = array("parameter" => "Missing Favicon", "rec" => "Create a favicon and place it in the /site/ root.", "status" => "ok");
}
//!Server Parameters
$mysql = extension_loaded('mysql') || extension_loaded("mysqli") ? "good" : "bad";
Пример #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();
}
@mkdir(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
 static function backupDatabase($file)
 {
     if (!BigTree::isDirectoryWritable($file)) {
         return false;
     }
     $pointer = fopen($file, "w");
     fwrite($pointer, "SET SESSION sql_mode = 'NO_AUTO_VALUE_ON_ZERO';\n");
     fwrite($pointer, "SET foreign_key_checks = 0;\n\n");
     // We need to dump the bigtree tables in the proper order or they will not properly be recreated with the right foreign keys
     $q = sqlquery("SHOW TABLES");
     while ($f = sqlfetch($q)) {
         $table = current($f);
         // Write the drop / create statements
         fwrite($pointer, "DROP TABLE IF EXISTS `{$table}`;\n");
         $definition = sqlfetch(sqlquery("SHOW CREATE TABLE `{$table}`"));
         fwrite($pointer, str_replace(array("\n  ", "\n"), "", end($definition)) . ";\n");
         // Get all the table contents, write them out
         $rows = BigTree::tableContents($table);
         foreach ($rows as $row) {
             fwrite($pointer, $row . ";\n");
         }
         // Separate it from the next table
         fwrite($pointer, "\n");
     }
     fwrite($pointer, "\nSET foreign_key_checks = 1;");
     fclose($pointer);
     return true;
 }
Пример #4
0
<?php

// First we need to package the file so they can download it manually if they wish.
if (!is_writable(SERVER_ROOT . "cache/") || !BigTree::isDirectoryWritable(SERVER_ROOT . "extensions/{$id}/")) {
    ?>
<div class="container">
	<section>
		<h3>Error</h3>
		<p>Your /cache/ and /extensions/<?php 
    echo $id;
    ?>
/ directories must be writable.</p>
	</section>
</div>
<?php 
    $admin->stop();
}
// Fix keywords into an array
$keywords = explode(",", $keywords);
foreach ($keywords as &$word) {
    $word = trim($word);
}
// 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) {
Пример #5
0
 function backupDatabase($file)
 {
     if (!BigTree::isDirectoryWritable($file)) {
         return false;
     }
     $pointer = fopen($file, "w");
     fwrite($pointer, "SET SESSION sql_mode = 'NO_AUTO_VALUE_ON_ZERO';\n");
     fwrite($pointer, "SET foreign_key_checks = 0;\n\n");
     // We need to dump the bigtree tables in the proper order or they will not properly be recreated with the right foreign keys
     $tables = array();
     $q = sqlquery("SHOW TABLES");
     while ($f = sqlfetch($q)) {
         $table = current($f);
         fwrite($pointer, "DROP TABLE IF EXISTS `{$table}`;\n");
         $definition = sqlfetch(sqlquery("SHOW CREATE TABLE `{$table}`"));
         fwrite($pointer, str_replace(array("\n  ", "\n"), "", end($definition)) . ";\n");
         // Need to figure out which columns are binary so that we can request them as hex
         $description = BigTree::describeTable($table);
         $column_query = array();
         $binary_columns = array();
         foreach ($description["columns"] as $key => $column) {
             if ($column["type"] == "tinyblob" || $column["type"] == "blob" || $column["type"] == "mediumblob" || $column["type"] == "longblob" || $column["type"] == "binary" || $column["type"] == "varbinary") {
                 $column_query[] = "HEX(`{$key}`) AS `{$key}`";
                 $binary_columns[] = $key;
             } else {
                 $column_query[] = "`{$key}`";
             }
         }
         $qq = sqlquery("SELECT " . implode(", ", $column_query) . " FROM `{$table}`");
         while ($ff = sqlfetch($qq)) {
             $keys = array();
             $vals = array();
             foreach ($ff as $key => $val) {
                 $keys[] = "`{$key}`";
                 if ($val === null) {
                     $vals[] = "NULL";
                 } else {
                     if (in_array($key, $binary_columns)) {
                         $vals[] = "X'" . sqlescape(str_replace("\n", "\\n", $val)) . "'";
                     } else {
                         $vals[] = "'" . sqlescape(str_replace("\n", "\\n", $val)) . "'";
                     }
                 }
             }
             fwrite($pointer, "INSERT INTO `{$table}` (" . implode(",", $keys) . ") VALUES (" . implode(",", $vals) . ");\n");
         }
         fwrite($pointer, "\n");
     }
     fwrite($pointer, "\nSET foreign_key_checks = 1;");
     fclose($pointer);
     return true;
 }
Пример #6
0
        $warnings[] = "A field type already exists with the id &ldquo;" . $type["id"] . "&rdquo; &mdash; the field type will be overwritten.";
    }
}
// Check for table collisions
foreach ((array) $json["sql"] as $command) {
    if (substr($command, 0, 14) == "CREATE TABLE `") {
        $table = substr($command, 14);
        $table = substr($table, 0, strpos($table, "`"));
        if (sqlrows(sqlquery("SHOW TABLES LIKE '{$table}'"))) {
            $warnings[] = "A table named &ldquo;{$table}&rdquo; already exists &mdash; the table will be overwritten.";
        }
    }
}
// Check file permissions and collisions
foreach ((array) $json["files"] as $file) {
    if (!BigTree::isDirectoryWritable(SERVER_ROOT . $file)) {
        $errors[] = "Cannot write to {$file} &mdash; please make the root directory or file writable.";
    } elseif (file_exists(SERVER_ROOT . $file)) {
        if (!is_writable(SERVER_ROOT . $file)) {
            $errors[] = "Cannot overwrite existing file: {$file} &mdash; please make the file writable or delete it.";
        } else {
            $warnings[] = "A file already exists at {$file} &mdash; the file will be overwritten.";
        }
    }
}
?>
<div class="container">
	<summary>
		<h2>
			<?php 
echo $json["title"];
Пример #7
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;
     }
 }
Пример #8
0
foreach ($writable_directories as $directory) {
    if (!BigTree::isDirectoryWritable(SERVER_ROOT . $directory)) {
        $warnings[] = array("parameter" => "Directory Permissions Error", "rec" => "Make " . SERVER_ROOT . $directory . " writable.", "status" => "bad");
    }
}
// Setup a recursive function to loop through fields
$directory_warnings = array();
$recurse_fields = function ($fields) {
    global $directory_warnings, $recurse_fields, $warnings;
    foreach (array_filter((array) $fields) as $key => $data) {
        $options = is_string($data["options"]) ? array_filter((array) json_decode($data["options"], true)) : $data["options"];
        if ($data["type"] == "matrix") {
            $recurse_fields($options["columns"]);
        } else {
            if ($options["directory"]) {
                if (!BigTree::isDirectoryWritable(SITE_ROOT . $options["directory"]) && !in_array($options["directory"], $directory_warnings)) {
                    $directory_warnings[] = $options["directory"];
                    $warnings[] = array("parameter" => "Directory Permissions Error", "rec" => "Make " . SITE_ROOT . $options["directory"] . " writable.", "status" => "bad");
                }
            }
        }
    }
};
// Go through every module form and look for uploads, make sure the directories exist and are writable.
$forms = array_merge($admin->getModuleForms(), $admin->getModuleEmbedForms());
foreach ($forms as $form) {
    $recurse_fields($form["fields"]);
}
// Now templates and callouts
$templates = array_merge($admin->getTemplates(), $admin->getCallouts());
foreach ($templates as $template) {