[Requirement #11316] Text overlay items for Enhanced MR shall be the same as for regular MR
* Fixed Trigger Time item to return the value of Nominal Cardiac Trigger Delay
  Time (0020,9153) of the Cardiac Synchronization functional group if possible.

--HG--
branch : Rigel
[Requirement #11302] The user can view "enhanced" image types
* Fixed sluggish performance when stacking through multiframe images.
 * The slowdown was caused by a recursive check for tags excluded from the study
   XML data which was being executed every time a functional group was accessed.

--HG--
branch : Rigel
[Requirement #11512] The user can create an editable copy of an existing key image
* Fixed crash when removing items from the key image clipboard shelf.
 * Crash was caused because the removed item was previously selected, and the
   selection was not being reset before the list change event fires - thus
   making the removed (and semi-disposed) item accessible via the SelectedItems
   property for a brief window, during which the revert key image tool accesses
   it.

--HG--
branch : Rigel
[Requirement #11302] The user can view "enhanced" image types
* Fixed sluggish performance when dumping multiframe image with many functional
  group data in the DICOM Editor.
 * The egregious performance was caused by individual table item change events
   being fired for each row as it gets added to the table - and there can be a
   lot for a multiframe image with functional group data.
  * The actual source of the slow down is the overhead of the datagrid binding
    for each individual change event.
 * This change reduces it to a single AddRange call (and thus a single reset
   type change event), minimizing the amount of datagrid binding overhead.
 * For a certain big EnhMR test image, the original code took 300 seconds before
   test was aborted, and the fixed code takes 30 seconds to complete.

--HG--
branch : Rigel
[Requirement #11577] - Placeholder QC Test Action Item
[Requirement #11576] - QC Status displayed on the Studies page

* Added unit tests for T1 and T2 and fixed a few bugs identified in the unit tests.

--HG--
branch : Rigel
Merge

--HG--
branch : Rigel
[Requirement #11109] Perform design reviews
* Fixed an issue in the manifest verification code where empty XML elements are
  treated as null and do not match empty strings.
 * This a patch of [e2dcb3f267ac7e73c4decf9e15a3bd52e8e8de83/xianzero]

--HG--
branch : Rigel
[Requirement #11464] - Ensure the source code repository is managed correctly
- Created branch Rockstar.

--HG--
branch : Rockstar
[Requirement #11464] - Ensure the source code repository is managed correctly

Merging recent Rigel changes into Rockstar branch.

--HG--
branch : Rockstar
[Ticket #11556] - The RPACS software components shall be authenticated by the ES

Modified the SystemAccountUtility so that it no longer writes the auto-generated password out to the command line when creating a new account, as this doesn't seem particularly prudent from a security perspective.

--HG--
branch : Rockstar
[Ticket #11221] - Research PACS users can share studies with external parties via links

Completed a rough implementation of the WebSharesController.ViewShare method:
 * Page presents user with security question and accepts answer.
 * Given correct answer, user is redirected to the web viewer.
 * Still needs a lot of work in terms of error handling and proper security. Currently it just uses an admin session to launch the web viewer via the API, but this needs to be changed to use some kind of "guest account" mechanism TBD.

Also:
 * Added a method to IImageServerIntegration to construct a URL for invoking the web viewer via the API, for the case when we don't have a pre-existing user session.
 * Added a QueryStringBuilder utility class to Common, since I was tired of seeing random query string construction code everywhere using string.Format(...) that may or may not be correctly encoding things. Better to centralize the logic in one place.

--HG--
branch : Rockstar
[Ticket #11221] - Research PACS users can share studies with external parties via links

Filled in the error handling logic for when
 * the share does not exist
 * the passphrase is incorrect
 * the item that was shared has been deleted, even though the share still exists.

Also:
 * Cleaned up query-string building in DefaultImageServerIntegration.GetViewerExternalApiUrl(...)
 * Removed a bunch of build dependencies from the Web project to hopefully make builds faster.

--HG--
branch : Rockstar
[Ticket #11221] - Research PACS users can share studies with external parties via links

 * Modified the design so that after answering the security question, the user is provided with links to both View and Download, rather than having to click a separate email link.
 * Implemented the external download. This required making a number of changes to security:
        * Had to remove the RequiresAuthenticationAttribute from the global filters, because the external download cannot make use of cookie-based authentication. Because of this, had to manually apply this attribute to pretty much every other MVC controller.
        * The DownloadProcessor required some special provisions to be able to handle download by external users who do not otherwise have access to the requisite part of the VFS.

Also:
 * More clean-up of query construction in DefaultImageServerIntegration.

--HG--
branch : Rockstar
[Ticket #11604] - Plugin loader will sometimes skip plugins that should be loaded (in development)

 * Removed the hardcoded "plugins" value from the Platform class, and introduced a new property in the ExtensionSettings named "PluginPath", with a default value of "plugins". This allows the location of the plugin path to be configurable.

 * For an ASP.NET application, the PluginPath value should be set in the critical.config file to "Bin". However, for backwards compatibility, the old logic was retained whereby if the PluginPath directory does not exist it falls back to the InstallDirectory.

 * Removed the logic in the PluginLoader class that would reject any candidate files with duplicate file names. Instead, we now take the first file found with a given name. In practice, this should work equally well, because two plugin files should never have the same name.

 * Also fixed an issue in the PluginInfo class (introduced in #10555) that would cause each plugin assembly to be loaded twice. This did not have any harmful effect in practice, because the 2nd load would just be a no-op, but it would cause duplicated "Loaded plugin ..." messages to be logged at DEBUG level. The problem was due to the use of an AssemblyRef variable in the PluginInfo constructor, which then had to be Resolved() before being passed to the DiscoverExtensionPointsAndExtensions(...) method. The call to Resolve() then triggered a cyclic call to LoadPlugins(...). By changing the constructor parameter to an instance of the Assembly class instead, the cyclic call is avoided.

--HG--
branch : Rockstar
[Ticket #11603] - Objects in the VFS should display an embedded preview when possible

Completed implementation of DicomImage preview. It is split into two panes, one that displays the image, and another that displays a table of "image properties" (almost identical to the workstation feature of the same name).

Also:
 * Renamed .NET QueryStringBuilder class to UrlQueryString, to be consistent with the javascript class of the same name.

--HG--
branch : Rockstar
rename : Common/Utilities/QueryStringBuilder.cs => Common/Utilities/UrlQueryString.cs
[Ticket #11109] - Perform design reviews

Fixed bug in the StorageScu, where if a DicomFile is loaded into memory, we
had a failure when trying to send.   This was causing the publishing of
reports in the RIS to not work.

--HG--
branch : Rigel
[Ticket #11602] - DBT Study Improvements for DICOM Transfers

Added simple unit test to test sending from file, and ensure that the file is
encoded the same after the transfer.

--HG--
branch : Rigel
[Requirement #11558] - New user email address entry not kept in IS web GUI

The email address was not being set in the request to create the user.  Added it
in.  Also did some resharper code cleanup at the same time.

--HG--
branch : Rigel
[Requirement #11223] Supported display sets can be viewed in 3DP

Added the ViewerClinical token to the Rotate3D tool so its not visible in the
WebPortal and non-WebstationDX.

--HG--
branch : Rigel
[Requirement #11516] - Viewing PDF Reports in WebstationDX
- Fixed an issue in SessionTimeout (both) where after a postback, a new timer would be started up when the old one was still running.
- Accidentally hid the user panel on the embedded viewer after fixing after master page changes. Put it back.
- Changed standalone web viewer session timeout, previously only used by the StudyList, to actually be tied to the user's session. The viewer, the study list, the pdf page, are now all correctly tied to the session and all time out together.
- In LoginService, refactored existing "VerifySession", which is currently unused, to only verify the session rather than renew it (which it currently does). Consolidated it to use the same code as RenewSession, but with "validateOnly" set to true.
- Made sure all WebViewerSessionManager methods properly login, renew, or verify the session, AND set the expiry cookie in all cases, even when the "real" session has ended/expired.
- Tightened up the behaviour on all pages to recognize when the session has timed out or ended (via the cookie), and force the server-side "web viewer" session to "sign out" and immediately be removed from the cache, rather than delaying it for 5 seconds first.
- Reverted the change in web viewer page that redirected to an error page when the session is over. Felt weird, so I left the web viewer doing it, as it was before.

--HG--
branch : Rigel