Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

User talk:Dan Poltawski: Difference between revisions

From MoodleDocs
(Testing out some weird bugs)
 
m (Text replacement - "class="nicetable"" to "class="wikitable"")
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Testing bad code php whitespace (MDLSITE-3137):
<code php>
$a = required_param('a', PARAM_INT);
if ($a > 10) {
    call_some_error($a);
} else {
    do_something_with($a);
}
</code>


Testing code without php newlines ( MDLSITE-3121):
== (truncated) Integrator discussion about core/subsystem confusion December 2015 ==
{| class="wikitable"
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| BEGIN of IGNORABLE RANT(s):


<code>
I've another disquisition in that tags issue, btw... and it's when it should be core or core_tag component. And, given that, when it should be under lib/classes or tag/classes.
  add_to_log($courseid, $module, $action, $url='', $info='', $cm=0, $user=0)
 
user_accesstime_log($courseid=0)
We are mixing everything really badly. Some classes go to subsystem dir, events all go to core...
get_logs($select, array $params=null, $order='l.time DESC', $limitfrom='', $limitnum='', &$totalcount)
 
get_logs_usercourse($userid, $courseid, $coursestart)
I agree that the main class is better in lib/classes so it's called core_tag (else it should be named core_tag_tag). But no matter of it, it's correct package is core_tag, not core.
get_logs_userday($userid, $courseid, $daystart)
 
</code>
But that's the only exception allowed to be @ /lib/classes. Any other class should go to tag/classes and be core_tag_xxxx
 
And about events... I still don't get why it was decided to move all them to lib/classes, but I hate that decision. Each component should handle its own ones. We do that for plugins but not for subsystems.
 
Also tests usually end under lib/tests... and not xxxx/lib/tests ....
 
Also, if we really don't want ANY db stuff in subsystems (install, upgrade, event observers, messaging, permisions, services, caches... we should forbid the existence of "db" for subsystems in order to "force" core (aka lib/db) to be used always explicitly.
 
I know we have other "core" classes there (core_user....) but the case is the same. They should be both @package core_xxxxx and @category xxxxxx (if the later API exists). Not @package core.
 
It's all related. Not critical at all but shows everything is not clearly ruled into our components/subsystems/apis world.
 
END of IGNORABLE RANT(s)
| <span style="white-space:pre">10:29:36 UTC</span>
|-
| <span style="white-space:pre">*Dan Poltawski</span>
| ignores and asks if there is a way we can improve the situation without ranting? :)
| <span style="white-space:pre">10:35:30 UTC</span>
|-
| <span style="white-space:pre">Dan Poltawski</span>
| pp
| <span style="white-space:pre">10:40:22 UTC</span>
|-
| <span style="white-space:pre">Dan Poltawski</span>
| d
| <span style="white-space:pre">10:40:40 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| Sorry, was afk. No, don't think we can ignite any movement about that right now. Surely need to have the X documentation system available and also a better phpdoc checker working in order to start moving the package/category/classes mess.
| <span style="white-space:pre">11:09:03 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| so it was just a "rant to the air", sort of remembering there is some mess to organize out there at some point.
| <span style="white-space:pre">11:09:43 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| note it would be perfectly possible for our autoloader, for example, to be able to load core_tag from tag/classes, instead of lib/classes. We just need to agree about it (or no). Once it's autoloaded, it's not big problem to proceed with the move later.
| <span style="white-space:pre">11:11:35 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| or same applies to phpdoc checkers... it can be programmed to accept core_tag @package in lib/classes if the class name is the main one.
| <span style="white-space:pre">11:12:52 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| I mean, it's just we have some "idiot" restrictions, both in the autoloader and in the phpdoc checker leading us to current class place and @package docs.
| <span style="white-space:pre">11:13:40 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| About the core/subsystem rant... really I think we "banned" install & upgrade under sybsystem/db long ago. Not sure if we did the same for everything else, surely yes.
 
