1. 22 Jul, 2017 1 commit
    • Carsten  Rose's avatar
      recordLocking · ecce620b
      Carsten Rose authored
      file.php, load.php, Html2Pdf.php: minor updates.
      Dirty.php, QuickFormQuery.php: optional $lockTimeout as parameter during instantiating. Return $lockTimeout where necessary. Otherwise read qfq.config.ini. Refactor process(), acquireDirty(), checkDirtyAndRelease().
      ecce620b
  2. 16 Jul, 2017 1 commit
  3. 10 Jul, 2017 4 commits
    • Carsten  Rose's avatar
      Feature #3981 / Record Locking · d231eb20
      Carsten Rose authored
      Dirty.php: record delete is handled - if lock exist, delete is not allowed.
      d231eb20
    • Carsten  Rose's avatar
      Feature #3981 / Record Locking · c9a42543
      Carsten Rose authored
      Dirty.php, QuickFormQuery.php: Update user messages. Renamed releaseDirty() to checkDirtAndRelease()
      c9a42543
    • Carsten  Rose's avatar
      Feature #3981 / Record Locking · 700dd79d
      Carsten Rose authored
      Manual.rst: add documentation for record locking
      DatabaseUpdateData.php: Add new column 'dirtyMode'
      Dirty.php, Config.php, formEditor.sql: remove dirtyMode=readonly. Rename 'timeout' to 'exclusive' and 'overwrite' to 'advisory'.
      700dd79d
    • Carsten  Rose's avatar
      Feature #3981 / Record Locking · a0cd3709
      Carsten Rose authored
      First version for save - not working now.
      Manual.rst: document config var SYSTEM_DIRTY_RECORD_TIMEOUT_SECONDS.
      QuickFormQuery.php, Dirty.php: extend to support QFQ/save().
      Client.php: fixed broken PHP Unit test
      Config.php: set default for dirtyRecordTimeout.
      BuildFormBootstrap.php: No dirtyUrl if dirtyMode=none.
      formEditor.sql: extend definition to Form.dirtyMode, new table 'Dirty'
      Fixed several unit tests for new tables.
      a0cd3709
  4. 17 Jun, 2017 1 commit
  5. 14 Jun, 2017 1 commit
  6. 12 Jun, 2017 1 commit
    • Carsten  Rose's avatar
      #3899 / Copy/Paste · cc55f4fb
      Carsten Rose authored
      Manual.rst: various topics undocumented.
      DatabaseUpdate.php: New table Clipboard, New FE.type='paste', New Form.forwardMode='url-sip' - will be applied for 0.18.3.
      FormAction.php: New: doAllFormElementPaste(), prepareDuplicate(), checkNCopyFiles(), copyRecord()
      Store.php: New member in STORE_CLIENT 'CLIENT_COOKIE_QFQ' - might be used to identify current user.
      BuildFormBootstrap.php: New buildButtonCopyForm().
      QuickFormQuery.php: Calculating the target page now happens after saving the current record and processing all after save actions. New: pasteClipboard()
      formEditor.sql: New form 'copyForm'. New table 'Clipboard'
      cc55f4fb
  7. 07 Jun, 2017 1 commit
    • Carsten  Rose's avatar
      #3863 / DB Update Fails: Expected no record, got 2 rows: SHOW TABLE STATUS WHERE Name='Form' · 7fc80c24
      Carsten Rose authored
      Introduce new config var 'DB_UPDATE' in config.qfq.ini. Update the handling, if there exist table 'form' and 'Form'.
      Manual.rst:  document the new config option DB_UPDATE.
      Database.php: Typo fixed.
      DatabaseUpdate.php: Iterate over all found 'Form' tables, take the newest version number. Respect config option DB_UPDATE. Fixed a problem: if in the PHP DB updates a newer DB Version is configured than the PHP source itself is, such updates are now not played anymore.
      Config.php, QuickFormQuery.php, config.example.ini: handle config setting DB_UPDATE.
      7fc80c24
  8. 05 Jun, 2017 1 commit
    • Carsten  Rose's avatar
      #3568 / Form: fuer alle Buttons (save, close, new, delete) eine optionale... · 61d75fbb
      Carsten Rose authored
      #3568 / Form: fuer alle Buttons (save, close, new, delete) eine optionale class & text konfigurierbar machen
      Manual.rst: new configuration options listed at config.qfq.ini and Form.paramtert.
      Config.php: Defaults configured for F_SAVE|CLOSE|DELETE|NEW_BUTTON_TEXT|TOOLTIP|CLASS|GLYPH_ICON.
      BuildFormBootstrap.php: Changed code to take values from config.qfq.ini or (if given) from form.parameter definitions.
      QuickFormQuery.php: Copy new setup values from config.qfq.ini to Form.
      StoreTest.php: update unit test for new global configuration values
      config.qfq.example.ini: fill with new commented key/value pairs.
      61d75fbb
  9. 04 Jun, 2017 4 commits
    • Carsten  Rose's avatar
      API_ANSWER_REDIRECT_URL_SKIP_HISTORY: Implement 'url-skip-history' as an user selectable option. · 0893a40a
      Carsten Rose authored
      Manual.rst: update doc of 'url-skip-history'.
      DatabaseUpdateData.php: update data structure as well as update given data from 'page' to 'url'.
      QuickFormReport.php: remove temporarily fix page/url.
      formEditor.sql: update table 'Form.forwardMode' to ('client', 'no', 'url', 'url-skip-history'). FormEditor now uses dynamicUpdate to hide/show FE 'forwardPage'.
      0893a40a
    • Carsten  Rose's avatar
      #3854 / Wrong final page: a) New > Save > Close, b) New > Save > Delete · b6cb6285
      Carsten Rose authored
      QfqForm.js: Preparation for client, to handle window.location.replace() by new API status 'url-skip-history'. Also changed "(data.redirect === "url" || data['redirect-url'])" to "(data.redirect === "url" && data['redirect-url'])" - CR did not understand the former logic ('or' instead of 'and'). #OPEN#: window.location.replace = 'index.php....' throws an JS exception that it the attribute 'replace' is readonly. Instead "window.location.replace('index.php....')" works as expected.
      PROTOCOL.md: add 'url-skip-history'.
      save.php: recode to become more readable.
      QuickFormQuery.php: getForwardMode() - temporarily fix to update status 'page' to 'url' (bug never caused a problem as long as '||' has been used on client side). Will change 'page' to 'url' asap.
      b6cb6285
    • Carsten  Rose's avatar
      #3853 / New > Save: Reload des Forms mit neuer SIP und neu erstellter recordId. · ed4efb2a
      Carsten Rose authored
      Recode: new function buildNSetReloadUrl()
      ed4efb2a
    • Carsten  Rose's avatar
      #3853 / New > Save: Reload des Forms mit neuer SIP und neu erstellter recordId. · 1c95ff76
      Carsten Rose authored
      Partly remove unused code 'htmlNameIdZero'. Instead implement generation of a new SIP for the new record and reload the current page with the new SIP.
      QuickFormQuery.php: remove newRecordUpdateSip(). Set URL redirection if none specific is configured. Skip creation of json code if page will be reloaded.
      1c95ff76
  10. 29 May, 2017 1 commit
  11. 27 May, 2017 1 commit
  12. 20 May, 2017 1 commit
    • Carsten  Rose's avatar
      #3766 / SQL_LOG per tt_content record einstellbar machen · 4b0d1413
      Carsten Rose authored
      Add `sqlLog` and `sqlLogMode` to QFQ tt-content records.
      Add mode 'error' and `none` to sqlLogMode.
      Manual.rst: Added explanations for SQL_LOG, SQL_LOG_MODE, and tt-content pendants sqlLog, sqlLogMode. Update config.qfq.ini to latest attributes.
      Database.php: rename $mode to $currentQueryMode to make it more descriptive. Recode dbLog().
      Logger.php: do nothing if there is no file defined.
      Report.php: new function checkUpdateLog().
      Config.php: Set defaults for config.qfq.ini SQL_LOG and SQL_LOG_MODE
      Store.php: Fix problem that an empty SQL_LOG will be prependad with SYSTEM_PATH_EXT.
      4b0d1413
  13. 10 May, 2017 1 commit
  14. 09 May, 2017 1 commit
    • Carsten  Rose's avatar
      #3679, Automatic DB update - Schema & FormEditor · 05b32a30
      Carsten Rose authored
      For updates of QFQ prior to 0.17.0, do:   ALTER TABLE  `Form` COMMENT =  'Version=<your old QFQ version>'
      DatabaseUpdate.php, DatabaseUpdateData.php: new class.
      QuickFormQuery.php: Add DB UpdateCheck
      Database.php: moved to new subdirectory `database`. Add 'ALTER' as a new SQL command.
      FormAction.php, TypeAhead.php, Report.php, Sendmail.php, FillStoreForm.php, Store.php, AbstractBuild.php, Delete.php, Evaluate.php: Update path to Database.php.
      05b32a30
  15. 03 May, 2017 1 commit
  16. 30 Apr, 2017 1 commit
  17. 24 Apr, 2017 3 commits
  18. 23 Apr, 2017 1 commit
  19. 22 Apr, 2017 1 commit
    • Carsten  Rose's avatar
      #3218 / download.php / export · e10937b6
      Carsten Rose authored
      * Recode the '_link' notation for download
      * Add 'ZIP' as export format
      * Add 'parameter' to wkhtmltopdf
      * Implemented 'SYSTEM_STORE / SYSTEM_DOWNLOAD_POPUP' for detecting if there are download links on the page. This eleminates passing parameters through dozens of functions.
      * Report/Columntype '_dDownload' broken!
      Coding.md: described `download` from a coding point of view.
      Manual.rst: Update '_link' to latest notation of 'download'.
      download.php: implemented catching of 'Undefined index'. Added further exceptions.
      Download.php: Added cache=off for downloading. Rename getFile() to getElement(). Make getElement() more generic. Add zipFiles(). Implement 'downloadMode' in doElements().
      Html2Pdf.php: recode to new download notation. Parameter to wkhtmltopdf implemented.
      Link.php: New TOKEN_* and NAME_DOWNLOAD_*, NAME_FILE. Move TOKEN_* to Constants.php. Will be used in Download.php too. Implemented 'SYSTEM_STORE / SYSTEM_DOWNLOAD_POPUP'. Implemented BASE64 encoding of multiple 'U' and 'u'.
      Report.php: Implemented 'SYSTEM_STORE / SYSTEM_DOWNLOAD_POPUP'.
      Sip.php: implement debugSip() to show Sip. New: base64 encoded parameter will be shown in clear.
      Store.php: some functions missed keyword 'static'. getVar() and getStore automatically decode base64 parameter.
      QuickFormQuery.php: Implemented 'SYSTEM_STORE / SYSTEM_DOWNLOAD_POPUP'.
      e10937b6
  20. 17 Apr, 2017 1 commit
  21. 02 Apr, 2017 1 commit
    • Carsten  Rose's avatar
      #3385 / templateGroup: insert/update/delete non primary records · 8db50d60
      Carsten Rose authored
      Manual.rst: update doc how to insert/update/delete non primary templateGroup records.
      FormAction.php: removed $templateGroupIndex - solved implicit by defining a LIMIT on 'slaveId' . Implemented '%D' (one below %d). Implemented FE_SQL_HONOR_FORM_ELEMENTS - reduces unecassary SQL queries.
      HelperFormElement.php: moved function 'explodeTemplateGroupElements()' to 'QuickFormQuery.php'
      Database.php: remove call to explodeTemplateGroupElements() - not necessary at that place.
      QuickFormQuery.php: fill STORE_RECORD during Formload - to read templateGroup records very early. Local copy of `getNativeFormElements()`, new `explodeTemplateGroupElements()`
      8db50d60
  22. 29 Mar, 2017 1 commit
    • Carsten  Rose's avatar
      #3463 / form.mode=readonly · d84dad1a
      Carsten Rose authored
      Implemented the option to make a form `readonly`. this can be done statically or dynamically via variable (e.g. SIP).
      QuickFormQuery.php, AbstractBuildForm.php: Force 'readonly' by overwriting FormElement individual 'mode' setting.
      BuildFormBootstrap.php: Introduced new variable F_SHOW_BUTTON.
      d84dad1a
  23. 28 Mar, 2017 1 commit
    • Carsten  Rose's avatar
      #3456 / LDAP: with Credentials to access 'webpass' · 8cb94e92
      Carsten Rose authored
      Manual.rst: Updated doc for a) config.qfq.ini: LDAP_1_RDN, LDAP_1_PASSWORD, b) Form.parameter|FormElement.parameter: ldapUseBindCredentials
      ErrorHandler.php: removed details - the end user should not too many details.
      FormAction.php, Ldap.php, QuickFormQuery.php: implement 'ldapUseBindCredentials'
      Ldap.php: set_error_handler() to catch ldap_bind() problems. Always set LDAP_OPT_PROTOCOL_VERSION=3 - this might cause problems with som LDAP Servers - we will see.
      8cb94e92
  24. 26 Mar, 2017 1 commit
    • Carsten  Rose's avatar
      #3433 | templateGroup on primary Record: Values of removed copies are not deleted · 5d817af7
      Carsten Rose authored
      The new implementation creates empty fake instances of all copies of templateGroup FormElements. Those are empty. Before save, the submitted form values will be expanded with the empty fake templateGroup FormElements and such empty values will be saved.
      FormAction.php: Rename constant SQL_FORM_ELEMENT_TEMPLATE_GROUP to SQL_FORM_ELEMENT_TEMPLATE_GROUP_FE_ID - to be more precise.
      HelperFormElement.php, Database.php: new function explodeTemplateGroupElements()
      5d817af7
  25. 23 Mar, 2017 1 commit
  26. 16 Mar, 2017 1 commit
  27. 05 Mar, 2017 1 commit
    • Carsten  Rose's avatar
      #3180=#2081 dynamicUpdate, rearrange 'input hidden' elements from checkboxes,... · 9a267b44
      Carsten Rose authored
      #3180=#2081 dynamicUpdate, rearrange 'input hidden' elements from checkboxes, radios to top of form.
      
      CODING.md: add some doc about STORE_ADDITIONAL_FORM_ELEMENTS.
      load.php (#2081): rearrange delivered JSON to fullfill client API.
      AbstractBuildForm.php: rename getJsonElementUpdate() to getFormElemenForJson(). Extend getFormElementForJson() to support changes for label and note. Fill store STORE_ADDITIONAL_FORM_ELEMENTS with 'hidden input' elments.
      QuickFormQuery.php: implement Client JOSN API update.
      9a267b44
  28. 02 Mar, 2017 1 commit
  29. 01 Mar, 2017 2 commits
    • Carsten  Rose's avatar
      Implemented generating of 'id' per FormElement. · 1d995d96
      Carsten Rose authored
      Support.php: new function insertAttribute().
      AbstractBuildForm.php: added 'id' to all FormElements.
      BuildFormBootstrap: extended customWrap to insert 'id' in every wrap element.
      QuickFormQuery.php: Add 'id' to Form ToolTip.
      1d995d96
    • Carsten  Rose's avatar
      Preparation 'DynamicUpdate' fuer beliebige Felder. · 70a4f34d
      Carsten Rose authored
      FillStoreForm.php, HelperFormElement.php, BuildFormBootstap.php, BuildFormPlain.php, BuildFormTable.php, QuickFormQuery.php: Rename buildFormElementId() to buildFormElementname(). New Function buildFormElementId(). Rename variable $htmlFormElementId to $htmlFormElementName.
      Support.php: tooltips now contain an html id.
      Constants.php: Preparation for API 'element-update'.
      70a4f34d
  30. 26 Feb, 2017 1 commit
    • Carsten  Rose's avatar
      #2064: Input Elemente die als JSON response 'value=false' bekommen, zeigen 'false' an. · 13d39fbe
      Carsten Rose authored
      #3253: STORE_TYPO3: steht waehrend Update / Save nicht zur Verfuegung - wird aber benoetigt. Bsp: feUser, beUser, pageId, ...
      
      Thought that problem of #2064 is based on #3253 - that was wrong.
      #3253 implemented, but not heavily tested.
      
      #2064: problem was that for a non existing tablecolumn, has been searched for a default value - which obviously does not exist. In AbstractBuildForm.php, Line 419, a check implemented if the current FormElement is an existing tablecolumn. If not, do not change the empty value.
      
      FormAction.php, FillStoreForm.php, Store.php, QuickFormQuery.php, Save.php: Refactor setVarArray() to setStore()
      
      #3253
      FillStoreForm.php: If there is no STORE_TYPO3, get the old values from SIP: CLIENT_TYPO3VARS.
      Store.php: new function fillTypo3StoreFromSip(), copyT3VarstToSip()
      13d39fbe
  31. 24 Feb, 2017 1 commit
    • Carsten  Rose's avatar
      Check that 'php*_intl' is installed. · cba08698
      Carsten Rose authored
      AbstractException.php: Add catch CodeException to not recursively throw the same exception again and again.
      Store.php: constructor of class Store seems to be the best place to do the check.
      cba08698