198 Commits
Author SHA1 Message Date
Jonathan Rosenbaum a303522b1a Update README.md 2015-10-14 03:24:52 -04:00
Jonathan Rosenbaum 171b779df7 Removes unneccessary information from the top of the page.
1) It is not clear what the historic purpose was of having shop 90 at the top of the page.
2015-05-09 05:35:01 +00:00
Jonathan Rosenbaum b4387774d7 Fixed a bug found by Drew Gatlin using GetSQLValueString.
This uses addslashes() to escape comments.

Drew discovered the bug while entering a comment in the PS shop.  He is studying at Civil Engineering at WVU.  Drew actually began his journey at YBD - http://www.crazyguyonabike.com/directory/?user=JGatlin  - now that is pretty cosmic.  :)

My name is Drew, or John depending on whom you ask. I'm currently "taking some time off" and touring throughout the southwestern United States -- I might venture into Mexico at some point in the next couple of months. Before I began this journey I lived in Austin, TX for most of my young life and attended Hendrix College in Conway, AR for a year and a half. In Austin I spent(/spend whenever I go back) a lot of time at the Austin Yellow Bike Project (YBP) and just recently got to know those over at Bikes Across Borders (BAB). In fact, I did my first tour with BAB in January of this year (2008) from Austin to Nuevo Laredo, Mexico. My experience with YBP led me to help start a bike project in Conway called Back In The Saddle Bike Collective in January 2007. The organization is currently thriving and operating out of two storage units and brings me much happiness. I'll continue working with them when I head back to school in the fall of 2008. For now, all I want to do is tour as long as possible. I expect I'll be able to keep it up at least until May, and I hope to be able to head into Mexico before it's all over.
2015-05-05 07:51:05 +00:00
Jonathan Rosenbaum 5b42c9da3f Cleans up code from previous rendition. 2015-04-15 07:25:51 +00:00
Jonathan Rosenbaum a671e41ffd This resolves the issue with contacts created on multiple terminals.
0) concurrency issue, one contact_id was edited by 2 or more terminals
1) Better than having a new contact_id created everytime the contact_add_edit page is opened which was the behavior of the original program.
2) Still need to clean-up the code a little, and do a little bit more testing, but appears to be working nicely.
3) Still uses GET for initial setup, a todo to change.
4) Glad the bug was found, and now is fixed.
2015-04-15 06:41:12 +00:00
Jonathan Rosenbaum ef058ba56b Removal of hardwired universal login. 2015-04-13 09:04:11 +00:00
Jonathan Rosenbaum 109cf3d3c9 Adds checking number to cvs num if one exists. 2015-04-11 05:15:47 +00:00
Jonathan Rosenbaum e983cc7d0f Added statements for anonymous transactions. 2015-04-11 04:13:22 +00:00
Jonathan Rosenbaum f23720cf6d Adds coordinators name to the csv description. 2015-04-11 02:35:00 +00:00
Jonathan Rosenbaum 80d85c9dcd Adds patrons name to the csv description. 2015-04-07 05:55:32 +00:00
Jonathan Rosenbaum a1b7d0df0f Downloads GnuCash file(s) to the browser! 2015-04-06 10:36:28 +00:00
Jonathan Rosenbaum 6d636aaff6 Removes an uncessary mysql_fetch_assoc line from credit. 2015-04-06 09:10:25 +00:00
Jonathan Rosenbaum 76ad12e4a3 Returns directory and filename for GnuCash csv 2015-04-06 08:39:31 +00:00
Jonathan Rosenbaum f89c86384a Creates GnuCash csv transaction files!
1) Does not automatically download them the browser yet, but can be found in the designated directory.  Works great with GnuCash!  Victory!
2015-04-06 07:31:42 +00:00
Jonathan Rosenbaum 7997087a85 Lol, this improves select yourself gui.
1) moves error text to the right of shop user select
2) changes error to "Please Select Yourself"
2015-04-06 02:26:02 +00:00
Jonathan Rosenbaum 10ac1bb58a Minor improvements. 2015-04-05 19:46:59 +00:00
Jonathan Rosenbaum 6a71e63e0e Moves repair policy above learn more and removes blockquotes. 2015-04-05 19:42:01 +00:00
Jonathan Rosenbaum d37752cf03 Improved the existing user part a little bit more. 2015-04-05 19:28:57 +00:00
Jonathan Rosenbaum ab1343d4d1 Adds existing user and link to update information 2015-04-05 19:16:41 +00:00
Jonathan Rosenbaum 099b7d6e6a This improves the menu based on context.
1) Sign In/Sign Out will be Current Shop for Coordinator/Greeter
2015-04-05 18:56:31 +00:00
Jonathan Rosenbaum dacb562b82 Adds div hide to show_more()
1) third arguement will hide div on click or submit
2) another user enhancement
2015-04-05 18:47:16 +00:00
Jonathan Rosenbaum 878f6857e0 Probably this will work better. 2015-04-05 09:29:08 +00:00
Jonathan Rosenbaum 63db1d9928 Improves GUI a little bit more. 2015-04-05 09:10:53 +00:00
Jonathan Rosenbaum ee46dc8fd5 GUI and logic changes from practical experience in the shop environment
1) makes sign in button larger
2) changes "Current Shop" menu text to "Sign In" for normal user
3) takes all users after submitting contact to Sign In page rather than only new users.
2015-04-05 08:52:54 +00:00
Jonathan Rosenbaum c5443438f9 initial templating of gnucash csv creation 2015-04-03 06:54:16 +00:00
Jonathan Rosenbaum 81fdd2c518 send values for processing individual csv files for each selected account type 2015-04-03 05:00:51 +00:00
Jonathan Rosenbaum 45b71aca5c Adds submit button and improves gui.
1) Adds more text explanation .. although NULL transactions are just an experimental idea.
2) beginnings of submit code
2015-04-02 20:15:59 +00:00
Jonathan Rosenbaum bae4030274 $0 deposits now acceptable for record-keeping reasons
Originally, deposits of $0 (amount > 0) would not be considered real deposits, however, there may be shops where only non-monetary transactions occurred (amount >= 0) which would be useful to record in an accounting program.
One caveat, if a monetary transaction is recorded, but the depositor only enters $0, the deposit will show "Difference: n/a", however this should be a cue since it should be obvious that a real world deposit of $0 would not be made at a bank.
2015-04-02 03:57:10 +00:00
Jonathan Rosenbaum 8057a6733a Added some pertinent advice about self-signed certs. 2015-03-24 07:34:09 +00:00
Jonathan Rosenbaum 1c50bdc7bc Adds a hidden value for date.
1) Allows shop to be updated, without it dissapearing because the date is zeroed out.
2) Because input became a div in previous commit.
2015-03-24 05:55:29 +00:00
Jonathan Rosenbaum 25e030c613 Removes the ability to edit shop date.
1) Not necessary for a production site
2) Great for testing from the interface when a shop needs to be deleted, however, this can be done just as easily directly through the database.
2015-03-24 05:11:16 +00:00
Jonathan Rosenbaum f919422de4 Turns off the ability to delete a users sign-in entry.
1) Bots like to follow the delete link on demostrations and delete all the time-in entries.
2) YBDB adhers to open trust metrics that are common at bicycle collectives, bots really do not care about trust including bots from google, they love exploring every link though.
3) This functionality isn't really necessary since it is possible to make the sign-in time the same as the sign-out time if the person changes their mind about their visit.
2015-03-24 04:47:10 +00:00
Jonathan Rosenbaum 8e20312ca7 Clarified documentation for SHOW_SHOP_ID
- This is the ability to making transaction id editable
- Concurrent shops at different locations
- Same shop location at a different time
2015-03-22 01:24:50 +00:00
Jonathan Rosenbaum e95b40911b Need to improve the order. 2015-03-20 05:28:10 +00:00
Jonathan Rosenbaum 60383f9641 More bits of wisdom. 2015-03-20 05:25:15 +00:00
Jonathan Rosenbaum 1444e9f971 Some more bits of wisdom. 2015-03-20 05:08:18 +00:00
Jonathan Rosenbaum aa38572bb9 Minor changes in examples. 2015-03-19 08:18:34 +00:00
Jonathan Rosenbaum 358a507022 Adds some more clarity. 2015-03-19 07:37:45 +00:00
Jonathan Rosenbaum 6754c9a324 Additions to help in examples.
1) updated information on how to ensure that passwords are hidden even wehn KeePass is opened.
2) added docker.txt which goes into details about sysadm of docker.
2015-03-19 07:05:20 +00:00
Jonathan Rosenbaum 67bbf33283 Added some power-manager suggestions. 2015-03-18 21:13:43 +00:00
Jonathan Rosenbaum 0fe1f9e870 No need for an example certificate, text provides better inforomation. 2015-03-18 20:52:27 +00:00
Jonathan Rosenbaum 71ab549a37 Added desktop startup application information. 2015-03-18 20:49:51 +00:00
Jonathan Rosenbaum 595618d789 Explains how to secure the password.
There are other things that can be done within the terminal to prevent tampering, e.g., read-only environment,
but the above protects the password from hacking, eavesdropping, and from regular users
in the shop, basically, only the sysadmin and bookkeeper should have remote access via the password.
So, YBDB, although on the internet will be confined to the terminal(s) you allow it to be on, and
the Point of Sale will be at the proper location .. at the front of the Community Bike Shop where people
walk-in/walk-out.
2015-03-18 15:29:57 +00:00
Jonathan Rosenbaum 277bad2d07 Upstart example with monit stanza. 2015-03-18 13:38:15 +00:00
Jonathan Rosenbaum fd6371598a The beginnings of showing when volunteer gains membership status.
1)  Based hours/days
2)  Will add calendar year spec.
2015-03-17 17:13:11 +00:00
Jonathan Rosenbaum 67ffd06c37 Distinct values if user logins more than once - list_CurrentShopUsers
1) a user can serve in many roles, but before this change there were duplicated entries in the pull-down in transactions if that would happen.
2015-03-14 19:24:47 +00:00
Jonathan Rosenbaum 8d73c85cca Corrects no error check for waiver under Mozilla.
1)  Strangly Chromium didn't pick-up on this bug, but worked perfectly.
2015-03-14 06:48:26 +00:00
Jonathan Rosenbaum 825b4cbf90 Caught a typo in the waiver, doesn't affect code. 2015-03-07 07:16:00 +00:00
Jonathan Rosenbaum ec28310f43 The header was pointing to the wrong directory. Corrected. 2015-03-07 07:05:13 +00:00
Jonathan Rosenbaum 71aa35af00 Fixed two bugs with interest survey.
1)  Removed UNIQUE from selections.selection
2)  SELECT query added contact_id

nicer
2015-03-06 18:39:59 +00:00
Jonathan Rosenbaum 5a36eea47b Stores comments from interest inventory as 1. 2015-03-06 09:38:46 +00:00
Jonathan Rosenbaum ac1aea3651 Remembers state per contact_id for interest survey.
1) still need to store comments
2015-03-06 08:36:51 +00:00
Jonathan Rosenbaum e9e3a0ef66 This completes the interest survey logic.
1).  In confs, update works well, delete has an issue with on delete cascade.
2).  Saves state properly.  Now just need to create a front-end to query for volunteer organizers.
2015-03-06 08:27:15 +00:00
Jonathan Rosenbaum 433ab1a224 Changed table name from choices to selections. Makes better sense. 2015-03-05 20:20:32 +00:00
Jonathan Rosenbaum 1ee42f580a This changes the database schema for interest survey. 2015-03-05 20:08:21 +00:00
Jonathan Rosenbaum e33531303f Interests now populate the database as defined in the configurations.
1). Directions are in database_functions.
2). Initial population occurs on first submit.
3). Interests can be changed or deleted
4). It isn't a GUI interface, but it is useful for those without a MySQL understanding.
2015-03-05 05:09:50 +00:00
Jonathan Rosenbaum 6bbf55a25e Changes the header for shop_log and start_shop.
1)  Pages will go back to shop_welcome (original behavior) but for these two pages.  This prevents transaction pages from going back.
2) Added an About/Help link to the left.
3) Changed the width/margin of the associated tables so that it would line up withe new table presenting the menu links.
2015-03-04 18:52:49 +00:00
Jonathan Rosenbaum a82afc8425 This removes the handles from the slider for contacts.
1)  Also, changed the text a little for volunteer interests, added 3D-printing, etc.
2015-03-03 23:12:16 +00:00
Jonathan Rosenbaum 956df1761d Adds delete/update variables for interests.
1) No confirguration GUI yet, but this is many times better than requiring people to make these changes directly to the database.
2015-03-03 20:38:13 +00:00
Jonathan Rosenbaum ec69322128 Made id a fk to contact_id in contacts. 2015-03-03 10:59:14 +00:00
Jonathan Rosenbaum cf3cfe8838 Created a new table 'options' to store interest inventory values
also ..
1). zip to Zip Code .. some day will need to make international
2) changed Fill-in Form to "Check them out!" for volunteer interest .. subject to real world testing.
2015-03-03 10:27:11 +00:00
Jonathan Rosenbaum 88d717cdca Adds tab indexing an initial focus 2015-03-03 03:26:20 +00:00
Jonathan Rosenbaum 62231e8d68 Fixes the css issue for contact_add_edit. 2015-03-03 02:33:55 +00:00
Jonathan Rosenbaum 7f05a37f34 Adds the interests check boxes.
1)  Just needs a little css work by removing transaction css & js from head.
2015-03-02 21:43:45 +00:00
Jonathan Rosenbaum f5ddfdb70a CSS Enhancement to the volunteer interests div - a border. 2015-03-02 10:33:51 +00:00
Jonathan Rosenbaum 96e2c941b8 Begins linking volunteer interest form into page. 2015-03-02 09:54:45 +00:00
Jonathan Rosenbaum ae846cf5b9 This defines constants/variables for a volunteer interest form. 2015-03-01 09:11:02 +00:00
Jonathan Rosenbaum 6aa95e1ad4 Added an example of a working connector.
- mailman specific
- has been tested to work properly for both subscribe, and unsubscribe
- uses node.js
- two stage security
  1) password is specific to connector for recognization
  2) password used by list not kept local
- ssl used for all communication
- yeah!
2015-02-28 09:54:13 +00:00
Jonathan Rosenbaum 39def79d87 Improves the code to connector. 2015-02-28 06:36:36 +00:00
Jonathan Rosenbaum e51d5a1c89 Provides an interface to an email connector.
Define a url for an email connector that will connect to an email list.
The url can be a server:port, program, etc.
Name (First, Last) email address, and connector password will be sent to the connector.

The purpose of email connectors is to provide autonomy in the choice
of email services and programs.  E.g. mailman, googlegroups
See ./examples for an example connector
2015-02-28 03:08:26 +00:00
Jonathan Rosenbaum b1a11b9f3b Saves state for waiver & email_list, and more
1).  Adds configuration options to turn off waiver & email_list options
2).  Puts waiver in Connections/waiver.txt
3).  New MySQL waiver column added, receive_newsletter used for email_list.
2015-02-25 09:23:41 +00:00
Jonathan Rosenbaum 4cd269fd06 Improves start_shop, gets contacts ready for processing.
1) Slight improvements in UI with start_shop .. the date.
2) Adds deferred promise for contact.js.
2015-02-20 07:21:03 +00:00
Jonathan Rosenbaum 55a8de3df8 Adds error validation for email list slider. 2015-02-12 18:47:25 +00:00
Jonathan Rosenbaum 763587f840 Adds a toggle for email lists.
1).  Improvments to name/email regexp
2).  beginnings of validation logic for email list toggle
2015-02-12 07:17:59 +00:00
Jonathan Rosenbaum a1717c99af Fixes a minor textarea bug by removing whitespace in the code. 2015-02-11 07:48:30 +00:00
Jonathan Rosenbaum 386742da2d Spiffs up shop_log. 2015-02-11 07:06:32 +00:00
Jonathan Rosenbaum 2869299725 Prevents new contact_ids from being continuously created.
1). There must be at least a full_name.
2). Because of error validation that includes other required fields, too.
2015-02-11 05:22:18 +00:00
Jonathan Rosenbaum 7b64d0c494 Spiffs up contact_and_edit, adding error correction and required waiver.
1). Next step will be an opt-in/out to mailman.
2). Originally this program was using google lists, but there are too many steps for users involved.
2015-02-11 01:55:38 +00:00
Jonathan Rosenbaum 8f8e1623df Correct transaction_id for storage transactions in history. 2015-02-08 09:00:06 +00:00
Jonathan Rosenbaum b54cfe2312 Handles anonymous correctly in history.
1) 1 if checked
2) undefined if unchecked.
2015-02-08 07:45:47 +00:00
Jonathan Rosenbaum 82a2159fd4 Changes check_number to undefined if it doesn't exist. 2015-02-08 07:34:47 +00:00
Jonathan Rosenbaum 4a562671ec Handles check_number value correctly. 2015-02-08 07:10:47 +00:00
Jonathan Rosenbaum 4c87a15566 Provides correct payment_type value. 2015-02-08 07:05:07 +00:00
Jonathan Rosenbaum be823f25e6 Now chooses sold_to selector based on type. 2015-02-07 06:00:47 +00:00
Jonathan Rosenbaum e9b5cec740 Added transaction_id to the blob. 2015-02-07 04:34:45 +00:00
Jonathan Rosenbaum 26a0721620 Nows uses deferred.promise, and recognizes 'keypress' for history. 2015-02-07 01:38:45 +00:00
Jonathan Rosenbaum e47498a00a Transaction history is now stored.
1).  Next step, view history in the transaction when more than 1 transaction.
2015-02-06 09:50:57 +00:00
Jonathan Rosenbaum 82e4eb3f29 Turned error check into a function.
1).  This allows "close" to produce errors, although not actually prevent them.
2).  This provides a return code for "save" so that the transaction history can be saved.
2015-02-06 07:31:03 +00:00
Jonathan Rosenbaum ba0b491344 Corrected the focus on transction_id, also
1).  In mysql, description is not text
2).  .. added history as blob, drupalish
2015-02-06 06:24:18 +00:00
Jonathan Rosenbaum ebc4bdd989 Adds "use strict", and moved one function to the proper location. 2015-02-04 01:46:42 +00:00
Jonathan Rosenbaum 50ecfd22d1 Brings focus back to select > transaction_type, green in css. 2015-01-30 08:26:30 +00:00
Jonathan Rosenbaum be43ea3245 Show start storage original date if it has changed.
1).  Some css improvments.
2).  The beginnings of transaction history.
3).  Trying to find out why the window reloads twice on transactions without errors.
2015-01-29 07:32:02 +00:00
Jonathan Rosenbaum 1ed32814e1 Reversed previous change. 2015-01-28 19:55:43 +00:00
Jonathan Rosenbaum 232309de70 More validation for storage transaction in regards to save. 2015-01-28 19:47:16 +00:00
Jonathan Rosenbaum 6b8e10355f Patron must be signed-in to complete a storage transaction. 2015-01-28 19:31:27 +00:00
Jonathan Rosenbaum c31551d66a Fixed the payement type label bug, but altering the selector.
1).  This selector turned of edit when clicked, but because of the way it was construed it was hiding the label.  Only became obvious when the validation tests were added.
2015-01-28 08:12:13 +00:00
Jonathan Rosenbaum a2fbb3d5cc Added SHOP_SHOP_ID option.
1). Most collectives require only one shop at a time, but YBDB provides a way to handle 2 concurrent shops in the same location.  The current shop will be shown, and users will have to remember the number of the previous shop to enter into the transaction.  Note: Remote shops function independently via there IP identification.
2015-01-28 07:16:40 +00:00
Jonathan Rosenbaum 2175ab18e4 Removes a bug where Payment Type label became hidden.
1).  Relates an on load selector with hide() that has been preempted
     by the new error validation.  But will watch to make sure new
     bugs haven't been introduced.
