bugfix: web/username_prefix.php: user2path(): padding used to visually separate 1st element of URL: require all padding to be __ because sometimes terms contain a leading or trailing _
bugfix: web/username_prefix.php: user2path(): padding used to visually separate 1st element of URL: support embedded @ inside highlighted part: also need to match end-padding when followed by "."
web/username_prefix.php: user2path(): padding used to visually separate 1st element of URL: support embedded @ inside highlighted part
web/username_prefix.php: user2path(): added support for padding used to visually separate 1st element of URL (x@url -> x@url)
bugfix: web/username_prefix.php: need to handle : in login (which would normally indicate a password)
schemas/public_.sql: analytical_stem_view: example terms from each source: added location in the VegBIEN core DB
schemas/public_.sql: analytical_stem_view: terms in normalized schemas: put the source name right next to the term name (instead of after the table name) so it's easy to find
schemas/public_.sql: analytical_stem_view: VegX terms: populated definitions
schemas/public_.sql: analytical_stem_view: VegX terms: referenced to the specific table/subpath that they are in
bugfix: schemas/public_.sql: analytical_stem_view: locationName: re-sourced to VegX because this is actually not a DwC term
schemas/public_.sql: analytical_stem_view: populated definitions of linked DwC terms from DwC data dictionary
schemas/public_.sql: analytical_stem_view: renamed terms to link URLs, using the steps at wiki.vegpath.org/VegBIEN_schema_refactoring#data-dictionary-rename-terms-to-link-URLs
inputs/.TNRS/schema.sql: unsafe_taxon_names(): removed the name with "spp." now that this TNRS bug (https://pods.iplantcollaborative.org/jira/browse/TNRS-193) has been fixed
schemas/public_.sql: analytical_stem_view: populated links from unrenamed term names, using the steps at wiki.vegpath.org/VegBIEN_schema_refactoring#data-dictionary-populate-links-from-unrenamed-term-names
fix: schemas/public_.sql: analytical_stem_view: links: removed = before them because the link is in fact one member in a list of definitions (the = would apply to all definitions, not just the link, and since it apply to all definitions, it's redundant because of course the comment is what the column equals)
web/.htaccess: auto-detect dotpath: need to explicitly set usernames_disabled=1, because for some reason the `%{QUERY_STRING} =""` check doesn't detect a query string
web/.htaccess: auto-detect dotpath: removed handling of no longer used @ prefix (used to be used by username-based prefix subpaths)
bugfix: web/.htaccess: username-based prefix subpaths: usernames_disabled: also need to support it being set in the current round
bugfix: web/.htaccess: username-based prefix subpaths: removed support for query strings because these are often used at the root level, and should then be treated as a regular dotpath rather than something with a username-based prefix
bugfix: web/.htaccess: forced mod_autoindex listing: use $usernames_disabled to ensure that usernames stay disabled even when /all path is removed
bugfix: web/.htaccess: username-based prefix subpaths: added back usernames_disabled env var, because it is needed if a RewriteRule in a previous round creates an empty path (mod_rewrite runs the RewriteRules repeatedly until no replacements are made)
bugfix: web/.htaccess: username-based prefix subpaths: REDIRECT_REQUEST_URI: also allow it to be unset, as it is when using usernames
fix: web/index.php: directory index: don't append QUERY_STRING, as this is not used by /all
web/.htaccess: username-based prefix subpaths: removed usernames_disabled env var because the bug that appeared to require this has now been fixed
bugfix: web/.htaccess: username-based prefix subpaths: also need to check original URL (REDIRECT_REQUEST_URI), in addition to current URL (REQUEST_URI) to see if usernames should be disabled
web/.htaccess: username-based prefix subpaths: allow explicitly disabling in a RewriteRule to handle special cases
bugfix: web/index.php: directory index: use QUERY_STRING, not HTTP_AUTHORIZATION (HTTP_AUTHORIZATION was probably left over from a previous attempt to provide username-based prefix subpaths)
fix: schemas/public_.sql: analytical_stem_view: vegpath.org links: use ; instead of : between link and definition, because it makes more grammatical sense
schemas/public_.sql: analytical_stem_view: vegpath.org links: removed no longer needed // suffix
web/.htaccess, username_prefix.php: username-based prefix subpaths: don't require the // at the end , to avoid clutter. IMPORTANT: in order to access the home page after visiting a URL with a username, you must now append "." to the host ("vegpath.org.") (other pages are not affected by this problem). since vegpath.org is a URL shortener, this is a worthwhile tradeoff to avoid needing the // suffixes everywhere.
bugfix: web/.htaccess: subdomains: each path element must be non-empty, to avoid matching a trailing . incorrectly
web/.htaccess: username-based prefix subpaths: updated documentation to use leading // instead of trailing ? or ?@
web/username_prefix.php: $_SERVER["PHP_AUTH_USER"] test: factored $_SERVER["SCRIPT_URL"] out of both branches of if statement
web/username_prefix.php: don't remove @ from query string because that is no longer a special character
schemas/public_.sql: analytical_stem_view: added links and definitions for half a dozen of the terms from various sources
fix: web/.htaccess: username-based prefix subpaths: changed format to subpath@host//path because the trailing ? makes it look like the sentence the URL is in is a question
web/.phpPgAdmin/.htaccess: action redirect: only append ? if adding to the query string
inputs/publishable datasources.xlsx: updated
web/.phpPgAdmin/.htaccess: view: default to displaying the columns rather than the definition
schemas/public_.sql: analytical_stem_view: indicated provenance of the rest of the terms
schemas/public_.sql: analytical_stem_view: flagged the DwC terms
web/.phpPgAdmin/.htaccess: support viewing the columns of a view rather than the definition
web/.phpPgAdmin/.htaccess: RewriteRules: use overridable action var
web/.phpPgAdmin/.htaccess: support overriding action param in a later RewriteRule
web/.phpPgAdmin/.htaccess: removed skip= because this creates a confusing control flow, and prevents using chain
backups/TNRS.backup.md5: updated
schemas/public_.sql: added plot.**.modify()
inputs/.TNRS/schema.sql: *_modify(): removed the need to manually maintain copies of the dependent view definitions with the *s in place, because the *s are now added automatically by view_def_to_orig()
fix: schemas/util.sql: view_def_to_orig(): also need to merge .* expressions resulting from a SELECT * of a join, to avoid duplicated columns
fix: schemas/util.sql: view_def_to_orig(): require at least 6 cols to avoid false positives in the expansion match pattern
bugfix: schemas/util.sql: view_def_to_orig(): 1st col: can't prepend \y because it considers only \w chars, not "
bugfix: schemas/util.sql: view_def_to_orig(): don't match whitespace in the middle of a "" identifier, as this could throw off the parser
schemas/util.sql: eval(): restore user's intent by running util.view_def_to_orig() on the query to unexpand expanded * expressions
schemas/util.sql: pg_get_viewdef(): use util.view_def_to_orig()
schemas/util.sql: added view_def_to_orig()
fix: schemas/util.sql: pg_get_viewdef(): should be STABLE because it references system catalogs
schemas/util.sql: added pg_get_viewdef() wrapper, which unexpands expanded * expressions
lib/tnrs.py: max_names: raised back up to 500 now that a workaround for the Internal Server Errors is in place (https://github.com/iPlantCollaborativeOpenSource/TNRS/issues/7)
fix: schemas/public_.sql: tnrs_input_name: added ORDER BY to ensure a stable sort order. this also creates better query plans by enabling merge joins.
bugfix: schemas/public_.sql: tnrs_input_name: need to exclude unsafe taxon names as a workaround to #935 (TNRS crashes when scrubbing names with two infraspecific epithets)
schemas/public_.sql: taxonlabel: added index on taxonomicname to facilitate retrieving rows from tnrs_input_name
inputs/.TNRS/schema.sql: added taxon_name_is_safe()
inputs/.TNRS/schema.sql: added unsafe_taxon_names()
fix: lib/tnrs.py: max_names: lowered to 50 because the dev TNRS server is now always crashing with an Internal Server Error when scrubbing 500 names at a time (https://github.com/iPlantCollaborativeOpenSource/TNRS/issues/7)
web/.htaccess: auto-detect dotpath in query string: also auto-prepend & for query strings appended to a username-based prefix, so that these don't need to have & manually prepended to make them appendable
web/.htaccess: auto-detect dotpath in query string: also auto-detect dotpath for query strings appended to a username-based prefix, so that these don't need to have . prepended to make them appendable
web/username_prefix.php: no prefix: use $_SERVER["SCRIPT_URL"] instead of rtrimming $_SERVER["REQUEST_URI"]
web/username_prefix.php: has prefix: use same expr whether or not it has a query string, because the with-query-string expr works for both cases
web/username_prefix.php: use if statements instead of `? :` for clarity
web/username_prefix.php: use $subpath instead of $_SERVER["PHP_AUTH_USER"] for clarity
bugfix: **/.htaccess: redirects with fragment: qsappend does not support fragment, so append it separately
web/.htaccess, username_prefix.php: username-based prefix subpaths: support dotpath in query string (which will be appended verbatim to the prefix). use "__?@__" instead of "__?__&" to signal username-based prefix, so that the query string does not end in a dangling & .
bugfix: inputs/.TNRS/.htaccess: qsappend does not support fragment, so append it separately
bugfix: web/.htaccess: auto-detect dotpath in query string: don't exclude dotpaths that come before a normal query string (&k=v...)
web/.htaccess: auto-detect dotpath in query string: documented what each RewriteCond does
web/.htaccess: auto-detect dotpath in query string: use %{QUERY_STRING} instead of %0 for clarity
web/.htaccess, web/username_prefix.php: username-based prefix subpaths: support query strings in addition to paths
web/index.php: removed no longer needed redirection of username-based prefix subpaths, which is now handled by web/.htaccess
web/.htaccess: handle username-based prefix subpaths (of the form "subpath@url?") for all paths rather than just for the root (which were handled by index.php)
added web/username_prefix.php, for use with username-based prefix redirects
web/index.php: subpath@host? redirects: also support multiple @ and nested . in prefix: a@b.c@host? -> host?b.c.a
web/index.php: support prefix redirect of the form subpath@host? , which is better than subpath.host because case is preserved and special chars allowed. (must require trailing ? for redirect, to avoid needing login to view the page itself.)
bugfix: web/index.php: full directory index: appending query string: need to use $_SERVER["QUERY_STRING"], not $_SERVER["HTTP_AUTHORIZATION"] for this
schemas/public_.sql: sync_*(): renamed to *_modify() to facilitate finding these functions when modifying the corresponding view (using the new naming convention for a view's on-modify function)
bugfix: inputs/.TNRS/schema.sql: MatchedTaxon_modify(): updated to include taxon_scrub derived fields
bugfix: schemas/util.sql: mk_drop_from_create(): need to match first rather than last CREATE
inputs/.TNRS/schema.sql: *_modify(): allow running without a view_query, as recreate_view() now supports this
schemas/util.sql: recreate_view(): support omitting the view_query if the view has already been modified (eg. for public.*_view, which allow changing the view as a separate step)
fix: schemas/public_.sql: sync_*(): use util.copy() instead of CREATE TABLE AS so that table and column comments are also copied. this avoids the need to separately add the same comments to the view and its materialized table.
bugfix: schemas/util.sql: recreate(): need to handle case where util.mk_drop_from_create() is NULL
bugfix: schemas/util.sql: mk_drop_from_create(): only match CREATE if no custom DROP came before it
bugfix: schemas/public_.sql: sync_geoscrub_input_to_view(): `CREATE TABLE geoscrub_input AS __`: needs `LIMIT 0`
fix: schemas/util.sql: explain2notice_msg_if_can(): also need to catch invalid_cursor_definition ("cannot open multi-query plan as cursor")
schemas/public_.sql: sync_analytical_stem_to_view(): removed DROP TABLE IF EXISTS because this is now done automatically by util.recreate()
schemas/util.sql: added copy()