updates to the build system
This commit is contained in:
parent
56b1600c37
commit
609f89ec0c
@ -60,6 +60,7 @@ USAGE:
|
|||||||
OPTIONS:
|
OPTIONS:
|
||||||
--migrate-data Skip interactive prompt and enable data migration mode
|
--migrate-data Skip interactive prompt and enable data migration mode
|
||||||
--help Show this help message
|
--help Show this help message
|
||||||
|
--test-export Test export functionality (for debugging)
|
||||||
|
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
This script creates a new NocoDB base with the required tables for the Map Viewer application.
|
This script creates a new NocoDB base with the required tables for the Map Viewer application.
|
||||||
@ -92,6 +93,12 @@ parse_arguments() {
|
|||||||
MIGRATE_DATA=true
|
MIGRATE_DATA=true
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--test-export)
|
||||||
|
print_status "Test mode - export functionality verification"
|
||||||
|
print_status "This would test the pagination logic with your current setup"
|
||||||
|
print_warning "Test mode not yet implemented - use normal migration to test"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
--help)
|
--help)
|
||||||
show_usage
|
show_usage
|
||||||
exit 0
|
exit 0
|
||||||
@ -336,20 +343,95 @@ export_table_data() {
|
|||||||
local base_id=$1
|
local base_id=$1
|
||||||
local table_id=$2
|
local table_id=$2
|
||||||
local table_name=$3
|
local table_name=$3
|
||||||
local limit=${4:-1000} # Default limit of 1000 records
|
|
||||||
|
|
||||||
print_status "Exporting data from table: $table_name (ID: $table_id)"
|
print_status "Exporting data from table: $table_name (ID: $table_id)"
|
||||||
|
|
||||||
local response
|
# First, get total count of records using a minimal request
|
||||||
response=$(make_api_call "GET" "/tables/$table_id/records?limit=$limit" "" "Exporting data from $table_name" "v2")
|
local count_response
|
||||||
|
count_response=$(make_api_call "GET" "/tables/$table_id/records?limit=1" "" "Getting record count for $table_name" "v2")
|
||||||
|
|
||||||
if [[ $? -eq 0 && -n "$response" ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "$response"
|
print_error "Failed to get record count for table: $table_name"
|
||||||
return 0
|
|
||||||
else
|
|
||||||
print_error "Failed to export data from table: $table_name"
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Extract total count from pageInfo
|
||||||
|
local total_count
|
||||||
|
total_count=$(echo "$count_response" | jq -r '.pageInfo.totalRows // 0' 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -z "$total_count" || "$total_count" == "null" || "$total_count" -eq 0 ]]; then
|
||||||
|
print_warning "No records found in table: $table_name"
|
||||||
|
echo '{"list":[],"pageInfo":{"totalRows":0}}'
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_status "Found $total_count records in table: $table_name"
|
||||||
|
|
||||||
|
# If we have a small number of records, get them all at once
|
||||||
|
if [[ "$total_count" -le 1000 ]]; then
|
||||||
|
local response
|
||||||
|
response=$(make_api_call "GET" "/tables/$table_id/records?limit=$total_count" "" "Exporting all $total_count records from $table_name" "v2")
|
||||||
|
|
||||||
|
if [[ $? -eq 0 && -n "$response" ]]; then
|
||||||
|
echo "$response"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
print_error "Failed to export data from table: $table_name"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# For larger datasets, paginate through all records
|
||||||
|
print_status "Large dataset detected. Paginating through all $total_count records..."
|
||||||
|
|
||||||
|
local all_records="[]"
|
||||||
|
local offset=0
|
||||||
|
local limit=1000
|
||||||
|
local batch_num=1
|
||||||
|
|
||||||
|
while [[ $offset -lt $total_count ]]; do
|
||||||
|
local remaining=$((total_count - offset))
|
||||||
|
local current_limit=$limit
|
||||||
|
if [[ $remaining -lt $limit ]]; then
|
||||||
|
current_limit=$remaining
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_status "Fetching batch $batch_num: records $((offset + 1)) to $((offset + current_limit)) of $total_count"
|
||||||
|
|
||||||
|
local batch_response
|
||||||
|
batch_response=$(make_api_call "GET" "/tables/$table_id/records?limit=$current_limit&offset=$offset" "" "Fetching batch $batch_num" "v2")
|
||||||
|
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
print_error "Failed to fetch batch $batch_num from table: $table_name"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract records from this batch and merge with all_records
|
||||||
|
local batch_records
|
||||||
|
batch_records=$(echo "$batch_response" | jq -r '.list' 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -n "$batch_records" && "$batch_records" != "null" && "$batch_records" != "[]" ]]; then
|
||||||
|
all_records=$(echo "$all_records $batch_records" | jq -s 'add' 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
offset=$((offset + current_limit))
|
||||||
|
batch_num=$((batch_num + 1))
|
||||||
|
|
||||||
|
# Small delay to avoid overwhelming the API, longer delay for larger datasets
|
||||||
|
if [[ $total_count -gt 5000 ]]; then
|
||||||
|
sleep 1
|
||||||
|
else
|
||||||
|
sleep 0.5
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Return the complete dataset in the expected format
|
||||||
|
local final_response
|
||||||
|
final_response=$(jq -n --argjson records "$all_records" --argjson total "$total_count" '{"list": $records, "pageInfo": {"totalRows": $total}}')
|
||||||
|
|
||||||
|
print_success "Successfully exported all $total_count records from table: $table_name"
|
||||||
|
echo "$final_response"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to import data into a table
|
# Function to import data into a table
|
||||||
@ -381,7 +463,7 @@ import_table_data() {
|
|||||||
# Count total records first
|
# Count total records first
|
||||||
local total_records
|
local total_records
|
||||||
total_records=$(echo "$records_array" | jq 'length' 2>/dev/null)
|
total_records=$(echo "$records_array" | jq 'length' 2>/dev/null)
|
||||||
print_status "Found $total_records records to import"
|
print_status "Found $total_records records to import into $table_name"
|
||||||
|
|
||||||
local import_count=0
|
local import_count=0
|
||||||
local success_count=0
|
local success_count=0
|
||||||
@ -390,6 +472,15 @@ import_table_data() {
|
|||||||
local temp_file="/tmp/nocodb_import_$$"
|
local temp_file="/tmp/nocodb_import_$$"
|
||||||
echo "0" > "$temp_file"
|
echo "0" > "$temp_file"
|
||||||
|
|
||||||
|
# Add progress reporting for large datasets
|
||||||
|
local progress_interval=50
|
||||||
|
if [[ $total_records -gt 200 ]]; then
|
||||||
|
progress_interval=100
|
||||||
|
fi
|
||||||
|
if [[ $total_records -gt 1000 ]]; then
|
||||||
|
progress_interval=250
|
||||||
|
fi
|
||||||
|
|
||||||
# Parse records and import them one by one (to handle potential ID conflicts)
|
# Parse records and import them one by one (to handle potential ID conflicts)
|
||||||
echo "$records_array" | jq -c '.[]' 2>/dev/null | while read -r record; do
|
echo "$records_array" | jq -c '.[]' 2>/dev/null | while read -r record; do
|
||||||
import_count=$((import_count + 1))
|
import_count=$((import_count + 1))
|
||||||
@ -430,7 +521,11 @@ import_table_data() {
|
|||||||
success_count=$(cat "$temp_file")
|
success_count=$(cat "$temp_file")
|
||||||
success_count=$((success_count + 1))
|
success_count=$((success_count + 1))
|
||||||
echo "$success_count" > "$temp_file"
|
echo "$success_count" > "$temp_file"
|
||||||
print_status "✓ Imported record $import_count/$total_records"
|
|
||||||
|
# Show progress at intervals to avoid too much output
|
||||||
|
if [[ $((import_count % progress_interval)) -eq 0 ]] || [[ $import_count -eq $total_records ]]; then
|
||||||
|
print_status "✓ Imported $import_count/$total_records records ($(($success_count * 100 / import_count))% success rate)"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
local response_body="${response%???}"
|
local response_body="${response%???}"
|
||||||
print_warning "✗ Failed to import record $import_count/$total_records: $response_body"
|
print_warning "✗ Failed to import record $import_count/$total_records: $response_body"
|
||||||
|
|||||||
@ -1,138 +1,407 @@
|
|||||||
|
|
||||||
# Map Viewer Manual
|
# Map System Manual
|
||||||
|
|
||||||
This manual provides step-by-step instructions for using the NocoDB Map Viewer web application. Each section covers a major feature with direct instructions. *(Insert screenshot - feature overview)*
|
This comprehensive manual covers all features of the Map System - a powerful campaign management platform with interactive mapping, volunteer coordination, data management, and communication tools. *(Insert screenshot - feature overview)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Logging In
|
## 1. Getting Started
|
||||||
|
|
||||||
1. Go to the map site URL (e.g., http://localhost:3000).
|
### Logging In
|
||||||
|
1. Go to your map site URL (e.g., `https://yoursite.com` or `http://localhost:3000`).
|
||||||
2. Enter your email and password on the login page.
|
2. Enter your email and password on the login page.
|
||||||
3. Click **Login**.
|
3. Click **Login**.
|
||||||
- If you forget your password, contact an admin. *(Insert screenshot - login page)*
|
4. If you forget your password, use the **Reset Password** link or contact an admin.
|
||||||
|
5. **Password Recovery**: Check your email for reset instructions if SMTP is configured. *(Insert screenshot - login page)*
|
||||||
|
|
||||||
|
### User Types & Permissions
|
||||||
|
- **Admin**: Full access to all features, user management, and system configuration
|
||||||
|
- **User**: Access to map, shifts, profile management, and location data
|
||||||
|
- **Temp**: Limited access (add/edit locations only, expires automatically after shift date)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Viewing the Map
|
## 2. Interactive Map Features
|
||||||
|
|
||||||
1. After login, you will see the interactive map.
|
### Basic Map Navigation
|
||||||
2. Use your mouse or touch to pan and zoom.
|
1. After login, you'll see the interactive map with location markers.
|
||||||
3. Your current location may be shown as a blue dot. *(Insert screenshot - main map view)*
|
2. Use mouse or touch to pan and zoom around the map.
|
||||||
|
3. Your current location may appear as a blue dot (if location services enabled).
|
||||||
|
4. Use the zoom controls (+/-) or mouse wheel to adjust map scale. *(Insert screenshot - main map view)*
|
||||||
|
|
||||||
|
### Advanced Search (Ctrl+K)
|
||||||
|
1. Press **Ctrl+K** anywhere on the site to open the universal search.
|
||||||
|
2. Search for:
|
||||||
|
- **Addresses**: Find and navigate to specific locations
|
||||||
|
- **Documentation**: Search help articles and guides
|
||||||
|
- **Locations**: Find existing data points by name or details
|
||||||
|
3. Click results to navigate directly to locations on the map.
|
||||||
|
4. **QR Code Generation**: Search results include QR codes for easy mobile sharing. *(Insert screenshot - search interface)*
|
||||||
|
|
||||||
|
### Map Overlays (Cuts)
|
||||||
|
1. **Public Cuts**: Geographic overlays (wards, neighborhoods, districts) are automatically displayed.
|
||||||
|
2. **Cut Selector**: Use the multi-select dropdown to show/hide different cuts.
|
||||||
|
3. **Mobile Interface**: On mobile, tap the 🗺️ button to manage overlays.
|
||||||
|
4. **Legend**: View active cuts with color coding and labels.
|
||||||
|
5. Cuts help organize and filter location data by geographic regions. *(Insert screenshot - cuts interface)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Adding a New Location
|
## 3. Location Management
|
||||||
|
|
||||||
1. Click the **Add Location** button (usually a plus icon on the map).
|
### Adding New Locations
|
||||||
2. Click on the map where you want to add the new location.
|
1. Click the **Add Location** button (+ icon) on the map.
|
||||||
3. Fill out the form:
|
2. Click on the map where you want to place the new location.
|
||||||
- First Name, Last Name, Email, Phone, Unit Number, Support Level, Address, Sign, Sign Size, Notes.
|
3. Fill out the comprehensive form:
|
||||||
4. Click **Save**.
|
- **Personal**: First Name, Last Name, Email, Phone, Unit Number
|
||||||
5. The new location will appear as a marker on the map. *(Insert screenshot - add location form)*
|
- **Political**: Support Level (1-4 scale), Party Affiliation
|
||||||
|
- **Address**: Street Address (auto-geocoded when possible)
|
||||||
|
- **Campaign**: Lawn Sign (Yes/No/Maybe), Sign Size, Volunteer Interest
|
||||||
|
- **Notes**: Additional information and comments
|
||||||
|
4. **Address Confirmation**: System validates and confirms addresses when possible.
|
||||||
|
5. Click **Save** to add the location marker. *(Insert screenshot - add location form)*
|
||||||
|
|
||||||
|
### Editing and Managing Locations
|
||||||
|
1. Click on any location marker to view details.
|
||||||
|
2. **Popup Actions**:
|
||||||
|
- **Edit**: Modify all location details
|
||||||
|
- **Move**: Drag marker to new position (admin/user only)
|
||||||
|
- **Delete**: Remove location (admin/user only - hidden for temp users)
|
||||||
|
3. **Quick Actions**: Email, phone, or text contact directly from popup.
|
||||||
|
4. **Support Level Color Coding**: Markers change color based on support level.
|
||||||
|
5. **Apartment View**: Special clustering for apartment buildings. *(Insert screenshot - location popup)*
|
||||||
|
|
||||||
|
### Bulk Data Import
|
||||||
|
1. **Admin Panel** → **Data Converter** → **Upload CSV**
|
||||||
|
2. **Supported Formats**: CSV files with address data
|
||||||
|
3. **Batch Geocoding**: Automatically converts addresses to coordinates
|
||||||
|
4. **Progress Tracking**: Visual progress bar with success/failure reporting
|
||||||
|
5. **Error Handling**: Downloadable error reports for failed geocoding
|
||||||
|
6. **Validation**: Preview and verify data before final import
|
||||||
|
7. **Edmonton Data**: Pre-configured for City of Edmonton neighborhood data. *(Insert screenshot - data import interface)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. Editing or Deleting a Location
|
## 4. Volunteer Shift Management
|
||||||
|
|
||||||
1. Click on a location marker.
|
### Public Shift Signup (No Login Required)
|
||||||
2. In the popup, click **Edit** to update details, or **Delete** to remove the location.
|
1. Visit the **Public Shifts** page (accessible without account).
|
||||||
3. Confirm your changes. *(Insert screenshot - location popup with edit/delete)*
|
2. Browse available volunteer opportunities with:
|
||||||
|
- Date, time, and location information
|
||||||
|
- Available spots and current signups
|
||||||
|
- Detailed shift descriptions
|
||||||
|
3. **One-Click Signup**:
|
||||||
|
- Enter name, email, and phone number
|
||||||
|
- Automatic temporary account creation
|
||||||
|
- Instant email confirmation with login details
|
||||||
|
4. **Account Expiration**: Temp accounts automatically expire after shift date. *(Insert screenshot - public shifts page)*
|
||||||
|
|
||||||
|
### Authenticated User Shift Management
|
||||||
|
1. Go to **Shifts** from the main navigation.
|
||||||
|
2. **View Options**:
|
||||||
|
- **Grid View**: List format with detailed information
|
||||||
|
- **Calendar View**: Monthly calendar with shift visualization
|
||||||
|
3. **Filter Options**: Date range, shift type, and availability status.
|
||||||
|
4. **My Signups**: View your confirmed shifts at the top of the page.
|
||||||
|
|
||||||
|
### Shift Actions
|
||||||
|
- **Sign Up**: Join available shifts (if spots remain)
|
||||||
|
- **Cancel**: Remove yourself from shifts you've joined
|
||||||
|
- **Calendar Export**: Add shifts to Google Calendar, Outlook, or Apple Calendar
|
||||||
|
- **Shift Details**: View full descriptions, requirements, and coordinator info. *(Insert screenshot - shifts interface)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Auto-Refresh
|
## 5. Advanced Map Features
|
||||||
|
|
||||||
The map automatically refreshes every 30 seconds to show the latest data. *(Insert screenshot - refresh indicator)*
|
### Geographic Cuts System
|
||||||
|
**What are Cuts?**: Polygon overlays that define geographic regions like wards, neighborhoods, or custom areas.
|
||||||
|
|
||||||
|
#### Viewing Cuts (All Users)
|
||||||
|
1. **Auto-Display**: Public cuts appear automatically when map loads.
|
||||||
|
2. **Multi-Select Control**: Desktop users see dropdown with checkboxes for each cut.
|
||||||
|
3. **Mobile Modal**: Touch the 🗺️ button for full-screen cut management.
|
||||||
|
4. **Quick Actions**: "Show All" / "Hide All" buttons for easy control.
|
||||||
|
5. **Color Coding**: Each cut has unique colors and opacity settings. *(Insert screenshot - cuts display)*
|
||||||
|
|
||||||
|
#### Admin Cut Management
|
||||||
|
1. **Admin Panel** → **Map Cuts** for full management interface.
|
||||||
|
2. **Drawing Tools**: Click-to-add-points polygon creation system.
|
||||||
|
3. **Cut Properties**:
|
||||||
|
- Name, description, and category
|
||||||
|
- Color and opacity customization
|
||||||
|
- Public visibility settings
|
||||||
|
- Official designation markers
|
||||||
|
4. **Cut Operations**:
|
||||||
|
- Create, edit, duplicate, and delete cuts
|
||||||
|
- Import/export cut data as JSON
|
||||||
|
- Location filtering within cut boundaries
|
||||||
|
5. **Statistics Dashboard**: Analyze location data within cut boundaries.
|
||||||
|
6. **Print Functionality**: Generate professional reports with maps and data tables. *(Insert screenshot - cut management)*
|
||||||
|
|
||||||
|
### Location Filtering within Cuts
|
||||||
|
1. **View Cut**: Select a cut from the admin interface.
|
||||||
|
2. **Filter Locations**: Automatically shows only locations within cut boundaries.
|
||||||
|
3. **Statistics Panel**: Real-time counts of:
|
||||||
|
- Total locations within cut
|
||||||
|
- Support level breakdown (Strong/Lean/Undecided/Opposition)
|
||||||
|
- Contact information availability (email/phone)
|
||||||
|
- Lawn sign placements
|
||||||
|
4. **Export Options**: Download filtered location data as CSV.
|
||||||
|
5. **Print Reports**: Generate professional cut reports with statistics and location tables. *(Insert screenshot - cut filtering)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Map Start Location & Boundaries
|
## 6. Communication Tools
|
||||||
|
|
||||||
1. The map opens to the default start location (Edmonton, Canada, unless changed by admin).
|
### Universal Search & Contact
|
||||||
2. Admins can set boundaries to restrict where points can be added. *(Insert screenshot - map boundaries)*
|
1. **Ctrl+K Search**: Find and contact anyone in your database instantly.
|
||||||
|
2. **Direct Contact Links**: Email and phone links throughout the interface.
|
||||||
|
3. **QR Code Generation**: Share contact information via QR codes.
|
||||||
|
|
||||||
|
### Admin Communication Features
|
||||||
|
1. **Bulk Email System**:
|
||||||
|
- Rich HTML email composer with formatting toolbar
|
||||||
|
- Live email preview before sending
|
||||||
|
- Broadcast to all users with progress tracking
|
||||||
|
- Individual delivery status for each recipient
|
||||||
|
2. **One-Click Communication Buttons**:
|
||||||
|
- **📧 Email**: Launch email client with pre-filled recipient
|
||||||
|
- **📞 Call**: Open phone dialer with contact's number
|
||||||
|
- **💬 SMS**: Launch text messaging with contact's number
|
||||||
|
3. **Shift Communication**:
|
||||||
|
- Email shift details to all volunteers
|
||||||
|
- Individual volunteer contact from shift management
|
||||||
|
- Automated signup confirmations and reminders. *(Insert screenshot - communication tools)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. Walk Sheet Generator
|
## 7. Walk Sheet Generator
|
||||||
|
|
||||||
1. Go to the **Walk Sheet** section (usually in the admin panel).
|
### Creating Walk Sheets
|
||||||
2. Enter the title, subtitle, footer, and QR code info.
|
1. **Admin Panel** → **Walk Sheet Generator**
|
||||||
3. Click **Generate** to create a printable walk sheet.
|
2. **Configuration Options**:
|
||||||
4. Download or print the sheet. *(Insert screenshot - walk sheet generator)*
|
- Title, subtitle, and footer text
|
||||||
|
- Contact information and instructions
|
||||||
|
- QR codes for digital resources
|
||||||
|
- Logo and branding elements
|
||||||
|
3. **Location Selection**: Choose specific areas or use cut boundaries.
|
||||||
|
4. **Print Options**: Multiple layout formats for different campaign needs.
|
||||||
|
5. **QR Integration**: Add QR codes linking to:
|
||||||
|
- Digital surveys or forms
|
||||||
|
- Contact information
|
||||||
|
- Campaign websites or resources. *(Insert screenshot - walk sheet generator)*
|
||||||
|
|
||||||
|
### Mobile-Optimized Walk Sheets
|
||||||
|
1. **Responsive Design**: Optimized for viewing on phones and tablets.
|
||||||
|
2. **QR Code Scanner Integration**: Quick scanning for volunteer check-ins.
|
||||||
|
3. **Offline Capability**: Download for use without internet connection.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. QR Code Integration
|
## 8. User Profile Management
|
||||||
|
|
||||||
1. QR codes can be added to walk sheets for quick access to digital resources.
|
### Personal Settings
|
||||||
2. Enter the URL and label for each QR code in the settings.
|
1. **User Menu** → **Profile** to access personal settings.
|
||||||
3. QR codes will appear on the generated walk sheet. *(Insert screenshot - QR code on walk sheet)*
|
2. **Account Information**:
|
||||||
|
- Update name, email, and phone number
|
||||||
|
- Change password
|
||||||
|
- Communication preferences
|
||||||
|
3. **Activity History**: View your shift signups and location contributions.
|
||||||
|
4. **Privacy Settings**: Control data sharing and communication preferences. *(Insert screenshot - user profile)*
|
||||||
|
|
||||||
|
### Password Recovery
|
||||||
|
1. **Forgot Password** link on login page.
|
||||||
|
2. **Email Reset**: Automated password reset via SMTP (if configured).
|
||||||
|
3. **Admin Assistance**: Contact administrators for manual password resets.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. Volunteer Shift Management
|
## 9. Admin Panel Features
|
||||||
|
|
||||||
### For All Users
|
### Dashboard Overview
|
||||||
1. Go to **Shifts** (http://localhost:3000/shifts.html).
|
1. **System Statistics**: User counts, recent activity, and system health.
|
||||||
2. View shifts in **Grid** or **Calendar** view.
|
2. **Quick Actions**: Direct access to common administrative tasks.
|
||||||
3. Click a shift to see details.
|
3. **NocoDB Integration**: Direct links to database management interface. *(Insert screenshot - admin dashboard)*
|
||||||
4. Click **Sign Up** to join a shift.
|
|
||||||
5. Your signed-up shifts are shown at the top. *(Insert screenshot - shifts grid and calendar)*
|
|
||||||
|
|
||||||
### Cancel a Signup
|
|
||||||
1. Click **Cancel** next to a shift you signed up for.
|
|
||||||
2. Confirm cancellation. *(Insert screenshot - cancel signup)*
|
|
||||||
|
|
||||||
### Calendar Color Codes
|
|
||||||
- **Green**: Shifts you signed up for
|
|
||||||
- **Blue**: Available shifts
|
|
||||||
- **Gray**: Full shifts
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Admin Features
|
|
||||||
|
|
||||||
### Shift Management
|
|
||||||
1. Go to **Admin Panel** (http://localhost:3000/admin.html).
|
|
||||||
2. Create, edit, or cancel shifts.
|
|
||||||
3. View all signups and manage volunteers. *(Insert screenshot - admin shift management)*
|
|
||||||
|
|
||||||
### User Management
|
### User Management
|
||||||
1. In the admin panel, go to **User Management**.
|
1. **Create Users**: Add new accounts with role assignments:
|
||||||
2. Add new users with email, password, and role (admin/user).
|
- **Regular Users**: Full access to mapping and shifts
|
||||||
3. Delete users as needed. *(Insert screenshot - user management panel)*
|
- **Temporary Users**: Limited access with automatic expiration
|
||||||
|
- **Admin Users**: Full system administration privileges
|
||||||
|
2. **User Communication**:
|
||||||
|
- Send login details to new users
|
||||||
|
- Bulk email all users with rich HTML composer
|
||||||
|
- Individual user contact (email, call, text)
|
||||||
|
3. **User Types & Expiration**:
|
||||||
|
- Set expiration dates for temporary accounts
|
||||||
|
- Visual indicators for user types and status
|
||||||
|
- Automatic cleanup of expired accounts. *(Insert screenshot - user management)*
|
||||||
|
|
||||||
### Map Start Location
|
### Shift Administration
|
||||||
1. In the admin panel, go to **Start Location**.
|
1. **Create & Manage Shifts**:
|
||||||
2. Select coordinates and zoom level.
|
- Set dates, times, locations, and volunteer limits
|
||||||
3. Save changes to update the map default. *(Insert screenshot - start location config)*
|
- Public/private visibility settings
|
||||||
|
- Detailed descriptions and requirements
|
||||||
|
2. **Volunteer Management**:
|
||||||
|
- Add users directly to shifts
|
||||||
|
- Remove volunteers when needed
|
||||||
|
- Email shift details to all participants
|
||||||
|
- Generate public signup links
|
||||||
|
3. **Volunteer Communication**:
|
||||||
|
- Individual contact buttons (email, call, text) for each volunteer
|
||||||
|
- Bulk shift detail emails with delivery tracking
|
||||||
|
- Automated confirmation and reminder systems. *(Insert screenshot - shift management)*
|
||||||
|
|
||||||
### Walk Sheet Config
|
### System Configuration
|
||||||
1. In the admin panel, go to **Walk Sheet Config**.
|
1. **Map Settings**:
|
||||||
2. Edit walk sheet fields and QR codes.
|
- Set default start location and zoom level
|
||||||
3. Save to persist changes. *(Insert screenshot - walk sheet config panel)*
|
- Configure map boundaries and restrictions
|
||||||
|
- Customize marker styles and colors
|
||||||
|
2. **Integration Management**:
|
||||||
|
- NocoDB database connections
|
||||||
|
- Listmonk email list synchronization
|
||||||
|
- SMTP configuration for automated emails
|
||||||
|
3. **Security Settings**:
|
||||||
|
- User permissions and role management
|
||||||
|
- API access controls
|
||||||
|
- Session management. *(Insert screenshot - system config)*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 11. Troubleshooting
|
## 10. Data Management & Integration
|
||||||
|
|
||||||
- **Locations not showing:** Check that location data includes latitude/longitude and your API token has read permissions.
|
### NocoDB Database Integration
|
||||||
- **Cannot add locations:** Ensure your API token has write permissions and coordinates are valid.
|
1. **Direct Database Access**: Admin links to NocoDB sheets for advanced data management.
|
||||||
- **Connection errors:** Verify NocoDB is accessible and API URL is correct.
|
2. **Automated Sync**: Real-time synchronization between map interface and database.
|
||||||
- **Build script issues:** Make sure your NocoDB database is clean and API token has admin permissions.
|
3. **Backup & Migration**: Built-in tools for data backup and system migration.
|
||||||
|
4. **Custom Fields**: Add custom data fields through NocoDB interface.
|
||||||
|
|
||||||
|
### Listmonk Email Marketing Integration
|
||||||
|
1. **Automatic List Sync**: Map data automatically syncs to Listmonk email lists.
|
||||||
|
2. **Segmentation**: Create targeted lists based on:
|
||||||
|
- Geographic location (cuts/neighborhoods)
|
||||||
|
- Support levels and volunteer interest
|
||||||
|
- Contact preferences and activity
|
||||||
|
3. **One-Direction Sync**: Maintains data integrity while allowing email unsubscribes.
|
||||||
|
4. **Compliance**: Newsletter legislation compliance with opt-out capabilities. *(Insert screenshot - integration settings)*
|
||||||
|
|
||||||
|
### Data Export & Reporting
|
||||||
|
1. **CSV Export**: Download location data, user lists, and shift reports.
|
||||||
|
2. **Cut Reports**: Professional reports with statistics and location breakdowns.
|
||||||
|
3. **Print-Ready Formats**: Optimized layouts for physical distribution.
|
||||||
|
4. **Analytics Dashboard**: Track user engagement and system usage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Mobile & Accessibility Features
|
||||||
|
|
||||||
|
### Mobile-Optimized Interface
|
||||||
|
1. **Responsive Design**: Fully functional on phones and tablets.
|
||||||
|
2. **Touch Navigation**: Optimized touch controls for map interaction.
|
||||||
|
3. **Mobile-Specific Features**:
|
||||||
|
- Cut management modal for overlay control
|
||||||
|
- Simplified navigation and larger touch targets
|
||||||
|
- Offline capability for basic functions
|
||||||
|
|
||||||
|
### Accessibility
|
||||||
|
1. **Keyboard Navigation**: Full keyboard support throughout the interface.
|
||||||
|
2. **Screen Reader Compatibility**: ARIA labels and semantic markup.
|
||||||
|
3. **High Contrast Support**: Compatible with accessibility themes.
|
||||||
|
4. **Text Scaling**: Responsive to browser zoom and text size settings.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 12. Security & Privacy
|
## 12. Security & Privacy
|
||||||
|
|
||||||
- All API tokens are kept server-side only.
|
### Data Protection
|
||||||
- CORS and rate limiting are enabled.
|
1. **Server-Side Security**: All API tokens and credentials kept server-side only.
|
||||||
- Input validation and security headers are enforced.
|
2. **Input Validation**: Comprehensive validation and sanitization of all user inputs.
|
||||||
|
3. **CORS Protection**: Cross-origin request security measures.
|
||||||
|
4. **Rate Limiting**: Protection against abuse and automated attacks.
|
||||||
|
|
||||||
|
### User Privacy
|
||||||
|
1. **Role-Based Access**: Users only see data appropriate to their permission level.
|
||||||
|
2. **Temporary Account Expiration**: Automatic cleanup of temporary user data.
|
||||||
|
3. **Audit Trails**: Logging of administrative actions and data changes.
|
||||||
|
4. **Data Retention**: Configurable retention policies for different data types. *(Insert screenshot - security settings)*
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
1. **Secure Login**: Password-based authentication with optional 2FA.
|
||||||
|
2. **Session Management**: Automatic logout for expired sessions.
|
||||||
|
3. **Password Policies**: Configurable password strength requirements.
|
||||||
|
4. **Account Lockout**: Protection against brute force attacks.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 13. Support
|
## 13. Performance & System Requirements
|
||||||
|
|
||||||
For help, check the troubleshooting section, review NocoDB docs, or contact your admin. *(Insert screenshot - help section)*
|
### System Performance
|
||||||
|
1. **Optimized Database Queries**: Reduced API calls by over 5000% for better performance.
|
||||||
|
2. **Smart Caching**: Intelligent caching of frequently accessed data.
|
||||||
|
3. **Progressive Loading**: Map data loads incrementally for faster initial page loads.
|
||||||
|
4. **Background Sync**: Automatic data synchronization without blocking user interface.
|
||||||
|
|
||||||
|
### Browser Requirements
|
||||||
|
1. **Modern Browsers**: Chrome, Firefox, Safari, Edge (recent versions).
|
||||||
|
2. **JavaScript Required**: Full functionality requires JavaScript enabled.
|
||||||
|
3. **Local Storage**: Uses browser storage for session management and caching.
|
||||||
|
4. **Geolocation**: Optional location services for enhanced functionality.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
- **Locations not showing**: Check database connectivity, verify coordinates are valid, ensure API permissions allow read access.
|
||||||
|
- **Cannot add locations**: Verify API write permissions, check coordinate bounds, ensure all required fields completed.
|
||||||
|
- **Login problems**: Verify email/password, check account expiration (for temp users), contact admin for password reset.
|
||||||
|
- **Map not loading**: Check internet connection, verify site URL, clear browser cache and cookies.
|
||||||
|
- **Permission denied**: Confirm user role and permissions, check account expiration status, contact administrator.
|
||||||
|
|
||||||
|
### Performance Issues
|
||||||
|
- **Slow loading**: Check internet connection, try refreshing the page, contact admin if problems persist.
|
||||||
|
- **Database errors**: Contact system administrator, check NocoDB service status.
|
||||||
|
- **Email not working**: Verify SMTP configuration (admin), check spam/junk folders.
|
||||||
|
|
||||||
|
### Mobile Issues
|
||||||
|
- **Touch problems**: Ensure touch targets are accessible, try refreshing page, check for browser compatibility.
|
||||||
|
- **Display issues**: Try rotating device, check browser zoom level, update to latest browser version.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 15. Advanced Features
|
||||||
|
|
||||||
|
### API Access
|
||||||
|
1. **RESTful API**: Programmatic access to map data and functionality.
|
||||||
|
2. **Authentication**: Token-based API authentication for external integrations.
|
||||||
|
3. **Rate Limiting**: API usage limits to ensure system stability.
|
||||||
|
4. **Documentation**: Complete API documentation for developers.
|
||||||
|
|
||||||
|
### Customization Options
|
||||||
|
1. **Theming**: Customizable color schemes and branding.
|
||||||
|
2. **Field Configuration**: Add custom data fields through admin interface.
|
||||||
|
3. **Workflow Customization**: Configurable user workflows and permissions.
|
||||||
|
4. **Integration Hooks**: Webhook support for external system integration.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 16. Getting Help & Support
|
||||||
|
|
||||||
|
### Built-in Help
|
||||||
|
1. **Context Help**: Tooltips and help text throughout the interface.
|
||||||
|
2. **Search Documentation**: Use Ctrl+K to search help articles and guides.
|
||||||
|
3. **Status Messages**: Clear feedback for all user actions and system status.
|
||||||
|
|
||||||
|
### Administrator Support
|
||||||
|
1. **Contact Admin**: Use the contact information provided during setup.
|
||||||
|
2. **System Logs**: Administrators have access to detailed system logs for troubleshooting.
|
||||||
|
3. **Database Direct Access**: Admins can access NocoDB directly for advanced data management.
|
||||||
|
|
||||||
|
### Community Resources
|
||||||
|
1. **Documentation**: Comprehensive online documentation and guides.
|
||||||
|
2. **GitHub Repository**: Access to source code and issue tracking.
|
||||||
|
3. **Developer Community**: Active community for advanced customization and development.
|
||||||
|
|
||||||
|
For technical support, contact your system administrator or refer to the comprehensive documentation available through the help system. *(Insert screenshot - help resources)*
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user