In any case the main problem with subsystems is that there is a clear overlapping between them and the official APIs we support. And that, mixed with autoload and with namespaces makes the thing really not deterministic.
 
Imagine you've the "search" subsystem but also want to allow "search" to be one of the official APIs (https://docs.moodle.org/dev/Core_APIs). We have a number of dualities like that.
 
And they lead to problems about where to put the classes. Coz you can have both:
 
lib/classes/core_search_xxxx
search/classes/core_search_xxxx <= because it's a subsystem
lib/classes/search/xxxxx  <= because it's an api
search/classes/search/xxxxx <= because it's a subsystem and an api
 
 
| <span style="white-space:pre">00:32:33 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| I don't have a clear separation in my mind between suybsystem and core API
| <span style="white-space:pre">00:35:22 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| yeah, think that's pretty much the problem.
| <span style="white-space:pre">00:35:55 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| actually I mix that much both concepts that I thought they were the same
| <span style="white-space:pre">00:36:08 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| and it was not much a problem, but when we did introduce namespaces, the problem grew
| <span style="white-space:pre">00:36:17 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| well, yes not all subsystems expose and API, but I thought all APIs are based on a single subsystem (although they depend on more)
| <span style="white-space:pre">00:36:56 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| for example badges, it is listed as a subsystem https://docs.moodle.org/dev/Frankenstyle#Core_subsystems, but not as a core API, shouldn't it be listed as a core API too?
| <span style="white-space:pre">00:38:00 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| surely no coz it's not a transversal subsystem that others (core or plugins) can use.
| <span style="white-space:pre">00:38:39 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| it's a functionality by itself
| <span style="white-space:pre">00:38:51 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| for example, comments, ratings, tags... all them are subsystems... but with an API to be used by others.
| <span style="white-space:pre">00:39:20 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| (surely search too is that sort of "transversal" subssystem)
| <span style="white-space:pre">00:39:45 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| so, the code to support search in forums... is ok to go under forum/classes/search/xxxx
| <span style="white-space:pre">00:40:17 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| (backport requests voted)
| <span style="white-space:pre">00:40:34 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| ok, I get it
| <span style="white-space:pre">00:40:44 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| but the search code itself is where the problem is. IMO it should ALL go to /search/classes
| <span style="white-space:pre">00:40:48 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| thanks for the explanation
| <span style="white-space:pre">00:40:49 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| it is both subsystem and API
| <span style="white-space:pre">00:40:57 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| (but core_search, that right now cannot go there, unless we accomodate the autoloader to look there)
| <span style="white-space:pre">00:41:14 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| and IMO, that's the more correct solution.
| <span style="white-space:pre">00:41:33 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| avoiding core_subsystem to be @ lib/classes/subsystem and, instead, being selfcontained in its subsystem/classes/sybsystem
| <span style="white-space:pre">00:42:21 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| I don't expect much components using search API
| <span style="white-space:pre">00:42:31 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| well, any plugin should, isn't it?
| <span style="white-space:pre">00:42:49 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| but if we allow it I udnerstand they should use lib/classes/search/core_search
| <span style="white-space:pre">00:42:57 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| i mean, there will be a tokenizer, permssions... .some things to be defined by plugin component.
| <span style="white-space:pre">00:43:16 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| any plugin can implement search
| <span style="white-space:pre">00:43:17 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| but that would be using it as a subsystem isn't it?
| <span style="white-space:pre">00:43:32 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| if you are "using it", then you are using its API.
| <span style="white-space:pre">00:44:35 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| the public API of a subsystem
| <span style="white-space:pre">00:44:54 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| ok, comments example
| <span style="white-space:pre">00:44:57 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| I have comments/index.php this is the subsystem right? and a moodle plugin can use comments API to ...whatever
| <span style="white-space:pre">00:45:34 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| ok ok, I was saying the opposite, ok, makes sense
| <span style="white-space:pre">00:45:51 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| heh, comments are too simple, haha. the api is basically 2 functions (add and get)
| <span style="white-space:pre">00:45:56 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| imagine search... is really a good example.
| <span style="white-space:pre">00:46:12 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| so other plugins may implement search API to send data to the search engine
| <span style="white-space:pre">00:46:19 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| what does a plugin need to implement search
| <span style="white-space:pre">00:46:30 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| and search/index.php, the subsystem, would list the results
| <span style="white-space:pre">00:46:38 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| 1 sec and I show you what I have in mind, I have a wip
| <span style="white-space:pre">00:46:59 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| https://github.com/dmonllao/moodle/compare/MDL-31989_master~3...MDL-31989_master#diff-ae87f97e046fb2d26ec7e4b6620fcedfR37
| <span style="white-space:pre">00:48:09 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| plugins need to implement search to specify what they are interested in sending to the search engine, forum posts, database entries, glossary entries...
| <span style="white-space:pre">00:48:42 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| in other words... the code that forum needs in order to use the search subsystem (I imagine a process getting posts and sending them to the search indexer/engine).
| <span style="white-space:pre">00:48:53 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| this depends on the plugin type and the plugin
| <span style="white-space:pre">00:48:54 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| oh yes, ok, you was explaining it, I thought it was a question
| <span style="white-space:pre">00:49:29 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| correct... and those individual implementations should go to plugin/classes/search/xxxxxx
| <span style="white-space:pre">00:49:32 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| yes
| <span style="white-space:pre">00:49:39 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| well, plugin/classes/search.php
| <span style="white-space:pre">00:49:46 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| I've added support for subsystems
| <span style="white-space:pre">00:50:03 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| anyway, ok, I get the idea
| <span style="white-space:pre">00:50:32 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| aha, if not using namespaces, maybe.
| <span style="white-space:pre">00:50:38 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| do you talk about plugin/classes/search.php or "I've added support for subsystems"?
| <span style="white-space:pre">00:51:18 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| couldn't they go to tags/classes/search.php?
| <span style="white-space:pre">00:51:32 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| if you're using namespaces (and I think that you are):
 
