summaryrefslogtreecommitdiffstats
path: root/app/class/globals.php
diff options
context:
space:
mode:
authorMalf Furious <m@lfurio.us>2018-10-27 18:28:22 -0400
committerMalf Furious <m@lfurio.us>2018-10-27 18:28:22 -0400
commit0421aa1b60f4fe6bf140888159c58059c1013588 (patch)
treec3285276f6c53b6789e2f6dc82cb3b0fd17b38a4 /app/class/globals.php
parent495157341d60522084dcc9f6219877b6ba497312 (diff)
parent6512655aee73d3d295daa4de0e4ef25c08cfec9e (diff)
downloadscrott-0.1.tar.gz
scrott-0.1.zip
Merge branch 'rel/v0.1'v0.1
Diffstat (limited to 'app/class/globals.php')
-rw-r--r--app/class/globals.php255
1 files changed, 255 insertions, 0 deletions
diff --git a/app/class/globals.php b/app/class/globals.php
new file mode 100644
index 0000000..74635d7
--- /dev/null
+++ b/app/class/globals.php
@@ -0,0 +1,255 @@
+<?php
+
+/*
+ * SCROTT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * For more information, please refer to UNLICENSE
+ */
+
+require_once "class/obj.class.php";
+
+/*
+ * This file defines various functions which exist in the global namespace.
+ * These are utility functions and constants for the Scrott application.
+ */
+
+define("__VERSION__", "v0.1");
+
+/*
+ * These global variables are arrays of strings logged by Scrott business
+ * logic to report errors, warnings, or informational responses to the
+ * user in cases where an exception doesn't need to be thrown.
+ */
+define("ERROR", "ERROR_LIST");
+define("WARNING", "WARNING_LIST");
+define("NOTICE", "NOTICE_LIST");
+
+$_SCROTT[ERROR] = array();
+$_SCROTT[WARNING] = array();
+$_SCROTT[NOTICE] = array();
+
+/*
+ * The page object is the object our current request is primarily
+ * interested in. For example, when navigating to a pad web page by
+ * its guid, that pad is the page object. When viewing the dashboard,
+ * the current logged-in user is the page object.
+ */
+$_SCROTT['PAGE_OBJECT'] = NULL;
+
+/*
+ * The page name variable is what displays in the pad select dropdown and
+ * is typically set to the "group / pad" of the current page or, "Dashboard",
+ * "Groups", "Pads", etc. on special pages.
+ */
+$_SCROTT['PAGE_NAME'] = "";
+
+/*
+ * Get the application root path. This is an absolute path on the server.
+ */
+function ar() : string
+{
+ return substr($_SERVER['SCRIPT_NAME'], 0, -10); // 10 = strlen of "/index.php"
+}
+
+/*
+ * Get the current page's path. This is an absolute path on the server.
+ */
+function ap() : string
+{
+ return ar() . $_SERVER['PATH_INFO'];
+}
+
+/*
+ * Redirect to the given URL and die.
+ */
+function redirect(string $url) : void
+{
+ header("Location: " . $url);
+ exit;
+}
+
+/*
+ * Redirect to the given in-app URL and die. The given URL should be a path
+ * relative to the app root. No argument reloads the current path.
+ */
+function location(?string $path = NULL) : void
+{
+ if ($path)
+ redirect(ar() . $path);
+ else
+ redirect(ap());
+}
+
+/*
+ * Assert that the current connection to the server is over HTTPS. Redirect
+ * if not.
+ */
+function require_https() : void
+{
+ if (!isset($_SERVER['HTTPS']))
+ redirect("https://" . $_SERVER['SERVER_NAME'] . ap());
+}
+
+/*
+ * Check whether an action string was submitted by the user agent
+ */
+function isAction(string $action) : bool
+{
+ if (!isset($_REQUEST['action']))
+ return false;
+
+ return $_REQUEST['action'] == $action;
+}
+
+/*
+ * Get an array of submitted form input
+ */
+function input() : array
+{
+ if (!isset($_REQUEST['input']))
+ throw new Exception("Requested form input, but no input data was supplied");
+
+ return $_REQUEST['input'];
+}
+
+/*
+ * Check for errors, warnings, or notices
+ */
+function isError(string $level) : bool
+{
+ global $_SCROTT;
+ return count($_SCROTT[$level]) > 0;
+}
+
+/*
+ * Log an error, warning, or notice
+ */
+function logError(string $level, string $error) : void
+{
+ global $_SCROTT;
+ $_SCROTT[$level][] = $error;
+}
+
+/*
+ * Get an array of all errors, warnings, or notices
+ */
+function getErrors(string $level) : array
+{
+ global $_SCROTT;
+ return $_SCROTT[$level];
+}
+
+/*
+ * Set the page object for the current request.
+ */
+function setPageObj(obj $obj) : void
+{
+ global $_SCROTT;
+ $_SCROTT['PAGE_OBJECT'] = $obj;
+}
+
+/*
+ * Get the page object for the current request.
+ */
+function getPageObj() : ?obj
+{
+ global $_SCROTT;
+ return $_SCROTT['PAGE_OBJECT'];
+}
+
+/*
+ * Set the page name string.
+ */
+function setPageName(string $name) : void
+{
+ global $_SCROTT;
+ $_SCROTT['PAGE_NAME'] = $name;
+}
+
+/*
+ * Get the page name string.
+ */
+function getPageName() : string
+{
+ global $_SCROTT;
+ return $_SCROTT['PAGE_NAME'];
+}
+
+/*
+ * Produce a string, but only once. This function is useful
+ * when dealing with some variable collection of markup and
+ * you want to affect only the first one with a modifier.
+ * $state should be initialized to false prior to first call.
+ */
+function oneStr(string $str, bool &$state) : string
+{
+ if ($state)
+ return "";
+
+ $state = true;
+ return $str;
+}
+
+/*
+ * Save an uploaded file and impose some constraints on supplied
+ * data. Caller can optionally pass some strings by reference to
+ * be given the supplied file's original name and mime-type.
+ * Maxsize is in bytes. If this function returns false, the
+ * appropriate error will be logged.
+ */
+function saveFile(array $file, string $path, int $maxsize, ?array $allowedMime = NULL,
+ ?string &$origName = NULL, ?string &$origMime = NULL) : bool
+{
+ if ($file['error'] > 0)
+ {
+ if ($file['error'] != UPLOAD_ERR_NO_FILE)
+ logError(ERROR, "An unknown error occurred");
+
+ return false;
+ }
+
+ if ($file['size'] > $maxsize)
+ {
+ logError(ERROR, "File must be no larger than " . $maxsize . " bytes");
+ return false;
+ }
+
+ if (is_array($allowedMime) && array_search($file['type'], $allowedMime) === false)
+ {
+ logError(ERROR, "File type is not supported");
+ return false;
+ }
+
+ if (!move_uploaded_file($file['tmp_name'], $path))
+ {
+ logError(ERROR, "Error saving uploaded file");
+ return false;
+ }
+
+ $origName = $file['name'];
+ $origMime = $file['type'];
+ return true;
+}
+
+/*
+ * Similar to saveFile, but takes the uploaded file field name,
+ * rather than the array directly. The file is looked up in
+ * $_FILES. If it does not exist, an exception is thrown.
+ */
+function saveIfFile(string $file, string $path, int $maxsize, ?array $allowedMime = NULL,
+ ?string &$origName = NULL, ?string &$origMime = NULL) : bool
+{
+ if (!isset($_FILES[$file]))
+ throw new Exception("Requested file upload, but no data was supplied");
+
+ $f = $_FILES[$file];
+ return saveFile($f, $path, $maxsize, $allowedMime, $origName, $origMime);
+}
+
+?>