Import tab for event management
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 15 Mar 2016 13:45:42 +0000 (09:45 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 15 Mar 2016 13:45:42 +0000 (09:45 -0400)
Adding Import event tab.

models/admin/management/events.php
views/admin/events/list.html
views/admin/management/events.html

index d50a800..78ed974 100644 (file)
@@ -38,6 +38,34 @@ class GlmMembersAdmin_management_events extends GlmDataEventsManagement
      * @access public
      */
     public $wpdb;
+    /**
+     * dbh Postgres database connection
+     *
+     * @var mixed
+     * @access public
+     */
+    public $dbh;
+    /**
+     * settings used for the schema and tablenames
+     *
+     * @var mixed
+     * @access public
+     */
+    public $settings = array();
+    /**
+     * categories
+     *
+     * @var bool
+     * @access public
+     */
+    public $categories = array();
+    /**
+     * events
+     *
+     * @var bool
+     * @access public
+     */
+    public $events = array();
 
     /**
      * Constructor
@@ -123,7 +151,35 @@ class GlmMembersAdmin_management_events extends GlmDataEventsManagement
                 }
                 switch ($import) {
                     case 'true':
-                        $importResult = '<pre>' . print_r( $_REQUEST, true ) . '</pre>';
+                        $importResult = '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
+                        $db_host      = filter_var( $_REQUEST['db_host'], FILTER_SANITIZE_STRING );
+                        $db_name      = filter_var( $_REQUEST['db_name'], FILTER_SANITIZE_STRING );
+                        $db_user      = filter_var( $_REQUEST['db_user'], FILTER_SANITIZE_STRING );
+                        $db_password  = filter_var( $_REQUEST['db_password'], FILTER_SANITIZE_STRING );
+                        $this->connectPostgresDb($db_host, $db_name, $db_user, $db_password);
+
+                        $this->settings = filter_var_array(
+                            $_REQUEST,
+                            array(
+                                'schema' => FILTER_SANITIZE_STRING,
+                                'cattablename' => FILTER_SANITIZE_STRING,
+                                'tablename' => FILTER_SANITIZE_STRING,
+                                'sdate'   => array(
+                                    'filter'  => FILTER_VALIDATE_REGEXP,
+                                    'options' => array(
+                                        'regexp' => '%[0-9]{2}/[0-9]{2}/[0-9]{4}%'
+                                    )
+                                )
+
+                            )
+                        );
+                        $importResult .= '<pre>$this->settings: ' . print_r($this->settings, true) . '</pre>';
+                        $this->addCategories();
+                        $importResult .= $this->addEvents();
+
+                        $importResult .= '<pre>$this->categories: ' . print_r($this->categories, true) . '</pre>';
+
+
                         break;
                     default:
                         break;
@@ -145,7 +201,7 @@ class GlmMembersAdmin_management_events extends GlmDataEventsManagement
                         'modelRedirect' => 'index',
                         'view' => 'admin/error/index.html',
                         'data' => array(
-                                'reason' => 'User does not have rights to make configuration changes.'
+                            'reason' => 'User does not have rights to make configuration changes.'
                         )
                     );
                 }
@@ -215,6 +271,39 @@ class GlmMembersAdmin_management_events extends GlmDataEventsManagement
 
     }
 
+    public function connectPostgresDb($db_host, $db_name, $db_user, $db_password)
+    {
+        $connStr      = "pgsql:";
+        if ( $db_host ) {
+            $connPart[] = "host={$db_host}";
+        }
+        if ( $db_name ) {
+            $connPart[] = "dbname={$db_name}";
+        }
+        if ( $db_user ) {
+            $connPart[] = "user={$db_user}";
+        }
+        if ( $db_password ) {
+            $connPart[] = "password={$db_password}";
+        }
+        if ( !empty($connPart) ) {
+             $connStr .= implode( " ", $connPart );
+        }
+        $driverOptions = array(
+            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_BOTH,
+        );
+        try {
+            $this->dbh = new PDO($connStr, null, null, $driverOptions);
+            $this->dbh->setAttribute(
+                PDO::ATTR_ERRMODE,
+                PDO::ERRMODE_EXCEPTION
+            );
+        } catch(PDOException $e) {
+            echo '<pre>$e: ' . print_r($e, true) . '</pre>';
+            wp_die();
+        }
+    }
+
     /**
      * Test Recurrance Calculation of Dates
      *
@@ -298,10 +387,125 @@ class GlmMembersAdmin_management_events extends GlmDataEventsManagement
 
     }
 
-
-    public function importEvents()
+    public function addCategories()
     {
+        $return = '';
+        $sql = "
+          SELECT *
+            FROM {$this->settings['schema']}.{$this->settings['cattablename']}
+        ORDER BY id";
+        $return .= '<pre>$sql: ' . print_r($sql, true) . '</pre>';
+        try {
+            $categories = $this->dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
+            $return .= '<pre>$categories: ' . print_r($categories, true) . '</pre>';
+            foreach ( $categories as $category ) {
+                // first check to see if the category is already there
+                $sql = "
+                SELECT id
+                  FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "categories
+                 WHERE name = '" . esc_sql( trim($category['name']) ) . "'";
+                $return .= '<pre>$sql: ' . print_r($sql, true) . '</pre>';
+                $found = $this->wpdb->get_row($sql, ARRAY_A);
+                $return .= '<pre>$found: ' . print_r($found, true) . '</pre>';
+                if ( !isset($found) ) {
+                    $this->wpdb->insert(
+                        GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'categories',
+                        array(
+                            'name'   => trim($category['name']),
+                            'parent' => 0
+                        ),
+                        array(
+                            '%s',
+                            '%d'
+                        )
+                    );
+                    $this->categories[$this->wpdb->insert_id] = trim($category['name']);
+                } else {
+                     $this->categories[$found['id']] = trim($category['name']);
+                }
+            }
+        } catch(PDOException $e) {
+            echo '<pre>$e: ' . print_r($e, true) . '</pre>';
+            die('end here');
+        }
+        return $return;
+    }
 
+    public function addEvents()
+    {
+        $sql = "
+        SELECT *
+          FROM {$this->settings['schema']}.{$this->settings['tablename']}
+         WHERE edate >= '{$this->settings['sdate']}'::DATE";
+        try {
+            $events = $this->dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
+            $return .= '<pre>$events: ' . print_r($events, true) . '</pre>';
+            foreach ( $events as $event ) {
+                // see if event is in there by old_event_id
+                $sql = "
+                SELECT id
+                  FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events
+                 WHERE old_event_id = '" . esc_sql( trim($event['id']) ) . "'";
+                $found = $this->wpdb->get_row($sql, ARRAY_A);
+                if ( isset($found) ) {
+                    $this->wpdb->update(
+                        GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'events',
+                        array(
+                            'status'       => (($event['visable'] == '1')
+                                                ? $this->config['status_numb']['active']
+                                                : $this->config['status_numb']['Inactive']),
+                            'created'      => $event['create_date'],
+                            'updated'      => $event['create_date'],
+                            'approved'     => $event['approved_date'],
+                            'name'         => $event['header'],
+                            'descr'        => $event['descr'],
+                            'image'        => $event['image'],
+                        ),
+                        array( 'old_event_id' => $event['id'] ),
+                        array(
+                             '%d',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%s',
+                        ),
+                        array( '%d' )
+                    );
+                } else {
+                    $this->wpdb->insert(
+                        GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'events',
+                        array(
+                            'status'       => (($event['visable'] == '1')
+                                                ? $this->config['status_numb']['active']
+                                                : $this->config['status_numb']['Inactive']),
+                            'created'      => $event['create_date'],
+                            'updated'      => $event['create_date'],
+                            'approved'     => $event['approved_date'],
+                            'name'         => $event['header'],
+                            'descr'        => $event['descr'],
+                            'image'        => $event['image'],
+                            'old_event_id' => $event['id']
+                        ),
+                        array(
+                             '%d',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%s',
+                             '%d',
+                        )
+                    );
+                }
+            }
+        } catch(PDOException $e) {
+            echo '<pre>$e: ' . print_r($e, true) . '</pre>';
+            die('end here');
+        }
+        return $return;
     }
 }
 
index 4960743..505fbd0 100644 (file)
 
              var availableTags = [
     {foreach $events as $e}
-                { label: "{$e.name|unescape:'html'}", value: "{$e.name|unescape:'html'}", id: '{$e.id}' },
+                { label: "{$e.name|escape:'html'}", value: "{$e.name|unescape:'html'}", id: '{$e.id}' },
     {/foreach}
              ];
              $( "#glmEventsSearch" ).autocomplete({
index 7547e81..0114dcf 100644 (file)
                     <input type="hidden" name="glm_action" value="events">
                     <input type="hidden" name="option" value="eventimport">
                     <input type="hidden" name="import" value="true">
-                    <div style="width: 200px;">
-                        <label for="db_host">DB Host</label>
-                        <input id="db_host" name="db_host" />
-                        <label for="db_name">DB Name</label>
-                        <input id="db_name" name="db_name" />
-                        <label for="db_user">DB User</label>
-                        <input id="db_user" name="db_user" />
-                        <label for="db_password">DB Password</label>
-                        <input id="db_password" name="db_password" />
+                    <div style="float:left;width: 200px;">
+                        <fieldset>
+                            <legend>Database Creds</legend>
+                            <label for="db_host">DB Host</label>
+                            <input id="db_host" name="db_host" />
+                            <label for="db_name">DB Name</label>
+                            <input id="db_name" name="db_name" />
+                            <label for="db_user">DB User</label>
+                            <input id="db_user" name="db_user" />
+                            <label for="db_password">DB Password</label>
+                            <input id="db_password" name="db_password" />
+                        <fieldset>
+                    </div>
+                    <div style="float:left;width: 200px;">
+                        <fieldset>
+                            <legend>Settings</legend>
+                            <label for="schema">Schema</label>
+                            <input id="schema" name="schema" />
+                            <label for="cattablename">Category Table Name</label>
+                            <input id="cattablename" name="cattablename" />
+                            <label for="tablename">Event Table Name</label>
+                            <input id="tablename" name="tablename" />
+                            <label for="sdate">Start Date</label>
+                            <input id="sdate" name="sdate" />
+                        </fieldset>
+
+                        <input type="submit" value="Import Events" />
                     </div>
                 </form>
             </td>