Example #1
0
 /**
  * Load the input form for a pod item
  *
  * $params['datatype'] string The datatype name
  * $params['pod_id'] int The item's pod ID
  * $params['tbl_row_id'] int (optional) The item's ID
  * $params['public_columns'] array An associative array of columns
  *
  * @param array $params An associative array of parameters
  * @since 1.7.9
  */
 function load_pod_item($params)
 {
     if (defined('PODS_STRICT_MODE') && PODS_STRICT_MODE) {
         $params = pods_sanitize($params);
     }
     $params = (object) $params;
     $params->tbl_row_id = (int) (isset($params->tbl_row_id) ? $params->tbl_row_id : null);
     $params->pod_id = (int) (isset($params->pod_id) ? $params->pod_id : null);
     if (empty($params->tbl_row_id)) {
         $params->tbl_row_id = null;
         if (!empty($params->pod_id)) {
             $result = pod_query("SELECT tbl_row_id FROM @wp_pod WHERE id = {$params->pod_id} LIMIT 1", 'Item not found', null, 'Item not found');
             $params->tbl_row_id = mysql_result($result, 0);
         }
     }
     $obj = new Pod($params->datatype, $params->tbl_row_id);
     $pod_id = 0;
     if (!empty($params->tbl_row_id) && !empty($obj->data)) {
         $pod_id = $obj->get_pod_id();
     }
     return $obj->showform($pod_id, $params->public_columns = null);
 }