https://github.com/dmonllao/moodle/compare/MDL-31989_master~3...MDL-31989_master#diff-ae87f97e046fb2d26ec7e4b6620fcedfR25
 
I really think they should go to:
 
mod/forum/classes/search/indexer<nowiki>|</nowiki>searcher<nowiki>|</nowiki>whatever_the_class_does
tags/classes/search/indexer<nowiki>|</nowiki>searcher<nowiki>|</nowiki>whatever_the_class_does
| <span style="white-space:pre">00:53:48 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| I mean, they are an API use (level 2 namespace)
| <span style="white-space:pre">00:54:18 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| to name a class with the name of an api is not ideal.
| <span style="white-space:pre">00:54:49 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| oh! ok ok
| <span style="white-space:pre">00:55:41 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| everything makes sense now
| <span style="white-space:pre">00:55:47 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| Yesterday I thought that things like core_search were allowed in lib/classes but not documented
| <span style="white-space:pre">00:56:45 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| (looking at what I wrote Yesterday)
| <span style="white-space:pre">00:56:53 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| core_search is allowed.... more exactly... is the only place where it works and that's the reason we are putting all them there in lib/classes.
| <span style="white-space:pre">00:57:41 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| my rant is that we should allow (instructing the autoloader to do that) them to be under search/classes/core_search (the main class).
| <span style="white-space:pre">00:58:36 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| if no other component than search is going to use core_search it could go to search/classes/manager
| <span style="white-space:pre">00:58:36 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| is it only a naming thing then or we have a strict rule that all subsystems expose stuff as core_subsystem?
| <span style="white-space:pre">00:59:13 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| (note I've not looked what your main core_search class does). Just saying that it would be great to have subsystems señf-contained. Instead of current status where we MUST put the main class into lib/classes and others in subsystem/classes. Ideally the whole subsystem should be under /subsystem.
| <span style="white-space:pre">01:00:30 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| ok
| <span style="white-space:pre">01:01:17 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| makes sense
| <span style="white-space:pre">01:01:19 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| Right now I see the core_tags, core_search, core_user classes (all them under lib/classes) like a wrong location caused by the limitations of the autoloader, not able to find them under their subsystems.
| <span style="white-space:pre">01:01:30 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| wait a sec...
| <span style="white-space:pre">01:01:33 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| So you want core_search to be loaded from search/classes/core_search.php instead of lib/classes/search.php ?
| <span style="white-space:pre">01:01:55 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| correct.
| <span style="white-space:pre">01:02:09 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| towards subsystem auto-contained.
| <span style="white-space:pre">01:02:25 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| (keepng apart api uses that can be spread over all plugins as commented above)
| <span style="white-space:pre">01:02:42 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| it could be search/classes/search.php too in fact, autoloader decides. where to find and what to find. NP here.
| <span style="white-space:pre">01:03:41 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| ok
| <span style="white-space:pre">01:03:57 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| actually what plugins implementing search extend is core_search\base.php
| <span style="white-space:pre">01:04:24 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| the current lib/classes/core_search acts as a core_search\manager
| <span style="white-space:pre">01:04:42 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| I should rename it
| <span style="white-space:pre">01:04:55 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| aha
| <span style="white-space:pre">01:05:00 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| this was a very useful conversation Eloy
| <span style="white-space:pre">01:05:11 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| thanks
| <span style="white-space:pre">01:05:14 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| core_search\search
| <span style="white-space:pre">01:05:17 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| again, note i don't know if names are correct or no. I just (headbang) about having subsystems stuff under lib/classes.
| <span style="white-space:pre">01:05:52 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| I would like to avoid core_search\search as all plugins implementing search name the class search, mod_forum\search, core_comments\search... and it might be condusing
| <span style="white-space:pre">01:05:58 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| I agree with renaming - I don't think that we should put exceptions into the autoloader. We should write a policy about naming and stick to it.
| <span style="white-space:pre">01:06:01 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| Agree with that. I hit the same thing earlier this week when I was tinkering with disguises
| <span style="white-space:pre">01:06:13 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| at least I would prevent having a new core_xxx into lib/classes
| <span style="white-space:pre">01:06:23 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| definitely
| <span style="white-space:pre">01:06:33 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| only if they are subsystems
| <span style="white-space:pre">01:06:40 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| And raise an issue to move all of the existing ones perhaps.
| <span style="white-space:pre">01:06:41 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| Yup - for subsystems
| <span style="white-space:pre">01:06:52 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| for example core_component or core_eloy are perfect.
| <span style="white-space:pre">01:07:00 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| but core_user, core_tags, core_search are not
| <span style="white-space:pre">01:07:14 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| makes sense
| <span style="white-space:pre">01:07:30 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| I dislike the way that we do all of this stuff. We should have really namespaced everything with moodle in the first place, but that's done now and hard to move back on.
| <span style="white-space:pre">01:07:36 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| (offtopic: I'm tempted to just trigger the run phpunit mssql in nightly, the queue seems complex)
| <span style="white-space:pre">01:08:10 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| yep, agree with both sides of your paragraph.
| <span style="white-space:pre">01:08:14 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| moodle\user and moodle\user\foo, rather than core_user and user_foo
| <span style="white-space:pre">01:08:16 UTC</span>
|-
| <span style="white-space:pre">Andrew Nicols</span>
| Anyway, +1 to rename the class + write some docs; -1 to add exceptions to our autoloader
| <span style="white-space:pre">01:09:04 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| well, not sure if it's exception. or missing thing. in any case, really class names should be more descriptive than the subsystem name, agree (manager, indexer, searcher....)
| <span style="white-space:pre">01:10:35 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| I can imagine a core_user class being legit name, for example.
| <span style="white-space:pre">01:11:14 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| but hate having it @ lib/classes :-)
| <span style="white-space:pre">01:11:38 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| anyway
| <span style="white-space:pre">01:11:41 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| at least hope it's now a bit clearer
 
1) under subsystem, all the stuff to make it work.
2) under plugin/classes/subsystem/the uses of the subsystem api.
| <span style="white-space:pre">01:13:04 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| (for subsystems with an api exposed to other components)
| <span style="white-space:pre">01:13:25 UTC</span>
|-
| <span style="white-space:pre">David Monllaó</span>
| :yes:
| <span style="white-space:pre">01:13:55 UTC</span>
|-
| <span style="white-space:pre">Eloy Lafuente (stronk7)</span>
| api/inheritance
| <span style="white-space:pre">01:13:56 UTC</span>
|-
|}

