"Feedback and Suggestions", 'BANNER2' => "Help us help you", 'TITLE' => "Feedback and Suggestions", 'MODULENAME' => "feedback.phpx", 'NAV1' => "INFO" // Level 1 menu navigation group ); //------------------------------------------------------------------------ // Local configuration parameters //------------------------------------------------------------------------ $FDBKCFG = array ( 'APPTAG' => 'FEEDBACK', 'EDITLEVEL' => '4', 'ADMINLEVEL' => '6' ); global $FDBKCFG; //------------------------------------------------------------------------ // Database Fields //------------------------------------------------------------------------ $ALLFIELD = array( 'feedback_id', 'cc_list', 'contact_info', 'assignee_id', 'feedback_category', 'feedback_detail', 'feedback_state', 'feedback_status', 'feedback_resolution', 'feedback_type', 'feedback_summary', 'date_created', 'last_modified', 'requester_id', 'requester_email', 'requester_type', 'resolution_type', ); $NEWFIELD = array( 'feedback_category', 'feedback_summary', 'feedback_type', 'requester_email', 'requester_type', //'cc_list', 'contact_info', 'feedback_detail', ); // // Fields visible in query output list // $SHOW = array( 'feedback_id', // DEVONLY 'feedback_category', 'feedback_state', 'feedback_status', 'feedback_summary', 'last_modified', 'requester_type', 'feedback_type', ); // // Fields that can have query drill down links on display // $LINK = array( 'feedback_category', 'feedback_type', 'assignee_id', 'feedback_state', 'requester_type', ); // // Fields that are from a Menu Picklist that can have new members // $EXTEND = array( 'feedback_category', ); // // Required for New Entry // $RequiredField = array( 'feedback_category' => 'select category from list or enter new feedback category', 'feedback_detail' => 'enter details of your suggestion, or feedback', 'feedback_summary' => 'enter brief summary of your request, suggestion, or feedback (will be subject line of response emails)', 'requester_type' => 'select the option that best describes you from list', 'requester_email' => 'enter your email so we can provide updates or answers regarding your comment or feedback', 'feedback_type' => 'select feedback type from list', ); // // Global query choices // $InValidChoice = array( 'All', '', ' ', 'None', 'Choose' ); // // Edit record fields with edit disabled // $NoEdit = array( 'feedback_id', 'last_updated' ); $FieldType = array( 'cc_list' => 'LongText', 'contact_info' => 'LongText', 'requester_email' => 'LongText', 'assignee_id' => 'MenuArray', 'feedback_category' => 'Menu', 'feedback_detail' => 'TextArea', 'feedback_state' => 'Menu', 'feedback_status' => 'LongText', 'feedback_resolution' => 'TextArea', 'feedback_summary' => 'LongText', 'feedback_type' => 'Menu', 'requester_id' => 'Menu', 'requester_type' => 'Menu', 'feedback_type' => 'Menu', ); $BASE = "SELECT choice FROM menu WHERE table_name = 'feedback' AND "; $Menu = array( "feedback_category" => "$BASE field_name = 'feedback_category' ORDER BY choice", "feedback_state" => "$BASE field_name = 'feedback_state' ORDER BY choice", "feedback_type" => "$BASE field_name = 'feedback_type' ORDER BY choice", "requester_type" => "$BASE field_name = 'requester_type' ORDER BY choice", "assignee_id" => "SELECT people_id, full_name from people ORDER BY choice", ); // // Display exceptions from default tdcs centered display table cell // $JustifyCss = array( 'feedback_summary' => 'tds', ); //------------------------------------------------------------------------ // BEGIN Program //------------------------------------------------------------------------ spew_header($FMT); if (! array_key_exists('Action', $_REQUEST)) { $_REQUEST['Action'] = 'New'; } if (array_key_exists('Action', $_REQUEST)) { echo "
\n"; // DEVONLY print_r($_REQUEST); // DEVONLY echo "\n"; // DEVONLY //---------------------------------------------------------------------- // Query //---------------------------------------------------------------------- if ($_REQUEST['Action'] == "Query" ) { spew_query_form(); } //---------------------------------------------------------------------- // Submit Feedback //---------------------------------------------------------------------- if ($_REQUEST['Action'] == "Submit Feedback" ) { $dbh = jjn_pdo_connect(); echo "
Insert Entry
\n"; // DEVONLY $pcnt = count($_POST); $rcnt = count($_REQUEST); echo "Request Count is greater that one, $rcnt
\n"; // DEVONLY echo "Post Count is greater that one, $pcnt
\n"; // DEVONLY echo "Session of captcha_keystring is $_SESSION[captcha_keystring]
\n"; // DEVONLY echo "Post of keystring is $_POST[keystring]
\n"; // DEVONLY echo "Request of keystring is $_REQUEST[keystring]
\n"; // DEVONLY // CAPTCHA if( count($_REQUEST) > 1 ){ if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] === $_REQUEST['keystring']){ echo "Excellent, you appear to be a human!
"; }else{ echo "The numbers from the captcha form entry you filled in do not match those of the image.";
echo "
Please press the back button on your browser and try again.\n";
echo "
No Data
"; spew_footer($FMT); exit; } // // Get list of fields for this table // $fieldlabel = get_field_labels('feedback','feedback',$JJNCFG['DBNAME']); $fields = array_keys($fieldlabel); // // Define default values // $Default = array ( 'feedback_state' => 'New', 'feedback_priority' => 'P3: Routine', ); // // Setup default values // foreach ($Default as $key => $val ) { if ( ! isset ( $_REQUEST[$key]) ) { $_REQUEST[$key] = $val; echo "
|
Please click on the back button of your browser to add missing information.\n";
echo "
(You will also have to update the captcha number to match the image.)\n";
echo "
$sql
\n"; // DEVONLY $dbh->query($sql); $feedback_id = $dbh->lastInsertId() ; $_REQUEST['feedback_id'] = $feedback_id; $_REQUEST['Action'] = 'View'; echo "Returned Feedback ID of $_REQUEST[feedback_id]\n"; // DEVONLY echo "
'; // DEBUG DEVONLY echo "Incoming Updated Fields\n"; // DEBUG DEVONLY print htmlspecialchars(print_r($fieldlabel), ENT_QUOTES); // DEBUG DEVONLY print ''; // DEBUG DEVONLY $fields = array_keys($fieldlabel); // // Eliminate all keys that have invalid answers // Overwrite entries with NEW_... entries for Open Menus // foreach ($fields as $f) { $altkey = "NEW_" . $f; if (isset($_REQUEST[$altkey])) { if (!in_array($_REQUEST[$altkey], $InValidChoice)) { $_REQUEST[$f] = $_REQUEST[$altkey]; unset ($_REQUEST[$altkey]); } } if (in_array($_REQUEST[$f], $InValidChoice)) { unset ($_REQUEST[$f]); } } // // Update only the fields that have changed // $DataKey = array(); $UpdateData = array(); foreach ($fields as $f) { if (in_array($f, $NoEdit)) { echo "
Skipping $f as it is in NoEdit array...
\n"; // DEVONLY continue; } if ( array_key_exists($f, $_REQUEST)) { $val = $_REQUEST[$f]; echo "For ... $f
\n"; // DEVONLY echo "Original: $Original[$f]
\n"; // DEVONLY echo "New: $_REQUEST[$f]
\n"; // DEVONLY if ( $_REQUEST[$f] != $Original[$f] ) { echo "Updating $f to $_REQUEST[$f]
\n"; // DEVONLY $UpdateData[] = "$f = " . $dbh->quote($_REQUEST[$f]); } } } if (count($UpdateData) > 0){ print_r($UpdateData); // DEVONLY $sql = 'UPDATE feedback SET '; $sql .= implode(', ', $UpdateData); $sql .= " WHERE feedback_id = "; $sql .= $dbh->quote($feedback_id); echo "$sql
\n"; // DEVONLY DEBUG $result = $dbh->query($sql); }else{ echo "Entering Query/List Function
\n"; // DEVONLY echo "\n"; // DEBUG DEVONLY print_r($_SESSION); // DEBUG DEVONLY echo "\n"; // DEBUG DEVONLY $dbh = jjn_pdo_connect(); $fieldlabel = array(); $fieldlabel = get_field_labels('feedback','feedback',$JJNCFG['DBNAME']); $fields = array_keys($fieldlabel); //---------------------------------------------------------- // Capture previous selection criteria and append to links // To enable drill down subqueries //---------------------------------------------------------- foreach(explode( '&', $_SERVER['QUERY_STRING']) as $entry ) { list($key, $val) = explode( '=', $entry); if ( ! empty( $val ) ) { if (! in_array($val, $InValidChoice)) { if (in_array($key, $ALLFIELD) ) { $parameters[$key] = $val; } } } } $parameters['Action'] = $_REQUEST['Action']; //---------------------------------------------------------- // Uniquify for duplicate entries //---------------------------------------------------------- $validentries = array(); foreach ($parameters as $key => $val ) { $val = preg_replace('/\s+/', '+', $val); $validentries[] = $key . '=' . $val; } if (count($validentries)) { $drilldown = implode('&', $validentries); } // // Base sql query // $What = array( 'z.*' ); $Where = array( ); $From = array( 'feedback' => 'z' ); // // Construct where clause into an array // foreach ($fields as $f) { if (array_key_exists($f, $_REQUEST)) { $val = $_REQUEST[$f]; if (in_array( $val, $InValidChoice ) ){ unset($val) ; }else{ if ( preg_match('/%/', $val)) { $_REQUEST[$f] .= '%'; $Where[] = "z." . $f . ' LIKE ' . $dbh->quote($_REQUEST[$f]); }else{ $Where[] = "z." . $f . "=" . $dbh->quote($_REQUEST[$f]); } } } } $sql = "SELECT DISTINCT " . implode(',', $What); $Fromsql = array(); foreach ($From as $table => $abbr) { $Fromsql[] = $table . ' ' . $abbr; } $Fromsql = array_unique($Fromsql); $sql .= ' FROM ' . implode(', ', $Fromsql); if ( count($Where) ) { $sql .= ' WHERE ' . implode(' AND ', $Where); } //--------------------------------------------------- // ORDER BY //--------------------------------------------------- $OrderBy = array( 'Name' => 'z.feedback_name', 'Color' => 'z.feedback_color, z.feedback_name', 'Type' => 'z.feedback_type, z.feedback_name' ); $sortby = $_REQUEST['Sortmeby']; $sby = $OrderBy[$sortby]; if (empty ($sby)){ $sql .= ' ORDER BY z.feedback_name'; }else{ $sql .= ' ORDER BY ' . $sby; } echo "
$sql
\n"; // DEVONLY $result = $dbh->query($sql); // Blurb echo "\n"; echo "Column entries that are links will "drill down" to refine your query.\n"; echo "
\n"; //--------------------------------------------------- // Spew table //--------------------------------------------------- echo "| Edit | \n"; // SECURITY } echo "View | \n"; foreach ($ALLFIELD as $f) { if (in_array($f, $SHOW)) { echo "$fieldlabel[$f] | \n"; } } $row = array(); while ($row = $result->fetch(PDO::FETCH_ASSOC)){ echo "
|---|---|---|
";
echo "";
echo " ";
echo " | \n";
}
// View for everyone
echo "";
echo "";
echo " ";
echo " | \n";
foreach ($ALLFIELD as $f) {
$css = "tdcs";
$display = stripslashes($row[$f]);
//
// Display Exceptions (lookup)
//
//if ( $f == 'feedback_id' ) {
//$display = $row[feedback_name];
//}
if (in_array($f, $SHOW)) {
if (array_key_exists($f, $JustifyCss)) {
$css = $JustifyCss[$f];
}
echo "";
if (in_array($f, $LINK)) {
echo "";
echo "$display\n";
}else{
echo "$display\n";
}
echo " | \n";
}
}
}
echo "
| \n";
echo "Thanks for your suggestions and feedback!\n";
echo " Please fill out the below form. Details on meanings and choice details are available via help links in left column.\n"; echo "Asterisk (*) indicates field is required.\n"; echo " (I prefer this is how you could improve things to this is really yucky types of comments.)\n"; echo " |
\n";
echo "Links in left column field names show more information about that field and its choices.\n";
if ( check_access($FDBKCFG['APPTAG'], $FDBKCFG['EDITLEVEL'])){
echo "
Change desired entries and click Update at bottom of form.\n";
}else{
echo "
You do not have sufficient permissions to edit this form.\n";
}
echo "
Entering View Function with ID of $_REQUEST[feedback_id]
\n"; // DEVONLY $table = 'feedback'; if ( array_key_exists('feedback_id', $_REQUEST)) { if ( isset ( $_REQUEST['feedback_id'] ) ) { $feedback_id = $_REQUEST['feedback_id']; }else{ die ("No Feedback ID in view function") ; } if ( ! is_numeric($feedback_id) ) { die ("Feedback ID ($feedback_id) is not an integer.") ; } }else{ die ("No Feedback Id Set") ; } $menulist = array(); $row = array(); $dbh = jjn_pdo_connect(); $sql = 'SELECT * FROM feedback WHERE feedback_id = '; $sql .= $dbh->quote($feedback_id); $result= $dbh->query($sql); $row = $result->fetch(PDO::FETCH_ASSOC); $fieldlabel = get_field_labels('feedback','feedback',$JJNCFG['DBNAME']); // Blurb echo "\n"; echo "Field explanation available via link in left column field labels.\n"; echo "
\n"; echo "Entering spew_query_form
\n"; // DEVONLY global $JJNCFG; global $FDBKCFG; $list = array(); $dbh = jjn_pdo_connect(); echo ""; echo "Help and explanations available at "; echo "Overview."; echo "
\n"; echo "'; //DEBUG DEVONLY echo "ENTERING EMAIL ACK'; //DEBUG DEVONLY $fd = popen($JJNCFG[MAILER],"w"); // // Construct Mail Headers // fputs($fd, "From: $LOGINEMAIL[fromname] <$LOGINEMAIL[fromemail]>\n"); fputs($fd, "To: $LOGINEMAIL[toname] <$LOGINEMAIL[toemail]>\n"); fputs($fd, "Bcc: $LOGINEMAIL[bccemail]\n"); if ( $Data[cc_list] ) { fputs($fd, "Cc: $Data[cc_list]\n"); echo "
\n";//DEBUG DEVONLY echo "LOGINEMAIL
\n";//DEBUG DEVONLY echo htmlspecialchars(print_r($LOGINEMAIL), ENT_QUOTES); //DEBUG DEVONLY echo "Incoming Data
\n";//DEBUG DEVONLY echo htmlspecialchars(print_r($Data), ENT_QUOTES); //DEBUG DEVONLY echo '
| Related links that might interest you. | \n"; echo "
|---|
";
echo "
|