Example #2
0
 /**
  * @param $import
  * @param bool $output
  */
 public function heres_the_beef($import, $output = true)
 {
     global $wpdb;
     $api = pods_api();
     for ($i = 0; $i < 40000; $i++) {
         echo "  \t";
         // extra spaces
     }
     $default_data = array('pod' => null, 'table' => null, 'reset' => null, 'update_on' => null, 'where' => null, 'fields' => array(), 'row_filter' => null, 'pre_save' => null, 'post_save' => null, 'sql' => null, 'sort' => null, 'limit' => null, 'page' => null, 'output' => null, 'page_var' => 'ipg', 'bypass_helpers' => false);
     $default_field_data = array('field' => null, 'filter' => null);
     if (!is_array($import)) {
         $import = array($import);
     } elseif (empty($import)) {
         die('<h1 style="color:red;font-weight:bold;">ERROR: No imports configured</h1>');
     }
     $import_counter = 0;
     $total_imports = count($import);
     $paginated = false;
     $avg_time = -1;
     $total_time = 0;
     $counter = 0;
     $avg_unit = 100;
     $avg_counter = 0;
     foreach ($import as $datatype => $data) {
         $import_counter++;
         flush();
         @ob_end_flush();
         usleep(50000);
         if (!is_array($data)) {
             $datatype = $data;
             $data = array('table' => $data);
         }
         if (isset($data[0])) {
             $data = array('table' => $data[0]);
         }
         $data = array_merge($default_data, $data);
         if (null === $data['pod']) {
             $data['pod'] = array('name' => $datatype);
         }
         if (false !== $output) {
             echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - <em>" . $data['pod']['name'] . "</em> - <strong>Loading Pod: " . $data['pod']['name'] . "</strong>\n";
         }
         if (2 > count($data['pod'])) {
             $data['pod'] = $api->load_pod(array('name' => $data['pod']['name']));
         }
         if (empty($data['pod']['fields'])) {
             continue;
         }
         if (null === $data['table']) {
             $data['table'] = $data['pod']['name'];
         }
         if ($data['reset'] === true) {
             if (false !== $output) {
                 echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - <strong style='color:blue;'>Resetting Pod: " . $data['pod']['name'] . "</strong>\n";
             }
             $api->reset_pod(array('id' => $data['pod']['id'], 'name' => $data['pod']['name']));
         }
         if (null === $data['sort'] && null !== $data['update_on'] && isset($data['fields'][$data['update_on']])) {
             if (isset($data['fields'][$data['update_on']]['field'])) {
                 $data['sort'] = $data['fields'][$data['update_on']]['field'];
             } else {
                 $data['sort'] = $data['update_on'];
             }
         }
         $page = 1;
         if (false !== $data['page_var'] && isset($_GET[$data['page_var']])) {
             $page = absval($_GET[$data['page_var']]);
         }
         if (null === $data['sql']) {
             $data['sql'] = "SELECT * FROM {$data['table']}" . (null !== $data['where'] ? " WHERE {$data['where']}" : '') . (null !== $data['sort'] ? " ORDER BY {$data['sort']}" : '') . (null !== $data['limit'] ? " LIMIT " . (1 < $page ? ($page - 1) * $data['limit'] . ',' : '') . "{$data['limit']}" : '');
         }
         if (false !== $output) {
             echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Getting Results: " . $data['pod']['name'] . "\n";
         }
         if (false !== $output) {
             echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Using Query: <small><code>" . $data['sql'] . "</code></small>\n";
         }
         $result = $wpdb->get_results($data['sql'], ARRAY_A);
         if (false !== $output) {
             echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Results Found: " . count($result) . "\n";
         }
         $avg_time = -1;
         $total_time = 0;
         $counter = 0;
         $avg_unit = 100;
         $avg_counter = 0;
         $result_count = count($result);
         $paginated = false;
         if (false !== $data['page_var'] && $result_count == $data['limit']) {
             $paginated = "<input type=\"button\" onclick=\"document.location=\\'" . pods_ui_var_update(array($data['page_var'] => $page + 1), false, false) . "\\';\" value=\"  Continue Import &raquo;  \" />";
         }
         if ($result_count < $avg_unit && 5 < $result_count) {
             $avg_unit = number_format($result_count / 5, 0, '', '');
         } elseif (2000 < $result_count && 10 < count($data['pod']['fields'])) {
             $avg_unit = 40;
         }
         $data['count'] = $result_count;
         timer_start();
         if (false !== $output && 1 == $import_counter) {
             echo "<div style='width:50%;background-color:navy;padding:10px 10px 30px 10px;color:#FFF;position:absolute;top:10px;left:25%;text-align:center;'><p id='progress_status' align='center'>" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Running Importer..</p><br /><small>This will automatically update every " . $avg_unit . " rows</small></div>\n";
         }
         foreach ($result as $k => $row) {
             flush();
             @ob_end_flush();
             usleep(50000);
             if (false !== $output) {
                 echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Processing Row #" . ($k + 1) . "\n";
             }
             if (null !== $data['row_filter'] && function_exists($data['row_filter'])) {
                 if (false !== $output) {
                     echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Filtering <strong>" . $data['row_filter'] . "</strong> on Row #" . ($k + 1) . "\n";
                 }
                 $row = $data['row_filter']($row, $data);
             }
             if (!is_array($row)) {
                 continue;
             }
             $params = array('datatype' => $data['pod']['name'], 'columns' => array(), 'bypass_helpers' => $data['bypass_helpers']);
             foreach ($data['pod']['fields'] as $fk => $field_info) {
                 $field = $field_info['name'];
                 if (!empty($data['fields']) && !isset($data['fields'][$field]) && !in_array($field, $data['fields'])) {
                     continue;
                 }
                 if (isset($data['fields'][$field])) {
                     if (is_array($data['fields'][$field])) {
                         $field_data = $data['fields'][$field];
                     } else {
                         $field_data = array('field' => $data['fields'][$field]);
                     }
                 } else {
                     $field_data = array();
                 }
                 if (!is_array($field_data)) {
                     $field = $field_data;
                     $field_data = array();
                 }
                 $field_data = array_merge($default_field_data, $field_data);
                 if (null === $field_data['field']) {
                     $field_data['field'] = $field;
                 }
                 $data['fields'][$field] = $field_data;
                 $value = '';
                 if (isset($row[$field_data['field']])) {
                     $value = $row[$field_data['field']];
                 }
                 if (null !== $field_data['filter']) {
                     if (function_exists($field_data['filter'])) {
                         if (false !== $output) {
                             echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Filtering <strong>" . $field_data['filter'] . "</strong> on Field: " . $field . "\n";
                         }
                         $value = $field_data['filter']($value, $row, $data);
                     } else {
                         $value = '';
                     }
                 }
                 if (1 > strlen($value) && 1 == $field_info['required']) {
                     die('<h1 style="color:red;font-weight:bold;">ERROR: Field Required for <strong>' . $field . '</strong></h1>');
                 }
                 $params['columns'][$field] = $value;
                 unset($value);
                 unset($field_data);
                 unset($field_info);
                 unset($fk);
             }
             if (empty($params['columns'])) {
                 continue;
             }
             $params['columns'] = pods_sanitize($params['columns']);
             if (null !== $data['update_on'] && isset($params['columns'][$data['update_on']])) {
                 if (false !== $output) {
                     echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Checking for Existing Item\n";
                 }
                 $check = new Pod($data['pod']['name']);
                 $check->findRecords(array('orderby' => 't.id', 'limit' => 1, 'where' => "t.{$data['update_on']} = '{$params['columns'][$data['update_on']]}'", 'search' => false, 'page' => 1));
                 if (0 < $check->getTotalRows()) {
                     $check->fetchRecord();
                     $params['tbl_row_id'] = $check->get_field('id');
                     $params['pod_id'] = $check->get_pod_id();
                     if (false !== $output) {
                         echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Found Existing Item w/ ID: " . $params['tbl_row_id'] . "\n";
                     }
                     unset($check);
                 }
                 if (!isset($params['tbl_row_id']) && false !== $output) {
                     echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Existing item not found - Creating New\n";
                 }
             }
             if (null !== $data['pre_save'] && function_exists($data['pre_save'])) {
                 if (false !== $output) {
                     echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Running Pre Save <strong>" . $data['pre_save'] . "</strong> on " . $data['pod']['name'] . "\n";
                 }
                 $params = $data['pre_save']($params, $row, $data);
             }
             $id = $api->save_pod_item($params);
             if (false !== $output) {
                 echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - <strong>Saved Row #" . ($k + 1) . " w/ ID: " . $id . "</strong>\n";
             }
             $params['tbl_row_id'] = $id;
             if (null !== $data['post_save'] && function_exists($data['post_save'])) {
                 if (false !== $output) {
                     echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - Running Post Save <strong>" . $data['post_save'] . "</strong> on " . $data['pod']['name'] . "\n";
                 }
                 $data['post_save']($params, $row, $data);
             }
             unset($params);
             unset($result[$k]);
             unset($row);
             wp_cache_flush();
             $wpdb->queries = array();
             $avg_counter++;
             $counter++;
             if ($avg_counter == $avg_unit && false !== $output) {
                 $avg_counter = 0;
                 $avg_time = timer_stop(0, 10);
                 $total_time += $avg_time;
                 $rows_left = $result_count - $counter;
                 $estimated_time_left = $total_time / $counter * $rows_left / 60;
                 $percent_complete = 100 - $rows_left * 100 / $result_count;
                 echo "<script type='text/javascript'>document.getElementById('progress_status').innerHTML = '" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em><br /><strong>" . $percent_complete . "% Complete</strong><br /><strong>Estimated Time Left:</strong> " . $estimated_time_left . " minute(s) or " . $estimated_time_left / 60 . " hours(s)<br /><strong>Time Spent:</strong> " . $total_time / 60 . " minute(s)<br /><strong>Rows Done:</strong> " . ($result_count - $rows_left) . "/" . $result_count . "<br /><strong>Rows Left:</strong> " . $rows_left . "';</script>\n";
                 echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - <strong>Updated Status:</strong> " . $percent_complete . "% Complete</strong>\n";
             }
         }
         if (false !== $output) {
             $avg_counter = 0;
             $avg_time = timer_stop(0, 10);
             $total_time += $avg_time;
             $rows_left = $result_count - $counter;
             $estimated_time_left = $total_time / $counter * $rows_left / 60;
             $percent_complete = 100 - $rows_left * 100 / $result_count;
             echo "<script type='text/javascript'>document.getElementById('progress_status').innerHTML = '" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em><br /><strong style=\\'color:green;\\'>100% Complete</strong><br /><br /><strong>Time Spent:</strong> " . $total_time / 60 . " minute(s)<br /><strong>Rows Imported:</strong> " . $result_count . (false !== $paginated ? "<br /><br />" . $paginated : '') . "';</script>\n";
             echo "<br />" . date('Y-m-d h:i:sa') . " - <em>" . $data['pod']['name'] . "</em> - <strong style='color:green;'>Done Importing: " . $data['pod']['name'] . "</strong>\n";
         }
         unset($result);
         unset($import[$datatype]);
         unset($datatype);
         unset($data);
         wp_cache_flush();
         $wpdb->queries = array();
     }
     if (false !== $output) {
         $avg_counter = 0;
         $avg_time = timer_stop(0, 10);
         $total_time += $avg_time;
         $rows_left = $result_count - $counter;
         echo "<script type='text/javascript'>document.getElementById('progress_status').innerHTML = '" . date('Y-m-d h:i:sa') . " - <strong style=\\'color:green;\\'>Import Complete</strong><br /><br /><strong>Time Spent:</strong> " . $total_time / 60 . " minute(s)<br /><strong>Rows Imported:</strong> " . $result_count . (false !== $paginated ? "<br /><br />" . $paginated : '') . "';</script>\n";
         echo "<br />" . date('Y-m-d h:i:sa') . " - <strong style='color:green;'>Import Complete</strong>\n";
     }
 }