Latest revision as of 13:22, 14 July 2021

(truncated) Integrator discussion about core/subsystem confusion December 2015

Eloy Lafuente (stronk7) BEGIN of IGNORABLE RANT(s):

I've another disquisition in that tags issue, btw... and it's when it should be core or core_tag component. And, given that, when it should be under lib/classes or tag/classes.

We are mixing everything really badly. Some classes go to subsystem dir, events all go to core...

I agree that the main class is better in lib/classes so it's called core_tag (else it should be named core_tag_tag). But no matter of it, it's correct package is core_tag, not core.

But that's the only exception allowed to be @ /lib/classes. Any other class should go to tag/classes and be core_tag_xxxx

And about events... I still don't get why it was decided to move all them to lib/classes, but I hate that decision. Each component should handle its own ones. We do that for plugins but not for subsystems.

Also tests usually end under lib/tests... and not xxxx/lib/tests ....

Also, if we really don't want ANY db stuff in subsystems (install, upgrade, event observers, messaging, permisions, services, caches... we should forbid the existence of "db" for subsystems in order to "force" core (aka lib/db) to be used always explicitly.

I know we have other "core" classes there (core_user....) but the case is the same. They should be both @package core_xxxxx and @category xxxxxx (if the later API exists). Not @package core.

It's all related. Not critical at all but shows everything is not clearly ruled into our components/subsystems/apis world.

