Projects: Issueshttp://projects.andriylesyuk.com/http://projects.andriylesyuk.com/plugin_assets/andriy_lesyuk/images/s-andy.ico2018-02-20T10:11:57ZProjects
Redmine WikiNG - Bug #2440 (Open): Footnotes ignore < pre >http://projects.andriylesyuk.com/issues/24402018-02-20T10:11:57ZИльфат Аминов
<p>Inside of < pre > blocks footnotes (double parentheses) not ignored by Wiking formatter.</p>
<p><img src="http://projects.andriylesyuk.com/attachments/download/670/wikiedit.png" alt="" /></p>
<p>⇒</p>
<p><img src="http://projects.andriylesyuk.com/attachments/download/671/wiki.png" alt="" /></p> WikiNG - Feature #2438 (Open): Screen texthttp://projects.andriylesyuk.com/issues/24382018-01-05T14:56:29ZAndriy Lesyuks-andy@andriylesyuk.com
<p>I often need to highlight somehow a text, which is displayed by the user interface of a discussed application. For example:</p>
<ul>
<li>Click the “Apply” button</li>
<li>Go to “Administration” → “Settings” </li>
<li>Use “to these roles only”</li>
</ul>
<p>The last example demonstrates, why it’s imported to have such text highlighted (otherwise, it can be unclear, where the screen text ends).</p>
<p>It would be ideally, if something like back quotes could be used (which are used for code in Markdown). Quotes look natural. But, I don’t think, that just quotes are a good option. Such screen text should also have different color and/or decoration.</p>
<p>As an option: double single quotes, i.e., <code>''Apply''</code>.</p> WikiNG - Bug #1980 (Open): Problem running plugin in development modehttp://projects.andriylesyuk.com/issues/19802012-02-19T10:44:05ZOleg Kandaurov
<p>I am using redmine 1.3.0 with WikiNG 0.0.1b. It works well in production environment with following settings:<br /><pre>
config.cache_classes = true
config.action_controller.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.logger = nil
</pre></p>
<p>But when I switch server to development environment it loads page successfully only once. I see following error:<br /><pre>
NameError in Projects#index
Showing app/views/layouts/base.html.erb where line #13 raised:
undefined local variable or method `heads_for_theme' for #<ActionView::Base:0xb6026ff0>
Extracted source (around line #13):
10: <%= stylesheet_link_tag 'application', :media => 'all' %>
11: <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
12: <%= javascript_heads %>
13: <%= heads_for_theme %>
14: <!--[if IE 6]>
15: <style type="text/css">
16: * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
</pre></p>
<pre>
/home/f0y/workspace-ruby/redmine-1.3.0/app/views/layouts/base.html.erb:13:in `_run_erb_app47views47layouts47base46html46erb'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `send'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/base.rb:306:in `with_template'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/renderable.rb:30:in `render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/template.rb:205:in `render_template'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/base.rb:265:in `render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/base.rb:352:in `_render_with_layout'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_view/base.rb:262:in `render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:1252:in `render_for_file'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:936:in `render_without_benchmark'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:51:in `render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:51:in `render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:1328:in `default_render'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:1334:in `perform_action_without_filters'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/filters.rb:617:in `call_filters'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/rescue.rb:160:in `perform_action_without_flash'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/flash.rb:151:in `perform_action'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:532:in `send'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:532:in `process_without_filters'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/filters.rb:606:in `process'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:391:in `process'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/base.rb:386:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb:438:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:87:in `dispatch'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:121:in `_call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:130:in `build_middleware_stack'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activerecord/lib/active_record/query_cache.rb:29:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activerecord/lib/active_record/query_cache.rb:29:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activerecord/lib/active_record/query_cache.rb:9:in `cache'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activerecord/lib/active_record/query_cache.rb:28:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/string_coercion.rb:25:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/head.rb:9:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/methodoverride.rb:24:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/params_parser.rb:15:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/session/cookie_store.rb:99:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/failsafe.rb:26:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/lock.rb:11:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/lock.rb:11:in `synchronize'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/lock.rb:11:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:114:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/reloader.rb:34:in `run'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:108:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/railties/lib/rails/rack/static.rb:31:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/urlmap.rb:47:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/urlmap.rb:41:in `each'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/urlmap.rb:41:in `call'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/railties/lib/rails/rack/log_tailer.rb:17:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/content_length.rb:13:in `call'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/handler/webrick.rb:48:in `service'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:162:in `start'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:95:in `start'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:92:in `each'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:92:in `start'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:23:in `start'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/webrick/server.rb:82:in `start'
/home/f0y/.rvm/gems/ruby-1.8.7-p358@redmine-debian/gems/rack-1.1.1/lib/rack/handler/webrick.rb:14:in `run'
/home/f0y/workspace-ruby/redmine-1.3.0/vendor/rails/railties/lib/commands/server.rb:111
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
/home/f0y/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
script/server:3
</pre>
<p>Configuration of development environment:<br /><pre>
config.cache_classes = false
config.whiny_nils = true
config.action_controller.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.raise_delivery_errors = false
</pre></p>
<p>A reason of the error is caching but I’m not sure.</p> Orangutan - Improvement #1620 (Open): Fix foreign handlers APIhttp://projects.andriylesyuk.com/issues/16202011-02-03T16:17:29ZAndriy Lesyuks-andy@andriylesyuk.com
<p><code>Orangutan::Context</code> has API for accessing, setting and managing foreign handlers... But they are called “manually” that is a developer needs to define handler and write special code for calling foreign handlers of the context. This looks like “hack”! I believe with foregn handlers defined the context can be (and even should be) without the handler. And the handler should be define only to overwrite the default handling of foreign handlers!</p>
<p>So we need to improve foreign handlers API so the context without the hander would be able to use foreign ones.</p> Orangutan - Enhancement #1601 (Incomplete): Configuring contexts weightshttp://projects.andriylesyuk.com/issues/16012011-02-01T13:45:11ZAndriy Lesyuks-andy@andriylesyuk.com
<p>This was a part of <a class="issue tracker-7 status-5 priority-4 priority-low2 closed" title="Disabling contexts + maybe changing weight from config file (Closed)" href="http://projects.andriylesyuk.com/issues/1081">#1081</a> but I figured out that current configuration file format is too limited.</p>
<p>With current format such could be done with:<br /><pre>
contexts.request_weight = Issue:10
contexts.response_weight = Issue:10
contexts.filter_weight = Issue:10
</pre></p>
<p>This is odd!..</p>
<p>There should be an easier way to change weight like:<br /><pre>
Context Issue {
Weight 10
}
Context Task {
Weight {
Response 10
}
}
</pre></p>
<p>Changing weight maybe needed to change the priority of contexts. This way Orangutan will became more flexible.</p> Orangutan - Enhancement #1600 (Open): Change configuration file formathttp://projects.andriylesyuk.com/issues/16002011-02-01T13:15:49ZAndriy Lesyuks-andy@andriylesyuk.com
<p>Current configuration file format is too simple and too limited. I believe Orangutan configuration should be flexible and extendable. So change of configuration file format is needed.</p>
<p>What is the problem? There were an idea to allow changing weight of contexts using configuration file. With current format it would look like this:<br /><pre>
contexts.weight = Issue:-10
contexts.request_weight = Issue:-10
contexts.response_weight = Issue:undef
</pre></p>
<p>This looks odd... <span class="wiking smiley smiley-sad" title=":("></span></p>
<p>So the idea is to change to something like:<br /><pre>
Context Issue {
Weight {
Request -10
Response undef
}
}
</pre></p>
<p>The current file will look like this:<br /><pre>
Changelog Changelog
DisplayName "%f %s"
Admin user@localhost
Manager user@localhost
UsersDirectory Users
UsersData Data
ContextsDirectory Contexts
MonkeysDirectory Monkeys
Contexts {
Policy Exclude
Include Issue
Include Task
...
}
Monkeys {
RedMonkey redmonkey@localhost
}
Jabber {
Hostname localhost
Port 5222
...
}
Context Issue {
Field SomeField Value
Option SomeOption Value
}
Include weights.conf
</pre></p>
<p><strong>Note:</strong> The format is subject to change.</p>
<p>It would be also great if functions to access configuration values would look like this:<br /><pre>
$main::config::Monkeys::RedMonkey;
</pre></p> Orangutan - Enhancement #1562 (Open): Localisationhttp://projects.andriylesyuk.com/issues/15622011-01-23T13:58:51ZAndriy Lesyuks-andy@andriylesyuk.com
<p>The number of potential international users grows. There are several services in IF which can use Orangutan too. So the fact that it is only English can become a problem.</p>
What should be internationalized:
<ul>
<li>Output messages;</li>
<li>Input regexp queries;</li>
<li>Holidays calculation.</li>
</ul>
<p>The problem is that it is not so easy to localise program like Orangutan... Let’s review in details:</p>
<a name="Output-messages"></a>
<h3 >Output messages<a href="#Output-messages" class="wiki-anchor">¶</a></h3>
<p>Sample output message looks like this:<br /><pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$message</span> .= <span class="constant">Orangutan</span>::<span class="constant">Context</span>::<span class="constant">Random</span>(
<span class="string"><span class="delimiter">'</span><span class="content">Be ready to receive emails now.</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">Emails are coming now... ;)</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">As you command...</span><span class="delimiter">'</span></span>
);
</span></code></pre></p>
<p>This should be replaced with something like:<br /><pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$message</span> .= <span class="local-variable">$user</span>-><span class="constant">Localise</span>(<span class="string"><span class="delimiter">'</span><span class="content">Be ready to receive emails now.</span><span class="delimiter">'</span></span>);
</span></code></pre></p>
<p>Here “Be ready to receive emails now.” is a “base” message which refers to an array of localised messages...</p>
<p><ins>Note</ins>: String should be localised depending on user’s settings (on global ones if user’s settings are not set yet). That is user will choose the language.</p>
<a name="Input-regexp-queries"></a>
<h3 >Input regexp queries<a href="#Input-regexp-queries" class="wiki-anchor">¶</a></h3>
<p>It is perhaps the most complex part...</p>
<p>Sample request:<br /><pre><code class="php syntaxhl"><span class="CodeRay">response => [
<span class="string"><span class="delimiter">'</span><span class="content">^(?:Please )?((?:do(?:n</span><span class="char">\'</span><span class="content">t| not)|never|stop) )?notify(?:ing)?(?: me)? (?:by|using) e?-?mail(?: messages)?!*</span><span class="content">\.</span><span class="content">*$</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">^(?:I )?(do(?:n</span><span class="char">\'</span><span class="content">t| not) )?(?:want) to be notified (?:by|using) e?-?mail(?: messages)?!*</span><span class="content">\.</span><span class="content">*$</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">^(?:(Disable)|enable) (?:Redmine )?e?-?mail notifications!*</span><span class="content">\.</span><span class="content">*$</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">^Turn (?:on|(off)) (?:Redmine )?e?-?mail notifications!*</span><span class="content">\.</span><span class="content">*$</span><span class="delimiter">'</span></span>
],
</span></code></pre></p>
<p>Should be something like:<br /><pre><code class="php syntaxhl"><span class="CodeRay">response => <span class="constant">Orangutan</span>::<span class="constant">Lozalise</span>(<span class="string"><span class="delimiter">'</span><span class="content">^(?:Please )?((?:do(?:n</span><span class="char">\'</span><span class="content">t| not)|never|stop) )?notify(?:ing)?(?: me)? (?:by|using) e?-?mail(?: messages)?!*</span><span class="content">\.</span><span class="content">*$</span><span class="delimiter">'</span></span>);
</span></code></pre></p>
<p>Again, here "^(?:Please )...(?: messages)?!*\.*$” is a base query which will be translated to localised ones (more than one).</p>
<p><ins>Note</ins>: Unlike output messages input queries should be translated to queries using global settings. Besides it should be possible to define several languages for input queries. For example, for IF Orangutan should support ukrainian, english and russian. Anyway user’s settings (e.g. if user selected polish) can be taken into account too.</p>
<a name="Holidays-calculation"></a>
<h3 >Holidays calculation<a href="#Holidays-calculation" class="wiki-anchor">¶</a></h3>
<p>For holidays there should be special API allowing to extend Orangutan::Date.</p>
<a name="Conclusion"></a>
<h3 >Conclusion<a href="#Conclusion" class="wiki-anchor">¶</a></h3>
<p>Apparently we can’t use standard PO solution for Orangutan. At least because we need to support arrays etc. So own flexible solution is to be developed.</p> Orangutan - Improvement #1089 (Open): Migrate to contexts dependencies/relations from weightshttp://projects.andriylesyuk.com/issues/10892010-11-03T12:10:12ZAndriy Lesyuks-andy@andriylesyuk.com
<p>When the project started I decided to use “weight” for contexts sorting in queue because it was easier... Now I needed to change all weight to “normalize” them. Besides if users begin write their own contexts there will be conflicts in weights. So now it seems better to use dependencies.</p>
<p>This means that “weight” member is to be removed and replaced with two or more members, e.g.:<br /><pre><code>...
after => [ 'Number', 'YesNo' ],
before => 'Task',
requires => [ 'Number', 'YesNo' ]
...
</pre></pre></p></code></pre> Orangutan::Redmine - Feature #1083 (Open): Help context(s) for Redmine text formatting syntaxhttp://projects.andriylesyuk.com/issues/10832010-11-01T19:45:49ZAndriy Lesyuks-andy@andriylesyuk.com
<p>Redmine input fields support special syntax - that is lists, headers, bold text etc. Orangutan users can put comments using Jabber.</p>
<p>So what should Orangutan users do if they forgot the syntax? Right! Ask Orangitan... <span class="wiking smiley smiley-wink" title=";)"></span></p>
<p>Query can be:<br /><pre>
User: Show Redmine syntax
</pre></p> Orangutan - Enhancement #1075 (In Progress): Separate Orangutan core (reusable bot code) from Red...http://projects.andriylesyuk.com/issues/10752010-10-30T13:44:08ZAndriy Lesyuks-andy@andriylesyuk.com
<p>Orangutan architecture is quite flexible and allows to create bots quickly and easy. So the bot platform can be much more popular than Orangutan Redmine bot...</p>
<p>However currently Orangutan and its Redmine part are actually the same. For example, one of the core objects is Query which is responsible for accessing DB. Many bots won’t need it - so it should be “removed” from the core.</p>
<p>Also some of contexts require extending core objects like Date etc. I think it can be done by “monkey patching” technique...</p> Orangutan::Redmine - Improvement #1051 (Open): Allow applying only some tasks by number from sugg...http://projects.andriylesyuk.com/issues/10512010-10-25T22:22:47ZAndriy Lesyuks-andy@andriylesyuk.com
<p>Let’s check WorkHours dialog:</p>
<pre>
09:47:29 Orangutan: There should be added 7 more hours to Tuesday. May I suggest you some tasks to add?..
09:47:37 User: yes
09:47:37 Orangutan: I would add the following tasks:
09:47:37 Orangutan: 1) 09:15 - 13:00: Working on #XXX for Project (Normal)
09:47:37 Orangutan: 2) 14:00 - 14:50: Working on #XXX for Project (Normal)
09:47:37 Orangutan: Should I add this?
</pre>
<p>What about allowing to select only some tasks?.. For example:</p>
<pre>
09:47:39 User: Apply 1)
09:47:39 User: Cool! X more hours left...
</pre> Orangutan - Enhancement #994 (Open): Topics or response modeshttp://projects.andriylesyuk.com/issues/9942010-10-14T14:16:31ZAndriy Lesyuks-andy@andriylesyuk.com
<p>The Comment context switches input into “catch all” mode - that is everything typed is taken as notes (but before this context there are NonASCII, YesNo, Cancel and some other contexts). If you for some reason decided not to post comment but already switched to this “catch all” mode. And already called some othe contexts (for example, typed cyrillic text (NonASCII)) the “undo” will not work! So there will be no way to cancel context...</p>
<p>Actually would be. As a temporary solution I modified Cancel context to check if the Comment context is in “catch all” mode and if it is it will always cancel it. But this is only a temporary and dirty solution...</p>
<p>Situations like this make me search for some way to extend Orangutan architecture... I think that such “modes” can be a normal thing and in future and many other contexts can use them. In this case tweaking the Cancel context won’t help. Some of these context can require some other context to be before them in the queue - so moving the Comment to the beginning also won’t help...</p>
<p>Currently this is only idea which is to be developed but... We can add “modes”. Modes will have their own set of contexts. A sample of a mode can be issue creating mode (by the way one of the future tasks). In this mode there will be many special context for editing. Modes would also allow the same context to behave different depending on the mode set (MainIssue and Issue context could be merged if special “task editing” mode was added).</p>
<p>Some possible API look:</p>
<pre>
$user->Enter('issue', %options);
$user->Exit('issue');
</pre> Orangutan::Redmine - Improvement #973 (Open): Issue description change notificationhttp://projects.andriylesyuk.com/issues/9732010-10-12T17:22:14ZAndriy Lesyuks-andy@andriylesyuk.com
<p>If one changes issue description no one will get notified about this! This is a Redmine bug. But Orangutan could find some way to “fix it” for his users...</p>
<p>As an option - try finding some “hook” in Redmine which would allow to catch description change... How to implement this is to be investigated.</p> Orangutan - Enhancement #910 (Open): Subjects or make Orangutan remember issue id, project etchttp://projects.andriylesyuk.com/issues/9102010-09-20T13:42:31ZAndriy Lesyuks-andy@andriylesyuk.com
<p>Many new contexts are coming... Most of them are related to issues.</p>
<p>Right now when we work with tasks we talk like this:<br /><pre>
User: Working
Orangutan: Ok...
User: Change activity to Development
Orangutan: Ok...
User: Started at 15:00
Orangutan: Ok...
</pre></p>
<p>That is we do not refer to the task... Orangutan “remembers” current task and does not require as to specify its ID or something like this...</p>
<p>With issues we have completely different situation - we need to specify ID each time!.. But why not?:</p>
<pre>
User: #203
Orangutan: Issue #203...
User: I like it!
Orangutan: Glad you do!
User: It's my main issue now
Orangutan: Ok...
</pre>
<p>You see? Orangutan can remember such things...</p>
<p>How to implement?</p>
<p>I see the following solution:</p>
<pre>
$user->SetTopic('issue', $issueid);
</pre>
<pre>
if (!defined($issueid)) {
$issueid = $user->GetTopic('issue');
}
</pre>
<p>That is I suggest to implement “topics” - internal variables which contain the topic of discussion... Of course many context should be modified to use/save topics... Topics should have time out (SetTopic should save current time).</p> Orangutan - Improvement #862 (Open): Support user first and last name in requestshttp://projects.andriylesyuk.com/issues/8622010-08-31T13:43:42ZAndriy Lesyuks-andy@andriylesyuk.com
<p>Right now if you need to specidy user for some context you need to enter the username or Jabber ID... This is not very friendly...</p>
<p>The idea is to support queries like:</p>
<pre>
User: Assign to Andriy Lesyuk
User: Assign to Kostyantyn
User: Assign to Sergiy F.
User: Assign to Dmytriv
</pre>
<p>The algorithm should be smart enough to determine who is this user... For example, if user tells “Andriy” Orangutan should claim that there are many Andriy’s. If user tells “Kostyantyn” Orangutan should use Kostyantyn Kornienko because he is the only Kostyantyn etc.</p>