{"id":351761,"date":"2026-09-15T11:40:43","date_gmt":"2026-09-15T11:40:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/persian-attendance-manager\/"},"modified":"2026-09-15T11:25:15","modified_gmt":"2026-09-15T11:25:15","slug":"farahabadi-staff-attendance","status":"publish","type":"plugin","link":"https:\/\/lo.wordpress.org\/plugins\/farahabadi-staff-attendance\/","author":17693962,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.2","stable_tag":"trunk","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Farahabadi Staff Attendance","header_author":"Hamed Farahabadi","header_description":"Location-based staff attendance with Jalali date filters, manual records, reports, and CSV export.","assets_banners_color":"","last_updated":"2026-09-15 11:25:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/hamedfarahabadi.ir\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"1.2.2":"<p>Adds the missing front-end Jalali date picker and improves compatibility with theme typography.<\/p>","1.2.1":"<p>Restores attendance history from legacy and PAMGR-prefixed tables without deleting the old tables.<\/p>","1.2.0":"<p>Adds employee self-service reports and administrator report totals. Place <code>[farastat_my_attendance_report]<\/code> on a published page for logged-in employees.<\/p>","1.1.1":"<p>Directory naming update only; existing attendance data and the <code>[farastat_attendance]<\/code> shortcode remain unchanged.<\/p>","1.1.0":"<p>This release is a security, privacy, and WordPress.org compliance refactor. Existing attendance records are migrated; replace the old <code>[attendance]<\/code> shortcode with <code>[farastat_attendance]<\/code>.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[5877,9058,3373,48680,1260],"plugin_category":[49],"plugin_contributors":[280866],"plugin_business_model":[],"class_list":["post-351761","plugin","type-plugin","status-publish","hentry","plugin_tags-attendance","plugin_tags-employee","plugin_tags-gps","plugin_tags-jalali","plugin_tags-persian","plugin_category-maps-and-location","plugin_contributors-hamedfarahabady","plugin_committers-hamedfarahabady"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/farahabadi-staff-attendance.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Farahabadi Staff Attendance adds a front-end attendance form for logged-in WordPress users and an administration area for attendance records.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>Entry and exit registration from a shortcode.<\/li>\n<li>A secure self-service attendance report for each logged-in user.<\/li>\n<li>Date-range totals for both employee and administrator reports.<\/li>\n<li>Browser geolocation and configurable workplace radius validation.<\/li>\n<li>Jalali date pickers for logs and report filters.<\/li>\n<li>Manual entry and exit records for administrators.<\/li>\n<li>Daily work-time summaries with multiple entry and exit pairs.<\/li>\n<li>CSV export with UTF-8 Persian text support.<\/li>\n<li>Optional storage of coordinates, IP address, device type, and browser information; these storage options are disabled by default.<\/li>\n<li>WordPress personal data export integration.<\/li>\n<li>No remote API calls, telemetry, advertisements, or external asset loading.<\/li>\n<\/ul>\n\n<p>Use the <code>[farastat_attendance]<\/code> shortcode on a published page for attendance registration. Use <code>[farastat_my_attendance_report]<\/code> on another published page to show each logged-in user only their own records, daily work time, and selected-range total.<\/p>\n\n<p>Browser geolocation normally requires HTTPS or localhost. The plugin checks the submitted coordinates against the workplace coordinates stored in WordPress settings.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin always stores the WordPress user ID, event type, and event time for each attendance record.<\/p>\n\n<p>Depending on administrator settings, it can also store:<\/p>\n\n<ul>\n<li>Latitude and longitude.<\/li>\n<li>IP address.<\/li>\n<li>Device type.<\/li>\n<li>Browser user-agent string.<\/li>\n<\/ul>\n\n<p>All records are stored in the site's own WordPress database. The plugin does not transmit attendance data to an external service. Suggested privacy-policy text is added to WordPress under Settings &gt; Privacy. Site administrators are responsible for informing users and applying any local employment, privacy, and retention requirements.<\/p>\n\n<h4>Source code<\/h4>\n\n<p>The deployed plugin contains its readable PHP, JavaScript, and CSS source. The Jalali date picker is implemented locally without a remote service or bundled third-party JavaScript library.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP from Plugins &gt; Add New &gt; Upload Plugin, or place the plugin directory in <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate Farahabadi Staff Attendance.<\/li>\n<li>Open Attendance &gt; Settings.<\/li>\n<li>Enter the workplace latitude, longitude, and allowed radius.<\/li>\n<li>Add <code>[farastat_attendance]<\/code> to a published page.<\/li>\n<li>Add <code>[farastat_my_attendance_report]<\/code> to another published page for employee self-service reports.<\/li>\n<li>Ensure the site uses HTTPS so browsers can provide geolocation.<\/li>\n<\/ol>\n\n<p>Existing records from private versions 1.0.x are copied into the new prefixed database table, and the old location settings are migrated. The legacy table is retained as a non-destructive backup.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20send%20location%20data%20to%20another%20server%3F\"><h3>Does the plugin send location data to another server?<\/h3><\/dt>\n<dd><p>No. The browser sends the position only to the site's own WordPress AJAX endpoint. The plugin does not call a mapping or analytics service.<\/p><\/dd>\n<dt id=\"why%20does%20the%20browser%20refuse%20to%20provide%20a%20location%3F\"><h3>Why does the browser refuse to provide a location?<\/h3><\/dt>\n<dd><p>Geolocation normally requires HTTPS, browser permission, and an available GPS or network location provider.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20attendance%20form%3F\"><h3>Who can use the attendance form?<\/h3><\/dt>\n<dd><p>Any logged-in WordPress user who can view the page containing the shortcode. Administration pages require the <code>manage_farastat_attendance<\/code> capability, which is added to administrators on activation.<\/p><\/dd>\n<dt id=\"is%20browser%20geolocation%20tamper-proof%3F\"><h3>Is browser geolocation tamper-proof?<\/h3><\/dt>\n<dd><p>No. The validation uses coordinates submitted by the user's browser. It is useful as a workplace-radius check, but it should not be treated as fraud-proof identity or location verification.<\/p><\/dd>\n<dt id=\"can%20an%20administrator%20correct%20a%20forgotten%20record%3F\"><h3>Can an administrator correct a forgotten record?<\/h3><\/dt>\n<dd><p>Yes. Open Attendance &gt; Logs and Manual Entry. The plugin validates the daily entry and exit sequence before saving a manual record.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20remove%20records%3F\"><h3>Does uninstalling remove records?<\/h3><\/dt>\n<dd><p>Not by default. Enable \"Delete all data on uninstall\" in the plugin settings before uninstalling if the table and settings should be permanently deleted.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Added the Jalali calendar picker to the front-end employee report date fields.<\/li>\n<li>Removed report form font shorthand so typography is controlled by the active theme.<\/li>\n<li>Normalized inherited letter spacing inside the Persian report interface.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Restored migration support for records stored in the intermediate <code>pamgr_attendance_records<\/code> table.<\/li>\n<li>Forced the database migration to run after updating from 1.1.x or 1.2.0.<\/li>\n<li>Prevented data loss when old and new tables contain overlapping primary-key IDs.<\/li>\n<li>Made migration idempotent by skipping records already present with the same user, event type, and timestamp.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added <code>[farastat_my_attendance_report]<\/code> so logged-in users can view only their own attendance records.<\/li>\n<li>Added Jalali date filters, daily entry and exit times, daily work duration, and a selected-range total to the employee report.<\/li>\n<li>Added total work duration and report statistics to the administrator report dashboard.<\/li>\n<li>Corrected internal PHP, JavaScript, and CSS filenames to match the FARASTAT bootstrap references.<\/li>\n<li>Corrected the WordPress <code>Tested up to<\/code> value.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Renamed the plugin to Farahabadi Staff Attendance for a distinctive WordPress.org directory identity.<\/li>\n<li>Updated the plugin text domain and directory slug references to <code>farahabadi-staff-attendance<\/code>.<\/li>\n<li>Corrected the WordPress.org contributor username.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Prepared the plugin for WordPress.org directory submission.<\/li>\n<li>Added unique prefixes, plugin capabilities, nonces, validation, sanitization, and late escaping.<\/li>\n<li>Moved inline scripts and styles into enqueued local files.<\/li>\n<li>Replaced the deprecated jQuery date-picker dependency with a readable, dependency-free Jalali picker.<\/li>\n<li>Added privacy-policy text and personal data export support.<\/li>\n<li>Added configurable storage of coordinates and technical metadata, disabled by default for new installations.<\/li>\n<li>Changed destructive record deletion to a nonce-protected POST action.<\/li>\n<li>Added pagination to the raw logs screen.<\/li>\n<li>Added formula-injection protection to CSV exports.<\/li>\n<li>Removed automatic modification of the Subscriber role.<\/li>\n<li>Removed external map links and all external runtime requests.<\/li>\n<li>Migrated records and settings from private 1.0.x releases into uniquely prefixed storage.<\/li>\n<li>Removed the generic legacy <code>[attendance]<\/code> shortcode to prevent collisions; use <code>[farastat_attendance]<\/code>.<\/li>\n<\/ul>","raw_excerpt":"A self-hosted staff attendance plugin with browser geolocation checks, Jalali dates, manual records, reports, and CSV export.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351761"}],"author":[{"embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hamedfarahabady"}],"wp:attachment":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351761"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351761"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351761"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351761"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351761"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}