END of IGNORABLE RANT(s)

10:29:36 UTC
*Dan Poltawski ignores and asks if there is a way we can improve the situation without ranting? :) 10:35:30 UTC
Dan Poltawski pp 10:40:22 UTC
Dan Poltawski d 10:40:40 UTC
Eloy Lafuente (stronk7) Sorry, was afk. No, don't think we can ignite any movement about that right now. Surely need to have the X documentation system available and also a better phpdoc checker working in order to start moving the package/category/classes mess. 11:09:03 UTC
Eloy Lafuente (stronk7) so it was just a "rant to the air", sort of remembering there is some mess to organize out there at some point. 11:09:43 UTC
Eloy Lafuente (stronk7) note it would be perfectly possible for our autoloader, for example, to be able to load core_tag from tag/classes, instead of lib/classes. We just need to agree about it (or no). Once it's autoloaded, it's not big problem to proceed with the move later. 11:11:35 UTC
Eloy Lafuente (stronk7) or same applies to phpdoc checkers... it can be programmed to accept core_tag @package in lib/classes if the class name is the main one. 11:12:52 UTC
Eloy Lafuente (stronk7) I mean, it's just we have some "idiot" restrictions, both in the autoloader and in the phpdoc checker leading us to current class place and @package docs. 11:13:40 UTC
Eloy Lafuente (stronk7) About the core/subsystem rant... really I think we "banned" install & upgrade under sybsystem/db long ago. Not sure if we did the same for everything else, surely yes.

In any case the main problem with subsystems is that there is a clear overlapping between them and the official APIs we support. And that, mixed with autoload and with namespaces makes the thing really not deterministic.

Imagine you've the "search" subsystem but also want to allow "search" to be one of the official APIs (https://docs.moodle.org/dev/Core_APIs). We have a number of dualities like that.

