From: Chuck Scott Date: Mon, 21 Sep 2015 00:26:14 +0000 (-0400) Subject: Changed settings menu to management menu and added capability "Management" X-Git-Tag: v1.0.8^2~1 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=bc2c7357236442453f9f777cb2f21fa355243206;p=WP-Plugins%2Fglm-member-db.git Changed settings menu to management menu and added capability "Management" --- diff --git a/activate.php b/activate.php index 7897ed62..dceebd5a 100644 --- a/activate.php +++ b/activate.php @@ -128,6 +128,15 @@ class glmMembersPluginActivate extends glmPluginSupport 'subscriber' => false ) ); + $this->addRoleCapability('glm_members_management', + array( + 'administrator' => true, + 'author' => false, + 'contributor' => false, + 'editor' => false, + 'subscriber' => false + ) + ); // Set current plugin version update_option('glmMembersDatabasePluginVersion', GLM_MEMBERS_PLUGIN_VERSION); diff --git a/controllers/admin.php b/controllers/admin.php index 969c6f70..38366f1f 100644 --- a/controllers/admin.php +++ b/controllers/admin.php @@ -55,7 +55,7 @@ $GLOBALS['glmMembersAdminValidActions'] = array( 'accommodationTypes', 'amenities', ), - 'settings' => array( + 'management' => array( 'index', // General Options 'terms', // Terms and Phrases 'development', @@ -418,13 +418,13 @@ class glmMembersAdmin extends GlmPluginSupport 'glmMembersAdminMenuConfigure' )); - // Add a submenu for the "Settings" section + // Add a submenu for the "Management" section add_submenu_page('glm-members-admin-menu-members', - 'Member DB Settings', 'Settings', - 'glm_members_settings', 'glm-members-admin-menu-settings', + 'Member DB Management', 'Management', + 'glm_members_management', 'glm-members-admin-menu-management', array( $this, - 'glmMembersAdminMenuSettings' + 'glmMembersAdminMenuManagement' )); // Add a submenu for the "Shortcode Reference" section @@ -517,9 +517,9 @@ class glmMembersAdmin extends GlmPluginSupport $this->controller('configure'); } - public function glmMembersAdminMenuSettings () + public function glmMembersAdminMenuManagement () { - $this->controller('settings'); + $this->controller('management'); } public function glmMembersAdminMenuShortcodes () diff --git a/models/admin/management/development.php b/models/admin/management/development.php new file mode 100644 index 00000000..ee2b9bb1 --- /dev/null +++ b/models/admin/management/development.php @@ -0,0 +1,345 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +/* + * This class performs the work for the default action of the "Members" menu + * option, which is to display the members dashboard. + * + */ +class GlmMembersAdmin_management_development +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + /* + * Constructor + * + * This contructor sets up this model. At this time that only includes + * storing away the WordPress data object. + * + * @return object Class object + * + */ + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + } + + /* + * Perform Model Action + * + * This method does the work for this model and returns any resulting data + * + * @return array Status and data array + * + * 'status' + * + * True if successfull and false if there was a fatal failure. + * + * 'menuItemRedirect' + * + * If not false, provides a menu item the controller should + * execute after this one. Normally if this is used, there would also be a + * modelRedirect value supplied as well. + * + * 'modelRedirect' + * + * If not false, provides an action the controller should execute after + * this one. + * + * 'view' + * + * A suggested view name that the contoller should use instead of the + * default view for this model or false to indicate that the default view + * should be used. + * + * 'data' + * + * Data that the model is returning for use in merging with the view to + * produce output. + * + */ + public function modelAction ($actionData = false) + { + + // Get current database version + $dbVersion = GLM_MEMBERS_PLUGIN_DB_VERSION; + settype($dbVersion, 'string'); + + $templateData['resultMessage'] = ''; + $templateData['success'] = false; + $templateData['haveNotices'] = false; + $notices = array(); + $templateData['haveMembers'] = false; + $templateData['import'] = false; + $templateData['importNotice'] = false; + $templateData['haveDatabaseTableList'] = false; + + // Load database activation class to get access to database version information + require_once (GLM_MEMBERS_PLUGIN_PATH . '/activate.php'); + $activate = new glmMembersPluginActivate($this->wpdb, $this->config, true); + + $option = ''; + if (isset($_REQUEST['option']) && $_REQUEST['option'] != '') { + $option = $_REQUEST['option']; + } + + switch($option) { + + case 'import_connections': + + // Load Member Info Data Class and get info data for later use + require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/glmMemberImportFromConnections.php'); + $Connections = new GlmMemberImportFromConnections($this->wpdb, $this->config); + + if (isset($_REQUEST['import']) && $_REQUEST['import'] == 'now') { + + // Reset the database + if (!$this->deleteDataTables($dbVersion)) { + glmMembersAdmin::addNotice('Unable to delete the database tables while resetting the database.
', 'AdminError'); + break; + } + if (!$this->createDataTables($dbVersion)) { + glmMembersAdmin::addNotice('Unable to create the database tables while resetting the database.
', 'AdminError'); + break; + } + glmMembersAdmin::addNotice('Database tables have been reset in preparation importing members.
', 'AdminNotice'); + + // Delete Images + foreach( new RecursiveIteratorIterator( + new RecursiveDirectoryIterator( GLM_MEMBERS_PLUGIN_IMAGES_PATH, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ), + RecursiveIteratorIterator::CHILD_FIRST ) as $value ) { + if ($value->isFile()) { + unlink( $value ); + } + } + + $templateData['import'] = true; + $templateData['membersImported'] = $Connections->doImport(); + + } else { + + // Check if Connections is not installed or not active. If active, gets count of entries. + $c = $Connections->checkConnections(); + if ($c === false) { + glmMembersAdmin::addNotice('Connections Business Directory plugin is not installed or not active!
'.print_r($c,1), 'AdminError'); + break; + } + $templateData['numbEntries'] = $c; + $importNotice = 'Connections Business Directory plugin is active.
Number of businesses listed: '.$c.'
'; + + // Get the basic business data for review. + $templateData['members'] = $Connections->getList(); + if ($templateData['members'] === false) { + $importNotice = 'No businesses were retieved.'; + break; + } + + $templateData['haveMembers'] = true; + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice($templateData['members'], 'DataBlock', 'Base Members Data'); + } + + } + + break; + + case 'drop': + case 'reset': + + $del = $this->deleteDataTables($dbVersion); + + if ($del) { + glmMembersAdmin::addNotice('New database tables for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been deleted.', 'AdminNotice'); + + } + + if ($option != 'reset') { + break; + } + + case 'create': + + $create = $this->createDataTables($dbVersion); + + // If there were no errors + if ($create) { + + // Notify the user that the database has been installed + glmMembersAdmin::addNotice('New database tables installed for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin.', 'AdminNotice'); + + // Save the version of the installed database + update_option('glmMembersDatabaseDbVersion', $dbVersion); + + } + + break; + + case 'list': + + // Check if the database version set for this plugin is invalid. + if (!isset($activate->dbVersions[$dbVersion])) { + $templateData['resultMessage'] .= "The last database version set for the ".GLM_MEMBERS_PLUGIN_NAME." (V$dbVersion) isn't valid.
"; + break; + } + + // Get the number of tables for this plugin database version that should exist. + $tables = $activate->dbVersions[$dbVersion]['tables']; + + // Get the number of tables for this plugin that do currently exist. + $existingTables = $this->wpdb->get_results(" + SELECT table_name + FROM information_schema.tables + WHERE table_name like '".GLM_MEMBERS_PLUGIN_DB_PREFIX."%'; + ", ARRAY_A); + + if (is_array($existingTables)) { + + + + + $templateData['resultMessage'] .= 'Current database tables
'; + } else { + $templateData['resultMessage'] .= 'No tables currently exist
'; + } + + break; + + default: + + break; + + } + + // Return status, suggested view, and data to controller + return array( + 'status' => true, + 'menuItemRedirect' => false, + 'modelRedirect' => false, + 'view' => 'admin/management/development.html', + 'data' => $templateData + ); + + } + + /* + * Delete Members Database Tables + * + * @param string $dbVersion Current version of Members Database + * + * @return boolean + * @access public + */ + public function deleteDataTables($dbVersion) + { + + // Read in Database deletion script - assumes the current db version. + $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/drop_database_V'.$dbVersion.'.sql'; + $sql = file_get_contents($sqlFile); + + // Replace {prefix} with table name prefix + $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice('Dropping all database tables', 'Process'); + glmMembersAdmin::addNotice($sql, 'DataBlock', 'Drop Tables SQL'); + } + + // Removing the tables using the script + $this->wpdb->query($sql); + + // If there's been an error, display in debug Alert + $queryError = $this->wpdb->last_error; + if ($queryError) { + glmMembersAdmin::addNotice('Error when deleting database: Database tables may not have existed.
Check following message.
'.$queryError, 'AdminError'); + return false; + } + + return true; + + } + + /* + * Create Members Database Tables + * + * @param string $dbVersion Current version of Members Database + * + * @return boolean + * @access public + */ + public function createDataTables($dbVersion) + { + + // Read in Database creation script + $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/create_database_V'.$dbVersion.'.sql'; + $sql = file_get_contents($sqlFile); + + // Replace {prefix} with table name prefix + $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); + + // Split script into separate queries by looking for lines with only "---" + $queries = preg_split('/^----$/m', $sql); + + // Try executing all queries to build database + $qForDebug = ''; + do { + $q = current($queries); + $this->wpdb->query($q); + $queryError = $this->wpdb->last_error; + + if ($queryError) { + glmMembersAdmin::addNotice('Error when creating database: Database tables may already exist.
Check following message.
'.$queryError, 'AdminError'); + return false; + } + $qForDebug .= $queryError.$q; + + } while ($queryError == '' && next($queries)); + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice('Creating database tables', 'Process'); + glmMembersAdmin::addNotice($qForDebug, 'DataBlock', 'Create Tables SQL'); + } + + return true; + + } + +} + +?> \ No newline at end of file diff --git a/models/admin/management/import.php b/models/admin/management/import.php new file mode 100644 index 00000000..db7b9591 --- /dev/null +++ b/models/admin/management/import.php @@ -0,0 +1,1097 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +/* + * This class performs the work for the default action of the "Members" menu + * option, which is to display the members dashboard. + * + */ +class GlmMembersAdmin_management_import +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + /* + * Constructor + * + * This contructor sets up this model. At this time that only includes + * storing away the WordPress data object. + * + * @return object Class object + * + */ + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + } + + /* + * Perform Model Action + * + * This method does the work for this model and returns any resulting data + * + * @return array Status and data array + * + * 'status' + * + * True if successfull and false if there was a fatal failure. + * + * 'menuItemRedirect' + * + * If not false, provides a menu item the controller should + * execute after this one. Normally if this is used, there would also be a + * modelRedirect value supplied as well. + * + * 'modelRedirect' + * + * If not false, provides an action the controller should execute after + * this one. + * + * 'view' + * + * A suggested view name that the contoller should use instead of the + * default view for this model or false to indicate that the default view + * should be used. + * + * 'data' + * + * Data that the model is returning for use in merging with the view to + * produce output. + * + */ + public function modelAction ($actionData = false) + { + + $templateData = array(); + + $requestedView = false; + $failure = false; + + $option = ''; + + // If there has been a redirect + if ($actionData) { + + $templateData = $actionData; + $option = 'importSelect'; + + // Otherwise check the request for desired option + } elseif (isset($_REQUEST['option']) && $_REQUEST['option'] != '') { + + $option = $_REQUEST['option']; + + // Fall back to importSelect + } else { + + $option = 'importSelect'; + + } + + switch($option) { + + case 'importSelect': + + $requestedView = 'import.html'; + + break; + + case 'readDatabase': + + /* + * Check all input + */ + + // Check hostname + $dbServer = preg_replace("/[^a-zA-Z0-9\._-]+/", "", trim($_REQUEST['dbServer'])); + $templateData['dbServer'] = array('value' => $dbServer, 'problem' => false); + if (!$dbServer || $dbServer == '' || $dbServer != trim($_REQUEST['dbServer'])) { + $templateData['dbServer']['problem'] = 'Server name or IP address was not provided or contained invalid characters.'; + $failure = true; + } + + // Check database port # + $dbPort = preg_replace("/[^0-9]+/", "", trim($_REQUEST['dbPort'])); + $templateData['dbPort'] = array('value' => $dbPort, 'problem' => false); + if (!$dbPort || $dbPort == '' || $dbPort != trim($_REQUEST['dbPort'])) { + $templateData['dbPort']['problem'] = 'Server port was not provided or is not a valid nummber.'; + $failure = true; + } + + // Check database name + $dbName = preg_replace("/[^a-zA-Z0-9_]+/", "", trim($_REQUEST['dbName'])); + $templateData['dbName'] = array('value' => $dbName, 'problem' => false); + if (!$dbName || $dbName == '' || $dbName != trim($_REQUEST['dbName'])) { + $templateData['dbName']['problem'] = 'Database name was not provided or is not valid for Postgres.'; + $failure = true; + } + + // Check database user + $dbUser = preg_replace("/[^a-zA-Z0-9_]+/", "", trim($_REQUEST['dbUser'])); + $templateData['dbUser'] = array('value' => $dbUser, 'problem' => false); + if (!$dbUser || $dbUser == '' || $dbUser != trim($_REQUEST['dbUser'])) { + $templateData['dbUser']['problem'] = 'Database user was not provided or is not valid for Postgres.'; + $failure = true; + } + + // Check Image URL + $dbImageURL = filter_var($_REQUEST['dbImageURL'], FILTER_SANITIZE_URL); + $templateData['dbImageURL'] = array('value' => $dbImageURL, 'problem' => false); + if (!$dbImageURL || $dbImageURL == '' || $dbImageURL != trim($_REQUEST['dbImageURL'])) { + $templateData['dbImageURL']['problem'] = 'Image URL does not appear to be valid.'; + $failure = true; + } + + if ($failure) { + $templateData['genError'] = 'There was a problem with the database connection information you provided. See below for specific instructions.'; + } + + /* + * Determine if source database is sane + */ + + // Connect to database + if (!$failure) { + $connString = "host=$dbServer port=$dbPort dbname=$dbName user=$dbUser"; + $db = @pg_connect($connString); + if (!$db) { + + $err = error_get_last(); + $templateData['genError'] = 'There was a problem connecting to the database. The error message was...
'.$err['message']; + $failure = true; + + } + } + + // Determine if the members schema exists + if (!$failure) { + $sql = " + SELECT EXISTS + ( + SELECT 1 + FROM information_schema.schemata AS exists + WHERE schema_name = 'members' + ) AS isMembers + ;"; + $res = pg_query($db, $sql); + if (pg_fetch_result($res, 0, 'isMembers') == 'f') { + $templateData['genError'] = 'The "members" schema was not found! Is this the right database?'; + $failure = true; + } + } + + /* + * Load data from source database + */ + + // Attempt to get member base data + if (!$failure) { + $sql = " + SELECT * + FROM members.member + ORDER BY member_id + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any members listed in this database!'; + $failure = true; + } else { + $member = pg_fetch_all($res); + if (count($member) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading base member data, we did not receive the expected number of members! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } + } + } + + // Read in all amenities + if (!$failure) { + $sql = " + SELECT * + FROM members.amenity + ORDER BY amenity_name + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any cities listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading amenity data, we did not receive the expected number of amenities! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $amenity = array(); + + // Reprocess into array indexed by amenity_id + foreach ($tmp as $x) { + $amenity[$x['amenity_id']] = $x; + } + } + } + } + + // Read in member/amenity cross-reference table + if (!$failure) { + $sql = " + SELECT * + FROM members.member_amenity + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any member/amenity cross-reference entries listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading amenity data, we did not receive the expected number of amenities! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the ameities into an array indexed by amenity_id + $membAmen = array(); + + // Reprocess into array grouped by member with the main index the member ID + foreach ($tmp as $x) { + + // If member entry hasn't been created yet, add it now + if (!isset($membAmen[$x['member_id']])) { + $membAmen[$x['member_id']] = array(); + } + + $membAmen[$x['member_id']][] = $x; + } + } + } + } + + // Read in all credit card types + if (!$failure) { + $sql = " + SELECT * + FROM members.ccard_type + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any credit card types listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading credit card type data, we did not receive the expected number of credit card types! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $ccard = array(); + + // Reprocess into array indexed by ccard_type_id + foreach ($tmp as $x) { + $ccard[$x['ccard_type_id']] = $x; + } + } + } + } + + // Read in member/credit card cross-reference table + if (!$failure) { + $sql = " + SELECT * + FROM members.member_ccard_type + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any member/credit card cross-reference entries listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading member/credit card cross-reference data, we did not receive the expected number of entries! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $membCcard = array(); + + // Reprocess into array grouped by member with the main index the member ID + foreach ($tmp as $x) { + + // If member entry hasn't been created yet, add it now + if (!isset($membCcard[$x['member_id']])) { + $membCcard[$x['member_id']] = array(); + } + + $membCcard[$x['member_id']][] = $x; + } + } + } + } + + + // Read in all member categories + if (!$failure) { + $sql = " + SELECT * + FROM members.category + ORDER BY category_id + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any categories listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading category data, we did not receive the expected number of categories! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the categories into a higherarchical array + $category = array(); + + // Process top level categories first + foreach ($tmp as $x) { + + // If this is a top level category + if ($x['parent_id'] == 0) { + $category[$x['category_id']] = $x; + $category[$x['category_id']]['subcat'] = array(); + } + + } + + // Now process all sub-categories + reset($tmp); + foreach ($tmp as $x) { + + // If this is NOT a top level category + if ($x['parent_id'] > 0) { + + // Check if we have the requested parent as a top-level category + if (isset($category[$x['parent_id']])) { + $category[$x['parent_id']]['subcat'][$x['category_id']] = $x; + } else { + $templateData['genError'] = 'There is at least one sub-category that does not have a matching top-level parent! ('.$x['name'].')
+ This could be a third-level category. Perhaps we can handle this when we have time to work on this a bit.'; + $failure = true; + } + } + } + } + } + } + + // Read in member/Category cross-reference table + if (!$failure) { + $sql = " + SELECT * + FROM members.member_category + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any member/category cross-reference entries listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading category data, we did not receive the expected number of categories! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $membCat = array(); + + // Reprocess into array grouped by member with the main index the member ID + foreach ($tmp as $x) { + + // If member entry hasn't been created yet, add it now + if (!isset($membCat[$x['member_id']])) { + $membCat[$x['member_id']] = array(); + } + + $membCat[$x['member_id']][] = $x; + } + } + } + } + + + + // Read in all cities + if (!$failure) { + $sql = " + SELECT * + FROM members.city + ORDER BY city_name + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any cities listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading city data, we did not receive the expected number of cities! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $city = array(); + + // Reprocess into array indexed by city_id + foreach ($tmp as $x) { + $city[$x['city_id']] = $x; + } + } + } + } + + // Read in all states + if (!$failure) { + $sql = " + SELECT * + FROM members.state + ORDER BY state_name + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any states listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading state data, we did not receive the expected number of states! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $state = array(); + + // Reprocess into array indexed by state_id + foreach ($tmp as $x) { + $state[$x['state_id']] = $x; + } + } + } + } + + // Read in all regions + if (!$failure) { + $sql = " + SELECT * + FROM members.region + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any regions listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading region data, we did not receive the expected number of regions! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $region = array(); + + // Reprocess into array indexed by state_id + foreach ($tmp as $x) { + $region[$x['region_id']] = $x; + } + } + } + } + + + + // Read in all member photos for member image gallery + if (!$failure) { + $sql = " + SELECT * + FROM members.member_photos + ;"; + $res = pg_query($db, $sql); + $rows = pg_num_rows($res); + if ($rows == 0) { + $templateData['genError'] = 'There does not appear to be any member photos listed in this database!'; + $failure = true; + } else { + $tmp = pg_fetch_all($res); + if (count($tmp) != $rows) { + $notice = pg_last_notice($res); + $templateData['genError'] = 'While reading member photo data, we did not receive the expected number of member photos! '; + if ($notice) { + $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; + } + $failure = true; + } else { + + // Since there was no problem, we'll post-process the cities into an array indexed by city_id + $image = array(); + + // Reprocess into array grouped by member with the main index the member ID + foreach ($tmp as $x) { + + // If member entry hasn't been created yet, add it now + if (!isset($image[$x['member_id']])) { + $image[$x['member_id']] = array(); + } + + $image[$x['member_id']][] = $x; + } + } + } + } + + /* + * If requested, reset the database + */ + + // Reset database is Option is selected + if (!$failure && isset($_REQUEST['dbReset']) && $_REQUEST['dbReset'] == 'on') { + + // Get current db version + $dbVersion = GLM_MEMBERS_PLUGIN_DB_VERSION; + + // Reset the database + if (!$this->deleteDataTables($dbVersion)) { + glmMembersAdmin::addNotice('Unable to delete the database tables while resetting the database.
', 'AdminError'); + break; + } + if (!$this->createDataTables($dbVersion)) { + glmMembersAdmin::addNotice('Unable to create the database tables while resetting the database.
', 'AdminError'); + break; + } + + glmMembersAdmin::addNotice('Database tables have been reset in preparation importing members.
', 'AdminNotice'); + + // Delete Images + foreach( new RecursiveIteratorIterator( + + new RecursiveDirectoryIterator( GLM_MEMBERS_PLUGIN_IMAGES_PATH, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ), + RecursiveIteratorIterator::CHILD_FIRST ) as $value ) { + if ($value->isFile()) { + unlink( $value ); + } + } + + } + + /* + * Start importing data + */ + + if (!$failure) { + + // Import Cities + while (list ($key, $val) = each ($city) ) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'cities', + array( + 'name' => $val['city_name'], + ), + array( + '%s', + ) + ); + $city[$key]['new_id'] = $this->wpdb->insert_id; + + } + + // Import Regions + while (list ($key, $val) = each ($region) ) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'regions', + array( + 'name' => $val['region_name'], + 'descr' => '', + 'short_descr' => '' + ), + array( + '%s', + '%s', + '%s' + ) + ); + $region[$key]['new_id'] = $this->wpdb->insert_id; + + } + + // Import Amenities + while (list ($key, $val) = each ($amenity) ) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'amenities', + array( + 'active' => true, + 'name' => $val['amenity_name'], + 'descr' => '', + 'short_descr' => '', + 'ref_type' => $this->config['ref_type_numb']['MemberInfo'] + ), + array( + '%d', + '%s', + '%s', + '%s', + '%d' + ) + ); + $amenity[$key]['new_id'] = $this->wpdb->insert_id; + + } + + // Import Categories + $catTrans = array(); + while (list ($key, $val) = each ($category) ) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'categories', + array( + 'name' => $val['name'], + 'descr' => '', + 'short_descr' => '', + 'parent' => 0 + ), + array( + '%s', + '%s', + '%s', + '%d' + ) + ); + $newID = $this->wpdb->insert_id; + $category[$key]['new_id'] = $newID; + $category[$key]['new_parent'] = 0; + + $catTrans[$key] = array( + 'new' => $newID, + 'parent' => 0 + ); + + // Do any sub-cats for this category + while (list ($key2, $val2) = each ($val['subcat']) ) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'categories', + array( + 'name' => $val2['name'], + 'descr' => '', + 'short_descr' => '', + 'parent' => $category[$key]['new_id'] + ), + array( + '%s', + '%s', + '%s', + '%d' + ) + ); + $newID2 = $this->wpdb->insert_id; + $category[$key]['subcat'][$key2]['new_id'] = $newID; + $category[$key]['subcat'][$key2]['new_parent'] = $category[$key]['new_id']; + + $catTrans[$key2] = array( + 'new' => $newID2, + 'parent' => $newID + ); + + } + } + + + + // Index Credit Card types - Match to card types in configuration + while (list ($key, $val) = each ($ccard) ) { + reset($this->config['credit_card_numb']); + while (list ($key2, $val2) = each ($this->config['credit_card_numb']) ) { + if (substr($val['ccard_type_name'], 0, 3) == substr(($key2), 0, 3)) { + $ccard[$key]['bitpos'] = $val2; + } + } + } + + /* + * Create Defaults Not Provided By Old Member DB + */ + + // Member Types + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'member_type', + array( + 'name' => 'Default', + 'descr' => '', + ), + array( + '%s', + '%s', + ) + ); + $defaultMemberType = $this->wpdb->insert_id; + + /* + * Now Start Adding Members + */ + + // Import Members + while (list ($key, $val) = each ($member) ) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'members', + array( + 'access' => $this->config['memb_access_numb']['Full'], + 'member_type' => $defaultMemberType, + 'created' => date('Y-m-d'), + 'name' => $val['member_name'] + ), + array( + '%d', + '%d', + '%s', + '%s' + ) + ); + $membID = $this->wpdb->insert_id; + $member[$key]['new_id'] = $membID; + + // Create truncated short_descr from descritions - Less tags, html encoded characters, newlines, tabs, etc. + $stripped = str_replace(PHP_EOL, '', preg_replace('/\t+/', '', preg_replace("/&#?[a-z0-9]{2,8};/i", "", strip_tags($val['description'])))); + $short_descr = implode(' ', array_slice(explode(' ', $stripped), 0, 30)); + if (strlen($short_descr) < strlen($stripped)) { + $short_descr .= ' ...'; + } + + // Build Credit Card bitmap + $ccBits = 0; + if (isset($membCcard[$val['member_id']])) { + foreach ($membCcard[$val['member_id']] as $c) { + $b = $ccard[$c['ccard_type_id']]['bitpos']; + $ccBits += pow(2, $b); + } + } + + // Insert Member Information Record + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'member_info', + array( + 'member' => $membID, + 'member_name' => $val['member_name'], + 'status' => $this->config['status_numb']['Active'], + 'reference_name' => 'Imported Membmer Information', + 'descr' => $val['description'], + 'short_descr' => $short_descr, + 'addr1' => $val['street'], + 'addr2' => '', + 'city' => $city[$val['city_id']]['new_id'], + 'state' => $state[$val['state_id']]['state_abb'], + 'country' => 'US', + 'zip' => $val['zip'], + 'lat' => $val['lat'], + 'lon' => $val['lon'], + 'region' => (isset($region[$val['region']]) ? $region[$val['region']]['new_id'] : 0), + 'phone' => $val['phone'], + 'toll_free' => $val['toll_free'], + 'url' => $val['url'], + 'email' => $val['process_email'], + 'logo' => '', + 'cc_type' => $ccBits, + 'notes' => '', + 'create_time' => $val['create_date'], + 'modify_time' => $val['last_update'] + ), + array( + '%d', + '%s', + '%d', + '%s', + '%s', + '%s', + '%s', + '%s', + '%d', + '%s', + '%s', + '%s', + '%f', + '%f', + '%d', + '%s', + '%s', + '%s', + '%s', + '%s', + '%d', + '%s', + '%s', + '%s' + ) + ); + $mID = $this->wpdb->insert_id; + $member[$key]['new_id'] = $mID; + + // Add Member Categories + if (isset($membCat[$val['member_id']])) { + foreach ($membCat[$val['member_id']] as $c) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'category_member_info', + array( + 'category' => $catTrans[$c['category_id']]['new'], + 'member_info' => $mID + ), + array( + '%d', + '%d' + ) + ); + + } + } + + // Add Member Amenities + if (isset($membAmen[$val['member_id']])) { + foreach ($membAmen[$val['member_id']] as $a) { + + $res = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX.'amenity_ref', + array( + 'amenity' => $amenity[$a['amenity_id']]['new_id'], + 'ref_type' => $this->config['ref_type_numb']['MemberInfo'], + 'ref_dest' => $mID + ), + array( + '%d', + '%d', + '%d' + ) + ); + + } + } + + + } + + // Import + + } + + // If everything is OK, make data available to the template + if (!$failure) { + $templateData['member'] = $member; + $templateData['defaultMemberType'] = $defaultMemberType; + $templateData['amenity'] = $amenity; + $templateData['membAmen'] = $membAmen; + $templateData['category'] = $category; + $templateData['membCat'] = $membCat; + $templateData['catTrans'] = $catTrans; + $templateData['city'] = $city; + $templateData['state'] = $state; + $templateData['region'] = $region; + $templateData['ccard'] = $ccard; + $templateData['membCcard'] = $membCcard; + $templateData['image'] = $image; + } + + + if ($failure) { + return array( + 'status' => true, + 'menuItemRedirect' => 'management', + 'modelRedirect' => 'import', + 'view' => 'admin/management/import.html', + 'data' => $templateData + ); + + } + + $requestedView = 'import/readDatabase.html'; + + break; + + default: + + break; + + } + + // Return status, suggested view, and data to controller + return array( + 'status' => true, + 'menuItemRedirect' => false, + 'modelRedirect' => false, + 'view' => 'admin/management/'.$requestedView, + 'data' => $templateData + ); + + } + + /* + * Delete Members Database Tables + * + * @param string $dbVersion Current version of Members Database + * + * @return boolean + * @access public + */ + public function deleteDataTables($dbVersion) + { + + // Read in Database deletion script - assumes the current db version. + $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/drop_database_V'.$dbVersion.'.sql'; + $sql = file_get_contents($sqlFile); + + // Replace {prefix} with table name prefix + $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice('Dropping all database tables', 'Process'); + glmMembersAdmin::addNotice($sql, 'DataBlock', 'Drop Tables SQL'); + } + + // Removing the tables using the script + $this->wpdb->query($sql); + + // If there's been an error, display in debug Alert + $queryError = $this->wpdb->last_error; + if ($queryError) { + glmMembersAdmin::addNotice('Error when deleting database: Database tables may not have existed.
Check following message.
'.$queryError, 'AdminError'); + } + + return true; + + } + + /* + * Create Members Database Tables + * + * @param string $dbVersion Current version of Members Database + * + * @return boolean + * @access public + */ + public function createDataTables($dbVersion) + { + + // Read in Database creation script + $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/create_database_V'.$dbVersion.'.sql'; + $sql = file_get_contents($sqlFile); + + // Replace {prefix} with table name prefix + $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); + + // Split script into separate queries by looking for lines with only "---" + $queries = preg_split('/^----$/m', $sql); + + // Try executing all queries to build database + $qForDebug = ''; + do { + $q = current($queries); + $this->wpdb->query($q); + $queryError = $this->wpdb->last_error; + + if ($queryError) { + glmMembersAdmin::addNotice('Error when creating database: Database tables may already exist.
Check following message.
'.$queryError, 'AdminError'); + return false; + } + $qForDebug .= $queryError.$q; + + } while ($queryError == '' && next($queries)); + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice('Creating database tables', 'Process'); + glmMembersAdmin::addNotice($qForDebug, 'DataBlock', 'Create Tables SQL'); + } + + return true; + + } + +} + +?> \ No newline at end of file diff --git a/models/admin/management/index.php b/models/admin/management/index.php new file mode 100644 index 00000000..f96ce954 --- /dev/null +++ b/models/admin/management/index.php @@ -0,0 +1,185 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +// Load Members data abstract +require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/settings/dataSettingsGeneral.php'); + +/* + * This class performs the work for the default action of the "Members" menu + * option, which is to display the members dashboard. + * + */ +class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + /* + * Constructor + * + * This contructor sets up this model. At this time that only includes + * storing away the WordPress data object. + * + * @return object Class object + * + */ + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + // Run constructor for members data class + parent::__construct(false, false); + + } + + /* + * Perform Model Action + * + * This method does the work for this model and returns any resulting data + * + * @return array Status and data array + * + * 'status' + * + * True if successfull and false if there was a fatal failure. + * + * 'menuItemRedirect' + * + * If not false, provides a menu item the controller should + * execute after this one. Normally if this is used, there would also be a + * modelRedirect value supplied as well. + * + * 'modelRedirect' + * + * If not false, provides an action the controller should execute after + * this one. + * + * 'view' + * + * A suggested view name that the contoller should use instead of the + * default view for this model or false to indicate that the default view + * should be used. + * + * 'data' + * + * Data that the model is returning for use in merging with the view to + * produce output. + * + */ + public function modelAction ($actionData = false) + { + // General settings are always stored in a record with ID=1. + $id = 1; + + // Determine if current user can edit configurations + if (!current_user_can('glm_members_configure')) { + return array( + 'status' => false, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => array( + 'reason' => 'User does not have rights to make configuration changes.' + ) + ); + } + + // Check for submission option + $option = ''; + if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') { + $option = $_REQUEST['option']; + } + + switch($option) { + + // Update the settings and redisplay the form + case 'submit': + + // Update the general settings + $generalSettings = $this->updateEntry(1); + + // Display admin message that the data has been updated + glmMembersAdmin::addNotice('General Settings for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been updated.', 'AdminNotice'); + + break; + + // Default is to get the current settings and display the form + default: + + // Try to get the first (should be only) entry for general settings. + $generalSettings = $this->editEntry($id); + + if ($generalSettings === false) { + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice("  /modesl/admin/settings/index.php: Unable to load General Settings.", 'Alert'); + } +/* + return array( + 'status' => false, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => array( + 'reason' => 'Unable to create general settings entry in database.' + ) + ); +*/ + } + + break; + + } + + // Compile template data + $templateData = array( + 'reason' => '', + 'settings' => $generalSettings, + 'timezones' => DateTimeZone::listIdentifiers() +// 'canEdit' => $canEdit + ); + + // Return status, suggested view, and data to controller + return array( + 'status' => true, + 'menuItemRedirect' => false, + 'modelRedirect' => false, + 'view' => 'admin/management/index.html', + 'data' => $templateData + ); + + } + +} + +?> \ No newline at end of file diff --git a/models/admin/management/terms.php b/models/admin/management/terms.php new file mode 100644 index 00000000..392698a5 --- /dev/null +++ b/models/admin/management/terms.php @@ -0,0 +1,184 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +// Load Members data abstract +require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/settings/dataSettingsTerms.php'); + +/* + * This class performs the work for the default action of the "Members" menu + * option, which is to display the members dashboard. + * + */ +class GlmMembersAdmin_management_terms extends GlmDataSettingsTerms +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + /* + * Constructor + * + * This contructor sets up this model. At this time that only includes + * storing away the WordPress data object. + * + * @return object Class object + * + */ + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + // Run constructor for members data class + parent::__construct(false, false); + + } + + /* + * Perform Model Action + * + * This method does the work for this model and returns any resulting data + * + * @return array Status and data array + * + * 'status' + * + * True if successfull and false if there was a fatal failure. + * + * 'menuItemRedirect' + * + * If not false, provides a menu item the controller should + * execute after this one. Normally if this is used, there would also be a + * modelRedirect value supplied as well. + * + * 'modelRedirect' + * + * If not false, provides an action the controller should execute after + * this one. + * + * 'view' + * + * A suggested view name that the contoller should use instead of the + * default view for this model or false to indicate that the default view + * should be used. + * + * 'data' + * + * Data that the model is returning for use in merging with the view to + * produce output. + * + */ + public function modelAction ($actionData = false) + { + // General settings are always stored in a record with ID=1. + $id = 1; + + // Determine if current user can edit configurations + if (!current_user_can('glm_members_configure')) { + return array( + 'status' => false, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => array( + 'reason' => 'User does not have rights to make configuration changes.' + ) + ); + } + + // Check for submission option + $option = ''; + if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') { + $option = $_REQUEST['option']; + } + + switch($option) { + + // Update the settings and redisplay the form + case 'submit': + + // Update the general settings + $termsSettings = $this->updateEntry(1); + + // Display admin message that the data has been updated + glmMembersAdmin::addNotice('Terms Settings for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been updated.', 'AdminNotice'); + + break; + + // Default is to get the current settings and display the form + default: + + // Try to get the first (should be only) entry for general settings. + $termsSettings = $this->editEntry($id); + + // Check that we actually have the terms + if ($termsSettings === false) { + + if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { + glmMembersAdmin::addNotice("/modesl/admin/settings/terms.php: Unable to load Terms Settings.", 'Alert'); + } + + return array( + 'status' => false, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => array( + 'reason' => 'Unable to create terms settings entry in database.' + ) + ); + } + + break; + + } + + // Compile template data + $templateData = array( + 'reason' => '', + 'settings' => $termsSettings, +// 'canEdit' => $canEdit + ); + + // Return status, suggested view, and data to controller + return array( + 'status' => true, + 'menuItemRedirect' => false, + 'modelRedirect' => false, + 'view' => 'admin/management/terms.html', + 'data' => $templateData + ); + + } + +} + +?> \ No newline at end of file diff --git a/models/admin/settings/development.php b/models/admin/settings/development.php deleted file mode 100644 index bded5bda..00000000 --- a/models/admin/settings/development.php +++ /dev/null @@ -1,345 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @version 0.1 - */ - -/* - * This class performs the work for the default action of the "Members" menu - * option, which is to display the members dashboard. - * - */ -class GlmMembersAdmin_settings_development -{ - - /** - * WordPress Database Object - * - * @var $wpdb - * @access public - */ - public $wpdb; - /** - * Plugin Configuration Data - * - * @var $config - * @access public - */ - public $config; - - /* - * Constructor - * - * This contructor sets up this model. At this time that only includes - * storing away the WordPress data object. - * - * @return object Class object - * - */ - public function __construct ($wpdb, $config) - { - - // Save WordPress Database object - $this->wpdb = $wpdb; - - // Save plugin configuration object - $this->config = $config; - - } - - /* - * Perform Model Action - * - * This method does the work for this model and returns any resulting data - * - * @return array Status and data array - * - * 'status' - * - * True if successfull and false if there was a fatal failure. - * - * 'menuItemRedirect' - * - * If not false, provides a menu item the controller should - * execute after this one. Normally if this is used, there would also be a - * modelRedirect value supplied as well. - * - * 'modelRedirect' - * - * If not false, provides an action the controller should execute after - * this one. - * - * 'view' - * - * A suggested view name that the contoller should use instead of the - * default view for this model or false to indicate that the default view - * should be used. - * - * 'data' - * - * Data that the model is returning for use in merging with the view to - * produce output. - * - */ - public function modelAction ($actionData = false) - { - - // Get current database version - $dbVersion = GLM_MEMBERS_PLUGIN_DB_VERSION; - settype($dbVersion, 'string'); - - $templateData['resultMessage'] = ''; - $templateData['success'] = false; - $templateData['haveNotices'] = false; - $notices = array(); - $templateData['haveMembers'] = false; - $templateData['import'] = false; - $templateData['importNotice'] = false; - $templateData['haveDatabaseTableList'] = false; - - // Load database activation class to get access to database version information - require_once (GLM_MEMBERS_PLUGIN_PATH . '/activate.php'); - $activate = new glmMembersPluginActivate($this->wpdb, $this->config, true); - - $option = ''; - if (isset($_REQUEST['option']) && $_REQUEST['option'] != '') { - $option = $_REQUEST['option']; - } - - switch($option) { - - case 'import_connections': - - // Load Member Info Data Class and get info data for later use - require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/glmMemberImportFromConnections.php'); - $Connections = new GlmMemberImportFromConnections($this->wpdb, $this->config); - - if (isset($_REQUEST['import']) && $_REQUEST['import'] == 'now') { - - // Reset the database - if (!$this->deleteDataTables($dbVersion)) { - glmMembersAdmin::addNotice('Unable to delete the database tables while resetting the database.
', 'AdminError'); - break; - } - if (!$this->createDataTables($dbVersion)) { - glmMembersAdmin::addNotice('Unable to create the database tables while resetting the database.
', 'AdminError'); - break; - } - glmMembersAdmin::addNotice('Database tables have been reset in preparation importing members.
', 'AdminNotice'); - - // Delete Images - foreach( new RecursiveIteratorIterator( - new RecursiveDirectoryIterator( GLM_MEMBERS_PLUGIN_IMAGES_PATH, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ), - RecursiveIteratorIterator::CHILD_FIRST ) as $value ) { - if ($value->isFile()) { - unlink( $value ); - } - } - - $templateData['import'] = true; - $templateData['membersImported'] = $Connections->doImport(); - - } else { - - // Check if Connections is not installed or not active. If active, gets count of entries. - $c = $Connections->checkConnections(); - if ($c === false) { - glmMembersAdmin::addNotice('Connections Business Directory plugin is not installed or not active!
'.print_r($c,1), 'AdminError'); - break; - } - $templateData['numbEntries'] = $c; - $importNotice = 'Connections Business Directory plugin is active.
Number of businesses listed: '.$c.'
'; - - // Get the basic business data for review. - $templateData['members'] = $Connections->getList(); - if ($templateData['members'] === false) { - $importNotice = 'No businesses were retieved.'; - break; - } - - $templateData['haveMembers'] = true; - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice($templateData['members'], 'DataBlock', 'Base Members Data'); - } - - } - - break; - - case 'drop': - case 'reset': - - $del = $this->deleteDataTables($dbVersion); - - if ($del) { - glmMembersAdmin::addNotice('New database tables for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been deleted.', 'AdminNotice'); - - } - - if ($option != 'reset') { - break; - } - - case 'create': - - $create = $this->createDataTables($dbVersion); - - // If there were no errors - if ($create) { - - // Notify the user that the database has been installed - glmMembersAdmin::addNotice('New database tables installed for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin.', 'AdminNotice'); - - // Save the version of the installed database - update_option('glmMembersDatabaseDbVersion', $dbVersion); - - } - - break; - - case 'list': - - // Check if the database version set for this plugin is invalid. - if (!isset($activate->dbVersions[$dbVersion])) { - $templateData['resultMessage'] .= "The last database version set for the ".GLM_MEMBERS_PLUGIN_NAME." (V$dbVersion) isn't valid.
"; - break; - } - - // Get the number of tables for this plugin database version that should exist. - $tables = $activate->dbVersions[$dbVersion]['tables']; - - // Get the number of tables for this plugin that do currently exist. - $existingTables = $this->wpdb->get_results(" - SELECT table_name - FROM information_schema.tables - WHERE table_name like '".GLM_MEMBERS_PLUGIN_DB_PREFIX."%'; - ", ARRAY_A); - - if (is_array($existingTables)) { - - - - - $templateData['resultMessage'] .= 'Current database tables
'; - } else { - $templateData['resultMessage'] .= 'No tables currently exist
'; - } - - break; - - default: - - break; - - } - - // Return status, suggested view, and data to controller - return array( - 'status' => true, - 'menuItemRedirect' => false, - 'modelRedirect' => false, - 'view' => 'admin/settings/development.html', - 'data' => $templateData - ); - - } - - /* - * Delete Members Database Tables - * - * @param string $dbVersion Current version of Members Database - * - * @return boolean - * @access public - */ - public function deleteDataTables($dbVersion) - { - - // Read in Database deletion script - assumes the current db version. - $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/drop_database_V'.$dbVersion.'.sql'; - $sql = file_get_contents($sqlFile); - - // Replace {prefix} with table name prefix - $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice('Dropping all database tables', 'Process'); - glmMembersAdmin::addNotice($sql, 'DataBlock', 'Drop Tables SQL'); - } - - // Removing the tables using the script - $this->wpdb->query($sql); - - // If there's been an error, display in debug Alert - $queryError = $this->wpdb->last_error; - if ($queryError) { - glmMembersAdmin::addNotice('Error when deleting database: Database tables may not have existed.
Check following message.
'.$queryError, 'AdminError'); - return false; - } - - return true; - - } - - /* - * Create Members Database Tables - * - * @param string $dbVersion Current version of Members Database - * - * @return boolean - * @access public - */ - public function createDataTables($dbVersion) - { - - // Read in Database creation script - $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/create_database_V'.$dbVersion.'.sql'; - $sql = file_get_contents($sqlFile); - - // Replace {prefix} with table name prefix - $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); - - // Split script into separate queries by looking for lines with only "---" - $queries = preg_split('/^----$/m', $sql); - - // Try executing all queries to build database - $qForDebug = ''; - do { - $q = current($queries); - $this->wpdb->query($q); - $queryError = $this->wpdb->last_error; - - if ($queryError) { - glmMembersAdmin::addNotice('Error when creating database: Database tables may already exist.
Check following message.
'.$queryError, 'AdminError'); - return false; - } - $qForDebug .= $queryError.$q; - - } while ($queryError == '' && next($queries)); - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice('Creating database tables', 'Process'); - glmMembersAdmin::addNotice($qForDebug, 'DataBlock', 'Create Tables SQL'); - } - - return true; - - } - -} - -?> \ No newline at end of file diff --git a/models/admin/settings/import.php b/models/admin/settings/import.php deleted file mode 100644 index 6cfecf59..00000000 --- a/models/admin/settings/import.php +++ /dev/null @@ -1,1097 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @version 0.1 - */ - -/* - * This class performs the work for the default action of the "Members" menu - * option, which is to display the members dashboard. - * - */ -class GlmMembersAdmin_settings_import -{ - - /** - * WordPress Database Object - * - * @var $wpdb - * @access public - */ - public $wpdb; - /** - * Plugin Configuration Data - * - * @var $config - * @access public - */ - public $config; - - /* - * Constructor - * - * This contructor sets up this model. At this time that only includes - * storing away the WordPress data object. - * - * @return object Class object - * - */ - public function __construct ($wpdb, $config) - { - - // Save WordPress Database object - $this->wpdb = $wpdb; - - // Save plugin configuration object - $this->config = $config; - - } - - /* - * Perform Model Action - * - * This method does the work for this model and returns any resulting data - * - * @return array Status and data array - * - * 'status' - * - * True if successfull and false if there was a fatal failure. - * - * 'menuItemRedirect' - * - * If not false, provides a menu item the controller should - * execute after this one. Normally if this is used, there would also be a - * modelRedirect value supplied as well. - * - * 'modelRedirect' - * - * If not false, provides an action the controller should execute after - * this one. - * - * 'view' - * - * A suggested view name that the contoller should use instead of the - * default view for this model or false to indicate that the default view - * should be used. - * - * 'data' - * - * Data that the model is returning for use in merging with the view to - * produce output. - * - */ - public function modelAction ($actionData = false) - { - - $templateData = array(); - - $requestedView = false; - $failure = false; - - $option = ''; - - // If there has been a redirect - if ($actionData) { - - $templateData = $actionData; - $option = 'importSelect'; - - // Otherwise check the request for desired option - } elseif (isset($_REQUEST['option']) && $_REQUEST['option'] != '') { - - $option = $_REQUEST['option']; - - // Fall back to importSelect - } else { - - $option = 'importSelect'; - - } - - switch($option) { - - case 'importSelect': - - $requestedView = 'import.html'; - - break; - - case 'readDatabase': - - /* - * Check all input - */ - - // Check hostname - $dbServer = preg_replace("/[^a-zA-Z0-9\._-]+/", "", trim($_REQUEST['dbServer'])); - $templateData['dbServer'] = array('value' => $dbServer, 'problem' => false); - if (!$dbServer || $dbServer == '' || $dbServer != trim($_REQUEST['dbServer'])) { - $templateData['dbServer']['problem'] = 'Server name or IP address was not provided or contained invalid characters.'; - $failure = true; - } - - // Check database port # - $dbPort = preg_replace("/[^0-9]+/", "", trim($_REQUEST['dbPort'])); - $templateData['dbPort'] = array('value' => $dbPort, 'problem' => false); - if (!$dbPort || $dbPort == '' || $dbPort != trim($_REQUEST['dbPort'])) { - $templateData['dbPort']['problem'] = 'Server port was not provided or is not a valid nummber.'; - $failure = true; - } - - // Check database name - $dbName = preg_replace("/[^a-zA-Z0-9_]+/", "", trim($_REQUEST['dbName'])); - $templateData['dbName'] = array('value' => $dbName, 'problem' => false); - if (!$dbName || $dbName == '' || $dbName != trim($_REQUEST['dbName'])) { - $templateData['dbName']['problem'] = 'Database name was not provided or is not valid for Postgres.'; - $failure = true; - } - - // Check database user - $dbUser = preg_replace("/[^a-zA-Z0-9_]+/", "", trim($_REQUEST['dbUser'])); - $templateData['dbUser'] = array('value' => $dbUser, 'problem' => false); - if (!$dbUser || $dbUser == '' || $dbUser != trim($_REQUEST['dbUser'])) { - $templateData['dbUser']['problem'] = 'Database user was not provided or is not valid for Postgres.'; - $failure = true; - } - - // Check Image URL - $dbImageURL = filter_var($_REQUEST['dbImageURL'], FILTER_SANITIZE_URL); - $templateData['dbImageURL'] = array('value' => $dbImageURL, 'problem' => false); - if (!$dbImageURL || $dbImageURL == '' || $dbImageURL != trim($_REQUEST['dbImageURL'])) { - $templateData['dbImageURL']['problem'] = 'Image URL does not appear to be valid.'; - $failure = true; - } - - if ($failure) { - $templateData['genError'] = 'There was a problem with the database connection information you provided. See below for specific instructions.'; - } - - /* - * Determine if source database is sane - */ - - // Connect to database - if (!$failure) { - $connString = "host=$dbServer port=$dbPort dbname=$dbName user=$dbUser"; - $db = @pg_connect($connString); - if (!$db) { - - $err = error_get_last(); - $templateData['genError'] = 'There was a problem connecting to the database. The error message was...
'.$err['message']; - $failure = true; - - } - } - - // Determine if the members schema exists - if (!$failure) { - $sql = " - SELECT EXISTS - ( - SELECT 1 - FROM information_schema.schemata AS exists - WHERE schema_name = 'members' - ) AS isMembers - ;"; - $res = pg_query($db, $sql); - if (pg_fetch_result($res, 0, 'isMembers') == 'f') { - $templateData['genError'] = 'The "members" schema was not found! Is this the right database?'; - $failure = true; - } - } - - /* - * Load data from source database - */ - - // Attempt to get member base data - if (!$failure) { - $sql = " - SELECT * - FROM members.member - ORDER BY member_id - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any members listed in this database!'; - $failure = true; - } else { - $member = pg_fetch_all($res); - if (count($member) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading base member data, we did not receive the expected number of members! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } - } - } - - // Read in all amenities - if (!$failure) { - $sql = " - SELECT * - FROM members.amenity - ORDER BY amenity_name - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any cities listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading amenity data, we did not receive the expected number of amenities! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $amenity = array(); - - // Reprocess into array indexed by amenity_id - foreach ($tmp as $x) { - $amenity[$x['amenity_id']] = $x; - } - } - } - } - - // Read in member/amenity cross-reference table - if (!$failure) { - $sql = " - SELECT * - FROM members.member_amenity - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any member/amenity cross-reference entries listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading amenity data, we did not receive the expected number of amenities! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the ameities into an array indexed by amenity_id - $membAmen = array(); - - // Reprocess into array grouped by member with the main index the member ID - foreach ($tmp as $x) { - - // If member entry hasn't been created yet, add it now - if (!isset($membAmen[$x['member_id']])) { - $membAmen[$x['member_id']] = array(); - } - - $membAmen[$x['member_id']][] = $x; - } - } - } - } - - // Read in all credit card types - if (!$failure) { - $sql = " - SELECT * - FROM members.ccard_type - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any credit card types listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading credit card type data, we did not receive the expected number of credit card types! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $ccard = array(); - - // Reprocess into array indexed by ccard_type_id - foreach ($tmp as $x) { - $ccard[$x['ccard_type_id']] = $x; - } - } - } - } - - // Read in member/credit card cross-reference table - if (!$failure) { - $sql = " - SELECT * - FROM members.member_ccard_type - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any member/credit card cross-reference entries listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading member/credit card cross-reference data, we did not receive the expected number of entries! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $membCcard = array(); - - // Reprocess into array grouped by member with the main index the member ID - foreach ($tmp as $x) { - - // If member entry hasn't been created yet, add it now - if (!isset($membCcard[$x['member_id']])) { - $membCcard[$x['member_id']] = array(); - } - - $membCcard[$x['member_id']][] = $x; - } - } - } - } - - - // Read in all member categories - if (!$failure) { - $sql = " - SELECT * - FROM members.category - ORDER BY category_id - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any categories listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading category data, we did not receive the expected number of categories! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the categories into a higherarchical array - $category = array(); - - // Process top level categories first - foreach ($tmp as $x) { - - // If this is a top level category - if ($x['parent_id'] == 0) { - $category[$x['category_id']] = $x; - $category[$x['category_id']]['subcat'] = array(); - } - - } - - // Now process all sub-categories - reset($tmp); - foreach ($tmp as $x) { - - // If this is NOT a top level category - if ($x['parent_id'] > 0) { - - // Check if we have the requested parent as a top-level category - if (isset($category[$x['parent_id']])) { - $category[$x['parent_id']]['subcat'][$x['category_id']] = $x; - } else { - $templateData['genError'] = 'There is at least one sub-category that does not have a matching top-level parent! ('.$x['name'].')
- This could be a third-level category. Perhaps we can handle this when we have time to work on this a bit.'; - $failure = true; - } - } - } - } - } - } - - // Read in member/Category cross-reference table - if (!$failure) { - $sql = " - SELECT * - FROM members.member_category - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any member/category cross-reference entries listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading category data, we did not receive the expected number of categories! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $membCat = array(); - - // Reprocess into array grouped by member with the main index the member ID - foreach ($tmp as $x) { - - // If member entry hasn't been created yet, add it now - if (!isset($membCat[$x['member_id']])) { - $membCat[$x['member_id']] = array(); - } - - $membCat[$x['member_id']][] = $x; - } - } - } - } - - - - // Read in all cities - if (!$failure) { - $sql = " - SELECT * - FROM members.city - ORDER BY city_name - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any cities listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading city data, we did not receive the expected number of cities! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $city = array(); - - // Reprocess into array indexed by city_id - foreach ($tmp as $x) { - $city[$x['city_id']] = $x; - } - } - } - } - - // Read in all states - if (!$failure) { - $sql = " - SELECT * - FROM members.state - ORDER BY state_name - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any states listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading state data, we did not receive the expected number of states! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $state = array(); - - // Reprocess into array indexed by state_id - foreach ($tmp as $x) { - $state[$x['state_id']] = $x; - } - } - } - } - - // Read in all regions - if (!$failure) { - $sql = " - SELECT * - FROM members.region - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any regions listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading region data, we did not receive the expected number of regions! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $region = array(); - - // Reprocess into array indexed by state_id - foreach ($tmp as $x) { - $region[$x['region_id']] = $x; - } - } - } - } - - - - // Read in all member photos for member image gallery - if (!$failure) { - $sql = " - SELECT * - FROM members.member_photos - ;"; - $res = pg_query($db, $sql); - $rows = pg_num_rows($res); - if ($rows == 0) { - $templateData['genError'] = 'There does not appear to be any member photos listed in this database!'; - $failure = true; - } else { - $tmp = pg_fetch_all($res); - if (count($tmp) != $rows) { - $notice = pg_last_notice($res); - $templateData['genError'] = 'While reading member photo data, we did not receive the expected number of member photos! '; - if ($notice) { - $templateData['genError'] .= 'Perhaps the following message will help.
'.$notice; - } - $failure = true; - } else { - - // Since there was no problem, we'll post-process the cities into an array indexed by city_id - $image = array(); - - // Reprocess into array grouped by member with the main index the member ID - foreach ($tmp as $x) { - - // If member entry hasn't been created yet, add it now - if (!isset($image[$x['member_id']])) { - $image[$x['member_id']] = array(); - } - - $image[$x['member_id']][] = $x; - } - } - } - } - - /* - * If requested, reset the database - */ - - // Reset database is Option is selected - if (!$failure && isset($_REQUEST['dbReset']) && $_REQUEST['dbReset'] == 'on') { - - // Get current db version - $dbVersion = GLM_MEMBERS_PLUGIN_DB_VERSION; - - // Reset the database - if (!$this->deleteDataTables($dbVersion)) { - glmMembersAdmin::addNotice('Unable to delete the database tables while resetting the database.
', 'AdminError'); - break; - } - if (!$this->createDataTables($dbVersion)) { - glmMembersAdmin::addNotice('Unable to create the database tables while resetting the database.
', 'AdminError'); - break; - } - - glmMembersAdmin::addNotice('Database tables have been reset in preparation importing members.
', 'AdminNotice'); - - // Delete Images - foreach( new RecursiveIteratorIterator( - - new RecursiveDirectoryIterator( GLM_MEMBERS_PLUGIN_IMAGES_PATH, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ), - RecursiveIteratorIterator::CHILD_FIRST ) as $value ) { - if ($value->isFile()) { - unlink( $value ); - } - } - - } - - /* - * Start importing data - */ - - if (!$failure) { - - // Import Cities - while (list ($key, $val) = each ($city) ) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'cities', - array( - 'name' => $val['city_name'], - ), - array( - '%s', - ) - ); - $city[$key]['new_id'] = $this->wpdb->insert_id; - - } - - // Import Regions - while (list ($key, $val) = each ($region) ) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'regions', - array( - 'name' => $val['region_name'], - 'descr' => '', - 'short_descr' => '' - ), - array( - '%s', - '%s', - '%s' - ) - ); - $region[$key]['new_id'] = $this->wpdb->insert_id; - - } - - // Import Amenities - while (list ($key, $val) = each ($amenity) ) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'amenities', - array( - 'active' => true, - 'name' => $val['amenity_name'], - 'descr' => '', - 'short_descr' => '', - 'ref_type' => $this->config['ref_type_numb']['MemberInfo'] - ), - array( - '%d', - '%s', - '%s', - '%s', - '%d' - ) - ); - $amenity[$key]['new_id'] = $this->wpdb->insert_id; - - } - - // Import Categories - $catTrans = array(); - while (list ($key, $val) = each ($category) ) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'categories', - array( - 'name' => $val['name'], - 'descr' => '', - 'short_descr' => '', - 'parent' => 0 - ), - array( - '%s', - '%s', - '%s', - '%d' - ) - ); - $newID = $this->wpdb->insert_id; - $category[$key]['new_id'] = $newID; - $category[$key]['new_parent'] = 0; - - $catTrans[$key] = array( - 'new' => $newID, - 'parent' => 0 - ); - - // Do any sub-cats for this category - while (list ($key2, $val2) = each ($val['subcat']) ) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'categories', - array( - 'name' => $val2['name'], - 'descr' => '', - 'short_descr' => '', - 'parent' => $category[$key]['new_id'] - ), - array( - '%s', - '%s', - '%s', - '%d' - ) - ); - $newID2 = $this->wpdb->insert_id; - $category[$key]['subcat'][$key2]['new_id'] = $newID; - $category[$key]['subcat'][$key2]['new_parent'] = $category[$key]['new_id']; - - $catTrans[$key2] = array( - 'new' => $newID2, - 'parent' => $newID - ); - - } - } - - - - // Index Credit Card types - Match to card types in configuration - while (list ($key, $val) = each ($ccard) ) { - reset($this->config['credit_card_numb']); - while (list ($key2, $val2) = each ($this->config['credit_card_numb']) ) { - if (substr($val['ccard_type_name'], 0, 3) == substr(($key2), 0, 3)) { - $ccard[$key]['bitpos'] = $val2; - } - } - } - - /* - * Create Defaults Not Provided By Old Member DB - */ - - // Member Types - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'member_type', - array( - 'name' => 'Default', - 'descr' => '', - ), - array( - '%s', - '%s', - ) - ); - $defaultMemberType = $this->wpdb->insert_id; - - /* - * Now Start Adding Members - */ - - // Import Members - while (list ($key, $val) = each ($member) ) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'members', - array( - 'access' => $this->config['memb_access_numb']['Full'], - 'member_type' => $defaultMemberType, - 'created' => date('Y-m-d'), - 'name' => $val['member_name'] - ), - array( - '%d', - '%d', - '%s', - '%s' - ) - ); - $membID = $this->wpdb->insert_id; - $member[$key]['new_id'] = $membID; - - // Create truncated short_descr from descritions - Less tags, html encoded characters, newlines, tabs, etc. - $stripped = str_replace(PHP_EOL, '', preg_replace('/\t+/', '', preg_replace("/&#?[a-z0-9]{2,8};/i", "", strip_tags($val['description'])))); - $short_descr = implode(' ', array_slice(explode(' ', $stripped), 0, 30)); - if (strlen($short_descr) < strlen($stripped)) { - $short_descr .= ' ...'; - } - - // Build Credit Card bitmap - $ccBits = 0; - if (isset($membCcard[$val['member_id']])) { - foreach ($membCcard[$val['member_id']] as $c) { - $b = $ccard[$c['ccard_type_id']]['bitpos']; - $ccBits += pow(2, $b); - } - } - - // Insert Member Information Record - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'member_info', - array( - 'member' => $membID, - 'member_name' => $val['member_name'], - 'status' => $this->config['status_numb']['Active'], - 'reference_name' => 'Imported Membmer Information', - 'descr' => $val['description'], - 'short_descr' => $short_descr, - 'addr1' => $val['street'], - 'addr2' => '', - 'city' => $city[$val['city_id']]['new_id'], - 'state' => $state[$val['state_id']]['state_abb'], - 'country' => 'US', - 'zip' => $val['zip'], - 'lat' => $val['lat'], - 'lon' => $val['lon'], - 'region' => (isset($region[$val['region']]) ? $region[$val['region']]['new_id'] : 0), - 'phone' => $val['phone'], - 'toll_free' => $val['toll_free'], - 'url' => $val['url'], - 'email' => $val['process_email'], - 'logo' => '', - 'cc_type' => $ccBits, - 'notes' => '', - 'create_time' => $val['create_date'], - 'modify_time' => $val['last_update'] - ), - array( - '%d', - '%s', - '%d', - '%s', - '%s', - '%s', - '%s', - '%s', - '%d', - '%s', - '%s', - '%s', - '%f', - '%f', - '%d', - '%s', - '%s', - '%s', - '%s', - '%s', - '%d', - '%s', - '%s', - '%s' - ) - ); - $mID = $this->wpdb->insert_id; - $member[$key]['new_id'] = $mID; - - // Add Member Categories - if (isset($membCat[$val['member_id']])) { - foreach ($membCat[$val['member_id']] as $c) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'category_member_info', - array( - 'category' => $catTrans[$c['category_id']]['new'], - 'member_info' => $mID - ), - array( - '%d', - '%d' - ) - ); - - } - } - - // Add Member Amenities - if (isset($membAmen[$val['member_id']])) { - foreach ($membAmen[$val['member_id']] as $a) { - - $res = $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX.'amenity_ref', - array( - 'amenity' => $amenity[$a['amenity_id']]['new_id'], - 'ref_type' => $this->config['ref_type_numb']['MemberInfo'], - 'ref_dest' => $mID - ), - array( - '%d', - '%d', - '%d' - ) - ); - - } - } - - - } - - // Import - - } - - // If everything is OK, make data available to the template - if (!$failure) { - $templateData['member'] = $member; - $templateData['defaultMemberType'] = $defaultMemberType; - $templateData['amenity'] = $amenity; - $templateData['membAmen'] = $membAmen; - $templateData['category'] = $category; - $templateData['membCat'] = $membCat; - $templateData['catTrans'] = $catTrans; - $templateData['city'] = $city; - $templateData['state'] = $state; - $templateData['region'] = $region; - $templateData['ccard'] = $ccard; - $templateData['membCcard'] = $membCcard; - $templateData['image'] = $image; - } - - - if ($failure) { - return array( - 'status' => true, - 'menuItemRedirect' => 'settings', - 'modelRedirect' => 'import', - 'view' => 'admin/settings/import.html', - 'data' => $templateData - ); - - } - - $requestedView = 'import/readDatabase.html'; - - break; - - default: - - break; - - } - - // Return status, suggested view, and data to controller - return array( - 'status' => true, - 'menuItemRedirect' => false, - 'modelRedirect' => false, - 'view' => 'admin/settings/'.$requestedView, - 'data' => $templateData - ); - - } - - /* - * Delete Members Database Tables - * - * @param string $dbVersion Current version of Members Database - * - * @return boolean - * @access public - */ - public function deleteDataTables($dbVersion) - { - - // Read in Database deletion script - assumes the current db version. - $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/drop_database_V'.$dbVersion.'.sql'; - $sql = file_get_contents($sqlFile); - - // Replace {prefix} with table name prefix - $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice('Dropping all database tables', 'Process'); - glmMembersAdmin::addNotice($sql, 'DataBlock', 'Drop Tables SQL'); - } - - // Removing the tables using the script - $this->wpdb->query($sql); - - // If there's been an error, display in debug Alert - $queryError = $this->wpdb->last_error; - if ($queryError) { - glmMembersAdmin::addNotice('Error when deleting database: Database tables may not have existed.
Check following message.
'.$queryError, 'AdminError'); - } - - return true; - - } - - /* - * Create Members Database Tables - * - * @param string $dbVersion Current version of Members Database - * - * @return boolean - * @access public - */ - public function createDataTables($dbVersion) - { - - // Read in Database creation script - $sqlFile = GLM_MEMBERS_PLUGIN_DB_SCRIPTS.'/create_database_V'.$dbVersion.'.sql'; - $sql = file_get_contents($sqlFile); - - // Replace {prefix} with table name prefix - $sql = str_replace('{prefix}', GLM_MEMBERS_PLUGIN_DB_PREFIX, $sql); - - // Split script into separate queries by looking for lines with only "---" - $queries = preg_split('/^----$/m', $sql); - - // Try executing all queries to build database - $qForDebug = ''; - do { - $q = current($queries); - $this->wpdb->query($q); - $queryError = $this->wpdb->last_error; - - if ($queryError) { - glmMembersAdmin::addNotice('Error when creating database: Database tables may already exist.
Check following message.
'.$queryError, 'AdminError'); - return false; - } - $qForDebug .= $queryError.$q; - - } while ($queryError == '' && next($queries)); - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice('Creating database tables', 'Process'); - glmMembersAdmin::addNotice($qForDebug, 'DataBlock', 'Create Tables SQL'); - } - - return true; - - } - -} - -?> \ No newline at end of file diff --git a/models/admin/settings/index.php b/models/admin/settings/index.php deleted file mode 100644 index e9244c6f..00000000 --- a/models/admin/settings/index.php +++ /dev/null @@ -1,185 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @version 0.1 - */ - -// Load Members data abstract -require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/settings/dataSettingsGeneral.php'); - -/* - * This class performs the work for the default action of the "Members" menu - * option, which is to display the members dashboard. - * - */ -class GlmMembersAdmin_settings_index extends GlmDataSettingsGeneral -{ - - /** - * WordPress Database Object - * - * @var $wpdb - * @access public - */ - public $wpdb; - /** - * Plugin Configuration Data - * - * @var $config - * @access public - */ - public $config; - - /* - * Constructor - * - * This contructor sets up this model. At this time that only includes - * storing away the WordPress data object. - * - * @return object Class object - * - */ - public function __construct ($wpdb, $config) - { - - // Save WordPress Database object - $this->wpdb = $wpdb; - - // Save plugin configuration object - $this->config = $config; - - // Run constructor for members data class - parent::__construct(false, false); - - } - - /* - * Perform Model Action - * - * This method does the work for this model and returns any resulting data - * - * @return array Status and data array - * - * 'status' - * - * True if successfull and false if there was a fatal failure. - * - * 'menuItemRedirect' - * - * If not false, provides a menu item the controller should - * execute after this one. Normally if this is used, there would also be a - * modelRedirect value supplied as well. - * - * 'modelRedirect' - * - * If not false, provides an action the controller should execute after - * this one. - * - * 'view' - * - * A suggested view name that the contoller should use instead of the - * default view for this model or false to indicate that the default view - * should be used. - * - * 'data' - * - * Data that the model is returning for use in merging with the view to - * produce output. - * - */ - public function modelAction ($actionData = false) - { - // General settings are always stored in a record with ID=1. - $id = 1; - - // Determine if current user can edit configurations - if (!current_user_can('glm_members_configure')) { - return array( - 'status' => false, - 'menuItemRedirect' => 'error', - 'modelRedirect' => 'index', - 'view' => 'admin/error/index.html', - 'data' => array( - 'reason' => 'User does not have rights to make configuration changes.' - ) - ); - } - - // Check for submission option - $option = ''; - if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') { - $option = $_REQUEST['option']; - } - - switch($option) { - - // Update the settings and redisplay the form - case 'submit': - - // Update the general settings - $generalSettings = $this->updateEntry(1); - - // Display admin message that the data has been updated - glmMembersAdmin::addNotice('General Settings for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been updated.', 'AdminNotice'); - - break; - - // Default is to get the current settings and display the form - default: - - // Try to get the first (should be only) entry for general settings. - $generalSettings = $this->editEntry($id); - - if ($generalSettings === false) { - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice("  /modesl/admin/settings/index.php: Unable to load General Settings.", 'Alert'); - } -/* - return array( - 'status' => false, - 'menuItemRedirect' => 'error', - 'modelRedirect' => 'index', - 'view' => 'admin/error/index.html', - 'data' => array( - 'reason' => 'Unable to create general settings entry in database.' - ) - ); -*/ - } - - break; - - } - - // Compile template data - $templateData = array( - 'reason' => '', - 'settings' => $generalSettings, - 'timezones' => DateTimeZone::listIdentifiers() -// 'canEdit' => $canEdit - ); - - // Return status, suggested view, and data to controller - return array( - 'status' => true, - 'menuItemRedirect' => false, - 'modelRedirect' => false, - 'view' => 'admin/settings/index.html', - 'data' => $templateData - ); - - } - -} - -?> \ No newline at end of file diff --git a/models/admin/settings/terms.php b/models/admin/settings/terms.php deleted file mode 100644 index 9db4ce66..00000000 --- a/models/admin/settings/terms.php +++ /dev/null @@ -1,184 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @version 0.1 - */ - -// Load Members data abstract -require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/settings/dataSettingsTerms.php'); - -/* - * This class performs the work for the default action of the "Members" menu - * option, which is to display the members dashboard. - * - */ -class GlmMembersAdmin_settings_terms extends GlmDataSettingsTerms -{ - - /** - * WordPress Database Object - * - * @var $wpdb - * @access public - */ - public $wpdb; - /** - * Plugin Configuration Data - * - * @var $config - * @access public - */ - public $config; - - /* - * Constructor - * - * This contructor sets up this model. At this time that only includes - * storing away the WordPress data object. - * - * @return object Class object - * - */ - public function __construct ($wpdb, $config) - { - - // Save WordPress Database object - $this->wpdb = $wpdb; - - // Save plugin configuration object - $this->config = $config; - - // Run constructor for members data class - parent::__construct(false, false); - - } - - /* - * Perform Model Action - * - * This method does the work for this model and returns any resulting data - * - * @return array Status and data array - * - * 'status' - * - * True if successfull and false if there was a fatal failure. - * - * 'menuItemRedirect' - * - * If not false, provides a menu item the controller should - * execute after this one. Normally if this is used, there would also be a - * modelRedirect value supplied as well. - * - * 'modelRedirect' - * - * If not false, provides an action the controller should execute after - * this one. - * - * 'view' - * - * A suggested view name that the contoller should use instead of the - * default view for this model or false to indicate that the default view - * should be used. - * - * 'data' - * - * Data that the model is returning for use in merging with the view to - * produce output. - * - */ - public function modelAction ($actionData = false) - { - // General settings are always stored in a record with ID=1. - $id = 1; - - // Determine if current user can edit configurations - if (!current_user_can('glm_members_configure')) { - return array( - 'status' => false, - 'menuItemRedirect' => 'error', - 'modelRedirect' => 'index', - 'view' => 'admin/error/index.html', - 'data' => array( - 'reason' => 'User does not have rights to make configuration changes.' - ) - ); - } - - // Check for submission option - $option = ''; - if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') { - $option = $_REQUEST['option']; - } - - switch($option) { - - // Update the settings and redisplay the form - case 'submit': - - // Update the general settings - $termsSettings = $this->updateEntry(1); - - // Display admin message that the data has been updated - glmMembersAdmin::addNotice('Terms Settings for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been updated.', 'AdminNotice'); - - break; - - // Default is to get the current settings and display the form - default: - - // Try to get the first (should be only) entry for general settings. - $termsSettings = $this->editEntry($id); - - // Check that we actually have the terms - if ($termsSettings === false) { - - if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) { - glmMembersAdmin::addNotice("/modesl/admin/settings/terms.php: Unable to load Terms Settings.", 'Alert'); - } - - return array( - 'status' => false, - 'menuItemRedirect' => 'error', - 'modelRedirect' => 'index', - 'view' => 'admin/error/index.html', - 'data' => array( - 'reason' => 'Unable to create terms settings entry in database.' - ) - ); - } - - break; - - } - - // Compile template data - $templateData = array( - 'reason' => '', - 'settings' => $termsSettings, -// 'canEdit' => $canEdit - ); - - // Return status, suggested view, and data to controller - return array( - 'status' => true, - 'menuItemRedirect' => false, - 'modelRedirect' => false, - 'view' => 'admin/settings/terms.html', - 'data' => $templateData - ); - - } - -} - -?> \ No newline at end of file diff --git a/views/admin/management/development.html b/views/admin/management/development.html new file mode 100644 index 00000000..4ce4fe2b --- /dev/null +++ b/views/admin/management/development.html @@ -0,0 +1,135 @@ +{include file='admin/management/header.html'} + +

Note: Customers will not have access to this tab.

+ +

Development Activities

+ +
    +
  • +

    Import

    +
      +
    • +

      + Import data from "Connections" business directory + + {if $importNotice} +

      {$importNotice}
      + {/if} +

      + + {if $import} + +

      Members imported: {$membersImported}

      + + {else} + {if $haveMembers} +
      +
      + Default data to use when importing members. + + + +
      Default member type:
      Default region name:
      +
      +

      + + Skip All   + Import All +

      +
      +
        +
      • *** THIS ACTION WILL FULLY RESET YOUR MEMBERS DATABASE ***
      • +
      • This action does not check for duplicate members!
      • +
      +
      + + + + + + + + + + + + + + + + + + {foreach $members as $m} + + + + {assign var="i" value="0"} + {foreach $m.addresses as $a} + {if $i++ gt 1} + + + + {/if} + + + + + + + + + + {/foreach} + {/foreach} + +
      SkipNameAddr Line 1Addr Line 2Addr Line 3CityStateZIPCountryLat/Lon
      {$m.id}{$m.organization}
        {$a.line_1}{$a.line_2}{$a.line_3}{$a.city}{$a.state}{$a.zipcode}{$a.country}{$a.latitude|number_format:3:".":","}/{$a.longitude|number_format:3:".":","}
      +
      + {/if} + {/if} +
    • +
    +

    Database

    + +
  • +
+ +
+

Docuemtation and References

+

Data Abstract Class Documentation

+
+{if $resultMessage} +
+
+ {$resultMessage} +
+{/if} + +{if $haveMembers} + +{/if} + + +{include file='admin/footer.html'} diff --git a/views/admin/management/header.html b/views/admin/management/header.html new file mode 100644 index 00000000..10ae4a53 --- /dev/null +++ b/views/admin/management/header.html @@ -0,0 +1,12 @@ +
+ +

{$glmPluginName} Configuration

+ + +
+ \ No newline at end of file diff --git a/views/admin/management/import.html b/views/admin/management/import.html new file mode 100644 index 00000000..6fda5793 --- /dev/null +++ b/views/admin/management/import.html @@ -0,0 +1,95 @@ +{include file='admin/management/header.html'} + +

Note: Customers will not have access to this tab.

+ +

Data Import

+

+ This process export data from a legacy Gaslight Media Member DB database and imports that data into this plugin. It will only work with a Postgres database. + The process will include the following steps. +

+
    +
  1. Provide information on the legacy database from which we'll be extracting data.
  2. +
  3. Test that database to make sure it's compatible with this process.
  4. +
  5. Read the needed data from the legacy database.
  6. +
  7. Review the extracted data to make sure it looks like the data you want to import.
  8. +
  9. Import the extracted data into is plugin
  10. +
  11. Review resulst
  12. +
+ + +

Data Import Step 1

+{if isset($genError)} +

+

Oops!

+

{$genError}

+

+{/if} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Database Server: + + {if isset($dbServer)} +

{$dbServer.problem}

+ {/if} +
Database Port #: + + {if isset($dbPort)} +

{$dbPort.problem}

+ {/if} +
Database Name: + + {if isset($dbName)} +

{$dbName.problem}

+ {/if} +
Database User: + + {if isset($dbUser)} +

{$dbUser.problem}

+ {/if} +
Base Original Image URL: + + {if isset($dbImageURL)} +

{$dbImageURL.problem}

+ {/if} +
Reset Database Before Import: + +
NOTE: Selecting this option will remove all existing data from the Member database! +
If you do not select this option, the new data will be added to the database and there will be no attempt to match up imported data with the existing data. +
+ + + +
+ + +{include file='admin/footer.html'} diff --git a/views/admin/management/import/readDatabase.html b/views/admin/management/import/readDatabase.html new file mode 100644 index 00000000..2f3b8dbc --- /dev/null +++ b/views/admin/management/import/readDatabase.html @@ -0,0 +1,56 @@ +{include file='admin/management/header.html'} + +

Note: Customers will not have access to this tab.

+ +

Data Import - Test Database

+
    +
  1. Provide information on the legacy database from which we'll be extracting data.
  2. +
  3. Test database to make sure it's compatible with this process.
  4. +
  5. Read the needed data from the legacy database.
  6. +
  7. Review the extracted data to make sure it looks like the data you want to import.
  8. +
  9. Import the extracted data into is plugin
  10. +
  11. Review resulst
  12. +
+ + +

Data Import Step 2

+{if isset($genError)} +

+

Oops!

+

{$genError}

+

+{/if} +
+ + + + + + + + + + + + + + + + + + + +
Database Server: + +
Database Name: + +
Database User: + +
+ + + +
+ + +{include file='admin/footer.html'} diff --git a/views/admin/management/index.html b/views/admin/management/index.html new file mode 100644 index 00000000..1e8f1c89 --- /dev/null +++ b/views/admin/management/index.html @@ -0,0 +1,297 @@ +{include file='admin/management/header.html'} + +

*** Not using these settings yet! ***

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Debug Settings

Admin Debug Information: + +
Admin Debug Verbose: + +
Front-End Debug Information: + +
Front-End Debug Verbose: + +

Misc. Settings

Google Maps API Key: + + {if $settings.fieldFail.google_maps_api_key}

{$settings.fieldFail.google_maps_api_key}

{/if} +
Optional: See Google Maps JAVAscript API V3 documentation for information. +
Default Map Location: + +
+ + +
Please enter values in decimal degrees. + {if $settings.fieldFail.maps_default_lat}

{$settings.fieldFail.maps_default_lat}

{/if} + {if $settings.fieldFail.maps_default_lon}

{$settings.fieldFail.maps_default_lon}

{/if} +
Time Zone: + + {if $settings.fieldFail.time_zone}

{$settings.fieldFail.time_zone}

{/if} +

Member List Page Options

Show Map: + +
Map Options: + + + + + + + + + + + + + + + + + + + + + + + + + +
Show Member Name as Link to Detail:
Show Logo:
Logo Size: + +
Show Description:
Show Short Description:
Show Address:
Show Street:
Show City, State, ZIP:
Show Country:
Show Region:
Show Phone:
Show Toll Free:
Show URL: + + Display URL as a link: +
Show Categories:
Show Credit Cards:
Show Amenitiies:
+
Show Search Form: + +
Search Form Options: + + + + + + +
Text Search:
Category Search:
Amenities Search:
Show Alpha Index:
+
Show Member List: + +
Member List Options + + + + + + + + + + + + + + + + + + + + + + + + + +
Show Member Name as Link to Detail:
Show Member Logo:
Logo Size: + + {if $settings.fieldFail.list_logo_size}

{$settings.fieldFail.list_logo_size}

{/if} +
Show Address:
Address Options: + + + + +
Show Street:
Show City, State, ZIP:
Show Country:
+
Show Region:
Show Description:
Show Short Description:
Show Phone Number:
Show Toll Free Phone Number:
Show URL: + + Display URL as a link: +
Show Categories:
Show Credit Cards Accepted:
Show Amenities:
+

Member Detail Page Options

Show Map: + +
Map Options: + + + + + + + + + + + + + + + + + + + + + + +
Show Logo:
Logo Size: + +
Show Description:
Show Short Description:
Show Address:
Show Street:
Show City, State, ZIP:
Show Country:
Show Region:
Show Phone:
Show Toll Free:
Show URL: + + Display URL as a link: +
Show Categories:
Show Credit Cards:
Show Amenitiies:
+
Show Directions: + +
Member Detail Options: + + + + + + + + + + + + + + + + + + + + + + + + + +
Show Member Logo:
Logo Size: + + {if $settings.fieldFail.detail_logo_size}

{$settings.fieldFail.detail_logo_size}

{/if} +
Show Address:
Address Options: + + + + +
Show Street:
Show City, State, ZIP:
Show Country:
+
Show Region:
Show Description:
Show Short Description:
Show Phone Number:
Show Toll Free Phone Number:
Show URL: + + Display URL as a link: +
Show Categories:
Show Credit Cards Accepted:
Show Amenities:
Show Image Gallery:
+
+ +
+{include file='admin/footer.html'} diff --git a/views/admin/management/terms.html b/views/admin/management/terms.html new file mode 100644 index 00000000..8508b65a --- /dev/null +++ b/views/admin/management/terms.html @@ -0,0 +1,376 @@ +{include file='admin/management/header.html'} + +

*** Not using these settings yet! ***

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Admin Menu and Tab Names

Members Menu: + + {if $settings.fieldFail.term_admin_menu_members}

{$settings.fieldFail.term_admin_menu_members}

{/if} +
Members Menu Tabs: + + + + + + + + + + + + + +
Main Dashboard: + + {if $settings.fieldFail.term_admin_menu_members_dashboard}

{$settings.fieldFail.term_admin_menu_members_dashboard}

{/if} +
Member List: + + {if $settings.fieldFail.term_admin_menu_members_list}

{$settings.fieldFail.term_admin_menu_members_list}

{/if} +
Reports: + + {if $settings.fieldFail.term_admin_menu_members_reports}

{$settings.fieldFail.term_admin_menu_members_reports}

{/if} +
+
Member Menu: + + {if $settings.fieldFail.term_admin_menu_member}

{$settings.fieldFail.term_admin_menu_member}

{/if} +
Member Menu Tabs: + + + + + + + + + + + + + + + + + + + + + + + + + +
Member Dashboard: + + {if $settings.fieldFail.term_admin_menu_member_dashboard}

{$settings.fieldFail.term_admin_menu_member_dashboard}

{/if} +
Member Info: + + {if $settings.fieldFail.term_admin_menu_member_info}

{$settings.fieldFail.term_admin_menu_member_info}

{/if} +
Locations: + + {if $settings.fieldFail.term_admin_menu_member_locations}

{$settings.fieldFail.term_admin_menu_member_locations}

{/if} +
Facilities: + + {if $settings.fieldFail.term_admin_menu_member_facilities}

{$settings.fieldFail.term_admin_menu_member_facilities}

{/if} +
Attractions: + + {if $settings.fieldFail.term_admin_menu_member_attractions}

{$settings.fieldFail.term_admin_menu_member_attractions}

{/if} +
Contacts: + + {if $settings.fieldFail.term_admin_menu_member_contacts}

{$settings.fieldFail.term_admin_menu_member_contacts}

{/if} +
+
Configure Menu: + + {if $settings.fieldFail.term_admin_menu_configure}

{$settings.fieldFail.term_admin_menu_configure}

{/if} +
Configure Menu Tabs: + + + + + + + + + + + + + + + + + + + + + + + + + +
Member Types: + + {if $settings.fieldFail.term_admin_menu_configure_member_types}

{$settings.fieldFail.term_admin_menu_configure_member_types}

{/if} +
Member Categories: + + {if $settings.fieldFail.term_admin_menu_configure_member_cats}

{$settings.fieldFail.term_admin_menu_configure_member_cats}

{/if} +
Accommodation Types: + + {if $settings.fieldFail.term_admin_menu_configure_accom_types}

{$settings.fieldFail.term_admin_menu_configure_accom_types}

{/if} +
Amenities: + + {if $settings.fieldFail.term_admin_menu_configure_amenities}

{$settings.fieldFail.term_admin_menu_configure_amenities}

{/if} +
Cities: + + {if $settings.fieldFail.term_admin_menu_configure_cities}

{$settings.fieldFail.term_admin_menu_configure_cities}

{/if} +
Regions: + + {if $settings.fieldFail.term_admin_menu_configure_regions}

{$settings.fieldFail.term_admin_menu_configure_regions}

{/if} +
+
Settings Menu: + + {if $settings.fieldFail.term_admin_menu_settings}

{$settings.fieldFail.term_admin_menu_settings}

{/if} +
Settings Menu Tabs: + + + + + + + + + + + + + +
General Settings: + + {if $settings.fieldFail.term_admin_menu_settings_general}

{$settings.fieldFail.term_admin_menu_settings_general}

{/if} +
Terms & Phrases: + + {if $settings.fieldFail.term_admin_menu_settings_terms}

{$settings.fieldFail.term_admin_menu_settings_terms}

{/if} +
Development: + + {if $settings.fieldFail.term_admin_menu_settings_development}

{$settings.fieldFail.term_admin_menu_settings_development}

{/if} +
+

Terms

Member: + + + + + + + + + + + + + + + + + +
Normal: + + {if $settings.fieldFail.term_member}

{$settings.fieldFail.term_member}

{/if} +
Capitalized: + + {if $settings.fieldFail.term_member_cap}

{$settings.fieldFail.term_member_cap}

{/if} +
Plural: + + {if $settings.fieldFail.term_member_plur}

{$settings.fieldFail.term_member_plur}

{/if} +
Plural Capitalized: + + {if $settings.fieldFail.term_member_plur_cap}

{$settings.fieldFail.term_member_plur_cap}

{/if} +
+
Location: + + + + + + + + + + + + + + + + + +
Normal: + + {if $settings.fieldFail.term_location}

{$settings.fieldFail.term_location}

{/if} +
Capitalized: + + {if $settings.fieldFail.term_location_cap}

{$settings.fieldFail.term_location_cap}

{/if} +
Plural: + + {if $settings.fieldFail.term_location_plur}

{$settings.fieldFail.term_location_plur}

{/if} +
Plural Capitalized: + + {if $settings.fieldFail.term_location_plur_cap}

{$settings.fieldFail.term_location_plur_cap}

{/if} +
+
Facility: + + + + + + + + + + + + + + + + + +
Normal: + + {if $settings.fieldFail.term_facility}

{$settings.fieldFail.term_facility}

{/if} +
Capitalized: + + {if $settings.fieldFail.term_facility_cap}

{$settings.fieldFail.term_facility_cap}

{/if} +
Plural: + + {if $settings.fieldFail.term_facility_plur}

{$settings.fieldFail.term_facility_plur}

{/if} +
Plural Capitalized: + + {if $settings.fieldFail.term_facility_plur_cap}

{$settings.fieldFail.term_facility_plur_cap}

{/if} +
+
Attraction: + + + + + + + + + + + + + + + + + +
Normal: + + {if $settings.fieldFail.term_attraction}

{$settings.fieldFail.term_attraction}

{/if} +
Capitalized: + + {if $settings.fieldFail.term_attraction_cap}

{$settings.fieldFail.term_attraction_cap}

{/if} +
Plural: + + {if $settings.fieldFail.term_attraction_plur}

{$settings.fieldFail.term_attraction_plur}

{/if} +
Plural Capitalized: + + {if $settings.fieldFail.term_attraction_plur_cap}

{$settings.fieldFail.term_attraction_plur_cap}

{/if} +
+
Contact: + + + + + + + + + + + + + + + + + +
Normal: + + {if $settings.fieldFail.term_contact}

{$settings.fieldFail.term_contact}

{/if} +
Capitalized: + + {if $settings.fieldFail.term_contact_cap}

{$settings.fieldFail.term_contact_cap}

{/if} +
Plural: + + {if $settings.fieldFail.term_contact_plur}

{$settings.fieldFail.term_contact_plur}

{/if} +
Plural Capitalized: + + {if $settings.fieldFail.term_contact_plur_cap}

{$settings.fieldFail.term_contact_plur_cap}

{/if} +
+
+ +
+{include file='admin/footer.html'} diff --git a/views/admin/settings/development.html b/views/admin/settings/development.html deleted file mode 100644 index 87ef9dd5..00000000 --- a/views/admin/settings/development.html +++ /dev/null @@ -1,135 +0,0 @@ -{include file='admin/settings/header.html'} - -

Note: Customers will not have access to this tab.

- -

Development Activities

- -
    -
  • -

    Import

    -
      -
    • -

      - Import data from "Connections" business directory - - {if $importNotice} -

      {$importNotice}
      - {/if} -

      - - {if $import} - -

      Members imported: {$membersImported}

      - - {else} - {if $haveMembers} -
      -
      - Default data to use when importing members. - - - -
      Default member type:
      Default region name:
      -
      -

      - - Skip All   - Import All -

      -
      -
        -
      • *** THIS ACTION WILL FULLY RESET YOUR MEMBERS DATABASE ***
      • -
      • This action does not check for duplicate members!
      • -
      -
      - - - - - - - - - - - - - - - - - - {foreach $members as $m} - - - - {assign var="i" value="0"} - {foreach $m.addresses as $a} - {if $i++ gt 1} - - - - {/if} - - - - - - - - - - {/foreach} - {/foreach} - -
      SkipNameAddr Line 1Addr Line 2Addr Line 3CityStateZIPCountryLat/Lon
      {$m.id}{$m.organization}
        {$a.line_1}{$a.line_2}{$a.line_3}{$a.city}{$a.state}{$a.zipcode}{$a.country}{$a.latitude|number_format:3:".":","}/{$a.longitude|number_format:3:".":","}
      -
      - {/if} - {/if} -
    • -
    -

    Database

    - -
  • -
- -
-

Docuemtation and References

-

Data Abstract Class Documentation

-
-{if $resultMessage} -
-
- {$resultMessage} -
-{/if} - -{if $haveMembers} - -{/if} - - -{include file='admin/footer.html'} diff --git a/views/admin/settings/header.html b/views/admin/settings/header.html deleted file mode 100644 index 10ae4a53..00000000 --- a/views/admin/settings/header.html +++ /dev/null @@ -1,12 +0,0 @@ -
- -

{$glmPluginName} Configuration

- - -
- \ No newline at end of file diff --git a/views/admin/settings/import.html b/views/admin/settings/import.html deleted file mode 100644 index c05d239b..00000000 --- a/views/admin/settings/import.html +++ /dev/null @@ -1,95 +0,0 @@ -{include file='admin/settings/header.html'} - -

Note: Customers will not have access to this tab.

- -

Data Import

-

- This process export data from a legacy Gaslight Media Member DB database and imports that data into this plugin. It will only work with a Postgres database. - The process will include the following steps. -

-
    -
  1. Provide information on the legacy database from which we'll be extracting data.
  2. -
  3. Test that database to make sure it's compatible with this process.
  4. -
  5. Read the needed data from the legacy database.
  6. -
  7. Review the extracted data to make sure it looks like the data you want to import.
  8. -
  9. Import the extracted data into is plugin
  10. -
  11. Review resulst
  12. -
- - -

Data Import Step 1

-{if isset($genError)} -

-

Oops!

-

{$genError}

-

-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Database Server: - - {if isset($dbServer)} -

{$dbServer.problem}

- {/if} -
Database Port #: - - {if isset($dbPort)} -

{$dbPort.problem}

- {/if} -
Database Name: - - {if isset($dbName)} -

{$dbName.problem}

- {/if} -
Database User: - - {if isset($dbUser)} -

{$dbUser.problem}

- {/if} -
Base Original Image URL: - - {if isset($dbImageURL)} -

{$dbImageURL.problem}

- {/if} -
Reset Database Before Import: - -
NOTE: Selecting this option will remove all existing data from the Member database! -
If you do not select this option, the new data will be added to the database and there will be no attempt to match up imported data with the existing data. -
- - - -
- - -{include file='admin/footer.html'} diff --git a/views/admin/settings/import/readDatabase.html b/views/admin/settings/import/readDatabase.html deleted file mode 100644 index 7fe5168d..00000000 --- a/views/admin/settings/import/readDatabase.html +++ /dev/null @@ -1,56 +0,0 @@ -{include file='admin/settings/header.html'} - -

Note: Customers will not have access to this tab.

- -

Data Import - Test Database

-
    -
  1. Provide information on the legacy database from which we'll be extracting data.
  2. -
  3. Test database to make sure it's compatible with this process.
  4. -
  5. Read the needed data from the legacy database.
  6. -
  7. Review the extracted data to make sure it looks like the data you want to import.
  8. -
  9. Import the extracted data into is plugin
  10. -
  11. Review resulst
  12. -
- - -

Data Import Step 2

-{if isset($genError)} -

-

Oops!

-

{$genError}

-

-{/if} -
- - - - - - - - - - - - - - - - - - - -
Database Server: - -
Database Name: - -
Database User: - -
- - - -
- - -{include file='admin/footer.html'} diff --git a/views/admin/settings/index.html b/views/admin/settings/index.html deleted file mode 100644 index f4826d23..00000000 --- a/views/admin/settings/index.html +++ /dev/null @@ -1,297 +0,0 @@ -{include file='admin/settings/header.html'} - -

*** Not using these settings yet! ***

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Debug Settings

Admin Debug Information: - -
Admin Debug Verbose: - -
Front-End Debug Information: - -
Front-End Debug Verbose: - -

Misc. Settings

Google Maps API Key: - - {if $settings.fieldFail.google_maps_api_key}

{$settings.fieldFail.google_maps_api_key}

{/if} -
Optional: See Google Maps JAVAscript API V3 documentation for information. -
Default Map Location: - -
- - -
Please enter values in decimal degrees. - {if $settings.fieldFail.maps_default_lat}

{$settings.fieldFail.maps_default_lat}

{/if} - {if $settings.fieldFail.maps_default_lon}

{$settings.fieldFail.maps_default_lon}

{/if} -
Time Zone: - - {if $settings.fieldFail.time_zone}

{$settings.fieldFail.time_zone}

{/if} -

Member List Page Options

Show Map: - -
Map Options: - - - - - - - - - - - - - - - - - - - - - - - - - -
Show Member Name as Link to Detail:
Show Logo:
Logo Size: - -
Show Description:
Show Short Description:
Show Address:
Show Street:
Show City, State, ZIP:
Show Country:
Show Region:
Show Phone:
Show Toll Free:
Show URL: - - Display URL as a link: -
Show Categories:
Show Credit Cards:
Show Amenitiies:
-
Show Search Form: - -
Search Form Options: - - - - - - -
Text Search:
Category Search:
Amenities Search:
Show Alpha Index:
-
Show Member List: - -
Member List Options - - - - - - - - - - - - - - - - - - - - - - - - - -
Show Member Name as Link to Detail:
Show Member Logo:
Logo Size: - - {if $settings.fieldFail.list_logo_size}

{$settings.fieldFail.list_logo_size}

{/if} -
Show Address:
Address Options: - - - - -
Show Street:
Show City, State, ZIP:
Show Country:
-
Show Region:
Show Description:
Show Short Description:
Show Phone Number:
Show Toll Free Phone Number:
Show URL: - - Display URL as a link: -
Show Categories:
Show Credit Cards Accepted:
Show Amenities:
-

Member Detail Page Options

Show Map: - -
Map Options: - - - - - - - - - - - - - - - - - - - - - - -
Show Logo:
Logo Size: - -
Show Description:
Show Short Description:
Show Address:
Show Street:
Show City, State, ZIP:
Show Country:
Show Region:
Show Phone:
Show Toll Free:
Show URL: - - Display URL as a link: -
Show Categories:
Show Credit Cards:
Show Amenitiies:
-
Show Directions: - -
Member Detail Options: - - - - - - - - - - - - - - - - - - - - - - - - - -
Show Member Logo:
Logo Size: - - {if $settings.fieldFail.detail_logo_size}

{$settings.fieldFail.detail_logo_size}

{/if} -
Show Address:
Address Options: - - - - -
Show Street:
Show City, State, ZIP:
Show Country:
-
Show Region:
Show Description:
Show Short Description:
Show Phone Number:
Show Toll Free Phone Number:
Show URL: - - Display URL as a link: -
Show Categories:
Show Credit Cards Accepted:
Show Amenities:
Show Image Gallery:
-
- -
-{include file='admin/footer.html'} diff --git a/views/admin/settings/terms.html b/views/admin/settings/terms.html deleted file mode 100644 index 5b239b0f..00000000 --- a/views/admin/settings/terms.html +++ /dev/null @@ -1,376 +0,0 @@ -{include file='admin/settings/header.html'} - -

*** Not using these settings yet! ***

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Admin Menu and Tab Names

Members Menu: - - {if $settings.fieldFail.term_admin_menu_members}

{$settings.fieldFail.term_admin_menu_members}

{/if} -
Members Menu Tabs: - - - - - - - - - - - - - -
Main Dashboard: - - {if $settings.fieldFail.term_admin_menu_members_dashboard}

{$settings.fieldFail.term_admin_menu_members_dashboard}

{/if} -
Member List: - - {if $settings.fieldFail.term_admin_menu_members_list}

{$settings.fieldFail.term_admin_menu_members_list}

{/if} -
Reports: - - {if $settings.fieldFail.term_admin_menu_members_reports}

{$settings.fieldFail.term_admin_menu_members_reports}

{/if} -
-
Member Menu: - - {if $settings.fieldFail.term_admin_menu_member}

{$settings.fieldFail.term_admin_menu_member}

{/if} -
Member Menu Tabs: - - - - - - - - - - - - - - - - - - - - - - - - - -
Member Dashboard: - - {if $settings.fieldFail.term_admin_menu_member_dashboard}

{$settings.fieldFail.term_admin_menu_member_dashboard}

{/if} -
Member Info: - - {if $settings.fieldFail.term_admin_menu_member_info}

{$settings.fieldFail.term_admin_menu_member_info}

{/if} -
Locations: - - {if $settings.fieldFail.term_admin_menu_member_locations}

{$settings.fieldFail.term_admin_menu_member_locations}

{/if} -
Facilities: - - {if $settings.fieldFail.term_admin_menu_member_facilities}

{$settings.fieldFail.term_admin_menu_member_facilities}

{/if} -
Attractions: - - {if $settings.fieldFail.term_admin_menu_member_attractions}

{$settings.fieldFail.term_admin_menu_member_attractions}

{/if} -
Contacts: - - {if $settings.fieldFail.term_admin_menu_member_contacts}

{$settings.fieldFail.term_admin_menu_member_contacts}

{/if} -
-
Configure Menu: - - {if $settings.fieldFail.term_admin_menu_configure}

{$settings.fieldFail.term_admin_menu_configure}

{/if} -
Configure Menu Tabs: - - - - - - - - - - - - - - - - - - - - - - - - - -
Member Types: - - {if $settings.fieldFail.term_admin_menu_configure_member_types}

{$settings.fieldFail.term_admin_menu_configure_member_types}

{/if} -
Member Categories: - - {if $settings.fieldFail.term_admin_menu_configure_member_cats}

{$settings.fieldFail.term_admin_menu_configure_member_cats}

{/if} -
Accommodation Types: - - {if $settings.fieldFail.term_admin_menu_configure_accom_types}

{$settings.fieldFail.term_admin_menu_configure_accom_types}

{/if} -
Amenities: - - {if $settings.fieldFail.term_admin_menu_configure_amenities}

{$settings.fieldFail.term_admin_menu_configure_amenities}

{/if} -
Cities: - - {if $settings.fieldFail.term_admin_menu_configure_cities}

{$settings.fieldFail.term_admin_menu_configure_cities}

{/if} -
Regions: - - {if $settings.fieldFail.term_admin_menu_configure_regions}

{$settings.fieldFail.term_admin_menu_configure_regions}

{/if} -
-
Settings Menu: - - {if $settings.fieldFail.term_admin_menu_settings}

{$settings.fieldFail.term_admin_menu_settings}

{/if} -
Settings Menu Tabs: - - - - - - - - - - - - - -
General Settings: - - {if $settings.fieldFail.term_admin_menu_settings_general}

{$settings.fieldFail.term_admin_menu_settings_general}

{/if} -
Terms & Phrases: - - {if $settings.fieldFail.term_admin_menu_settings_terms}

{$settings.fieldFail.term_admin_menu_settings_terms}

{/if} -
Development: - - {if $settings.fieldFail.term_admin_menu_settings_development}

{$settings.fieldFail.term_admin_menu_settings_development}

{/if} -
-

Terms

Member: - - - - - - - - - - - - - - - - - -
Normal: - - {if $settings.fieldFail.term_member}

{$settings.fieldFail.term_member}

{/if} -
Capitalized: - - {if $settings.fieldFail.term_member_cap}

{$settings.fieldFail.term_member_cap}

{/if} -
Plural: - - {if $settings.fieldFail.term_member_plur}

{$settings.fieldFail.term_member_plur}

{/if} -
Plural Capitalized: - - {if $settings.fieldFail.term_member_plur_cap}

{$settings.fieldFail.term_member_plur_cap}

{/if} -
-
Location: - - - - - - - - - - - - - - - - - -
Normal: - - {if $settings.fieldFail.term_location}

{$settings.fieldFail.term_location}

{/if} -
Capitalized: - - {if $settings.fieldFail.term_location_cap}

{$settings.fieldFail.term_location_cap}

{/if} -
Plural: - - {if $settings.fieldFail.term_location_plur}

{$settings.fieldFail.term_location_plur}

{/if} -
Plural Capitalized: - - {if $settings.fieldFail.term_location_plur_cap}

{$settings.fieldFail.term_location_plur_cap}

{/if} -
-
Facility: - - - - - - - - - - - - - - - - - -
Normal: - - {if $settings.fieldFail.term_facility}

{$settings.fieldFail.term_facility}

{/if} -
Capitalized: - - {if $settings.fieldFail.term_facility_cap}

{$settings.fieldFail.term_facility_cap}

{/if} -
Plural: - - {if $settings.fieldFail.term_facility_plur}

{$settings.fieldFail.term_facility_plur}

{/if} -
Plural Capitalized: - - {if $settings.fieldFail.term_facility_plur_cap}

{$settings.fieldFail.term_facility_plur_cap}

{/if} -
-
Attraction: - - - - - - - - - - - - - - - - - -
Normal: - - {if $settings.fieldFail.term_attraction}

{$settings.fieldFail.term_attraction}

{/if} -
Capitalized: - - {if $settings.fieldFail.term_attraction_cap}

{$settings.fieldFail.term_attraction_cap}

{/if} -
Plural: - - {if $settings.fieldFail.term_attraction_plur}

{$settings.fieldFail.term_attraction_plur}

{/if} -
Plural Capitalized: - - {if $settings.fieldFail.term_attraction_plur_cap}

{$settings.fieldFail.term_attraction_plur_cap}

{/if} -
-
Contact: - - - - - - - - - - - - - - - - - -
Normal: - - {if $settings.fieldFail.term_contact}

{$settings.fieldFail.term_contact}

{/if} -
Capitalized: - - {if $settings.fieldFail.term_contact_cap}

{$settings.fieldFail.term_contact_cap}

{/if} -
Plural: - - {if $settings.fieldFail.term_contact_plur}

{$settings.fieldFail.term_contact_plur}

{/if} -
Plural Capitalized: - - {if $settings.fieldFail.term_contact_plur_cap}

{$settings.fieldFail.term_contact_plur_cap}

{/if} -
-
- -
-{include file='admin/footer.html'}