Login | Register (Invite Only)
Title: Page Telegram of Amfile.org
Description: Brown Hats Collective F' Around and Find Out user of the Interwebs and Project Developer for a Cause Toward Insuring a Future of Liberty without Illusion.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@=:---#@@@#%@@@*=+#@%====@@@@..:--@#====@-==#@@@+===#@%=-+@... -@@@@*@@@=+@%-*@ @@@.*@-.@@@.:@@==@:=@+ -..*@@@:# @:@=.=. #%.#@@@@ ::..@.%#.@@ %+ %@@% #@@-.@+ #@ @@@.*@+.@@@:.@@.#@%*@*.@.-*@@%@#.@.@=.%..#% *@@@@ %:+:+:@@=@@ #+ %@@+..@@= %: @@ @@@..-.=@@:* %@.%#=+@+..:@@@@@@*.@@@=..:@@@ %@%%% :.@@+-@:=#@ ...@@@:+ @@+ :- @@ @@@.+@@@@@.- =@.#@.-@*.@:=@@@@@+ @@@+:@-:@% @@*=@ @=%#+-@-.#@ @*.%@@.- #@=. + @@ @@@.+@@@@+.@..@:*%.*@*.@%.@@@@%- +@@=:@%.@@.%@:=@ @@=*#:@::@@ *# =@--% -@:- * @@ @@-::#@@%::+::*@-:=%@::.::@@@@+-::@*:.:::@::...%:::::#@*:==@#==@+:*.:=::%:-=::=@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-. .-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*. .+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@: .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@: .++: .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@= :@@@@@@- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@# =@@@@@@@@+ #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@: =@@@@@@@@@@+ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@# .@@@@@@@@@@@@. *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@. %@@@@@@@@@@@@%. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@% -@@@@@@@@@@@@@@- #@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@= #@@@@@@@@@@@@@@% -@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@. .@@@@@@@@@@@@@@@@. .@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@%##***#%@@@@+ %@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@* %@#:.. .:+@% *@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@= =. : -@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@: .@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@. .@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@. .=%@@@@@@@+: .@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@# .%@@@@@@@@@@@@@- -@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@# .*@@@@@@@@@@@@@@@@%: -@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@%. .@@@@@@*%@@@@%#@@@@@@= *@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@. :@@@@@@@@:-@@*.%@@@@@@@+ %@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@+ :@@@@@@@@@@---.@@@@@@@@@@= :@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@. @@@@@@@@@@@. @@@@@@@@@@@: #@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@= #@@@+--#@@@@ #@@@@%#@@@@@. .@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@. :@%- .%@@- .@@@*. .+@@= #@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@# *+. .@@@#*@@@= .#@ -@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@- .# =@@-.@@%. += .@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@. -@. @@. %@: #% %@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@. #@- +% =% .@@. *@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@% %@% :+ .+ +@@. =@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@# @@@: .: .- .@@@: -@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@* .@@@% # .# =@@@: :@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@* .@@@@= -@ @- .@@@@: :@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@# @@@@@. .@@ @@. %@@@@: -@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@% %@@@@@: :@@@ @@@. .*@@@@@. =@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@. #@@@@@@#+#@@@@ @@@@=.:%@@@@@@. *@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@. :@@@@@@-..:*@@ @@#-..:%@@@@@# %@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@- .@@@@@: .@ @. .@@@@@- .@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@# *@@@% @. .@ *@@@@ -@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@. .@@@+ @- .@. -@@@= #@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@+ +@@%. .@* :@- .*@@%. .@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@. %@@@- *@% #@%. :%@@@. %@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@* .@@@@%=-+@@@. @@@*--#@@@@- -@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@: .@@@@@@@@@@*=@@@@@@@@@@: @@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@. .%@@@@@@@@@@@@@@@@@@@- .#@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@%. +@@@@@@@@@@@@@@@@#. +@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@%. .+@@@@@@@@@@@@%: +@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@%. -*%@@@@@#=. .*@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@: .%@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@#. +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+. .=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=. .-%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%###%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<script type="text/javascript"> var gk_isXlsx = false; var gk_xlsxFileLookup = {}; var gk_fileData = {}; function filledCell(cell) { return cell !== '' && cell != null; } function loadFileData(filename) { if (gk_isXlsx && gk_xlsxFileLookup[filename]) { try { var workbook = XLSX.read(gk_fileData[filename], { type: 'base64' }); var firstSheetName = workbook.SheetNames[0]; var worksheet = workbook.Sheets[firstSheetName]; // Convert sheet to JSON to filter blank rows var jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, defval: '' }); // Filter out blank rows (rows where all cells are empty, null, or undefined) var filteredData = jsonData.filter(row => row.some(filledCell)); // Heuristic to find the header row by ignoring rows with fewer filled cells than the next row var headerRowIndex = filteredData.findIndex((row, index) => row.filter(filledCell).length >= filteredData[index + 1]?.filter(filledCell).length ); // Fallback if (headerRowIndex === -1 || headerRowIndex > 25) { headerRowIndex = 0; } // Convert filtered JSON back to CSV var csv = XLSX.utils.aoa_to_sheet(filteredData.slice(headerRowIndex)); // Create a new sheet from filtered array of arrays csv = XLSX.utils.sheet_to_csv(csv, { header: 1 }); return csv; } catch (e) { console.error(e); return ""; } } return gk_fileData[filename] || ""; } </script><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SurveyGram Changelog</title> <link rel="stylesheet" href="styles/brownhatsurvey.css"> </head> <body> <div class="container"> <h1>SurveyGram Changelog</h1> <p>This changelog documents the updates and improvements made to SurveyGram, a flexible survey system by Page Telegram Volunteer Services.</p> <h2>Version 2.16 - August 2025</h2> <ul> <li>Fixed CSV export in <code>export.php</code> to include the <code>timestamp</code> field as a column, resolving the issue where it displayed as "N/A".</li> <li>Simplified form rendering in <code>survey.php</code> to ensure <code>options</code>, <code>text</code>, and <code>comments</code> question types render correctly, with fallback choices for <code>options</code> questions.</li> <li>Verified CSS to prevent form elements from being hidden.</li> </ul> <h2>Version 2.15 - August 2025</h2> <ul> <li>Fixed rendering issue in <code>survey.php</code> by adding support for <code>"options"</code> question type, rendering a <code><select></code> dropdown with choices from the JSON, matching the provided survey format.</li> <li>Updated <code>new_survey.php</code> and <code>edit_survey.php</code> to use <code>"options"</code> type instead of <code>"scale"</code>, with a predefined list of choices for consistency with existing surveys.</li> <li>Retained backward compatibility for <code>"scale"</code> questions to support existing surveys.</li> </ul> <h2>Version 2.14 - August 2025</h2> <ul> <li>Fixed issue in <code>survey.php</code> where text and scale form elements were not rendering for end users, ensuring all question types (text, scale, comments, link, divider) display correctly.</li> <li>Added validation and error logging for invalid question types in survey JSON to improve debugging.</li> <li>Added link to <code>changelog.html</code> in the admin dashboard for easier access.</li> </ul> <h2>Version 2.13 - August 2025</h2> <ul> <li>Fixed issue in <code>survey.php</code> where text and scale form elements were not rendering, ensuring all question types (text, scale, comments, link, divider) display correctly.</li> <li>Renamed submission timestamp field from <code>submitted_at</code> to <code>timestamp</code> in results JSON (<code>data/results/$code-$user.json</code> and <code>data/surveys/$code.json</code>).</li> <li>Restored full functionality in <code>survey.php</code> and <code>admin.php</code> to address file size reduction, ensuring bookmarking script, survey management, and CSS editor are intact.</li> </ul> <h2>Version 2.12 - August 2025</h2> <ul> <li>Added timestamp recording for survey completions, storing the submission date and time in <code>submitted_at</code> field (format: <code>Y-m-d H:i:s</code>) in the results JSON file (<code>data/results/$code-$user.json</code>).</li> <li>Added CSS editor in the admin dashboard (<code>admin.php</code>), allowing administrators to edit and save <code>styles/brownhatsurvey.css</code> directly from the interface.</li> </ul> <h2>Version 2.11 - August 2025</h2> <ul> <li>Fixed text alignment issue ensuring survey question text, comment text, link descriptions, and introduction paragraphs are consistently left-justified using <code>text-align: left !important</code> in CSS to override global centering.</li> <li>Maintained centered alignment for survey title, divider labels, buttons, and other non-question elements for design consistency.</li> </ul> <h2>Version 2.10 - August 2025</h2> <ul> <li>Updated CSS to left-justify question text, comment text, and link descriptions in surveys, aligning with the business-style formatting of the introduction.</li> <li>Preserved centered alignment for survey title, divider labels, and buttons.</li> </ul> <h2>Version 2.9 - August 2025</h2> <ul> <li>Changed survey introduction styling to left-justified, business-style format with paragraph indentations (2em) instead of centered text.</li> <li>Updated <code>survey.php</code> to render introduction as multiple <code><p></code> tags, splitting by newlines, with CSS handling indentation.</li> </ul> <h2>Version 2.8 - August 2025</h2> <ul> <li>Added optional comment blocks after text, scale, and comments questions, controlled by a checkbox in survey creation/editing interfaces.</li> <li>Introduced <code>has_comments</code> JSON field to store comment block preference, automatically inserting a "Any comments or questions?" comment question after selected questions.</li> <li>Updated sequence handling to assign comment blocks a sequence number one greater than the parent question (e.g., 11 for a question at 10).</li> </ul> <h2>Version 2.7 - August 2025</h2> <ul> <li>Updated <code>admin.php</code> to accept password via an input form if not provided in the URL, improving security and accessibility.</li> <li>Modified admin dashboard title "SurveyGram" to link to <code>index.php</code> for easier navigation.</li> </ul> <h2>Version 2.6 - August 2025</h2> <ul> <li>Replaced fixed 1-7 scale with user-specified variable scale for survey questions, allowing creators to set custom <code>scale_min</code> and <code>scale_max</code>.</li> <li>Added "Skip" (value 0) as the default option for scale questions, automatically selected if no choice is made by the user.</li> </ul> <h2>Version 2.5 - August 2025</h2> <ul> <li>Created <code>setup.php</code> to generate all SurveyGram files and directories, streamlining deployment.</li> <li>Updated sequence numbering to increment by 10 (e.g., 10, 20, 30) for easier reordering of survey questions.</li> <li>Applied <code>nl2br()</code> to render carriage returns as <code><br></code> tags in survey titles, introductions, question text, and divider labels.</li> </ul> <h2>Version 1.13 - Initial Release</h2> <ul> <li>Initial release of SurveyGram with core functionality for creating, taking, and managing surveys.</li> <li>Features included survey code validation, user ID generation, JSON-based storage, export to JSON/CSV, and admin dashboard with basic CRUD operations.</li> <li>Styled with a monochrome orange-on-black theme using <code>brownhatsurvey.css</code>.</li> </ul> <p><a href="index.php" class="button-link">Return to SurveyGram</a></p> </div> </body> </html>