And they lead to problems about where to put the classes. Coz you can have both:

lib/classes/core_search_xxxx search/classes/core_search_xxxx <= because it's a subsystem lib/classes/search/xxxxx <= because it's an api search/classes/search/xxxxx <= because it's a subsystem and an api


00:32:33 UTC
David Monllaó I don't have a clear separation in my mind between suybsystem and core API 00:35:22 UTC
Eloy Lafuente (stronk7) yeah, think that's pretty much the problem. 00:35:55 UTC
David Monllaó actually I mix that much both concepts that I thought they were the same 00:36:08 UTC
Eloy Lafuente (stronk7) and it was not much a problem, but when we did introduce namespaces, the problem grew 00:36:17 UTC
David Monllaó well, yes not all subsystems expose and API, but I thought all APIs are based on a single subsystem (although they depend on more) 00:36:56 UTC
David Monllaó for example badges, it is listed as a subsystem https://docs.moodle.org/dev/Frankenstyle#Core_subsystems, but not as a core API, shouldn't it be listed as a core API too? 00:38:00 UTC
Eloy Lafuente (stronk7) surely no coz it's not a transversal subsystem that others (core or plugins) can use. 00:38:39 UTC
Eloy Lafuente (stronk7) it's a functionality by itself 00:38:51 UTC
Eloy Lafuente (stronk7) for example, comments, ratings, tags... all them are subsystems... but with an API to be used by others. 00:39:20 UTC
Eloy Lafuente (stronk7) (surely search too is that sort of "transversal" subssystem) 00:39:45 UTC
Eloy Lafuente (stronk7) so, the code to support search in forums... is ok to go under forum/classes/search/xxxx 00:40:17 UTC
David Monllaó (backport requests voted) 00:40:34 UTC
David Monllaó ok, I get it 00:40:44 UTC
Eloy Lafuente (stronk7) but the search code itself is where the problem is. IMO it should ALL go to /search/classes 00:40:48 UTC
David Monllaó thanks for the explanation 00:40:49 UTC
David Monllaó it is both subsystem and API 00:40:57 UTC
Eloy Lafuente (stronk7) (but core_search, that right now cannot go there, unless we accomodate the autoloader to look there) 00:41:14 UTC
Eloy Lafuente (stronk7) and IMO, that's the more correct solution. 00:41:33 UTC
Eloy Lafuente (stronk7) avoiding core_subsystem to be @ lib/classes/subsystem and, instead, being selfcontained in its subsystem/classes/sybsystem 00:42:21 UTC
David Monllaó I don't expect much components using search API 00:42:31 UTC
Eloy Lafuente (stronk7) well, any plugin should, isn't it? 00:42:49 UTC
David Monllaó but if we allow it I udnerstand they should use lib/classes/search/core_search 00:42:57 UTC
Eloy Lafuente (stronk7) i mean, there will be a tokenizer, permssions... .some things to be defined by plugin component. 00:43:16 UTC
David Monllaó any plugin can implement search 00:43:17 UTC
David Monllaó but that would be using it as a subsystem isn't it? 00:43:32 UTC
Eloy Lafuente (stronk7) if you are "using it", then you are using its API. 00:44:35 UTC
Eloy Lafuente (stronk7) the public API of a subsystem 00:44:54 UTC
David Monllaó ok, comments example 00:44:57 UTC
David Monllaó I have comments/index.php this is the subsystem right? and a moodle plugin can use comments API to ...whatever 00:45:34 UTC
David Monllaó ok ok, I was saying the opposite, ok, makes sense 00:45:51 UTC
Eloy Lafuente (stronk7) heh, comments are too simple, haha. the api is basically 2 functions (add and get) 00:45:56 UTC
Eloy Lafuente (stronk7) imagine search... is really a good example. 00:46:12 UTC
David Monllaó so other plugins may implement search API to send data to the search engine 00:46:19 UTC
Eloy Lafuente (stronk7) what does a plugin need to implement search 00:46:30 UTC
David Monllaó and search/index.php, the subsystem, would list the results 00:46:38 UTC
David Monllaó 1 sec and I show you what I have in mind, I have a wip 00:46:59 UTC
David Monllaó https://github.com/dmonllao/moodle/compare/MDL-31989_master~3...MDL-31989_master#diff-ae87f97e046fb2d26ec7e4b6620fcedfR37 00:48:09 UTC
David Monllaó plugins need to implement search to specify what they are interested in sending to the search engine, forum posts, database entries, glossary entries... 00:48:42 UTC
Eloy Lafuente (stronk7) in other words... the code that forum needs in order to use the search subsystem (I imagine a process getting posts and sending them to the search indexer/engine). 00:48:53 UTC
David Monllaó this depends on the plugin type and the plugin 00:48:54 UTC
David Monllaó oh yes, ok, you was explaining it, I thought it was a question 00:49:29 UTC
Eloy Lafuente (stronk7) correct... and those individual implementations should go to plugin/classes/search/xxxxxx 00:49:32 UTC
David Monllaó yes 00:49:39 UTC
David Monllaó well, plugin/classes/search.php 00:49:46 UTC
David Monllaó I've added support for subsystems 00:50:03 UTC
David Monllaó anyway, ok, I get the idea 00:50:32 UTC
Eloy Lafuente (stronk7) aha, if not using namespaces, maybe. 00:50:38 UTC
David Monllaó do you talk about plugin/classes/search.php or "I've added support for subsystems"? 00:51:18 UTC
David Monllaó couldn't they go to tags/classes/search.php? 00:51:32 UTC
Eloy Lafuente (stronk7) if you're using namespaces (and I think that you are):

