<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:28:53 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-3538] User-specific preferences</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-3538</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;We now have several requirements that need user-specific preferences to be stored and retrieved. These include:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Saved order of application icons (
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;STCOR-110&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/STCOR-110&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Repositionable App Icons&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            STCOR-110
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
)&lt;/li&gt;
	&lt;li&gt;User-specific locales: for Spanish-speaking students in a Texas university&lt;/li&gt;
	&lt;li&gt;User-specific key-bindings&lt;/li&gt;
	&lt;li&gt;Per-user plug preferences: one user wants an OPAC-like view of items, another wants a MARC-like view.&lt;/li&gt;
	&lt;li&gt;Profile pictures (part of 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;UIU-324&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/UIU-324&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Refine User Record Layout (View)&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            UIU-324
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;We need to figure out the best approach to storing and retrieving such information.&lt;/p&gt;</description>
                <environment></environment>
        <key id="79888">FOLIO-3538</key>
            <summary>User-specific preferences</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10003" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p4.svg">P4</priority>
                        <status id="10000" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/generic.png" description="(Migrated on 4 Feb 2024 13:41 UTC)">Draft</status>
                    <statusCategory id="2" key="new" colorName="blue-gray"/>
                                    <resolution id="-1">Unresolved</resolution>
                                                        <assignee accountid="-1">Unassigned</assignee>
                                                                <reporter accountid="5bffed52a1b46046f530c8f7">Mike Taylor</reporter>
                                    <labels>
                            <label>for-next-sprint</label>
                            <label>sprint27</label>
                            <label>sprint29</label>
                    </labels>
                <created>Thu, 23 Nov 2017 11:28:52 +0000</created>
                <updated>Mon, 11 Jul 2022 15:53:59 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                    <timespent seconds="3600">1 hour</timespent>
                                <comments>
                                                            <comment id="190029" author="5bffed52a1b46046f530c8f7" created="Thu, 23 Nov 2017 12:18:55 +0000"  >&lt;p&gt;I can see three broad approaches to storing user-specific configuration information:&lt;/p&gt;

&lt;p&gt;1. Just keep it in the browser&apos;s local storage, using &lt;tt&gt;localForage&lt;/tt&gt; &amp;#8211; as we already do for the user&apos;s Okapi session information, so that returning to the browser will continue with the same logged-in session.&lt;br/&gt;
2. Store it in the user record, along with existing details such as the user&apos;s first and last name, telephone number, etc.&lt;br/&gt;
3. Store it in mod-configuration.&lt;/p&gt;

&lt;p&gt;#1 is not really appropriate, because people are expected to change workstation (especially in shared-workspace environments like university libraries), and will likely switch between desktop and mobile devices, etc.&lt;/p&gt;

&lt;p&gt;#2 is appealing in some respects, but would involve disruptive changes to the user schema, and a release cycle, every time we wanted to store some new piece of information. Also, which some information feels like it &quot;belongs&quot; in the user record &amp;#8211; avatar image, for example &amp;#8211; other information does not &amp;#8211; stored order of application icons, for example.&lt;/p&gt;

&lt;p&gt;#3 seems like the best, most general way to go. We already use mod-configuration to store tenant-wide information such as the default locale, so it&apos;s the obvious place to also store the user-specific override for the same information. In fact, we can implement a nice, generic mechanism for user-specific overriding of tenant-wide defaults, There are still decisions to be made about how to do this: e.g. do we want one big record in some text format, or lots of little records, one for each piece of configuration?&lt;/p&gt;</comment>
                                                            <comment id="190030" author="5bffed52a1b46046f530c8f7" created="Thu, 23 Nov 2017 12:22:55 +0000"  >&lt;p&gt;The underlying requirement for user-specific preferences already exists in mod-configuration: it was added a while back in 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-649&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-649&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;User-specific preferences in mod-config&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            FOLIO-649
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
. A new &lt;tt&gt;userId&lt;/tt&gt; field was added to the configuration schema, which is ours to use as we wish.&lt;/p&gt;

&lt;p&gt;We could store the username, but it&apos;s more honest to store the actual user-ID (i.e. the UUID).&lt;/p&gt;

&lt;p&gt;At present, configuration record such as that for the tenant-level default locale are simply PUT and POSTed with no &lt;tt&gt;userId&lt;/tt&gt; at all. That means the field is simply not present in the persisted representation. &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=712020%3A32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; class=&quot;user-hover&quot; rel=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; data-account-id=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; accountid=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; rel=&quot;noreferrer&quot;&gt;shale99&lt;/a&gt; is looking into whether there is a way in CQL to look for field-not-present. If so, we&apos;ll have easy ways to isolate both the system-wide and user-specific versions of a configuration record.&lt;/p&gt;</comment>
                                                            <comment id="190031" author="5bffed52a1b46046f530c8f7" created="Thu, 23 Nov 2017 13:08:33 +0000"  >&lt;p&gt;If It turns out that there&apos;s a good way to find records with no &lt;tt&gt;userId&lt;/tt&gt;, we can use that. Otherwise, instead of simply omitted that field in tenant-wide configuration records, as we do now, we can set it to an &quot;impossible&quot; (non-UUID-format) value like &quot;tenant&quot;.&lt;/p&gt;

&lt;p&gt;Then consider the following CQL queries in mod-configuration:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
1. module=ORG and configName=locale
2. module=ORG and configName=locale and userId=a1b2c3e4
3. module=ORG and configName=locale and userId=tenant
4. module=ORG and configName=locale and userId=(a1b2c3e4 or tenant)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The first is what we presently do. The second will find the record specific to the nominated user. The third will find the tenant-wide record, ignoring the many user-specific record. But the fourth is what we will actually use. It will find the record for the specific user (if it exists) &lt;em&gt;and&lt;/em&gt; the tenant-wide record. Then, having done a single server round-trip, stripes-core can choose to use the user&apos;s override if it exists but fall back to the tenant-wide override otherwise.&lt;/p&gt;</comment>
                                                            <comment id="190032" author="5bffed52a1b46046f530c8f7" created="Mon, 11 Dec 2017 14:45:32 +0000"  >&lt;p&gt;Pushed this onto the next sprint to clear the decks for ui-search in the present sprint.&lt;/p&gt;</comment>
                                                            <comment id="190033" author="5af5ed55244bc90a106063c7" created="Fri, 5 Jan 2018 16:23:24 +0000"  >&lt;p&gt;I&apos;d like to hold off on development for this for now, as we haven&apos;t yet identified any must-have v1 user preferences.&lt;/p&gt;</comment>
                                                            <comment id="190034" author="5bffed52a1b46046f530c8f7" created="Fri, 5 Jan 2018 16:33:12 +0000"  >&lt;p&gt;No problem &amp;#8211; you probably saw I already pushed it down to P4, as it&apos;s distant from the Codex work that I am presently focused on.&lt;/p&gt;</comment>
                                                            <comment id="190035" author="5bffed52a1b46046f530c8f7" created="Mon, 1 Oct 2018 14:57:50 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=615afd1cd9820f0070a09ef0&quot; class=&quot;user-hover&quot; rel=&quot;615afd1cd9820f0070a09ef0&quot; data-account-id=&quot;615afd1cd9820f0070a09ef0&quot; accountid=&quot;615afd1cd9820f0070a09ef0&quot; rel=&quot;noreferrer&quot;&gt;Zak Burke&lt;/a&gt; Good luck with this one: I think it&apos;ll be fun to work on.&lt;/p&gt;</comment>
                                                            <comment id="190036" author="62a96ae7192edb006f9f1bf9" created="Tue, 9 Jul 2019 20:08:54 +0000"  >&lt;p&gt;Closing this story until feature 
    &lt;span class=&quot;jira-issue-macro&quot; data-jira-key=&quot;UXPROD-1398&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/UXPROD-1398&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;User Preferences&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            UXPROD-1398
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-complete jira-macro-single-issue-export-pdf&quot;&gt;Open&lt;/span&gt;
            &lt;/span&gt;
 is prioritized. Added description as a comment to that feature to ensure we address. &lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="61395">STRIPES-541</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="61767">STCOR-110</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="80254">FOLIO-649</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10002">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="61266">STRIPES-470</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79328">UIP-1</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27298">STSMACOM-51</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="44680">UIU-324</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10007">
                    <name>Requires</name>
                                                                <inwardlinks description="is required by">
                                        <issuelink>
            <issuekey id="10196">UXPROD-1398</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzy3kn:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 5 Jan 2018 16:23:24 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                </customfields>
    </item>
</channel>
</rss>