2015-01-28 06:44:54 +00:00
Jonathan Rosenbaum b01649d369 Select Type is now static to avoid unnecessary errors.
1).  Makes better sense from a UI perspective.
2015-01-28 04:30:42 +00:00
Jonathan Rosenbaum e8610e6b2f Removes "no description" now that error validation is in effect.
1).  Deposits don't require a description.
2015-01-27 22:42:18 +00:00
Jonathan Rosenbaum 116416af06 Additional check, and namespace changes. 2015-01-27 22:39:17 +00:00
Jonathan Rosenbaum dba651a8e8 Adds checks for amount and payment_type to avoid false errors. 2015-01-27 22:25:20 +00:00
Jonathan Rosenbaum c813ea5eec If Patron isn't logged in but sold_to will validate correctly. 2015-01-27 22:08:02 +00:00
Jonathan Rosenbaum caedba99cc Allows storage transactions error validation to work properly. 2015-01-27 21:53:22 +00:00
Jonathan Rosenbaum b0f940b2b1 Fixed check number error validation bug. 2015-01-27 21:18:31 +00:00
Jonathan Rosenbaum ca4895037c Corrects payment_type error.
1). Logic for storage transactions still needs to be added
2015-01-27 19:28:33 +00:00
Jonathan Rosenbaum 597982369d Fixes a bug when decimal places get too large for nouislider. 2015-01-27 08:26:17 +00:00
Jonathan Rosenbaum cdbfd74ddb Adds error checking for date and quantity. 2015-01-27 07:47:18 +00:00
Jonathan Rosenbaum 4254265850 Adds a large majority of error check for edit transactions.
1). Adds more to css
2). Changes $transaction_id to transaction_id in *js
3). Shortens some selectors
4). Adds additional error spans
5). A few checks need bug fixes (check_number, payment_types)
2015-01-27 07:27:27 +00:00
Jonathan Rosenbaum 60bd4befea Replaces show_soldto_location with 2 new columns.
1). show_soldto_signed_in or show_soldto_not_signed_in
2).  More info can be found in populate.sql
2015-01-26 21:10:41 +00:00
Jonathan Rosenbaum 75bf45ad0e Adds sale date error span. 2015-01-26 19:32:43 +00:00
Jonathan Rosenbaum fd7ad163cf Adds a check for obj.sold_to. 2015-01-26 19:18:46 +00:00
Jonathan Rosenbaum 50c740feb8 Adds a hidden input field to remember non-logged user value in edit trans. 2015-01-26 19:15:36 +00:00
Jonathan Rosenbaum 304c9e2f37 Added not logged-in logic for transaction edit, also:
1). Added error spans for transaction edit
2). Removed some css from transaction.js
3). Added css for errors to transaction.css
2015-01-26 18:52:16 +00:00
Jonathan Rosenbaum 934bc4438c Gives #1 trans and id of 0. 2015-01-26 02:43:47 +00:00
Jonathan Rosenbaum deaa8ea02f Adds new logic to handle 1-only real depost.
1).  If 1 real deposit exists, and next real deposit hasn't been
     deposited.
2015-01-26 02:09:04 +00:00
Jonathan Rosenbaum 5e11243d41 Provides fake deposits when none or only 1 exists. 2015-01-25 23:53:08 +00:00
Jonathan Rosenbaum 1979bde7eb Prevents both slider handles from having the same value. 2015-01-25 06:03:02 +00:00
Jonathan Rosenbaum cdf99e4005 Simplifies the code, fixes a bug on upper with jumping to 0. 2015-01-25 04:31:36 +00:00
Jonathan Rosenbaum df66ead71e Puts inputs on same row as transaction slider. 2015-01-25 03:00:15 +00:00
Jonathan Rosenbaum 88cdfc5887 Made transaction slider keyboard friendly. 2015-01-25 02:51:47 +00:00
Jonathan Rosenbaum 063c9fcfe3 Adds all deposits to the range per year, and last deposit from prev year. 2015-01-24 06:43:00 +00:00
Jonathan Rosenbaum 9d4ec10312 Adds range to slider, and links it to year choice. 2015-01-24 03:33:17 +00:00
Jonathan Rosenbaum 2593c6fe9b Improvements to saving search state. 2015-01-23 10:19:22 +00:00
Jonathan Rosenbaum 9e314551f9 Update README.md 2015-01-22 01:03:08 -05:00
Jonathan Rosenbaum 46c18a181c Update README.md 2015-01-22 01:01:05 -05:00
Jonathan Rosenbaum ab87744f46 Removes hardwired options in shop_log, preps for GnuCash CSV. 2015-01-22 04:36:25 +00:00
Jonathan Rosenbaum 04c2574c99 Removed rest of PHP SELFs, mapped account to values in conf. 2015-01-21 21:47:16 +00:00
Jonathan Rosenbaum 69cc2241d2 Moved individual_history back to /, and removed another PHP_SELF from trans. 2015-01-20 06:12:13 +00:00
Jonathan Rosenbaum 2dd7573408 Saves state for trans search; slider improvements. 2015-01-17 10:28:10 +00:00
Jonathan Rosenbaum c034d5d72e Fixes a search bug when date is in the past. 2015-01-16 00:18:58 +00:00
Jonathan Rosenbaum 687bb3ca01 Libraries used by the new visual interface for csv. 2015-01-15 21:31:39 +00:00
Jonathan Rosenbaum e59f090355 Added more of the interface to generate csv files for GnuCash. 2015-01-15 21:29:36 +00:00
Jonathan Rosenbaum 4bb22b2ea1 Updates unbind() to on(). 2015-01-15 09:34:01 +00:00
Jonathan Rosenbaum f8b96a05b7 When no shop, prevents unloaded page transactions from being edited. 2015-01-15 07:33:09 +00:00
Jonathan Rosenbaum fd9fe984d1 More to the attic, PSised welcome page. :) 2015-01-14 07:04:11 +00:00
Jonathan Rosenbaum 0fa5ecc9f8 Moving more unecessary files to the attic. 2015-01-14 06:23:54 +00:00
Jonathan Rosenbaum 8d2b3d40d3 Moves unused devel files from the distant past into the attic. 2015-01-14 06:17:04 +00:00
Jonathan Rosenbaum e444cdb93c Preparing GnuCash CSV interface, and fixed no shop bug with new logic. 2015-01-14 06:10:04 +00:00
Jonathan Rosenbaum d689505318 Spiffed up the search near the footer. 2015-01-13 20:08:03 +00:00
Jonathan Rosenbaum e168381a05 Fixes a bug where storage transactions don't show up in searches if NULL.
1.  Also adds a configuration for a directory to write/download csv files from.
2.  Including directions for the above.
2015-01-13 05:56:03 +00:00
Jonathan Rosenbaum bf2527e1cf Changed some text is populate. 2015-01-12 18:57:52 +00:00
Jonathan Rosenbaum a44e5e93f2 Fixes an issue when Sum has ",", and a spelling mistake. 2015-01-12 06:00:51 +00:00
Jonathan Rosenbaum c1a33b7076 Provides anonymous capability for transactions. 2015-01-12 05:19:09 +00:00
Jonathan Rosenbaum 9f5c338738 Storage transaction id now changes to most recent when transaction complete. 2015-01-11 09:09:36 +00:00
Jonathan Rosenbaum 2a0d9f542f Resets payment_type && amount if storage date is nullified. 2015-01-10 11:06:21 +00:00
Jonathan Rosenbaum a082412e4c When no shop, no Change Fund mouseover editing. 2015-01-10 08:38:03 +00:00
Jonathan Rosenbaum 1929c5d752 Commented out some unnecessary code. 2015-01-10 08:20:23 +00:00
Jonathan Rosenbaum dfa8d2b2ea Moved display:none to php for reload. 2015-01-10 08:18:08 +00:00
Jonathan Rosenbaum b68b4926b4 Added Bike Delivery as shop type. 2015-01-10 08:01:18 +00:00
Jonathan Rosenbaum d16811fe95 Added editable Change Fund.
1. Mouseover allows edit of Change Fund.
2. Difference is shown, and stored in db for page reloads.
2015-01-10 07:54:12 +00:00
Jonathan Rosenbaum 33b4d29417 Provides error correction for no current shop. 2015-01-07 07:59:33 +00:00
Jonathan Rosenbaum b5be74863d Fixes an annoying problem with PHP_SELF, corrected by using "". 2015-01-06 10:16:36 +00:00
Jonathan Rosenbaum 1791320659 Returns an important call inadvertantly removed. 2015-01-06 09:01:51 +00:00
Jonathan Rosenbaum 7658c11d53 Added check number when Check is clicked. 2015-01-06 08:25:57 +00:00
Jonathan Rosenbaum a94d62c78b Improves user input and output for Deposit Calculator. 2015-01-04 08:50:47 +00:00
Jonathan Rosenbaum d40dfca931 Cleans up the code, and allows proper behavior.
1.  async:false because mysql can be slow
2.  improved a regexp causing weird behavior with edit button
2015-01-04 01:35:19 +00:00
Jonathan Rosenbaum 511dc81471 Added some human interaction with Deposit Calculator. 2015-01-03 11:00:33 +00:00
Jonathan Rosenbaum 890b8f1b15 Yeah, working mysql/json logic is in place! 2015-01-03 07:50:48 +00:00
Jonathan Rosenbaum d8b74b7a79 More preps for Deposit Calculator. 2015-01-02 22:44:27 +00:00
Jonathan Rosenbaum f6d392b0b5 Several improvements:
1.  Now uses better function, CurrentShopUser for signed-in users so that people need to be signed in to make purchases.
2.  Improved header text for Contacts.
3.  Removed edit link when paid checked.
4.  Fixed populate.sql
5.  Added payment type column in transaction_log.php
2015-01-02 10:12:37 +00:00
Jonathan Rosenbaum 06188f5dfe Now will properly report current shop for shop 1. 2014-12-31 08:18:37 +00:00
Jonathan Rosenbaum 9ab7723b6a Fixed now. 2014-12-31 07:48:24 +00:00
Jonathan Rosenbaum 3dc17d58dd Fixed sql. 2014-12-31 07:34:10 +00:00
Jonathan Rosenbaum d41f647211 Removed an unnessary parenthesis in sql. 2014-12-31 06:00:20 +00:00
Jonathan Rosenbaum dc7dd4d01f Beginning of transaction calculator framework & enh. 2014-12-31 05:53:49 +00:00
Jonathan Rosenbaum 7ddff6778c More enhancements on deposits before adding business logic. 2014-12-30 16:39:31 +00:00
Jonathan Rosenbaum baebf5612b Improves Deposit presentation.
Also,
1. renumbered tabindex
2. added constant for default number of rows shown for transactions.
2014-12-30 09:32:59 +00:00
Jonathan Rosenbaum 2370ccee7b Many goodies for a better user experience.
1. New NONSHOP constant. 0=no function =>1 is function
2. Moved individual_hours_log back to /
3. Added better view/business logic for storage transactions,
   and new documentation.