https://github.com/dmonllao/moodle/compare/MDL-31989_master~3...MDL-31989_master#diff-ae87f97e046fb2d26ec7e4b6620fcedfR25

I really think they should go to:

mod/forum/classes/search/indexer|searcher|whatever_the_class_does tags/classes/search/indexer|searcher|whatever_the_class_does

00:53:48 UTC
Eloy Lafuente (stronk7) I mean, they are an API use (level 2 namespace) 00:54:18 UTC
Eloy Lafuente (stronk7) to name a class with the name of an api is not ideal. 00:54:49 UTC
David Monllaó oh! ok ok 00:55:41 UTC
David Monllaó everything makes sense now 00:55:47 UTC
David Monllaó Yesterday I thought that things like core_search were allowed in lib/classes but not documented 00:56:45 UTC
David Monllaó (looking at what I wrote Yesterday) 00:56:53 UTC
Eloy Lafuente (stronk7) core_search is allowed.... more exactly... is the only place where it works and that's the reason we are putting all them there in lib/classes. 00:57:41 UTC
Eloy Lafuente (stronk7) my rant is that we should allow (instructing the autoloader to do that) them to be under search/classes/core_search (the main class). 00:58:36 UTC
David Monllaó if no other component than search is going to use core_search it could go to search/classes/manager 00:58:36 UTC
David Monllaó is it only a naming thing then or we have a strict rule that all subsystems expose stuff as core_subsystem? 00:59:13 UTC
Eloy Lafuente (stronk7) (note I've not looked what your main core_search class does). Just saying that it would be great to have subsystems señf-contained. Instead of current status where we MUST put the main class into lib/classes and others in subsystem/classes. Ideally the whole subsystem should be under /subsystem. 01:00:30 UTC
David Monllaó ok 01:01:17 UTC
David Monllaó makes sense 01:01:19 UTC
Eloy Lafuente (stronk7) Right now I see the core_tags, core_search, core_user classes (all them under lib/classes) like a wrong location caused by the limitations of the autoloader, not able to find them under their subsystems. 01:01:30 UTC
Andrew Nicols wait a sec... 01:01:33 UTC
Andrew Nicols So you want core_search to be loaded from search/classes/core_search.php instead of lib/classes/search.php ? 01:01:55 UTC
Eloy Lafuente (stronk7) correct. 01:02:09 UTC
Eloy Lafuente (stronk7) towards subsystem auto-contained. 01:02:25 UTC
Eloy Lafuente (stronk7) (keepng apart api uses that can be spread over all plugins as commented above) 01:02:42 UTC
Eloy Lafuente (stronk7) it could be search/classes/search.php too in fact, autoloader decides. where to find and what to find. NP here. 01:03:41 UTC
David Monllaó ok 01:03:57 UTC
David Monllaó actually what plugins implementing search extend is core_search\base.php 01:04:24 UTC
David Monllaó the current lib/classes/core_search acts as a core_search\manager 01:04:42 UTC
David Monllaó I should rename it 01:04:55 UTC
Eloy Lafuente (stronk7) aha 01:05:00 UTC
David Monllaó this was a very useful conversation Eloy 01:05:11 UTC
David Monllaó thanks 01:05:14 UTC
Andrew Nicols core_search\search 01:05:17 UTC
Eloy Lafuente (stronk7) again, note i don't know if names are correct or no. I just (headbang) about having subsystems stuff under lib/classes. 01:05:52 UTC
David Monllaó I would like to avoid core_search\search as all plugins implementing search name the class search, mod_forum\search, core_comments\search... and it might be condusing 01:05:58 UTC
Andrew Nicols I agree with renaming - I don't think that we should put exceptions into the autoloader. We should write a policy about naming and stick to it. 01:06:01 UTC
Andrew Nicols Agree with that. I hit the same thing earlier this week when I was tinkering with disguises 01:06:13 UTC
David Monllaó at least I would prevent having a new core_xxx into lib/classes 01:06:23 UTC
Andrew Nicols definitely 01:06:33 UTC
Eloy Lafuente (stronk7) only if they are subsystems 01:06:40 UTC
Andrew Nicols And raise an issue to move all of the existing ones perhaps. 01:06:41 UTC
Andrew Nicols Yup - for subsystems 01:06:52 UTC
Eloy Lafuente (stronk7) for example core_component or core_eloy are perfect. 01:07:00 UTC
Eloy Lafuente (stronk7) but core_user, core_tags, core_search are not 01:07:14 UTC
David Monllaó makes sense 01:07:30 UTC
Andrew Nicols I dislike the way that we do all of this stuff. We should have really namespaced everything with moodle in the first place, but that's done now and hard to move back on. 01:07:36 UTC
David Monllaó (offtopic: I'm tempted to just trigger the run phpunit mssql in nightly, the queue seems complex) 01:08:10 UTC
Eloy Lafuente (stronk7) yep, agree with both sides of your paragraph. 01:08:14 UTC
Andrew Nicols moodle\user and moodle\user\foo, rather than core_user and user_foo 01:08:16 UTC
Andrew Nicols Anyway, +1 to rename the class + write some docs; -1 to add exceptions to our autoloader 01:09:04 UTC
Eloy Lafuente (stronk7) well, not sure if it's exception. or missing thing. in any case, really class names should be more descriptive than the subsystem name, agree (manager, indexer, searcher....) 01:10:35 UTC
Eloy Lafuente (stronk7) I can imagine a core_user class being legit name, for example. 01:11:14 UTC
Eloy Lafuente (stronk7) but hate having it @ lib/classes :-) 01:11:38 UTC
Eloy Lafuente (stronk7) anyway 01:11:41 UTC
Eloy Lafuente (stronk7) at least hope it's now a bit clearer

1) under subsystem, all the stuff to make it work. 2) under plugin/classes/subsystem/the uses of the subsystem api.

01:13:04 UTC
Eloy Lafuente (stronk7) (for subsystems with an api exposed to other components) 01:13:25 UTC
David Monllaó :yes: 01:13:55 UTC
Eloy Lafuente (stronk7) api/inheritance 01:13:56 UTC