4. New users logging in can immediately add a project/comments
5. Added more documentation to populate and a new show_payment field.
2014-12-30 08:34:49 +00:00
Jonathan Rosenbaum f72f022811 Added payment_type. 2014-12-29 07:53:41 +00:00
Jonathan Rosenbaum baf8f61d9e Fixes time behavior for DST, and adds a user-defined constant. 2014-12-29 02:25:50 +00:00
Jonathan Rosenbaum 6f1a9d241e Another UI change, css file, and sql change. 2014-12-29 01:18:02 +00:00
Jonathan Rosenbaum 203708dad2 Improvements to the transaction UI. 2014-12-29 00:14:26 +00:00
Jonathan Rosenbaum d2332719a0 Replaces some hardwired variables with user-defined constants. 2014-12-27 07:59:59 +00:00
Jonathan Rosenbaum 2274b69a8e Replaces some hardwired variables with user-defined constants.
populate.sql will be updated usually via work done at https://github.com/fspc/ybdb
2014-12-27 07:56:53 +00:00
Jonathan Rosenbaum 508ed7c3b9 jQuery - when paid checkbox is checked/unchecked database is updated.
Color changes, too.
2014-12-26 06:26:26 +00:00
Jonathan Rosenbaum 87eb7fba3a Changes Submit to Save for better HID. 2014-12-23 06:15:46 +00:00
Jonathan Rosenbaum 879a30c191 Merge branch 'devel' of https://github.com/fspc/Yellow-Bike-Database into devel
Made a commit before pulling
2014-12-23 05:39:13 +00:00
Jonathan Rosenbaum b385089144 Replaces YBP home with PS home :), and turns relative links absolute. 2014-12-23 04:56:36 +00:00
Jonathan Rosenbaum a31eb65e32 Removes long line. 2014-12-20 16:54:03 -05:00
Jonathan Rosenbaum 43824b5016 Added header back. 2014-12-20 02:50:57 +00:00
Jonathan Rosenbaum ec6cd5d998 Brought back the header and footer. 2014-12-20 02:42:24 +00:00
Jonathan Rosenbaum 36987d3100 It is not necessary to have eclipse templates/plugins in a source dir .. rm. 2014-12-20 02:31:15 +00:00
Jonathan Rosenbaum 796c1f6ebb A few changes before implementing jquery, and move sql to sql dir. 2014-12-20 02:27:44 +00:00
Jonathan Rosenbaum c4abcd651d Adds back some code that got deleted as part of the long line. 2014-12-19 20:39:50 +00:00
Jonathan Rosenbaum f21ed0eba6 Makes files absolute for the constants so links work properly. 2014-12-19 20:20:44 +00:00
Jonathan Rosenbaum 752684c9df Gets individual*logs working again from new dir. 2014-12-19 20:16:52 +00:00
Jonathan Rosenbaum b815ebb714 Moves individual*logs to stats. 2014-12-19 20:12:56 +00:00
Jonathan Rosenbaum 57e0e1ea0f Adds jQuery to the header. 2014-12-19 18:53:11 +00:00
Jonathan Rosenbaum f384dacaf3 Removes annoying long line added by some pyscho editor. 2014-12-19 18:51:31 +00:00
Jonathan Rosenbaum 2c0f8325c1 Adds an uncompressed version of jQuery. 2014-12-19 18:19:27 +00:00
Jonathan Rosenbaum 64b06c541d Puts stat files in their own directory to make things cleaner; deletes *zip 2014-12-19 18:16:54 +00:00
Jonathan Rosenbaum e3cd977baf Removed - not necessary in source code. 2014-12-19 17:46:24 +00:00
Jonathan Rosenbaum e4c295468c These files are not necessary; used for Adobe Dreamweaver. 2014-12-19 17:38:52 +00:00
Jonathan Rosenbaum 5411617f64 Made several changes to transaction_log, removed unnecessary editor line from *select, added planb waiver to contact_add_edit, and changes to database_functions to fit into transaction changes. 2014-12-17 23:03:32 +00:00
Jonathan Rosenbaum e1092d5085 Fixes order for transaction pull-down when it is > 9 2014-12-15 17:25:05 +00:00
Jonathan Rosenbaum 10ac9f8410 Reverting, since this is copied over with Docker image. 2014-12-15 04:39:19 +00:00
Jonathan Rosenbaum 5636f65d33 Interesting changes made remotely with BlueFish in a Container.
The beginning of changing the logic of using location in transactions, to
using people.
2014-12-15 04:18:50 +00:00
165 changed files with 20961 additions and 8031 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
Positive Spin is a volunteer-run organization. Your volunteered time, and our
ability to benefit the community with our exciting services and programs are
directly related. We can provide funding for various committees. Please indicate
if you would be interested in helping us with any of the following management
needs, operations, events and programs.
Update your interests any time you are in the shop:
+17
View File
@@ -0,0 +1,17 @@
I, and my heirs, in consideration of my participation with Positive Spin
Incorporated hereby release Positive Spin Incorporated, its officers, directors
and agents, and any other people officially connected with this organization,
from any and all liability for damage to or loss of personal property, sickness, or injury from whatever source, legal entanglements, imprisonment, death, or
loss of money, which might occur while participating in said
event/activity/class. Specifically, I release Positive Spin Incorporated from
any liability or responsibility for my personal well-being, condition of tools
and equipment provided and produced thereof, including, but not limited to,
bicycles and modes of transportation produced by participants. Positive Spin
Incorporated provides a working,mechanical environment and I am aware of the
risks of participation. I hereby state that I am in sufficient physical
condition to accept a rigorous level of physical activity and exertion, as is
sometimes the case when working in a mechanical environment. I understand that
participation in this program is strictly voluntary and I freely chose to
participate. I understand Positive Spin Incorporated does not provide medical
coverage for me. I verify that I will be responsible for any medical costs I
incur as a result of my participation.
-109
View File
File diff suppressed because one or more lines are too long
+3 -1
View File
@@ -2,4 +2,6 @@
**Development Branch of Yellow Bike Project Hours and Transaction Database** **Development Branch of Yellow Bike Project Hours and Transaction Database**
The basic objective here since Yellow Bike Project does not host their own version control repository is to keep Main pristine, and do development work here, on the assumption that they may want to commit new changes. This branch is being used by [YBDB](https://github.com/fspc/ybdb), the BikeBike Docker image. The basic objective here since Yellow Bike Project does not host their own version control repository, at least until recently (on December 29, 2014 a repository was [setup](https://github.com/nwilkes2/CommunityBikeShopDB)), is to keep Main pristine, and do development work here, on the assumption that they may want to commit new changes. This branch is being used by [YBDB](https://github.com/fspc/ybdb), the BikeBike Docker image.
There is a demo at [http://ybdb.wvcompletestreets.org](http://ybdb.wvcompletestreets.org). Try it out!
File diff suppressed because one or more lines are too long
@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<connections>
<connection id="83422b28-2181-4f36-b3b7-c239d76e66a2" type="sftp">
<name>YBDB_Remote</name>
<host>www.austinyellowbike.org</host>
<path>/home/austinyellowbike/ybdb.austinyellowbike.org/test1</path>
<login>austinyellowbike</login>
<compression>AUTO</compression>
</connection>
<connection id="c7c85d43-0d53-4a53-9445-3353c25f5474" type="workspace">
<name>YBDB</name>
<path>/YBDB</path>
</connection>
</connections>
@@ -1,10 +0,0 @@
' If there is an argument, use it as the directory to change to.
If WScript.Arguments.Length=1 Then
Set WshObj = CreateObject("WScript.Shell")
WshObj.CurrentDirectory = WScript.Arguments(0)
End If
' Launch the shortcut in the current directory which has the same
' base name as this script.
Set AppObj = CreateObject("Shell.Application")
AppObj.ShellExecute(Replace(WScript.ScriptFullName, ".vbs", ".lnk"))
@@ -1,89 +0,0 @@
README.portable (Draft)
=======================
This "portable" version of Git for Windows (MSysGit) does not need to
be installed. It will run from any directory you place it in, even
onto a USB thumbdrive. It will not write permanent entries into the
Windows registry. It does not need administrator privileges to "install".
Installation
------------
This package is contained in a 7-zip archive with a file name like
'PortableGit-<versionstring>.7z'. It is a self-extracting archive:
add the file extension '.exe', and you can (double-)click it; you'll be
asked for the desired target directory (which defaults to C:\Program
Files\Git). You may change that as needed or desired. Your user account
needs write access to the selected directory. (You can move that
directory with all its contents to a different place or computer at any
time should you later desire so).
Functional differences to "normal" MSysGit installation package
---------------------------------------------------------------
This version does not offer you the convenient right-click context menu
entries "Git GUI Here" and "Git Bash Here", because these would require
to add entries into the Windows registry.
Warning
-------
Since this portable package does not modify any Windows %path%
variables, it is not possible to run the git.exe and gitk.exe files
directly. Start the Git Bash or Git Cmd instead, or add the cmd/ folder
to your %path%.
How to start using PortableGit
------------------------------
If you are comfortable with a Unix-like shell, just launch 'git-bash.bat'.
If not, just launch 'git-cmd.bat'.
Alternatively, you can execute these commands to modify the %path%
variable temporarily:
set gitdir=c:\portablegit
set path=%gitdir%\cmd;%path%
Adjust the 'gitdir' according to your setup. As long as you do not
close the command window, you can now simply type "git" or "gitk" to
really call "c:\portablegit\cmd\git.cmd" or "c:\portablegit\cmd\gitk.cmd".
Quick start
-----------
Start configuring git with your personal settings:
git config --global user.name "Joe Sixpack"
git config --global user.email joe.sixpack@g_mail.com
Start using git:
git --help
How to change %path% permanently
--------------------------------
You may also want to make the modification to the %path% variable a
permanent one. The %path% variable may be changed:
* either on a System level (for all users in the lower pane), if you are
an Administrator
* or for your own user account only (in the upper pane).
To change the %path% variable permanently:
* right-click "My Computer",
* select "Properties",
* open "Advanced",
* click "Environment Variables",
* highlight the "Path" variable,
* click "Edit" (either in upper or in lower pane),
* add your specific path to front of "Variable value" field, separated
by a semicolon from the existing entry.
@@ -1,323 +0,0 @@
{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}{\f1\fnil\fcharset0 Arial;}{\f2\fnil\fcharset2 Symbol;}}
{\colortbl ;\red0\green0\blue0;\red0\green0\blue255;}
{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\cf1\lang1033\b\f0\fs32 Git Release Notes (Git-1.7.3.1-preview20101002)\b0\fs20\par
Last update: 2 October 2010\par
\par
\b\fs24 Introduction\b0\fs20\par
\par
These release notes describe issues specific to the Git for Windows release.\par
\par
General release notes covering the history of the core git commands are included in the subdirectory doc/git/html of the installation directory. Look for files starting with RelNotes.\par
\par
\b\fs24 Known issues\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\fs20 Some commands are not yet supported on Windows and excluded from the installation; namely: git archimport, git cvsexportcommit, git cvsimport, git cvsserver, git instaweb, git shell.\par
{\pntext\f2\'B7\tab}The Logitec QuickCam software can cause spurious crashes. See "Why does make often crash creating a sh.exe.stackdump file when I try to compile my source code?" on the MinGW Wiki (\cf0{\field{\*\fldinst{HYPERLINK "http://www.mingw.org/wiki/Environment_issues"}}{\fldrslt{\ul\cf2 http://www.mingw.org/wiki/Environment_issues}}}\cf1\f0\fs20 )\par
{\pntext\f2\'B7\tab}The Quick Launch icon will only be installed for the user running setup (typically the Administrator). This is a technical restriction and will not change.\par
{\pntext\f2\'B7\tab}curl uses $HOME/_netrc instead of $HOME/.netrc.\par
{\pntext\f2\'B7\tab}If you want to specify a different location for --upload-pack, you have to start the absolute path with two slashes. Otherwise MSys will mangle the path.\par
{\pntext\f2\'B7\tab}git and bash have serious problems with non-ASCII file names (Issue 80, 159).\par
{\pntext\f2\'B7\tab}If configured to use plink, you will have to connect with putty first and accept the host key.\par
{\pntext\f2\'B7\tab}As merge tools are executed using the MSys bash, options starting with "/" need to be handled specially: MSys would interpret that as a POSIX path, so you need to double the slash (Issue 226). Example: instead of "/base", say "//base". Also, extra care has to be paid to pass Windows programs Windows paths, as they have no clue about MSys style POSIX paths -- You can use something like $(cmd //c echo "$POSIXPATH").\par
\pard\b\fs24\par
Changes since Git-1.7.2.3-preview20100911\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with Git 1.7.3.1 plus patches.\par
{\pntext\f2\'B7\tab}Updated to Vim 7.3, file-5.04 and InnoSetup 5.3.11\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Issue 528 (remove uninstaller from Start Menu) was fixed\par
{\pntext\f2\'B7\tab}Issue 527 (failing to find the certificate authority bundle) was fixed\par
{\pntext\f2\'B7\tab}Issue 524 (remove broken and unused sdl-config file) was fixed\par
{\pntext\f2\'B7\tab}Issue 523 (crash pushing to WebDAV remote) was fixed\par
\pard\b\fs24\par
Changes since Git-1.7.1-preview20100612\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with Git 1.7.2.3 plus patches.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Issue 519 (build problem with compat/regex/regexec.c) was fixed\par
{\pntext\f2\'B7\tab}Issue 430 (size of panes not preserved in git-gui) was fixed\par
{\pntext\f2\'B7\tab}Issue 411 (git init failing to work with CIFS paths) was fixed\par
{\pntext\f2\'B7\tab}Issue 501 (failing to clone repo from root dir using relative path) was fixed\par
\pard\b\fs24\par
Changes since Git-1.7.0.2-preview20100309\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with Git 1.7.1 plus patches.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Issue 27 (git-send-mail not working properly) was fixed again\par
{\pntext\f2\'B7\tab}Issue 433 (error while running git svn fetch) was fixed\par
{\pntext\f2\'B7\tab}Issue 427 (Gitk reports error: "couldn't compile regular expression pattern: invalid repetition count(s)") was fixed\par
{\pntext\f2\'B7\tab}Issue 192 (output truncated) was fixed again\par
{\pntext\f2\'B7\tab}Issue 365 (Out of memory? mmap failed) was fixed\par
{\pntext\f2\'B7\tab}Issue 387 (gitk reports "error: couldn't execute "git:" file name too long") was fixed\par
{\pntext\f2\'B7\tab}Issue 409 (checkout of large files to network drive fails on XP) was fixed\par
{\pntext\f2\'B7\tab}Issue 428 (The return value of git.cmd is not the same as git.exe) was fixed\par
{\pntext\f2\'B7\tab}Issue 444 (Git Bash Here returns a "File not found error" in Windows 7 Professional - 64 bits) was fixed\par
{\pntext\f2\'B7\tab}Issue 445 (git help does nothing) was fixed\par
{\pntext\f2\'B7\tab}Issue 450 ("git --bare init" shouldn't set the directory to hidden.) was fixed\par
{\pntext\f2\'B7\tab}Issue 456 (git script fails with error code 1) was fixed\par
{\pntext\f2\'B7\tab}Issue 469 (error launch wordpad in last netinstall) was fixed\par
{\pntext\f2\'B7\tab}Issue 474 (git update-index --index-info silently does nothing) was fixed\par
{\pntext\f2\'B7\tab}Issue 482 (Add documentation to avoid "fatal: $HOME not set" error) was fixed\par
{\pntext\f2\'B7\tab}Issue 489 (git.cmd issues warning if %COMSPEC% has spaces in it) was fixed\par
{\pntext\f2\'B7\tab}Issue 436 ("mkdir : No such file or directory" error while using git-svn to fetch or rebase) was fixed\par
{\pntext\f2\'B7\tab}Issue 440 (Uninstall does not remove cheetah.) was fixed\par
{\pntext\f2\'B7\tab}Issue 441 (Git-1.7.0.2-preview20100309.exe installer fails with unwritable msys-1.0.dll when ssh-agent is running) was fixed\par
\pard\b\fs24\par
Changes since Git-1.6.5.1-preview20091022\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official Git 1.7.0.2.\par
{\pntext\f2\'B7\tab}Comes with Git-Cheetah (on 32-bit Windows only, for now).\par
{\pntext\f2\'B7\tab}Comes with connect.exe, a SOCKS proxy.\par
{\pntext\f2\'B7\tab}Tons of improvements in the installer, thanks to Sebastian Schuberth.\par
{\pntext\f2\'B7\tab}On Vista, if possible, symlinks are used for the built-ins.\par
{\pntext\f2\'B7\tab}Features Hany's dos2unix tool, thanks to Sebastian Schuberth.\par
{\pntext\f2\'B7\tab}Updated Tcl/Tk to version 8.5.8 (thanks Pat Thoyts!).\par
{\pntext\f2\'B7\tab}By default, only .git/ is hidden, to work around a bug in Eclipse (thanks to Erik Faye-Lund).\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Fixed threaded grep (thanks to Heiko Voigt).\par
{\pntext\f2\'B7\tab}git gui was fixed for all kinds of worktree-related failures (thanks Pat Thoyts).\par
{\pntext\f2\'B7\tab}git gui now fully supports themed widgets (thanks Pat Thoyts and Heiko Voigt).\par
{\pntext\f2\'B7\tab}Git no longer complains about an unset RUNTIME_PREFIX (thanks Johannes Sixt).\par
{\pntext\f2\'B7\tab}git gui can Explore Working Copy on Windows again (thanks Markus Heidelberg).\par
{\pntext\f2\'B7\tab}git gui can create shortcuts again (fixes issue 425, thanks Heiko Voigt).\par
{\pntext\f2\'B7\tab}When "git checkout" cannot overwrite files because they are in use, it will offer to try again, giving the user a chance to release the file (thanks Heiko Voigt).\par
{\pntext\f2\'B7\tab}Ctrl+W will close gitk (thanks Jens Lehmann).\par
{\pntext\f2\'B7\tab}git gui no longer binds Ctrl+C, which caused problems when trying to use said shortcut for the clipboard operation "Copy" (fixes issue 423, thanks Pat Thoyts).\par
{\pntext\f2\'B7\tab}gitk does not give up when the command line length limit is reached (issue 387).\par
{\pntext\f2\'B7\tab}The exit code is fixed when Git.cmd is called from cmd.exe (thanks Alexey Borzenkov).\par
{\pntext\f2\'B7\tab}When launched via the (non-Cheetah) shell extension, the window icon is now correct (thanks Sebastian Schuberth).\par
{\pntext\f2\'B7\tab}Uses a TrueType font for the console, to be able to render UTF-8 correctly.\par
{\pntext\f2\'B7\tab}Clarified the installer's line ending options (issue 370).\par
{\pntext\f2\'B7\tab}Substantially speeded up startup time from cmd unless NO_FSTAB_THREAD is set (thanks Johannes Sixt).\par
{\pntext\f2\'B7\tab}Update msys-1.0.dll yet again, to handle quoted parameters better (thanks Heiko Voigt).\par
{\pntext\f2\'B7\tab}Updated cURL to a version that supports SSPI.\par
{\pntext\f2\'B7\tab}Updated tar to handle the pax headers generated by \i git archive\i0 .\par
{\pntext\f2\'B7\tab}Updated sed to a version that can handle the filter-branch examples.\par
{\pntext\f2\'B7\tab}.git* files can be associated with the default text editor (issue 397).\par
\pard\b\fs24\par
Changes since Git-1.6.4-preview20090729\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.5.1.\par
{\pntext\f2\'B7\tab}Thanks to Johan 't Hart, files and directories starting with a single dot (such as '.git') will now be marked hidden (you can disable this setting with core.hideDotFiles=false in your config) (Issue 288).\par
{\pntext\f2\'B7\tab}Thanks to Thorvald Natvig, Git on Windows can simulate symbolic links by using reparse points when available. For technical reasons, this only works for symbolic links pointing to files, not directories.\par
{\pntext\f2\'B7\tab}A lot of work has been put into making it possible to compile Git's source code (the part written in C, of course, not the scripts) with Microsoft Visual Studio. This work is ongoing.\par
{\pntext\f2\'B7\tab}Thanks to Sebastian Schuberth, we only offer the (Tortoise)Plink option in the installer if the presence of Plink was detected \ul and\ulnone at least one Putty session was found..\par
{\pntext\f2\'B7\tab}Thanks to Sebastian Schuberth, the installer has a nicer icon now.\par
{\pntext\f2\'B7\tab}Some more work by Sebastian Schuberth was done on better integration of Plink (Issues 305 & 319).\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Thanks to Sebastian Schuberth, \i git svn\i0 picks up the SSH setting specified with the installer (Issue 305).\par
\pard\b\fs24\par
Changes since Git-1.6.3.2-preview20090608\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.4.\par
{\pntext\f2\'B7\tab}Supports \cf0{\field{\*\fldinst{HYPERLINK "https://"}}{\fldrslt{\ul\cf2 https://}}}\cf1\f0\fs20 URLs, thanks to Erik Faye-Lund.\par
{\pntext\f2\'B7\tab}Supports send-email, thanks to Erik Faye-Lund (Issue 27).\par
{\pntext\f2\'B7\tab}Updated Tcl/Tk to version 8.5.7, thanks to Pat Thoyts.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 The home directory is now discovered properly (Issues 108 & 259).\par
{\pntext\f2\'B7\tab}IPv6 is supported now, thanks to Martin Martin Storsj\cf0\f1\'f6 (Issue 182).\cf1\f0\par
\pard\b\fs24\par
Changes since Git-1.6.3-preview20090507\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.3.2.\par
{\pntext\f2\'B7\tab}Uses TortoisePlink instead of Plink if available.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Plink errors out rather than hanging when the user needs to accept a host key first (Issue 96).\par
{\pntext\f2\'B7\tab}The user home directory is inferred from $HOMEDRIVE\\$HOMEPATH instead of $HOME (Issue 108).\par
{\pntext\f2\'B7\tab}The environment setting $CYGWIN=tty is ignored (Issues 138, 248 and 251).\par
{\pntext\f2\'B7\tab}The "ls" command shows non-ASCII filenames correctly now (Issue 188).\par
{\pntext\f2\'B7\tab}Adds more syntax files for vi (Issue 250).\par
{\pntext\f2\'B7\tab}$HOME/.bashrc is included last from /etc/profile, allowing .bashrc to override all settings in /etc/profile (Issue 255).\par
{\pntext\f2\'B7\tab}Completion is case-insensitive again (Issue 256).\par
{\pntext\f2\'B7\tab}The "start" command can handle arguments with spaces now (Issue 258).\par
{\pntext\f2\'B7\tab}For some Git commands (such as "git commit"), vi no longer "restores" the cursor position.\par
\pard\b\fs24\par
Changes since Git-1.6.2.2-preview20090408\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.3.\par
{\pntext\f2\'B7\tab}Thanks to Marius Storm-Olsen, Git has a substantially faster readdir() implementation now.\par
{\pntext\f2\'B7\tab}Marius Storm-Olsen also contributed a patch to include nedmalloc, again speeding up Git noticably.\par
{\pntext\f2\'B7\tab}Compiled with GCC 4.4.0\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Portable Git contains a README.portable.\par
{\pntext\f2\'B7\tab}Portable Git now actually includes the builtins.\par
{\pntext\f2\'B7\tab}Portable Git includes git-cmd.bat and git-bash.bat.\par
{\pntext\f2\'B7\tab}Portable Git is now shipped as a .7z; it still is a self-extracting archive if you rename it to .exe.\par
{\pntext\f2\'B7\tab}Git includes the Perl Encode module now.\par
{\pntext\f2\'B7\tab}Git now includes the filter-branch tool.\par
{\pntext\f2\'B7\tab}There is a workaround for a Windows 7 regression triggering a crash in the progress reporting (e.g. during a clone). This fixes issues 236 and 247.\par
{\pntext\f2\'B7\tab}gitk tries not to crash when it is closed while reading references (Issue 125, thanks Pat Thoyts).\par
{\pntext\f2\'B7\tab}In some setups, hard-linking is not as reliable as it should be, so we have a workaround which avoids hard links in some situations (Issues 222 and 229).\par
{\pntext\f2\'B7\tab}git-svn sets core.autocrlf to false now, hopefully shutting up most of the git-svn reports.\par
\pard\b\fs24\par
Changes since Git-1.6.2.1-preview20090322\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.2.2.\par
{\pntext\f2\'B7\tab}Upgraded Tcl/Tk to 8.5.5.\par
{\pntext\f2\'B7\tab}TortoiseMerge is supported by mergetool now.\par
{\pntext\f2\'B7\tab}Uses pthreads (faster garbage collection on multi-core machines).\par
{\pntext\f2\'B7\tab}The test suite passes!\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Renaming was made more robust (due to Explorer or some virus scanners, files could not be renamed at the first try, so we have to try multiple times).\par
{\pntext\f2\'B7\tab}Johannes Sixt made \ul lots\ulnone of changes to the test-suite to identify properly which tests should pass, and which ones cannot pass due to limitations of the platform.\par
{\pntext\f2\'B7\tab}Support PAGERs with spaces in their filename.\par
{\pntext\f2\'B7\tab}Quite a few changes were undone which we needed in the olden days of msysGit.\par
{\pntext\f2\'B7\tab}Fall back to / when HOME cannot be set to the real home directory due to locale issues (works around Issue 108 for the moment).\par
\pard\b\fs24\par
Changes since Git-1.6.2-preview20090308\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.2.1.\par
{\pntext\f2\'B7\tab}A portable application is shipped in addition to the installer (Issue 195).\par
{\pntext\f2\'B7\tab}Comes with a Windows-specific mmap() implementation (Issue 198).\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 ANSI control characters are no longer shown verbatim (Issue 124).\par
{\pntext\f2\'B7\tab}Temporary files are created respecting core.autocrlf (Issue 177).\par
{\pntext\f2\'B7\tab}The Git Bash prompt is colorful again (Issue 199).\par
{\pntext\f2\'B7\tab}Fixed crash when hardlinking during a clone failed (Issue 204).\par
{\pntext\f2\'B7\tab}An infinite loop was fixed in git-gui (Issue 205).\par
{\pntext\f2\'B7\tab}The ssh protocol is always used with plink.exe (Issue 209).\par
{\pntext\f2\'B7\tab}More vim files are shipped now, so that syntax highlighting works.\par
\pard\b\fs24\par
Changes since Git-1.6.1-preview20081225\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.2.\par
{\pntext\f2\'B7\tab}Comes with upgraded vim 7.2.\par
{\pntext\f2\'B7\tab}Compiled with GCC 4.3.3.\par
{\pntext\f2\'B7\tab}The user can choose the preferred CR/LF behavior in the installer now.\par
{\pntext\f2\'B7\tab}Peter Kodl contributed support for hardlinks on Windows.\par
{\pntext\f2\'B7\tab}The bash prompt shows information about the current repository.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 If supported by the file system, pack files can grow larger than 2gb.\par
{\pntext\f2\'B7\tab}Comes with updated msys-1.0.dll (should fix some Vista issues).\par
{\pntext\f2\'B7\tab}Assorted fixes to support the new libexec/git-core/ layout better.\par
{\pntext\f2\'B7\tab}Read-only files can be properly replaced now.\par
{\pntext\f2\'B7\tab}git-svn is included again (original caveats still apply).\par
{\pntext\f2\'B7\tab}Obsolete programs from previous installations are cleaned up.\par
\pard\li144\par
\pard\b\fs24 Changes since Git-1.6.0.2-preview20080923\par
\i\fs20\par
New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.1.\par
{\pntext\f2\'B7\tab}Avoid useless console windows.\par
{\pntext\f2\'B7\tab}Installer remembers how to handle PATH. \par
\pard\b\fs24\par
Changes since Git-1.6.0.2-preview20080921\par
\i\fs20\par
Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 ssh works again.\par
{\pntext\f2\'B7\tab}'git add -p' works again.\par
{\pntext\f2\'B7\tab}Various programs that aborted with 'Assertion failed: argv0_path' are fixed.\par
\pard\b\fs24\par
Changes since Git-1.5.6.1-preview20080701\par
\i\fs20\par
Removed Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 git svn is excluded from the end-user installer (see Known Issues).\par
\pard\b\fs24\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.6.0.2.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 No Windows-specific bugfixes.\par
\pard\b\fs24\par
Changes since Git-1.5.6-preview20080622\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.5.6.1.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Includes fixed msys-1.0.dll that supports Vista and Windows Server 2008 (Issue 122).\par
{\pntext\f2\'B7\tab}cmd wrappers do no longer switch off echo.\par
\pard\b\fs24\par
Changes since Git-1.5.5-preview20080413\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.5.6.\par
{\pntext\f2\'B7\tab}Installer supports configuring a user provided plink (PuTTY).\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Comes with tweaked msys-1.0.dll to solve some command line mangling issues.\par
{\pntext\f2\'B7\tab}cmd wrapper does no longer close the command window.\par
{\pntext\f2\'B7\tab}Programs in the system PATH, for example editors, can be launched from Git without specifying their full path.\par
{\pntext\f2\'B7\tab}"git stash apply stash@\{1\}" works.\par
{\pntext\f2\'B7\tab}Comes with basic ANSI control code emulation for the Windows console to avoid wrapping of pull/merge's diffstats.\par
{\pntext\f2\'B7\tab}Git correctly passes port numbers to PuTTY's plink \par
\pard\b\fs24\par
Changes since Git-1.5.4-preview20080202\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.5.5.\par
{\pntext\f2\'B7\tab}core.autocrlf is enabled (true) by default. This means git converts to Windows line endings (CRLF) during checkout and converts to Unix line endings (LF) during commit. This is the right choice for cross-platform projects. If the conversion is not reversible, git warns the user. The installer warns about the new default before the installation starts.\par
{\pntext\f2\'B7\tab}The user does no longer have to "accept" the GPL but only needs to press "continue".\par
{\pntext\f2\'B7\tab}Installer deletes shell scripts that have been replaced by builtins. Upgrading should be safer.\par
{\pntext\f2\'B7\tab}Supports "git svn". Note that the performance might be below your expectation.\par
\pard\li144\par
\pard\b\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Newer ssh fixes connection failures (issue 74).\par
{\pntext\f2\'B7\tab}Comes with MSys-1.0.11-20071204. This should solve some "fork: resource unavailable" issues.\par
{\pntext\f2\'B7\tab}All DLLs are rebased to avoid problems with "fork" on Vista.\par
\pard\b\fs24\par
Changes since Git-1.5.3.6-preview20071126\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Comes with official git 1.5.4.\par
{\pntext\f2\'B7\tab}Some commands that are not yet suppoted on Windows are no longer included (see Known Issues above).\par
{\pntext\f2\'B7\tab}Release notes are displayed in separate window.\b\fs24\par
\b0\fs20{\pntext\f2\'B7\tab}Includes qsort replacement to improve performance on Windows 2000.\par
\pard\b\fs24\par
\i\fs20 Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Fixes invalid error message that setup.ini cannot be deleted on uninstall.\par
{\pntext\f2\'B7\tab}Setup tries harder to finish the installation and reports more detailed errors.\par
{\pntext\f2\'B7\tab}Vim's syntax highlighting is suitable for dark background.\par
\pard\b\fs24\par
Changes since Git-1.5.3.5-preview20071114\par
\par
\i\fs20 New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Git is included in version 1.5.3.6.\b\i\par
\b0\i0{\pntext\f2\'B7\tab}Setup displays release notes.\par
\pard\b\fs24\par
\i\fs20 Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 pull/fetch/push in git-gui works. Note, there is no way for ssh to ask for a passphrase or for confirmation if you connect to an unknown host. So, you must have ssh set up to work without passphrase. Either you have a key without passphrase, or you started ssh-agent. You may also consider using PuTTY by pointing GIT_SSH to plink.exe and handle your ssh keys with Pageant. In this case you should include your login name in urls. You must also connect to an unknown host once from the command line and confirm the host key, before you can use it from git-gui.\par
\pard\b\fs24\par
Changes since Git-1.5.3-preview20071027\fs20\par
\i\par
New Features\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0\i0 Git is included in version 1.5.3.5.\par
{\pntext\f2\'B7\tab}Setup can be installed as normal user.\par
{\pntext\f2\'B7\tab}When installing as Administrator, all icons except the Quick Launch icon will be created for all users.\par
{\pntext\f2\'B7\tab}"git help user-manual" displays the user manual.\par
\pard\b\par
\i Bugfixes\b0\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432 Git Bash works on Windows XP 64.\par
\pard\par
\b\fs24 Changes since Git-1.5.3-preview20071019\par
\fs20\par
\i Bugfixes\i0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-288\li432\b0 The templates for a new repository are found.\par
{\pntext\f2\'B7\tab}The global configuration /etc/gitconfig is found.\par
{\pntext\f2\'B7\tab}Git Gui localization works. It falls back to English if a translation has errors.\par
\pard\par
\b\fs24 Changes since WinGit-0.2-alpha\par
\b0\fs20 The history of the release notes stops here. Various new features and bugfixes are available since WinGit-0.2-alpha. Please check the git history of the msysgit project for details.\par
}
@@ -1,8 +0,0 @@
#!/bin/sh
# Copyright (C) 2002, Earnie Boyd
# mailto:earnie@users.sf.net
# This file is part of MSYS
# http://www.mingw.org/msys.shtml
# File: awk
gawk "$@"
@@ -1,8 +0,0 @@
#! /bin/sh
# Copyright (C) 2002, Earnie Boyd
# mailto:earnie@users.sf.net
# This file is a part of Minimal SYStem
# http://www.mingw.org/msys.html
# File: bunzip2
bzip2 -d $@
@@ -1,160 +0,0 @@
#!/bin/perl.exe
# Perl c_rehash script, scan all files in a directory
# and add symbolic links to their hash values.
my $openssl;
my $dir = "/usr/ssl";
if(defined $ENV{OPENSSL}) {
$openssl = $ENV{OPENSSL};
} else {
$openssl = "openssl";
$ENV{OPENSSL} = $openssl;
}
$ENV{PATH} .= ":$dir/bin";
if(! -x $openssl) {
my $found = 0;
foreach (split /:/, $ENV{PATH}) {
if(-x "$_/$openssl") {
$found = 1;
last;
}
}
if($found == 0) {
print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n";
exit 0;
}
}
if(@ARGV) {
@dirlist = @ARGV;
} elsif($ENV{SSL_CERT_DIR}) {
@dirlist = split /:/, $ENV{SSL_CERT_DIR};
} else {
$dirlist[0] = "$dir/certs";
}
foreach (@dirlist) {
if(-d $_ and -w $_) {
hash_dir($_);
}
}
sub hash_dir {
my %hashlist;
print "Doing $_[0]\n";
chdir $_[0];
opendir(DIR, ".");
my @flist = readdir(DIR);
# Delete any existing symbolic links
foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) {
if(-l $_) {
unlink $_;
}
}
closedir DIR;
FILE: foreach $fname (grep {/\.pem$/} @flist) {
# Check to see if certificates and/or CRLs present.
my ($cert, $crl) = check_file($fname);
if(!$cert && !$crl) {
print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n";
next;
}
link_hash_cert($fname) if($cert);
link_hash_crl($fname) if($crl);
}
}
sub check_file {
my ($is_cert, $is_crl) = (0,0);
my $fname = $_[0];
open IN, $fname;
while(<IN>) {
if(/^-----BEGIN (.*)-----/) {
my $hdr = $1;
if($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) {
$is_cert = 1;
last if($is_crl);
} elsif($hdr eq "X509 CRL") {
$is_crl = 1;
last if($is_cert);
}
}
}
close IN;
return ($is_cert, $is_crl);
}
# Link a certificate to its subject name hash value, each hash is of
# the form <hash>.<n> where n is an integer. If the hash value already exists
# then we need to up the value of n, unless its a duplicate in which
# case we skip the link. We check for duplicates by comparing the
# certificate fingerprints
sub link_hash_cert {
my $fname = $_[0];
$fname =~ s/'/'\\''/g;
my ($hash, $fprint) = `"$openssl" x509 -hash -fingerprint -noout -in '$fname'`;
chomp $hash;
chomp $fprint;
$fprint =~ s/^.*=//;
$fprint =~ tr/://d;
my $suffix = 0;
# Search for an unused hash filename
while(exists $hashlist{"$hash.$suffix"}) {
# Hash matches: if fingerprint matches its a duplicate cert
if($hashlist{"$hash.$suffix"} eq $fprint) {
print STDERR "WARNING: Skipping duplicate certificate $fname\n";
return;
}
$suffix++;
}
$hash .= ".$suffix";
print "$fname => $hash\n";
$symlink_exists=eval {symlink("",""); 1};
if ($symlink_exists) {
symlink $fname, $hash;
} else {
system ("cp", $fname, $hash);
}
$hashlist{$hash} = $fprint;
}
# Same as above except for a CRL. CRL links are of the form <hash>.r<n>
sub link_hash_crl {
my $fname = $_[0];
$fname =~ s/'/'\\''/g;
my ($hash, $fprint) = `"$openssl" crl -hash -fingerprint -noout -in '$fname'`;
chomp $hash;
chomp $fprint;
$fprint =~ s/^.*=//;
$fprint =~ tr/://d;
my $suffix = 0;
# Search for an unused hash filename
while(exists $hashlist{"$hash.r$suffix"}) {
# Hash matches: if fingerprint matches its a duplicate cert
if($hashlist{"$hash.r$suffix"} eq $fprint) {
print STDERR "WARNING: Skipping duplicate CRL $fname\n";
return;
}
$suffix++;
}
$hash .= ".r$suffix";
print "$fname => $hash\n";
$symlink_exists=eval {symlink("",""); 1};
if ($symlink_exists) {
symlink $fname, $hash;
} else {
system ("cp", $fname, $hash);
}
$hashlist{$hash} = $fprint;
}
@@ -1,4 +0,0 @@
#!/bin/sh
# Make the 'clear' command work, by invoking command.com/cmd.exe 'cls'
$COMSPEC //C cls
File diff suppressed because it is too large Load Diff
@@ -1,8 +0,0 @@
#!/bin/sh
# Copyright (C) 2002, Earnie Boyd
# mailto:earnie@users.sf.net
# This file is part of MSYS
# http://www.mingw.org/msys.shtml
# File: echo
echo "$@"
@@ -1,8 +0,0 @@
#!/bin/sh
# Copyright (C) 2002, Earnie Boyd
# mailto:earnie@users.sf.net
# This file is part of MSYS
# http://www.mingw.org/msys.shtml
# File: egrep
grep -E "$@"
@@ -1,155 +0,0 @@
@echo off
rem Copyright (C): 2001, 2002 Earnie Boyd
rem mailto:earnie@users.sf.net
rem This file is part of Minimal SYStem
rem http://www.mingw.org/msys.shtml
rem
rem File: msys.bat
rem Revision: 2.0
rem Revision Date: April 17th, 2002
rem ember to set the "Start in:" field of the shortcut.
rem A value similar to C:\msys\1.0\bin is what the "Start in:" field needs
rem to represent.
rem this should let run MSYS shell on x64
if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
SET COMSPEC=%WINDIR%\SysWOW64\cmd.exe
)
rem ember value of GOTO: is used to know recursion has happened.
if "%1" == "GOTO:" goto %2
rem ember command.com only uses the first eight characters of the label.
set OS_VERSION="NT"
goto _WindowsNT
rem ember that we only execute here if we are in command.com.
:_Windows
set OS_VERSION="9x"
if "x%COMSPEC%" == "x" set COMSPEC=command.com
start %COMSPEC% /e:4096 /c %0 GOTO: _Resume %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EOF
rem ember that we execute here if we recursed.
:_Resume
for %%F in (1 2 3) do shift
rem ember that we get here even in command.com.
:_WindowsNT
if "x%MSYSTEM%" == "x" set MSYSTEM=MINGW32
if "%1" == "MSYS" set MSYSTEM=MSYS
if NOT "x%DISPLAY%" == "x" set DISPLAY=
rem We here assume old behavior, to make sure that older platforms can still use
rem this batch file to start their MSys environment.
set BIN=""
if EXIST bin\nul set BIN=bin\
if EXIST %BIN%bash.exe goto startbash
if EXIST %BIN%rxvt.exe goto startrxvt
rem If we're not on win9x type OSs, lets try a little better at finding bash/rxvt
if "win%OS_VERSION%"=="win9x" goto failed
set BIN="%~dp0bin\"
if EXIST %BIN%bash.exe goto startbash
if EXIST %BIN%rxvt.exe goto startrxvt
:failed
echo Cannot find the rxvt.exe or bash.exe binary -- aborting.
pause
rem exit 1
rem we skip using exit 1 here, since it will close the console you were working on
rem which probably isn't what you wanted. If the bat file was run from a shortcut
rem the window will still close, like you would expect it to. Sorry, you cant test
rem for exit values anymore, but hey, you can just un-rem the line above then! :-)
goto EOF
rem If you don't want to use rxvt then rename the file rxvt.exe to something
rem else. Then bash.exe will be used instead.
:startrxvt
rem Setup the default colors for rxvt.
if "x%MSYSBGCOLOR%" == "x" set MSYSBGCOLOR=White
if "x%MSYSFGCOLOR%" == "x" set MSYSFGCOLOR=Black
if "x%MINGW32BGCOLOR%" == "x" set MINGW32BGCOLOR=LightYellow
if "x%MINGW32FGCOLOR%" == "x" set MINGW32FGCOLOR=Navy
if "%MSYSTEM%" == "MSYS" set BGCOLOR=%MSYSBGCOLOR%
if "%MSYSTEM%" == "MSYS" set FGCOLOR=%MSYSFGCOLOR%
if "%MSYSTEM%" == "MINGW32" set BGCOLOR=%MINGW32BGCOLOR%
if "%MSYSTEM%" == "MINGW32" set FGCOLOR=%MINGW32FGCOLOR%
start %COMSPEC% /c %BIN%rxvt -backspacekey  -sl 2500 -fg %FGCOLOR% -bg %BGCOLOR% -sr -fn Courier-12 -tn msys -geometry 80x25 -e /bin/bash --login -i
exit
:startbash
call %COMSPEC% /c %BIN%bash --login -i
:EOF
rem ChangeLog:
rem 2002.03.07 Earnie Boyd mailto:earnie@users.sf.net
rem * Move the @echo off to the top.
rem * Change the binmode setting to nobinmode.
rem * Remove the angle brackets around email address to workaround MS
rem buggy command processor.
rem
rem 2002.03.12 Earnie Boyd mailto:earnie@users.sf.net
rem * Add filter logic to find rxvt.exe
rem
rem 2002.03.13 Earnie Boyd mailto:earnie@users.sf.net
rem * Revert the nobinmode change.
rem
rem 2002.03.20 Earnie Boyd mailto:earnie@users.sf.net
rem * Add logic for stating bash.
rem
rem 2002.04.11 Earnie Boyd mailto;earnie@users.sf.net
rem * Add logic for setting MSYSTEM value based on parameter.
rem
rem 2002.04.15 Olivier Gautherot mailto:olivier_gautherot@mentorg.com
rem * Reduce number test conditions for finding an executable.
rem
rem 2002.04.15 Earnie Boyd mailto:earnie@users.sf.net
rem * Unset DISPLAY if set before starting shell.
rem
rem 2002.04.16 Earnie Boyd mailto:earnie@users.sf.net
rem * Remove use of DEFINED in conditional statments for variables for
rem command.com support.
rem * Add check for nonexistance of USERNAME variable for Win9x support.
rem
rem 2002.04.17 Earnie Boyd mailto:earnie@users.sf.net
rem * Add foreground and background color defaults based on MSYSTEM value.
rem
rem 2002.04.22 Earnie Boyd mailto:earnie@users.sf.net
rem * More Win 9x changes.
rem
rem 2002.05.04 Earnie Boyd mailto:earnie@users.sf.net
rem * Remove the SET of USERNAME and HOME.
rem
rem 2002.11.18 Earnie Boyd mailto:earnie@users.sf.net
rem * Add command.com detection and restart with a larger environment to
rem avoid errors on w9x.
rem Many thanks to Randy W. Sims mailto:RandyS@ThePierianSpring.org.
rem See Randy's response to "RE: [Mingw-msys] Installation on WindowsME"
rem from 11/06/2002 in the archives of mingw-msys@lists.sf.net.
rem
rem 2002.11.19 Paul Garceau mailto:pgarceau@attbi.com
rem * Fix a typo: Change COMPSPEC to COMSPEC.
rem
rem 2002.11.25 Earnie Boyd mailto:earnie@users.sf.net
rem * Remove the SET CYGWIN since it doesn't matter any longer.
rem
rem 2003.02.03 Earnie Boyd mailto:earnie@users.sf.net
rem * Win9x doesn't like ``EXISTS dir'' so change it to ``EXISTS dir\nul''.
rem Thanks to Nicolas Weber mailto:nicolasweber@gmx.de.
rem
rem 2003.03.06 Earnie Boyd mailto:earnie@users.sf.net
rem * Add -backspacekey switch to rxvt startup.
rem * Move RXVT color setup to startrxvt label
rem
rem 2004.01.30 Earnie Boyd mailto:earnie@users.sf.net
rem * Add -geometry parameter to work around an off by one issue with
rem the default values.
rem Thanks to Dave Schuyler mailto:parameter@users.sf.net
@@ -1,15 +0,0 @@
@rem Do not use "echo off" to not affect any child calls.
@setlocal
@rem Get the abolute path to the current directory, which is assumed to be the
@rem Git installation root.
@for /F "delims=" %%I in ("%~dp0") do @set git_install_root=%%~fI
@set PATH=%git_install_root%\bin;%git_install_root%\mingw\bin;%git_install_root%\cmd;%PATH%
@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%
@set PLINK_PROTOCOL=ssh
@cd %HOME%
@start %COMSPEC%
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<connection>
<connection>
<name>Default</name>
<source>file:/C:/Users/Naitlin</source>
</connection>
</connection>
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<sites>
<site>
<name>YBDB &lt;-&gt; YBDB_Remote</name>
<source>workspace:/YBDB</source>
<destination>aptanavfs://83422b28-2181-4f36-b3b7-c239d76e66a2/</destination>
</site>
</sites>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<servers/>
@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchHistory>
<launchGroup id="org.eclipse.ui.externaltools.launchGroup">
<mruHistory/>
<favorites/>
</launchGroup>
<launchGroup id="org.eclipse.debug.ui.launchGroup.profile">
<mruHistory/>
<favorites/>
</launchGroup>
<launchGroup id="org.eclipse.debug.ui.launchGroup.debug">
<mruHistory>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Firefox - Internal Server&quot;/&gt;&#13;&#10;"/>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Internet Explorer - Internal Server&quot;/&gt;&#13;&#10;"/>
</mruHistory>
<favorites/>
</launchGroup>
<launchGroup id="org.eclipse.debug.ui.launchGroup.run">
<mruHistory>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Firefox - Internal Server&quot;/&gt;&#13;&#10;"/>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Internet Explorer - Internal Server&quot;/&gt;&#13;&#10;"/>
</mruHistory>
<favorites/>
</launchGroup>
</launchHistory>
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<workingSetManager>
<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1377655030398_0" label="Window Working Set" name="Aggregate for window 1377655030395"/>
</workingSetManager>
-1
View File
@@ -1 +0,0 @@
org.eclipse.core.runtime=1
-26
View File
@@ -1,26 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<!-- TemplateBeginEditable name="head" -->
<!-- Insert code here -->
<!-- TemplateEndEditable -->
<link href="../css_yb_standard.css" rel="stylesheet" type="text/css" />
</head>
<body class="yb_standard">
<table align="center">
<tr valign="top">
<td height="40" align="right"><a href="../shop_log.php">Current Shop</a> | <a href="../start_shop.php"> All Shops</a> | <a href="../contact_add_edit_select.php">Edit Contact Info</a> | <a href="../stats.php">Statistics</a> | <a href="../transaction_log.php">Transaction Log</a> | <a href="http://www.austinyellowbike.org/" target="_blank">YBP Home</a></td>
</tr>
<tr>
<td><!-- TemplateBeginEditable name="Body" -->Body<!-- TemplateEndEditable --></td>
</tr>
</table>
</body>
</html>
Binary file not shown.
-10
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,63 @@
<?php
//This function redirects the Log to the Welcome Page
function redirect($sec_delay){
$sec_delay = $sec_delay* 1000;
echo <<<EOD
<SCRIPT language="JavaScript">
<!--
function getgoing()
{
top.location="http://www.ybdb.austinyellowbike.org/shop_log.php?" + location.search.substring(1);
}
setTimeout('getgoing()',$sec_delay);
//-->
</SCRIPT>
EOD;
}
?>
<?php
if (isset($_GET['email'])) {
$email = $_GET['email'];
} else {
$email = -1;
}
$editFormAction = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<?php
//Welcome page redirects
redirect(15); //Always redirect in 60 seconds on this page
?>
<link href="css_yb_standard.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table border="0" align="center" cellpadding="1" cellspacing="0" class="yb_standardCENTER">
<tr>
<td height="900" valign="top"><p class="yb_standardCENTERred">First-time sign in almost complete </p>
<p>You have been sent an email to confirm your subscription to:</p>
<p><strong>The Yellow Bike Project - Monthly Newsletter </strong></p>
<p> To begin receiving the newsletter follow the instructions in the confirmation email. </p>
<p>&nbsp;</p>
<p>You will be redirected to the sign-in sheet in a moment. <span class="yb_standardCENTERred">Please sign in there. </span></p>
</td>
</tr>
</table>
<p>&nbsp;</p>
<IFRAME SRC="http://groups.google.com/group/yellowbike-newsletter/boxsubscribe?email=<?php echo $email;?>" WIDTH=760 HEIGHT=500>
</IFRAME>
<p>&nbsp;</p>
</body>
</html>
+180
View File
@@ -0,0 +1,180 @@
<?php
require_once('Connections/YBDB.php');
require_once('Connections/database_functions.php');
if($_GET['shop_id']>0){
$shop_id = $_GET['shop_id'];
} else {
$shop_id = current_shop_by_ip();
}
switch ($_GET['error']) {
case 'new_error_message': //this is a sample error message. insert error case here
$error_message = '';
break;
default:
$error_message = 'Enter or Update Contact Information - </span><span class="yb_standard"> Yellow Bike uses this information soely to support the project and it is kept entirely private. When we apply for grants it helps us to know a little bit about our shop users. <p>Thanks for supporting The Yellow Bike Project. </p> </span><span class="yb_heading3red">';
break;
}
$page_shop_log = PAGE_SHOP_LOG . "?shop_id=$shop_id";
if($_GET['contact_id'] == 'new_contact'){
//adds contact is new_contact is selected
$insertSQL = sprintf("INSERT INTO contacts (date_created) VALUES (%s)",
GetSQLValueString('current_time', "date"));
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($insertSQL, $YBDB) or die(mysql_error());
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset2 = "SELECT MAX(contact_id) as new_contact_id FROM contacts;";
$Recordset2 = mysql_query($query_Recordset2, $YBDB) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
$contact_id = $row_Recordset2['new_contact_id'];
$contact_id_entry = 'new_contact';
mysql_free_result($Recordset2);
} elseif(isset($_GET['contact_id'])) {
//else contact_id is assigned from passed value
$contact_id = $_GET['contact_id'];
$contact_id_entry = $_GET['contact_id'];
} else {
$contact_id = -1;
$contact_id_entry = -1;
}
$editFormAction = $_SERVER['PHP_SELF'] . "?contact_id={$contact_id}&shop_id={$shop_id}";
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$updateSQL = sprintf("UPDATE contacts SET first_name=%s, middle_initial=%s, last_name=%s, email=%s, DOB=%s, receive_newsletter=%s, phone=%s, address1=%s, address2=%s, city=%s, `state`=%s, zip=%s, pass=ENCODE(%s,'yblcatx') WHERE contact_id=%s",
GetSQLValueString($_POST['first_name'], "text"),
GetSQLValueString($_POST['middle_initial'], "text"),
GetSQLValueString($_POST['last_name'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['DOB'], "date"),
GetSQLValueString($_POST['list_yes_no'], "int"),
GetSQLValueString($_POST['phone'], "text"),
GetSQLValueString($_POST['address1'], "text"),
GetSQLValueString($_POST['address2'], "text"),
GetSQLValueString($_POST['city'], "text"),
GetSQLValueString($_POST['state'], "text"),
GetSQLValueString($_POST['zip'], "text"),
GetSQLValueString($_POST['password'], "text"),
GetSQLValueString($_POST['contact_id'], "int"));
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
if ($_POST['contact_id_entry'] == 'new_contact'){
//navigate back to shop that it came from
//if there is an email address submitted pass this to google groups signup. Otherwise redirect to shop log.
if ((strpos($_POST['email'], '@') > 0) && ($_POST['list_yes_no'] == 1)) {
$email = $_POST['email'];
$pagegoto = "contact_add_edit_confirmation_iframe.php" . "?shop_id={$shop_id}&new_user_id={$contact_id}&email=$email";
} else {
$pagegoto = PAGE_SHOP_LOG . "?shop_id={$shop_id}&new_user_id={$contact_id}";
}
header(sprintf("Location: %s", $pagegoto));
}
}
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset1 = "SELECT *, DECODE(pass,'yblcatx') AS passdecode FROM contacts WHERE contact_id = $contact_id";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<?php include("include_header.html"); ?>
<table>
<tr valign="top">
<td align="left"><span class="yb_heading3red"><?php echo $error_message; ?></span></td>
</tr>
<tr>
<td align="center">
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<table width="500" border="1" cellpadding="1" cellspacing="0" bordercolor="#CCCCCC">
<tr valign="baseline">
<td width="200" align="right" nowrap>Contact_id:</td>
<td><?php echo $row_Recordset1['contact_id']; ?></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">First_name:</td>
<td><input type="text" name="first_name" value="<?php echo $row_Recordset1['first_name']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Middle_initial:</td>
<td><input name="middle_initial" type="text" value="<?php echo $row_Recordset1['middle_initial']; ?>" size="1" maxlength="1"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Last_name:</td>
<td><input type="text" name="last_name" value="<?php echo $row_Recordset1['last_name']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Email:</td>
<td><input type="text" name="email" value="<?php echo $row_Recordset1['email']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Date of Birth: </td>
<td><input type="text" name="DOB" value="<?php echo $row_Recordset1['DOB']; ?>" size="10" />
(YYYY-MM-DD) </td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Receive YBP Newsletter?:</td>
<td><?php list_yes_no(list_yes_no,$row_Recordset1['receive_newsletter']); ?></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Phone:</td>
<td><input type="text" name="phone" value="<?php echo $row_Recordset1['phone']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Address1:</td>
<td><input type="text" name="address1" value="<?php echo $row_Recordset1['address1']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Address2:</td>
<td><input type="text" name="address2" value="<?php echo $row_Recordset1['address2']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">City:</td>
<td><input type="text" name="city" value="<?php echo $row_Recordset1['city']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">State:</td>
<td><input name="state" type="text" value="<?php echo $row_Recordset1['state']; ?>" size="2" maxlength="2"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">ZIP:</td>
<td><input type="text" name="zip" value="<?php echo $row_Recordset1['zip']; ?>" size="5"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">New Password:</td>
<td><input name="password" type="password" id="password" value="<?php echo $row_Recordset1['passdecode']; ?>" size="32">
<br />
Your password keeps others from viewing your personal information. </td>
</tr>
<tr valign="baseline">
<td nowrap align="right">&nbsp;</td>
<td><input type="submit" value="Update Contact Info"></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1">
<input type="hidden" name="contact_id" value="<?php echo $row_Recordset1['contact_id']; ?>">
<input type="hidden" name="contact_id_entry" value="<?php echo $contact_id_entry; ?>">
</form> </td>
</tr>
</table>
<p>&nbsp;</p>
<?php include("include_footer.html"); ?>
<?php
mysql_free_result($Recordset1);
?>
+227
View File
@@ -0,0 +1,227 @@
<?php
require_once('Connections/YBDB.php');
require_once('Connections/database_functions.php');
$page_edit_contact = PAGE_EDIT_CONTACT;
$page_individual_history_log = INDIVIDUAL_HISTORY_LOG;
mysql_select_db($database_YBDB, $YBDB);
//?shop_id=2
if($_GET['shop_id']>0){
$shop_id = $_GET['shop_id'];
} else {
$shop_id = current_shop_by_ip();
if (isset($shop_id)) {
//$shop_id stays the same
} else {
$gotopage = PAGE_START_SHOP . "?error=no_shop";
header(sprintf("Location: %s",$gotopage ));
}
}
if($_GET['visit_id']>0){
$visit_id = $_GET['visit_id'];
} else {
$visit_id =-1;}
if($_GET['new_user_id']>0){
$new_user_id = $_GET['new_user_id'];
} else {
$new_user_id = -1;
}
$query_Recordset1 = "SELECT shop_hours.shop_visit_id, shop_hours.contact_id, shop_hours.shop_user_role, shop_hours.project_id, shop_hours.time_in, shop_hours.time_out, TIME_FORMAT(TIMEDIFF(time_out, time_in),'%k:%i') as et, shop_hours.comment, CONCAT(contacts.last_name, ', ', contacts.first_name, ' ',contacts.middle_initial) AS full_name, contacts.first_name FROM shop_hours
LEFT JOIN shop_user_roles ON shop_hours.shop_user_role=shop_user_roles.shop_user_role_id
LEFT JOIN contacts ON shop_hours.contact_id=contacts.contact_id
WHERE shop_hours.shop_id = $shop_id ORDER BY hours_rank, time_in DESC;";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
//$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset2 = "SELECT * FROM shops WHERE shop_id = $shop_id;";
$Recordset2 = mysql_query($query_Recordset2, $YBDB) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
$shop_date = $row_Recordset2['date'];
$shop_location = $row_Recordset2['shop_location'];
$shop_type = $row_Recordset2['shop_type'];
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset3 = "SELECT MIN(time_in) as shop_start FROM shop_hours WHERE shop_id = $shop_id;";
$Recordset3 = mysql_query($query_Recordset3, $YBDB) or die(mysql_error());
$row_Recordset3 = mysql_fetch_assoc($Recordset3);
$totalRows_Recordset3 = mysql_num_rows($Recordset3);
$shop_start_time = $row_Recordset3['shop_start'];
//Action on form update
//shop_log2.php?shop_id=2&amp;visit_id=4
$editFormAction = $_SERVER['PHP_SELF'] . "?shop_id=$shop_id&visit_id=$visit_id&welcome=yes";
$editFormAction_novisit = $_SERVER['PHP_SELF'] . "?shop_id=$shop_id&welcome=yes";
//if (isset($_SERVER['QUERY_STRING'])) {
// $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
//}
//Form Submit New Shop User
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_new") && ($_POST["contact_id"] == "no_selection")){
//if no contact is selected
$error_message = '<span class="yb_heading3red">Please Select a User</span><br />';
} elseif ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_new")) {
$insertSQL = sprintf("INSERT INTO shop_hours (contact_id, shop_id, shop_user_role, time_in) VALUES (%s, %s, %s, %s)",
GetSQLValueString($_POST['contact_id'], "int"),
GetSQLValueString($shop_id, "int"),
GetSQLValueString($_POST['user_role'], "text"),
GetSQLValueString($_POST['time_in'], "date"));
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($insertSQL, $YBDB) or die(mysql_error());
$insertGoTo = "shop_log2.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $editFormAction_novisit));
}
//$_POST["MM_insert"] is in the form: FormUpdate_$VisitID OR FormUpdate_142. This line seperates the visit id from the
//list($is_UpdateForm, $visit_id) = split('[_]', $_POST["MM_insert"]);
//Update Record isset($_POST["MM_update"])
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormUpdate")) {
$updateSQL = sprintf("UPDATE shop_hours SET time_out=%s WHERE shop_visit_id=%s",
GetSQLValueString($_POST['time_out'], "date"),
GetSQLValueString($_POST['shop_visit_id'], "int"));
//"2006-10-12 18:15:00"
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
$gotopage = "index.html";
header(sprintf("Location: %s",$editFormAction )); //$editFormAction
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormEdit")) {
$updateSQL = sprintf("UPDATE shop_hours SET contact_id=%s, shop_user_role=%s, project_id=%s, time_in=%s, time_out=%s, comment=%s WHERE shop_visit_id=%s",
GetSQLValueString($_POST['contact_id'], "int"),
GetSQLValueString($_POST['user_role'], "text"),
GetSQLValueString($_POST['project'], "text"),
GetSQLValueString($_POST['time_in'], "date"),
GetSQLValueString($_POST['time_out'], "date"),
GetSQLValueString($_POST['comment'], "text"),
GetSQLValueString($_POST['shop_visit_id'], "int"));
//"2006-10-12 18:15:00"
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
header(sprintf("Location: %s",$editFormAction_novisit )); //$editFormAction
}
?>
<?php include("include_header.html"); ?>
<table border="0" cellpadding="1" cellspacing="0">
<tr>
<td align="left" valign="bottom"><?php echo $error_message;?>
Shop ID: <span class="yb_standarditalics"><?php echo $shop_id;?></span>; &nbsp;Location: <span class="yb_standarditalics"><?php echo $shop_location;?></span>; &nbsp;Date: <span class="yb_standarditalics"><?php echo $shop_date;?></span>; &nbsp;Shop Type: <span class="yb_standarditalics"><?php echo $shop_type;?></span> </td>
</tr>
<tr>
<td>
<table border="1" cellpadding="1" cellspacing="0" bordercolor="#CCCCCC">
<tr bordercolor="#CCCCCC" bgcolor="#99CC33">
<td height="35"><strong>Shop User </strong></td>
<td height="35" bgcolor="#99CC33"><strong>Status</strong></td>
<td width="70" height="35"><strong>Time In </strong></td>
<td width="70" height="35"><strong>Time Out </strong></td>
<td height="35"><strong>Update Hours </strong></td>
<td height="35"><strong>Edit Data </strong></td>
</tr>
<form method="post" name="form_new" action="<?php echo $editFormAction; ?>">
<tr bordercolor="#CCCCCC">
<td height="40" valign="bottom"><strong>New User:</strong><br>
<span class="yb_standard_small">&nbsp;&nbsp;Not in the list: Create <a href="<?php echo $page_edit_contact; ?>?contact_id=new_contact&shop_id=<?php echo $shop_id?>">New User</a></span>
<?php list_contacts_select_user('contact_id', $new_user_id); ?></td>
<td valign="bottom"><strong>
<?php list_shop_user_roles('user_role','Personal'); ?>
</strong></td>
<td valign="bottom"><strong>
<?php if($totalRows_Recordset1 <> 0){
list_time($shop_start_time,'0000-00-00 00:00:00','time_in',-60,0,'none',16);
} else {
list_time("{$shop_date} 08:00:00",'0000-00-00 00:00:00','time_in',-15, 0, 'none',16);
}
?>
</strong></td>
<td valign="bottom"><img src="150_10.jpg" width="150" height="10" /></td>
<td valign="bottom"><input name="Submit" type="submit" value="Sign In" /></td>
<td valign="bottom">&nbsp;</td>
</tr>
<input type="hidden" name="MM_insert" value="form_new">
</form>
<tr valign="bottom" bordercolor="#CCCCCC" bgcolor="#99CC33">
<td height="25" colspan="6" bgcolor="#99CC33">&nbsp;&nbsp;&nbsp;&nbsp;Existing Shop Users:</td>
</tr>
<?php while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) { //do {
if($visit_id == $row_Recordset1['shop_visit_id']) {?>
<form method="post" name="FormUpdate_<?php echo $row_Recordset1['shop_visit_id']; ?>" action="<?php echo $editFormAction; ?>">
<tr valign="bottom" bordercolor="#CCCCCC" bgcolor="#CCCC33">
<td>Edit Record: <br>
<?php list_contacts('contact_id', $row_Recordset1['contact_id']); ?></td>
<td><?php list_shop_user_roles('user_role', $row_Recordset1['shop_user_role']); ?></td>
<td><?php list_time($shop_start_time,'0000-00-00 00:00:00','time_in',-60,0,$row_Recordset1['time_in'],16); ?></td>
<td><?php
if ($row_Recordset1['time_out'] <> '0000-00-00 00:00:00'){
list_time($row_Recordset1['time_in'],$row_Recordset1['time_out'],'time_out',0,1,$row_Recordset1['time_out']);
} ?></td>
<td><input type="submit" name="Submit" value="Update Changes" /></td>
<td></td>
</tr>
<tr bordercolor="#CCCCCC" bgcolor="#CCCC33">
<td colspan="6"><table border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="125"><div align="right">Project:</div></td>
<td><?php list_projects('project', $row_Recordset1['project_id']); ?></td>
</tr>
<tr>
<td><div align="right">Comment:</div></td>
<td><input name="comment" type="text" value="<?php echo $row_Recordset1['comment']; ?>" size="90" /></td>
</tr>
<?php ?>
<tr>
<td><div align="right">Delete:</div></td>
<td>Click to Delete this Shop User's Visit:</td>
<?php ?>
</tr>
</table> </td>
</tr>
<input type="hidden" name="MM_insert" value="FormEdit">
<input type="hidden" name="shop_visit_id" value="<?php echo $row_Recordset1['shop_visit_id']; ?>">
</form>
<?php } else { //This section executes if it is not the visit_id selected NOT FOR EDIT ?>
<form method="post" name="FormUpdate_<?php echo $row_Recordset1['shop_visit_id']; ?>" action="<?php echo $editFormAction; ?>">
<tr bordercolor="#CCCCCC">
<td><a href="<?php echo "{$page_individual_history_log}?contact_id=" . $row_Recordset1['contact_id']; ?>"><?php echo $row_Recordset1['full_name']; ?></a></td>
<td><?php echo $row_Recordset1['shop_user_role']; ?></td>
<td><?php echo date_to_time($row_Recordset1['time_in']); ?></td>
<td><?php echo list_time($row_Recordset1['time_in'],$row_Recordset1['time_out'],'time_out',0,1,'none', 8,$row_Recordset1['et']); ?></td>
<td><?php sign_out($row_Recordset1['time_out'], $row_Recordset1['first_name']); ?></td>
<td><?php echo "<a href=\"{$_SERVER['PHP_SELF']}?shop_id={$shop_id}&visit_id={$row_Recordset1['shop_visit_id']}\">edit</a>"; ?></td>
</tr>
<input type="hidden" name="MM_insert" value="FormUpdate">
<input type="hidden" name="shop_visit_id" value="<?php echo $row_Recordset1['shop_visit_id']; ?>">
</form>
<?php } // if
} //while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); // while Recordset1 ?>
</table> </tr>
<tr>
<td height="40" valign="bottom"></td>
</tr>
</table>
<p>&nbsp;</p>
<?php include("include_footer.html"); ?>
<?php
mysql_free_result($Recordset1);
?>
+59
View File
@@ -0,0 +1,59 @@
<?php
require_once('Connections/YBDB.php');
require_once('Connections/database_functions.php');
if($_GET['visit_id']>0){
$visit_id = $_GET['visit_id'];
} else {
$visit_id =-1;
}
if($_GET['shop_id']>0){
$shop_id = $_GET['shop_id'];
} else {
$shop_id =-1;
}
if(isset($_GET['confirm_delete'])){
$confirm_delete = $_GET['confirm_delete'];
} else {
$confirm_delete ='no';
}
$page_delete_yes = $_SERVER['PHP_SELF'] . "?" . htmlentities($_SERVER['QUERY_STRING']) . "&confirm=yes";
if ($shop_id <> 90){
//returns to the shop_log?shop_id page
$page_delete_no = PAGE_SHOP_LOG . "?" . htmlentities($_SERVER['QUERY_STRING']);
} else {
//returns to the individual hours page
$page_delete_no = INDIVIDUAL_HOURS_LOG . "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((visit_id <> -1) && (shop_id <> -1) && ($_GET['confirm'] == 'yes')){
$insertSQL = "DELETE FROM shop_hours WHERE shop_visit_id = {$visit_id}";
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($insertSQL, $YBDB) or die(mysql_error());
$pagegoto = $page_delete_no;
header(sprintf("Location: %s", $pagegoto)); //browse back to shop
} // end if to delete
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Yellow Bike - Shop Login</title>
<link href="css_yb_standard.css" rel="stylesheet" type="text/css" />
</head>
<body class="yb_standard">
<p>Do you really want to delete this visit:</p>
<p>
<a href="<?php echo $page_delete_yes ?>">Yes</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="<?php echo $page_delete_no ?>">No</a></p>
</body>
</html>
+227
View File
@@ -0,0 +1,227 @@
<?php
require_once('Connections/YBDB.php');
require_once('Connections/database_functions.php');
$page_edit_contact = PAGE_EDIT_CONTACT;
$page_individual_history_log = INDIVIDUAL_HISTORY_LOG;
mysql_select_db($database_YBDB, $YBDB);
//?shop_id=2
if($_GET['shop_id']>0){
$shop_id = $_GET['shop_id'];
} else {
$shop_id = current_shop_by_ip();
if (isset($shop_id)) {
//$shop_id stays the same
} else {
$gotopage = PAGE_START_SHOP . "?error=no_shop";
header(sprintf("Location: %s",$gotopage ));
}
}
if($_GET['visit_id']>0){
$visit_id = $_GET['visit_id'];
} else {
$visit_id =-1;}
if($_GET['new_user_id']>0){
$new_user_id = $_GET['new_user_id'];
} else {
$new_user_id = -1;
}
$query_Recordset1 = "SELECT shop_hours.shop_visit_id, shop_hours.contact_id, shop_hours.shop_user_role, shop_hours.project_id, shop_hours.time_in, shop_hours.time_out, TIME_FORMAT(TIMEDIFF(time_out, time_in),'%k:%i') as et, shop_hours.comment, CONCAT(contacts.last_name, ', ', contacts.first_name, ' ',contacts.middle_initial) AS full_name, contacts.first_name FROM shop_hours
LEFT JOIN shop_user_roles ON shop_hours.shop_user_role=shop_user_roles.shop_user_role_id
LEFT JOIN contacts ON shop_hours.contact_id=contacts.contact_id
WHERE shop_hours.shop_id = $shop_id ORDER BY hours_rank, time_in DESC;";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
//$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset2 = "SELECT * FROM shops WHERE shop_id = $shop_id;";
$Recordset2 = mysql_query($query_Recordset2, $YBDB) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
$shop_date = $row_Recordset2['date'];
$shop_location = $row_Recordset2['shop_location'];
$shop_type = $row_Recordset2['shop_type'];
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset3 = "SELECT MIN(time_in) as shop_start FROM shop_hours WHERE shop_id = $shop_id;";
$Recordset3 = mysql_query($query_Recordset3, $YBDB) or die(mysql_error());
$row_Recordset3 = mysql_fetch_assoc($Recordset3);
$totalRows_Recordset3 = mysql_num_rows($Recordset3);
$shop_start_time = $row_Recordset3['shop_start'];
//Action on form update
//shop_log2.php?shop_id=2&amp;visit_id=4
$editFormAction = $_SERVER['PHP_SELF'] . "?shop_id=$shop_id&visit_id=$visit_id&welcome=yes";
$editFormAction_novisit = $_SERVER['PHP_SELF'] . "?shop_id=$shop_id&welcome=yes";
//if (isset($_SERVER['QUERY_STRING'])) {
// $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
//}
//Form Submit New Shop User
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_new") && ($_POST["contact_id"] == "no_selection")){
//if no contact is selected
$error_message = '<span class="yb_heading3red">Please Select a User</span><br />';
} elseif ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_new")) {
$insertSQL = sprintf("INSERT INTO shop_hours (contact_id, shop_id, shop_user_role, time_in) VALUES (%s, %s, %s, %s)",
GetSQLValueString($_POST['contact_id'], "int"),
GetSQLValueString($shop_id, "int"),
GetSQLValueString($_POST['user_role'], "text"),
GetSQLValueString($_POST['time_in'], "date"));
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($insertSQL, $YBDB) or die(mysql_error());
$insertGoTo = "shop_log2.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $editFormAction_novisit));
}
//$_POST["MM_insert"] is in the form: FormUpdate_$VisitID OR FormUpdate_142. This line seperates the visit id from the
//list($is_UpdateForm, $visit_id) = split('[_]', $_POST["MM_insert"]);
//Update Record isset($_POST["MM_update"])
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormUpdate")) {
$updateSQL = sprintf("UPDATE shop_hours SET time_out=%s WHERE shop_visit_id=%s",
GetSQLValueString($_POST['time_out'], "date"),
GetSQLValueString($_POST['shop_visit_id'], "int"));
//"2006-10-12 18:15:00"
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
$gotopage = "index.html";
header(sprintf("Location: %s",$editFormAction )); //$editFormAction
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormEdit")) {
$updateSQL = sprintf("UPDATE shop_hours SET contact_id=%s, shop_user_role=%s, project_id=%s, time_in=%s, time_out=%s, comment=%s WHERE shop_visit_id=%s",
GetSQLValueString($_POST['contact_id'], "int"),
GetSQLValueString($_POST['user_role'], "text"),
GetSQLValueString($_POST['project'], "text"),
GetSQLValueString($_POST['time_in'], "date"),
GetSQLValueString($_POST['time_out'], "date"),
GetSQLValueString($_POST['comment'], "text"),
GetSQLValueString($_POST['shop_visit_id'], "int"));
//"2006-10-12 18:15:00"
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
header(sprintf("Location: %s",$editFormAction_novisit )); //$editFormAction
}
?>
<?php include("include_header.html"); ?>
<table border="0" cellpadding="1" cellspacing="0">
<tr>
<td align="left" valign="bottom"><?php echo $error_message;?>
Shop ID: <span class="yb_standarditalics"><?php echo $shop_id;?></span>; &nbsp;Location: <span class="yb_standarditalics"><?php echo $shop_location;?></span>; &nbsp;Date: <span class="yb_standarditalics"><?php echo $shop_date;?></span>; &nbsp;Shop Type: <span class="yb_standarditalics"><?php echo $shop_type;?></span> </td>
</tr>
<tr>
<td>
<table border="1" cellpadding="1" cellspacing="0" bordercolor="#CCCCCC">
<tr bordercolor="#CCCCCC" bgcolor="#99CC33">
<td height="35"><strong>Shop User </strong></td>
<td height="35" bgcolor="#99CC33"><strong>Status</strong></td>
<td width="70" height="35"><strong>Time In </strong></td>
<td width="70" height="35"><strong>Time Out </strong></td>
<td height="35"><strong>Update Hours </strong></td>
<td height="35"><strong>Edit Data </strong></td>
</tr>
<form method="post" name="form_new" action="<?php echo $editFormAction; ?>">
<tr bordercolor="#CCCCCC">
<td height="40" valign="bottom"><strong>New User:</strong><br>
<span class="yb_standard_small">&nbsp;&nbsp;Not in the list: Create <a href="<?php echo $page_edit_contact; ?>?contact_id=new_contact&shop_id=<?php echo $shop_id?>">New User</a></span>
<?php list_contacts_select_user('contact_id', $new_user_id); ?></td>
<td valign="bottom"><strong>
<?php list_shop_user_roles('user_role','Personal'); ?>
</strong></td>
<td valign="bottom"><strong>
<?php if($totalRows_Recordset1 <> 0){
list_time($shop_start_time,'0000-00-00 00:00:00','time_in',-60,0,'none',16);
} else {
list_time("{$shop_date} 08:00:00",'0000-00-00 00:00:00','time_in',-15, 0, 'none',16);
}
?>
</strong></td>
<td valign="bottom"><img src="150_10.jpg" width="150" height="10" /></td>
<td valign="bottom"><input name="Submit" type="submit" value="Sign In" /></td>
<td valign="bottom">&nbsp;</td>
</tr>
<input type="hidden" name="MM_insert" value="form_new">
</form>
<tr valign="bottom" bordercolor="#CCCCCC" bgcolor="#99CC33">
<td height="25" colspan="6" bgcolor="#99CC33">&nbsp;&nbsp;&nbsp;&nbsp;Existing Shop Users:</td>
</tr>
<?php while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) { //do {
if($visit_id == $row_Recordset1['shop_visit_id']) {?>
<form method="post" name="FormUpdate_<?php echo $row_Recordset1['shop_visit_id']; ?>" action="<?php echo $editFormAction; ?>">
<tr valign="bottom" bordercolor="#CCCCCC" bgcolor="#CCCC33">
<td>Edit Record: <br>
<?php list_contacts('contact_id', $row_Recordset1['contact_id']); ?></td>
<td><?php list_shop_user_roles('user_role', $row_Recordset1['shop_user_role']); ?></td>
<td><?php list_time($shop_start_time,'0000-00-00 00:00:00','time_in',-60,0,$row_Recordset1['time_in'],16); ?></td>
<td><?php
if ($row_Recordset1['time_out'] <> '0000-00-00 00:00:00'){
list_time($row_Recordset1['time_in'],$row_Recordset1['time_out'],'time_out',0,1,$row_Recordset1['time_out']);
} ?></td>
<td><input type="submit" name="Submit" value="Update Changes" /></td>
<td></td>
</tr>
<tr bordercolor="#CCCCCC" bgcolor="#CCCC33">
<td colspan="6"><table border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="125"><div align="right">Project:</div></td>
<td><?php list_projects('project', $row_Recordset1['project_id']); ?></td>
</tr>
<tr>
<td><div align="right">Comment:</div></td>
<td><input name="comment" type="text" value="<?php echo $row_Recordset1['comment']; ?>" size="90" /></td>
</tr>
<?php ?>
<tr>
<td><div align="right">Delete:</div></td>
<td>Click to Delete this Shop User's Visit:</td>
<?php ?>
</tr>
</table> </td>
</tr>
<input type="hidden" name="MM_insert" value="FormEdit">
<input type="hidden" name="shop_visit_id" value="<?php echo $row_Recordset1['shop_visit_id']; ?>">
</form>
<?php } else { //This section executes if it is not the visit_id selected NOT FOR EDIT ?>
<form method="post" name="FormUpdate_<?php echo $row_Recordset1['shop_visit_id']; ?>" action="<?php echo $editFormAction; ?>">
<tr bordercolor="#CCCCCC">
<td><a href="<?php echo "{$page_individual_history_log}?contact_id=" . $row_Recordset1['contact_id']; ?>"><?php echo $row_Recordset1['full_name']; ?></a></td>
<td><?php echo $row_Recordset1['shop_user_role']; ?></td>
<td><?php echo date_to_time($row_Recordset1['time_in']); ?></td>
<td><?php echo list_time($row_Recordset1['time_in'],$row_Recordset1['time_out'],'time_out',0,1,'none', 8,$row_Recordset1['et']); ?></td>
<td><?php sign_out($row_Recordset1['time_out'], $row_Recordset1['first_name']); ?></td>
<td><?php echo "<a href=\"{$_SERVER['PHP_SELF']}?shop_id={$shop_id}&visit_id={$row_Recordset1['shop_visit_id']}\">edit</a>"; ?></td>
</tr>
<input type="hidden" name="MM_insert" value="FormUpdate">
<input type="hidden" name="shop_visit_id" value="<?php echo $row_Recordset1['shop_visit_id']; ?>">
</form>
<?php } // if
} //while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); // while Recordset1 ?>
</table> </tr>
<tr>
<td height="40" valign="bottom"></td>
</tr>
</table>
<p>&nbsp;</p>
<?php include("include_footer.html"); ?>
<?php
mysql_free_result($Recordset1);
?>
View File
+375 -102
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

+437
View File
@@ -0,0 +1,437 @@
/*!
Chosen, a Select Box Enhancer for jQuery and Prototype
by Patrick Filler for Harvest, http://getharvest.com
Version 1.3.0
Full source at https://github.com/harvesthq/chosen
Copyright (c) 2011-2014 Harvest http://getharvest.com
MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
This file is generated by `grunt build`, do not edit it by hand.
*/
/* @group Base */
.chosen-container {
position: relative;
display: inline-block;
vertical-align: middle;
font-size: 13px;
zoom: 1;
*display: inline;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.chosen-container * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.chosen-container .chosen-drop {
position: absolute;
top: 100%;
left: -9999px;
z-index: 1010;
width: 100%;
border: 1px solid #aaa;
border-top: 0;
background: #fff;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
}
.chosen-container.chosen-with-drop .chosen-drop {
left: 0;
}
.chosen-container a {
cursor: pointer;
}
/* @end */
/* @group Single Chosen */
.chosen-container-single .chosen-single {
position: relative;
display: block;
overflow: hidden;
padding: 0 0 0 8px;
height: 25px;
border: 1px solid #aaa;
border-radius: 5px;
background-color: #fff;
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background-clip: padding-box;
box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
color: #444;
text-decoration: none;
white-space: nowrap;
line-height: 24px;
}
.chosen-container-single .chosen-default {
color: #999;
}
.chosen-container-single .chosen-single span {
display: block;
overflow: hidden;
margin-right: 26px;
text-overflow: ellipsis;
white-space: nowrap;
}
.chosen-container-single .chosen-single-with-deselect span {
margin-right: 38px;
}
.chosen-container-single .chosen-single abbr {
position: absolute;
top: 6px;
right: 26px;
display: block;
width: 12px;
height: 12px;
background: url('chosen-sprite.png') -42px 1px no-repeat;
font-size: 1px;
}
.chosen-container-single .chosen-single abbr:hover {
background-position: -42px -10px;
}
.chosen-container-single.chosen-disabled .chosen-single abbr:hover {
background-position: -42px -10px;
}
.chosen-container-single .chosen-single div {
position: absolute;
top: 0;
right: 0;
display: block;
width: 18px;
height: 100%;
}
.chosen-container-single .chosen-single div b {
display: block;
width: 100%;
height: 100%;
background: url('chosen-sprite.png') no-repeat 0px 2px;
}
.chosen-container-single .chosen-search {
position: relative;
z-index: 1010;
margin: 0;
padding: 3px 4px;
white-space: nowrap;
}
.chosen-container-single .chosen-search input[type="text"] {
margin: 1px 0;
padding: 4px 20px 4px 5px;
width: 100%;
height: auto;
outline: 0;
border: 1px solid #aaa;
background: white url('chosen-sprite.png') no-repeat 100% -20px;
background: url('chosen-sprite.png') no-repeat 100% -20px;
font-size: 1em;
font-family: sans-serif;
line-height: normal;
border-radius: 0;
}
.chosen-container-single .chosen-drop {
margin-top: -1px;
border-radius: 0 0 4px 4px;
background-clip: padding-box;
}
.chosen-container-single.chosen-container-single-nosearch .chosen-search {
position: absolute;
left: -9999px;
}
/* @end */
/* @group Results */
.chosen-container .chosen-results {
color: #444;
position: relative;
overflow-x: hidden;
overflow-y: auto;
margin: 0 4px 4px 0;
padding: 0 0 0 4px;
max-height: 240px;
-webkit-overflow-scrolling: touch;
}
.chosen-container .chosen-results li {
display: none;
margin: 0;
padding: 5px 6px;
list-style: none;
line-height: 15px;
word-wrap: break-word;
-webkit-touch-callout: none;
}
.chosen-container .chosen-results li.active-result {
display: list-item;
cursor: pointer;
}
.chosen-container .chosen-results li.disabled-result {
display: list-item;
color: #ccc;
cursor: default;
}
.chosen-container .chosen-results li.highlighted {
background-color: #3875d7;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
color: #fff;
}
.chosen-container .chosen-results li.no-results {
color: #777;
display: list-item;
background: #f4f4f4;
}
.chosen-container .chosen-results li.group-result {
display: list-item;
font-weight: bold;
cursor: default;
}
.chosen-container .chosen-results li.group-option {
padding-left: 15px;
}
.chosen-container .chosen-results li em {
font-style: normal;
text-decoration: underline;
}
/* @end */
/* @group Multi Chosen */
.chosen-container-multi .chosen-choices {
position: relative;
overflow: hidden;
margin: 0;
padding: 0 5px;
width: 100%;
height: auto !important;
height: 1%;
border: 1px solid #aaa;
background-color: #fff;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
cursor: text;
}
.chosen-container-multi .chosen-choices li {
float: left;
list-style: none;
}
.chosen-container-multi .chosen-choices li.search-field {
margin: 0;
padding: 0;
white-space: nowrap;
}
.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
margin: 1px 0;
padding: 0;
height: 25px;
outline: 0;
border: 0 !important;
background: transparent !important;
box-shadow: none;
color: #999;
font-size: 100%;
font-family: sans-serif;
line-height: normal;
border-radius: 0;
}
.chosen-container-multi .chosen-choices li.search-choice {
position: relative;
margin: 3px 5px 3px 0;
padding: 3px 20px 3px 5px;
border: 1px solid #aaa;
max-width: 100%;
border-radius: 3px;
background-color: #eeeeee;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-size: 100% 19px;
background-repeat: repeat-x;
background-clip: padding-box;
box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
color: #333;
line-height: 13px;
cursor: default;
}
.chosen-container-multi .chosen-choices li.search-choice span {
word-wrap: break-word;
}
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
position: absolute;
top: 4px;
right: 3px;
display: block;
width: 12px;
height: 12px;
background: url('chosen-sprite.png') -42px 1px no-repeat;
font-size: 1px;
}
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
background-position: -42px -10px;
}
.chosen-container-multi .chosen-choices li.search-choice-disabled {
padding-right: 5px;
border: 1px solid #ccc;
background-color: #e4e4e4;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
color: #666;
}
.chosen-container-multi .chosen-choices li.search-choice-focus {
background: #d4d4d4;
}
.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
background-position: -42px -10px;
}
.chosen-container-multi .chosen-results {
margin: 0;
padding: 0;
}
.chosen-container-multi .chosen-drop .result-selected {
display: list-item;
color: #ccc;
cursor: default;
}
/* @end */
/* @group Active */
.chosen-container-active .chosen-single {
border: 1px solid #5897fb;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
.chosen-container-active.chosen-with-drop .chosen-single {
border: 1px solid #aaa;
-moz-border-radius-bottomright: 0;
border-bottom-right-radius: 0;
-moz-border-radius-bottomleft: 0;
border-bottom-left-radius: 0;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
box-shadow: 0 1px 0 #fff inset;
}
.chosen-container-active.chosen-with-drop .chosen-single div {
border-left: none;
background: transparent;
}
.chosen-container-active.chosen-with-drop .chosen-single div b {
background-position: -18px 2px;
}
.chosen-container-active .chosen-choices {
border: 1px solid #5897fb;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
.chosen-container-active .chosen-choices li.search-field input[type="text"] {
color: #222 !important;
}
/* @end */
/* @group Disabled Support */
.chosen-disabled {
opacity: 0.5 !important;
cursor: default;
}
.chosen-disabled .chosen-single {
cursor: default;
}
.chosen-disabled .chosen-choices .search-choice .search-choice-close {
cursor: default;
}
/* @end */
/* @group Right to Left */
.chosen-rtl {
text-align: right;
}
.chosen-rtl .chosen-single {
overflow: visible;
padding: 0 8px 0 0;
}
.chosen-rtl .chosen-single span {
margin-right: 0;
margin-left: 26px;
direction: rtl;
}
.chosen-rtl .chosen-single-with-deselect span {
margin-left: 38px;
}
.chosen-rtl .chosen-single div {
right: auto;
left: 3px;
}
.chosen-rtl .chosen-single abbr {
right: auto;
left: 26px;
}
.chosen-rtl .chosen-choices li {
float: right;
}
.chosen-rtl .chosen-choices li.search-field input[type="text"] {
direction: rtl;
}
.chosen-rtl .chosen-choices li.search-choice {
margin: 3px 5px 3px 0;
padding: 3px 5px 3px 19px;
}
.chosen-rtl .chosen-choices li.search-choice .search-choice-close {
right: auto;
left: 4px;
}
.chosen-rtl.chosen-container-single-nosearch .chosen-search,
.chosen-rtl .chosen-drop {
left: 9999px;
}
.chosen-rtl.chosen-container-single .chosen-results {
margin: 0 0 4px 4px;
padding: 0 4px 0 0;
}
.chosen-rtl .chosen-results li.group-option {
padding-right: 15px;
padding-left: 0;
}
.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
border-right: none;
}
.chosen-rtl .chosen-search input[type="text"] {
padding: 4px 5px 4px 20px;
background: white url('chosen-sprite.png') no-repeat -30px -20px;
background: url('chosen-sprite.png') no-repeat -30px -20px;
direction: rtl;
}
.chosen-rtl.chosen-container-single .chosen-single div b {
background-position: 6px 2px;
}
.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
background-position: -12px 2px;
}
/* @end */
/* @group Retina compatibility */
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
.chosen-rtl .chosen-search input[type="text"],
.chosen-container-single .chosen-single abbr,
.chosen-container-single .chosen-single div b,
.chosen-container-single .chosen-search input[type="text"],
.chosen-container-multi .chosen-choices .search-choice .search-choice-close,
.chosen-container .chosen-results-scroll-down span,
.chosen-container .chosen-results-scroll-up span {
background-image: url('chosen-sprite@2x.png') !important;
background-size: 52px 37px !important;
background-repeat: no-repeat !important;
}
}
/* @end */
+95
View File
@@ -0,0 +1,95 @@
.contacts {
display: inline-block;
text-align: right;
width: 161px;
font-weight: bold;
padding-right: 5px;
}
.contact_comment {
display: inline-block;
}
/* center label with textarea */
.center_comment * {
vertical-align: middle;
}
#interest_form, #waiver {
padding: 10px;
display: block;
border: 1px solid rgb(173, 216, 230);
}
#interest_form > p {
margin-top: 0;
}
#submit_contact, #sign_in_button {
height: 36px;
width: 98px;
font-size: x-large;
}
#submit_contact:focus {
color: green;
}
#interest_form_button:focus {
color: green;
}
#waiver_button:focus {
color: green;
}
/* errors */
#waiver_error, #phone_error, #email_error,
#first_name_error, #last_name_error, #email_list_error
{
color: red;
}
/* toggle for mailman or other email list */
.toggle {
height: 50px;
}
.toggle.off .noUi-handle {
border-color: red;
}
.toggle.on .noUi-handle {
border-color: green;
}
/* get rid of the pesky handle stripping with specificity (when figured out) */
#email_list_toggle > div > div > div:before, #email_list_toggle > div > div > div:after,
{
content: none;
}
.toggle.noUi-horizontal .noUi-handle {
width: 34px;
height: 20px;
top: -2px;
}
.toggle.noUi-horizontal.noUi-extended {
padding-right: 32px;
}
.toggle.noUi-horizontal.noUi-extended .noUi-handle {
left: -1px;
}
.toggle.noUi-horizontal.noUi-extended .noUi-origin {
right: -32px;
}
#email_list_block > div {
display: inline-block;
}
/* end email list toggle */
+168
View File
@@ -0,0 +1,168 @@
/* Functional styling;
* These styles are required for noUiSlider to function.
* You don't need to change these rules to apply your design.
*/
.noUi-target,
.noUi-target * {
-webkit-touch-callout: none;
-webkit-user-select: none;
-ms-touch-action: none;
-ms-user-select: none;
-moz-user-select: none;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.noUi-target {
position: relative;
direction: ltr;
}
.noUi-base {
width: 100%;
height: 100%;
position: relative;
}
.noUi-origin {
position: absolute;
right: 0;
top: 0;
left: 0;
bottom: 0;
}
.noUi-handle {
position: relative;
z-index: 1;
}
.noUi-stacking .noUi-handle {
/* This class is applied to the lower origin when
its values is > 50%. */
z-index: 10;
}
.noUi-stacking + .noUi-origin {
/* Fix stacking order in IE7, which incorrectly
creates a new context for the origins. */
*z-index: -1;
}
.noUi-state-tap .noUi-origin {
-webkit-transition: left 0.3s, top 0.3s;
transition: left 0.3s, top 0.3s;
}
.noUi-state-drag * {
cursor: inherit !important;
}
/* Painting and performance;
* Browsers can paint handles in their own layer.
*/
.noUi-base {
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
/* Slider size and handle placement;
*/
.noUi-horizontal {
height: 18px;
}
.noUi-horizontal .noUi-handle {
width: 34px;
height: 28px;
left: -17px;
top: -6px;
}
.noUi-vertical {
width: 18px;
}
.noUi-vertical .noUi-handle {
width: 28px;
height: 34px;
left: -6px;
top: -17px;
}
/* Styling;
*/
.noUi-background {
background: #FAFAFA;
box-shadow: inset 0 1px 1px #f0f0f0;
}
.noUi-connect {
background: #3FB8AF;
box-shadow: inset 0 0 3px rgba(51,51,51,0.45);
-webkit-transition: background 450ms;
transition: background 450ms;
}
.noUi-origin {
border-radius: 2px;
}
.noUi-target {
border-radius: 4px;
border: 1px solid #D3D3D3;
box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
}
.noUi-target.noUi-connect {
box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB;
}
/* Handles and cursors;
*/
.noUi-dragable {
cursor: w-resize;
}
.noUi-vertical .noUi-dragable {
cursor: n-resize;
}
.noUi-handle {
border: 1px solid #D9D9D9;
border-radius: 3px;
background: #FFF;
cursor: default;
box-shadow: inset 0 0 1px #FFF,
inset 0 1px 7px #EBEBEB,
0 3px 6px -3px #BBB;
}
.noUi-active {
box-shadow: inset 0 0 1px #FFF,
inset 0 1px 7px #DDD,
0 3px 6px -3px #BBB;
}
/* Handle stripes;
*/
/*
.noUi-handle:before,
.noUi-handle:after {
content: "";
display: block;
position: absolute;
height: 14px;
width: 1px;
background: #E8E7E6;
left: 14px;
top: 6px;
}
*/
.noUi-handle:after {
left: 17px;
}
.noUi-vertical .noUi-handle:before,
.noUi-vertical .noUi-handle:after {
width: 14px;
height: 1px;
left: 6px;
top: 14px;
}
.noUi-vertical .noUi-handle:after {
top: 17px;
}
/* Disabled state;
*/
[disabled].noUi-connect,
[disabled] .noUi-connect {
background: #B8B8B8;
}
[disabled] .noUi-handle {
cursor: not-allowed;
}
+166
View File
@@ -0,0 +1,166 @@
/* Functional styling;
* These styles are required for noUiSlider to function.
* You don't need to change these rules to apply your design.
*/
.noUi-target,
.noUi-target * {
-webkit-touch-callout: none;
-webkit-user-select: none;
-ms-touch-action: none;
-ms-user-select: none;
-moz-user-select: none;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.noUi-target {
position: relative;
direction: ltr;
}
.noUi-base {
width: 100%;
height: 100%;
position: relative;
}
.noUi-origin {
position: absolute;
right: 0;
top: 0;
left: 0;
bottom: 0;
}
.noUi-handle {
position: relative;
z-index: 1;
}
.noUi-stacking .noUi-handle {
/* This class is applied to the lower origin when
its values is > 50%. */
z-index: 10;
}
.noUi-stacking + .noUi-origin {
/* Fix stacking order in IE7, which incorrectly
creates a new context for the origins. */
*z-index: -1;
}
.noUi-state-tap .noUi-origin {
-webkit-transition: left 0.3s, top 0.3s;
transition: left 0.3s, top 0.3s;
}
.noUi-state-drag * {
cursor: inherit !important;
}
/* Painting and performance;
* Browsers can paint handles in their own layer.
*/
.noUi-base {
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
/* Slider size and handle placement;
*/
.noUi-horizontal {
height: 18px;
}
.noUi-horizontal .noUi-handle {
width: 34px;
height: 28px;
left: -17px;
top: -6px;
}
.noUi-vertical {
width: 18px;
}
.noUi-vertical .noUi-handle {
width: 28px;
height: 34px;
left: -6px;
top: -17px;
}
/* Styling;
*/
.noUi-background {
background: #FAFAFA;
box-shadow: inset 0 1px 1px #f0f0f0;
}
.noUi-connect {
background: #3FB8AF;
box-shadow: inset 0 0 3px rgba(51,51,51,0.45);
-webkit-transition: background 450ms;
transition: background 450ms;
}
.noUi-origin {
border-radius: 2px;
}
.noUi-target {
border-radius: 4px;
border: 1px solid #D3D3D3;
box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
}
.noUi-target.noUi-connect {
box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB;
}
/* Handles and cursors;
*/
.noUi-dragable {
cursor: w-resize;
}
.noUi-vertical .noUi-dragable {
cursor: n-resize;
}
.noUi-handle {
border: 1px solid #D9D9D9;
border-radius: 3px;
background: #FFF;
cursor: default;
box-shadow: inset 0 0 1px #FFF,
inset 0 1px 7px #EBEBEB,
0 3px 6px -3px #BBB;
}
.noUi-active {
box-shadow: inset 0 0 1px #FFF,
inset 0 1px 7px #DDD,
0 3px 6px -3px #BBB;
}
/* Handle stripes;
*/
.noUi-handle:before,
.noUi-handle:after {
content: "";
display: block;
position: absolute;
height: 14px;
width: 1px;
background: #E8E7E6;
left: 14px;
top: 6px;
}
.noUi-handle:after {
left: 17px;
}
.noUi-vertical .noUi-handle:before,
.noUi-vertical .noUi-handle:after {
width: 14px;
height: 1px;
left: 6px;
top: 14px;
}
.noUi-vertical .noUi-handle:after {
top: 17px;
}
/* Disabled state;
*/
[disabled].noUi-connect,
[disabled] .noUi-connect {
background: #B8B8B8;
}
[disabled] .noUi-handle {
cursor: not-allowed;
}
+87
View File
@@ -0,0 +1,87 @@
/* sensible UI defaults for transaction views */
/* right-align labels */
td > label:not(.payment_type):not(.open_shop):not(.gnucash_csv) {
float: right;
padding-right: 5px;
}
/* bold transaction type */
#trans_type_info {
font-weight: bolder;
}
/* make unimportant buttons into links */
input[value=Delete], input[name=date_fill] {
background:none!important;
border:none;
padding:0!important;
color: blue;
/*border is optional*/
/* border-bottom:1px solid blue; */
cursor: pointer;
}
form[name=FormEdit] select:focus {
color: green;
}
select[name=transaction_type]:focus {
color: green;
}
.editable_change {
color: gray;
}
.editable_change form {
display: inline;
}
/*
input[value=Save]:focus, input[value=Close]:focus {
background: green;
}
*/
/* distinguish deposits */
.deposit, .deposit_calculator {
background-color: #FFDB58;
}
.deposit [type='checkbox'] {
display: none;
}
/* gnucash */
[name=gnucash_csv_year] {
width: 80px;
}
/* was 351 */
#gnucash_csv_range {
width: 496px;
}
#range_slider {
padding-top: 8px;
}
/* center error text by description when editing transactions */
[name=description], #description_error {
vertical-align: middle;
}
#slider_upper {
margin-left: 147px;
}
/* errors */
#current_shop > a, #date_error,
#transaction_start_error,
#sold_by_error, #sold_to_error,
#description_error, #check_number_error,
#payment_error, #payment_type_error,
#quantity_error, #anonymous_error {
color: red;
}
+61
View File
@@ -0,0 +1,61 @@
DOCKER
Assuming you have installed docker on a server,
it is much easier to setup YBDB with the docker image at
https://registry.hub.docker.com/u/bikebike/ybdb/ or build
a customized version from the source code at https://github.com/fspc/ybdb .
As part of Positive Spin's project to determine which software would best
fit our needs, docker demos were created from all known existing F/OSS
community bike shop software at http://bikebike.wvcompletestreets.org .
CUSTOMIZE
If you want to build your own image to use at a Community Bike Shop,
you will most likely want to setup ssl for the http server, create
self-signed certificates and a htpasswd file (see secure-terminals.txt),
and edit populate.sql and database_functions.php. These changes will
need to be reflected in the Dockerfile.
Never forget, if you make changes to any Community Bike Shop code,
merge your changes back into the main project so that all collectives
may benefit from the awesomeness of Free Software.
WHAT NEXT?
You will want to keep regular backups, have scripts that start/stop the container, and
monitor the main docker process.
BACKUPS
Redundancy is great. Save backups to at least two locations.
Obviously, the "YB" Database is the most important thing to backup,
and Docker makes backing up a container easy.
START/STOP SCRIPTS
Example of the standard upstart script used to start/stop bikebike docker containers:
description "Positive O Spin's container"
author "Jonathan Rosenbaum <gnuser@gmail.com>"
start on started docker
stop on runlevel [016]
respawn
exec start-stop-daemon --start --make-pidfile --pidfile /var/run/pos.pid --exec /usr/bin/docker start pos
MONITOR DOCKER PROCESS
Because docker container processes are children processes that change,
only the main docker pidfile is monitored by monit.
check process docker
with pidfile /var/run/docker.pid
start = "/sbin/start docker"
stop = "/sbin/stop docker"
+32
View File
@@ -0,0 +1,32 @@
# mailman_connector upstart script
# This is an example of an upstart script used to start/stop
# the mailman connector. Node is provided by nvm in a home directory, and
# a pid file is kept so that monitoring daemons can watch the program.
# Respawn is used as an additional technique.
#
# Stanza from Monit that monitors pid
#
# check process nodejs
# with pidfile /var/run/mailman_connector.pid
# start = "/sbin/start nodejs"
# stop = "/sbin/stop nodejs"
description "Subscribe/unsubscribe people to mailman as requested from YBDB."
author "Jonathan Rosenbaum <gnuser@gmail.com>"
start on runlevel [2345]
stop on runlevel [016]
env NVM_DIR="/home/ps/.nvm"
exec . $NVM_DIR/nvm.sh
respawn
exec nvm use 0.12
exec start-stop-daemon --start --make-pidfile --pidfile /var/run/mailman_connector.pid --exec /home/ps/.nvm/versions/v0.12.0/bin/node /home/ps/node.js/mailman_connector.js 9987
# If the connector requires a self-signed certificate, rather than a CA,
# make sure to provide the path to the actual corresponding certificate in database_functions.php.
#
+87
View File
@@ -0,0 +1,87 @@
var https = require('https');
var fs = require('fs');
var querystring = require('querystring');
var password = 'fakepassword';
var secret_password = 'bikebike';
var options = {
passphrase: 'fakepassword',
key: fs.readFileSync('./ssl/privkey.pem'),
cert: fs.readFileSync('./ssl/cacert.pem')
};
var mailman = require('https');
var mailman_options = {
hostname: 'wvcompletestreets.org',
port: 443,
path: '/',
method: 'POST',
ca: fs.readFileSync('/etc/ssl/certs/demo-cert.pem')
};
var server = https.createServer(options, function (request, response) {
response.writeHead(200, { 'Content-Type': 'application/json' });
request.on('data',function(message){
var data = JSON.parse(message);
var subscribees_upload = data.first_name + ' ' + data.last_name + ' <' + data.email + '>';
var url_object;
var member_query;
if (data.subscribe === 'subscribe') {
url_object = {
subscribe_or_invite: 0,
send_welcome_msg_to_this_batch: 1,
notification_to_list_owner: 1,
adminpw: password,
subscribees_upload: subscribees_upload
};
member_query = '/mailman/admin/ybdb-devel/members/add?' + querystring.stringify(url_object);
} else {
url_object = {
send_unsub_ack_to_this_batch: 1,
send_unsub_notifications_to_list_owner: 1,
unsubscribees_upload: data.email,
adminpw: password
};
member_query = '/mailman/admin/ybdb-devel/members/remove?' + querystring.stringify(url_object);
}
mailman_options.path = member_query;
if (secret_password === data.password) {
// post to mailman server
var req = mailman.request(mailman_options, function(res) {
console.log("statusCode: ", res.statusCode);
console.log("headers: ", res.headers);
res.on('data', function(d) {
//req.write(d);
});
});
req.end();
req.on('error', function(e) {
console.error(e);
});
} // secret_password matches
response.write('ok');
});
request.on('end',function(){
response.end();
});
server.on('error', function (e) {
console.error(e);
});
}); // end email connector server
server.listen(Number(process.argv[2]));
+109
View File
@@ -0,0 +1,109 @@
How to protect the password for YBDB in a public environment.
PROTECTING A DIRECTORY UNDER A WEBSERVER (apache 2.4)
A. The htpasswd command is found in the apache2-utils package.
B. htpasswd -Bc -C 10 htpasswd test (note that bcrypt is used)
C. chown www-data:www-data /var/htpasswd; chmod 0400 /var/htpasswd; \
D. <Directory /var/www/html>
Authtype Basic
Authname "Amazing Community Bike Shop Login"
Require user someuser
AuthUserFile /var/htpasswd
</Directory>
SSL (do not settle for anything less)
Under Debian:
A. openssl req -new -x509 -nodes -out ssl-cert-snakeoil.pem -days 36500 -keyout ssl-cert-snakeoil.key (100 year certificate)
B. cp ssl-cert-snakeoil.key /etc/ssl/private/
cp ssl-cert-snakeoil.pem /etc/ssl/certs/
C. a2enmod ssl;
a2ensite default-ssl.conf; (standard on debian-based distributions .. add <Directory> stanza above)
a2dissite 000-default.conf;
TERMINAL AUTOMATION AND SECURITY
Firefox (IceWeasel):
1. Download KeePass v2 zip - http://keepass.info/download.html
2. Unzip in ~/KeePass
3. sudo chown root:root ~/KeePass; sudo chmod 0755 ~/KeePass;
4. cd ~/KeePass; mkdir plugins
5. run .. mono KeePass.exe, create database and a key file in ~/KeePass
6. mv KeePass.config.xml KeePass.config.enforced.xml
7. sudo chown root:root KeePass.config.enforced.xml (and database/key file)
8. sudo chmod 0444 KeePass.config.enforced.xml
9. Most importantly in KeePass.config.enforced.xml between <Security> change true to
<Policy><UnhidePasswords>false</UnhidePasswords></Policy> so that passwords cannot be seen.
10. In Debian/Ubuntu: apt-get install mono-runtime mono-devel
11. Install KeeFox extension from https://addons.mozilla.org/en-us/firefox/addon/keefox/
12. KeeFox will tell you where to copy KeePassRPC.plgx from into the plugins directory
Usually somewhere under ~/.mozilla/firefox/*default/extensions/keefox*
13. When setting up password database for KeePass use only a key file.
14. Add the url along with username and password in the database.
15. Once the login is working properly for the htpasswd setup for apache,
the whole process can be completely automated in KeeFox options.
16. In Firefox (IceWeasel) Preferences -> General use "When IceWeasel starts: Show my windows and tabs from the last time"
17. Afterwards, you can sudo chown -R root:root ~/KeePass/*
You may need to make adjustments for plugins.
Chrome:
1. Download KeePass zip - http://keepass.info/download.html
2. Unzip in ~/KeePass
3. sudo chown root:root ~/KeePass; sudo chmod 0755 ~/KeePass;
4. run .. mono KeePass.exe, create database and a key file in ~/KeePass
5. mv KeePass.config.xml KeePass.config.enforced.xml
6. sudo chown root:root KeePass.config.enforced.xml (and database/key file)
7. sudo chmod 0444 KeePass.config.enforced.xml
8. Most importantly in KeePass.config.enforced.xml between <Security> change true to
<Policy><UnhidePasswords>false</UnhidePasswords></Policy> so that passwords cannot be seen.
9. When setting up password database for KeePass use only a key file.
10. Add the url along with username and password in the database.
11. In Debian/Ubuntu: apt-get install mono-runtime mono-devel
12. Install extension chromeIPass
13. Install keepasshttp as explained at https://github.com/pfn/keepasshttp/ (put KeePassHttp.plgx in ~/KeePass)
14. Follow the directions chromeIPass gives you, creating an identifier
15. Good idea to restart chrome.
16. In Chrome Settings "On Startup Continue where you left off"
17. Afterwards, you can sudo chown -R root:root ~/KeePass/*
You may need to make adjustments for plugins.
DESKTOP STARTUP
1. LXDE - put a file with this format in ~/.config/auto with name of *desktop, e.g. keepass.desktop:
[Desktop Entry]
Type=Application
Exec=/usr/bin/mono /home/ps/KeePass/KeePass.exe
2. Gnome based Window manager, e.g. Mate - open gnome-session-properties from commandline,
and add startup application.
SUSPENDING COMPUTER
Example commands that bring up the gui setting tool:
1. xfce4-power-manager-settings (eg., used by wattos for LXDE)
2. mate-power-manager-settings or mate-power-preferences
SUMMARY
There are other things that can be done within the terminal to prevent tampering, e.g., read-only environment,
an expect or curl script, etc. rather than KeePass, but what is above protects the password from hacking, eavesdropping,
and from regular users in the shop, basically, only the sysadmin and bookkeeper should have remote access via the password.
So while YBDB is on the internet, it will only be available to the terminal(s) you allow it to be on, and
the Point of Sale will be at the proper location which is usually the front of the Community Bike Shop where people
walk-in/walk-out.
Word of wisdom: It is always good practice to occasionally change the password.
+20 -4
View File
@@ -11,23 +11,39 @@ function logout()
function resetTimer() function resetTimer()
{ {
clearTimeout(t); clearTimeout(t);
t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity //t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity
} }
</script> </script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title> <title>YBDB</title>
<link href="css_yb_standard.css" rel="stylesheet" type="text/css" /> <link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
</head> </head>
<body class="yb_standard"> <body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0"> <table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top"> <tr valign="top">
<td height="40" align="right"><a href="shop_log.php">Current Shop</a> | <a href="start_shop.php"> All Shops</a> | <a href="contact_add_edit_select.php">Edit Contact Info</a> | <a href="stats.php">Statistics</a> | <a href="transaction_log.php">Transaction Log</a> | <a href="http://www.austinyellowbike.org/" target="_blank">YBP Home</a></td> <td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr> </tr>
<tr> <tr>
<td> <td>
+46
View File
@@ -0,0 +1,46 @@
<script type="text/javascript">
var t;
window.onload=resetTimer;
document.onmousedown=resetTimer;
document.onkeypress=resetTimer;
function logout()
{
location.href='shop_welcome.php'
}
function resetTimer()
{
clearTimeout(t);
//t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.contacts.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/contact.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
</head>
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
<tr>
<td>
+50
View File
@@ -0,0 +1,50 @@
<script type="text/javascript">
var t;
window.onload=resetTimer;
document.onmousedown=resetTimer;
document.onkeypress=resetTimer;
function logout()
{
location.href='shop_welcome.php'
}
function resetTimer()
{
clearTimeout(t);
t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
</head>
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="left"><a href="/shop_welcome.php">About/Help</a></td>
<td height="40" align="right"><a href="/shop_log.php">Sign In/Sign Out</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
</table>
+50
View File
@@ -0,0 +1,50 @@
<script type="text/javascript">
var t;
window.onload=resetTimer;
document.onmousedown=resetTimer;
document.onkeypress=resetTimer;
function logout()
{
location.href='shop_welcome.php'
}
function resetTimer()
{
clearTimeout(t);
t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
</head>
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="left"><a href="/shop_welcome.php">About/Help</a></td>
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
</table>
+1 -1
View File
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More