backdrop / backdrop-issues

Issue tracker for Backdrop core.
144 stars 38 forks source link

[UX] Create a project browser for modules, themes, layouts etc #870

Closed docwilmot closed 8 years ago

docwilmot commented 9 years ago

See https://github.com/backdrop-ops/backdropcms.org/issues/56#issuecomment-93853228

So that users can simply select projects to download within update module, rather than the not-so-friendly cutting and pasting of zip file urls.

I would personally like to suggest the ability to select multiple projects for download in one go, and related, automatically attach dependencies.

Any ideas?

quicksketch commented 9 years ago

There's actually a really great Google SOC project that built out this functionality years ago in Drupal 7: https://www.drupal.org/project/project_browser

We could check out the feasibility of that project as a candidate for core. I'm also in support of this idea.

cellear commented 9 years ago

The story told in this thread about Wildkatana's attempt to get Project Browser functionality into Drupal is a fascinating look into the Drupal infrastructure. I'm amazed and very impressed by his patience and perseverance.

https://www.drupal.org/node/1243332

It strikes me that most of the objections raised in this thread don't really apply to us. Perhaps we should give some encouragement to Wildkatana to implement it here? It sounds like most of the work that we would need to use this for Backdrop is already done.

quicksketch commented 9 years ago

Thanks @cellear, that thread is indeed very interesting. It looks like the project browser functionality has pretty much been "ready" for a long time, with the main holdup being getting access to a complete development environment. :frowning:

And yes, I think the main hold-ups don't apply to us. For our initial pass, we could have the search box use the built-in search functionality instead of Solr (although we could set that up as well).

Drupaldise commented 9 years ago

This would be great!

docwilmot commented 9 years ago

Very cool. Would be fantastic addition. Have left a note on the issue queue for the contrib project on D.org.

Drupaldise commented 9 years ago

I am interested in working on that... not sure if we need the old Drupal version.

Bojhan commented 9 years ago

I actually did the design and mentoring of this project for core. For some reason we never got there. The challenge isn't really the d.o part, although in the Drupal world it is.

Outside the Drupal world the challenge should be, a nice experience - which is kinda tricky with uploading and enabling. I find the Wordpress browse experience quite nice, but then installing it feels "Drupally".

Drupaldise commented 9 years ago

Sooo... how should we go further with that?

quicksketch commented 9 years ago

@Drupaldise: If you're up for it, we can get you access to the backdropcms.org server so you can make a database dump and set up a local installation of the site with the content types for modules, themes, etc. all set up; then work on porting the Project Browser Server module. Then you can set up a second installation of Backdrop to point at your local server, and start porting the Project Browser module.

Really you don't need an installation of BackdropCMS.org, for starters you could just install https://github.com/backdrop-contrib/project on the local installation that will act as the server.

Drupaldise commented 9 years ago

Ok, but I am not sure if I can handle this alone... maybe there is someone else there, who would be interested in working on that.

Graham-72 commented 9 years ago

@Drupaldise It looks a very interesting and worthwhile project. I would be interested in working on it.

docwilmot commented 9 years ago

In my excitement I had started porting the client module. I've got the initial backdrop work here: https://github.com/docwilmot/project_browser Please fork at will.

Did this 2 weeks ago, and never checked to see if it works, so just a start, will need some love I suspect.

docwilmot commented 9 years ago

And start for project_browser_server too. https://github.com/docwilmot/project_browser_server

docwilmot commented 9 years ago

This is the return that project_browser expects from the server (page 1); Dump from a Drupal install. We could hardcode that into project_browser.inc as $results_raw (line 486) to get the client module to at least display something useful while testing.

Cant help more than this for now.

array(
  'total' => 10594,
  'projects' => array(
    'better_exposed_filters' => array(
      'type' => 'module',
      'title' => 'Better Exposed Filters',
      'name' => 'better_exposed_filters',
      'drupal version' => '7',
      'author' => 'mikeker',
      'description' => 'The Better Exposed Filters module replaces the Views\' default single- or multi-select boxes with radio buttons or checkboxes, respectively. Description fields and Select All/None links can be added to exposed filters to make for a better user experience....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => 'https://www.drupal.org/files/styles/grid-3/public/images/BEF_0.PNG?itok=xd8JKJ2n',
      'usage' => '77849',
      'project url' => 'https://www.drupal.org/project/better_exposed_filters',
      'project status url' => 'http://updates.drupal.org/release-history/better_exposed_filters/7.x',
      'last updated' => '1428077881',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'smtp' => array(
      'type' => 'module',
      'title' => 'SMTP Authentication Support',
      'name' => 'smtp',
      'drupal version' => '7',
      'author' => 'José San Martin',
      'description' => 'This module allows Drupal to bypass the PHP mail() function and send email directly to an SMTP server. The module supports SMTP authentication and can even connect to servers using SSL if supported by PHP....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => '',
      'usage' => '75620',
      'project url' => 'https://www.drupal.org/project/smtp',
      'project status url' => 'http://updates.drupal.org/release-history/smtp/7.x',
      'last updated' => '1420662780',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'admin_views' => array(
      'type' => 'module',
      'title' => 'Administration Views',
      'name' => 'admin_views',
      'drupal version' => '7',
      'author' => 'damiankloip',
      'description' => 'Replaces administrative overview/listing pages with actual views for superior usability....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => '',
      'usage' => '74042',
      'project url' => 'https://www.drupal.org/project/admin_views',
      'project status url' => 'http://updates.drupal.org/release-history/admin_views/7.x',
      'last updated' => '1424423581',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'content_access' => array(
      'type' => 'module',
      'title' => 'Content Access',
      'name' => 'content_access',
      'drupal version' => '7',
      'author' => 'fago',
      'description' => 'This module allows you to manage permissions for content types by role and author. It allows you to specifiy custom view, edit and delete permissions for each content type. Optionally you can enable per content access settings, so you can customize the access for each content node...',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => 'https://www.drupal.org/files/styles/grid-3/public/images/content_access.png?itok=JG40rhvF',
      'usage' => '73543',
      'project url' => 'https://www.drupal.org/project/content_access',
      'project status url' => 'http://updates.drupal.org/release-history/content_access/7.x',
      'last updated' => '1366014322',
      'maintenance status' => 'Seeking co-maintainer(s)',
      'development status' => 'Maintenance fixes only',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'views_php' => array(
      'type' => 'module',
      'title' => 'Views PHP',
      'name' => 'views_php',
      'drupal version' => '7',
      'author' => 'casey',
      'description' => 'This module allows the admin account (user 1) to add fields, filters and sorts to views which use PHP code. It also supports additional accounts when the core PHP Filter module is enabled.',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => 'https://www.drupal.org/files/styles/grid-3/public/project-images/IMG_20140930_162850.jpg?itok=8mDJVuxU',
      'usage' => '71181',
      'project url' => 'https://www.drupal.org/project/views_php',
      'project status url' => 'http://updates.drupal.org/release-history/views_php/7.x',
      'last updated' => '1390577312',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'votingapi' => array(
      'type' => 'module',
      'title' => 'Voting API',
      'name' => 'votingapi',
      'drupal version' => '7',
      'author' => 'eaton',
      'description' => 'VotingAPI helps developers who want to use a standardized API and schema for storing, retrieving, and tabulating votes for Drupal content....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => '',
      'usage' => '71026',
      'project url' => 'https://www.drupal.org/project/votingapi',
      'project status url' => 'http://updates.drupal.org/release-history/votingapi/7.x',
      'last updated' => '1407995928',
      'maintenance status' => 'Seeking co-maintainer(s)',
      'development status' => 'No further development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'auto_nodetitle' => array(
      'type' => 'module',
      'title' => 'Automatic Nodetitles',
      'name' => 'auto_nodetitle',
      'drupal version' => '7',
      'author' => 'fago',
      'description' => '"auto_nodetitle" is a small and efficient module that allows hiding of the content title field in the form. To prevent empty content title fields one can configure it to generate the title by a given pattern....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => '',
      'usage' => '71019',
      'project url' => 'https://www.drupal.org/project/auto_nodetitle',
      'project status url' => 'http://updates.drupal.org/release-history/auto_nodetitle/7.x',
      'last updated' => '1307449915',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Maintenance fixes only',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'simplenews' => array(
      'type' => 'module',
      'title' => 'Simplenews',
      'name' => 'simplenews',
      'drupal version' => '7',
      'author' => 'miro_dietiker',
      'description' => 'Simplenews publishes and sends newsletters to lists of subscribers. Both anonymous and authenticated users can opt-in to different mailing lists. HTML email can be sent by adding Mime Mail module for D7 and Swiftmailer for D8....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => 'https://www.drupal.org/files/styles/grid-3/public/images/Subscriber_Management.png?itok=GnWqxzq8',
      'usage' => '62797',
      'project url' => 'https://www.drupal.org/project/simplenews',
      'project status url' => 'http://updates.drupal.org/release-history/simplenews/7.x',
      'last updated' => '1381947969',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'fontyourface' => array(
      'type' => 'module',
      'title' => '@font-your-face',
      'name' => 'fontyourface',
      'drupal version' => '7',
      'author' => 'sreynen',
      'description' => '@font-your-face provides an administrative interface for browsing and applying web fonts (using CSS @font-face, supported in all popular browsers) from a variety of sources. Try it out on simplytest.me....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => 'https://www.drupal.org/files/styles/grid-3/public/images/fontyourface_small_3.png?itok=iMNJHd7o',
      'usage' => '62197',
      'project url' => 'https://www.drupal.org/project/fontyourface',
      'project status url' => 'http://updates.drupal.org/release-history/fontyourface/7.x',
      'last updated' => '1367195415',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
    'uuid' => array(
      'type' => 'module',
      'title' => 'Universally Unique IDentifier',
      'name' => 'uuid',
      'drupal version' => '7',
      'author' => 'recidive',
      'description' => 'This module provides an API for adding universally unique identifiers (UUID) to Drupal objects, most notably entities....',
      'categories' => array(
        0 => 'admin',
        1 => 'search',
      ) ,
      'image' => '',
      'usage' => '61587',
      'project url' => 'https://www.drupal.org/project/uuid',
      'project status url' => 'http://updates.drupal.org/release-history/uuid/7.x',
      'last updated' => '1411454808',
      'maintenance status' => 'Actively maintained',
      'development status' => 'Under active development',
      'rating' => '0',
      'includes' => array() ,
    ) ,
  ) ,
);
Graham-72 commented 9 years ago

@docwilmot Thanks very much for these - will you have time to answer any questions I may have once I study them?

docwilmot commented 9 years ago

Hi @Graham-72, I smile to see you ask that. I am no quicksketch sir. I'm pretty sure @Drupaldise and yourself are just as capable and very likely more so than I am. I was just trying to help, and give a start. But if you ask, and I know the answer, will be glad to help. :smile:

quicksketch commented 9 years ago

Thanks @docwilmot! Anyone who's interested in getting this rolling, I think it'd be a great idea to move these repositories into the backdrop-contrib group so that all contrib authors can collaborate together on it. I believe all 5 of us (so far) are already part of the contrib authors group, so moving it into contrib would let everyone commit on it. To follow procedure, it'd be great to list those interested here as maintainers in the README.md.

docwilmot commented 9 years ago

Transferred to backdrop-contrib

Graham-72 commented 9 years ago

I have just modified project_browser.info and installed the module on a test site and it runs, giving me an excellent listing of Drupal modules and themes. Thanks @docwilmot for porting. I will now try to arrange for a listing of Backdrop modules and themes.

docwilmot commented 9 years ago

Cool.

I will now try to arrange for a listing of Backdrop modules and themes.

What's the plan? How you going to get that done?

Graham-72 commented 9 years ago

What's the plan? How you going to get that done?

I see that project_browser_server includes an example with some static data for a few Drupal modules, so I am thinking that it would be best to get both modules fully ported, then get some static data for a few Backdrop modules pasted in manually, for test and demo purposes.

After that, we have to find out how we get the live data for backdropcms.org (I presume) once the lists are available there.

Does that sound sensible?

Graham-72 commented 9 years ago

Question ... in project_browser.admin.inc line 26 he has

Add new repositories to use for the Project Browser, one per line, in the 'url|method|Site Name' format. MAINSITE_URL is added by default, and doesn't need to be set here.

What, if anything, should we use in place of MAINSITE_URL ? Otherwise, I think porting is now complete.

docwilmot commented 9 years ago

What, if anything, should we use in place of MAINSITE_URL ?

I think we can ignore that for now; doubt we'll be using any other servers than the default once its up.

I am thinking that it would be best to get both modules fully ported

I am thinking though that the server just sends a list of available projects, but the project_browser actually has to do the fetching and downloading. I'd say the important task is to get the browser actually fetching projects from GitHub. And installing them. Once that's done we can get the server up to feed the browser live info.

docwilmot commented 9 years ago

Another small thing: I think the changes youve made so far directly to the project browser are reasonably obviously necessary, so this doesnt apply:

But I think when we start actually trying to make things work and write new code, that it may be best to to the changes in branches in a fork on your GitHub acct and send as PR to the Backdrop contrib repos. Sort of like how patches are proposed on D.org. You can merge them yourself even, but at least the rest of us get a chance to see what youre thinking.

What do you think?

Graham-72 commented 9 years ago

@docwilmot

I am thinking though that the server just sends a list of available projects, but the project_browser actually has to do the fetching and downloading. I'd say the important task is to get the browser actually fetching projects from GitHub. And installing them. Once that's done we can get the server up to feed the browser live info.

Yes, maybe. Though I am partly thinking that backdropcms.org will be collecting this information from GitHub and so project_browser_server might be replaced by some equivalent module on backdropcms.org if all the data we need is already there. We need to find this out.

it may be best to to the changes in branches in a fork on your GitHub acct and send as PR to the Backdrop contrib repos. Sort of like how patches are proposed on D.org. You can merge them yourself even, but at least the rest of us get a chance to see what youre thinking.

Yes indeed. I was being lazy with this basic 'standard' porting stuff and will now start to use PRs for anything more.

docwilmot commented 9 years ago

I am partly thinking that backdropcms.org will be collecting this information from GitHub and so project_browser_server might be replaced by some equivalent module on backdropcms.org if all the data we need is already there.

The way I understand it, project_browser_server will be installed on backdropcms.org and will do the job of querying data from project module there and sending it to project_browser on client sites. Thats what @wildkatana has been trying to accomplish on D.org for the last couple years. On D.org the same would likely apply as here: project_browser_server would query project module, which in turn gets its data from D.org's Git repo where all projects are kept. Except we use GitHub.

In the end though, project_browser would get the info on available modules from project_browser_server, thats it. project_browser still has to go directly to the repo/download link to fetch the actual files. If someone set up a site anywhere, and project_browser sent a request to that site, and it returned that array I posted above, project_browser would work because the array tells it where the files are to download. The fancy 'server' part just makes it dynamic, and adds paging, and filters etc. We dont need that yet. We need project_browser to know what to do with the array it receives.

wilderuncat commented 9 years ago

If y'all have any questions, feel free to hit me up. Project Browser Server doesn't assume anything about the backend, it is just an API, so it is pretty extensible.

Regarding the multiple servers line, that was so that people could potentially host their own module repos/marketplaces down the line. Think Eclipse plugin repos, for example.

Graham-72 commented 9 years ago

@docwilmot yes agreed. I am a bit focused on a primary goal of getting the project listing working. Then I assume we can use code from the update module to download from github. @wildkatana thanks for offer to advise. I am sure you will be hearing from us :smile:

Drupaldise commented 9 years ago

Hi @quicksketch I am not part of the contrib authors group. Can you add me?

Graham-72 commented 9 years ago

Things are progressing well I think. I have written a brief summary of where we are at here:- https://github.com/backdrop-contrib/project_browser/issues/6.

docwilmot commented 9 years ago

did some work on the server today. got it working, almost, then realised a simple issue: the drupalorg server used solr search; we dont have this so i used core search. but core search it seems will not return a list of projects without a search string (requires a 3 character minimum for a search i think?). so project_browser will not list all modules by default as it should.

see branch at https://github.com/docwilmot/project_browser_server/tree/bdpbs

you can get module info if you search a single module. see demo: http://wilmurt.com/project_browser/server/query/module/1?text=hopscotch. we need it to work with just http://wilmurt.com/project_browser/server/query/module/1

@quicksketch any way around this or do we need to port search api or solr?

wilderuncat commented 9 years ago

Perhaps it would be easier to avoid the core Search functionality entirely. I did something like this for my own implementation:

function MODULE_pbs_project_browser_server_query($filters) {
  $query = db_select('MODULE_pbs_projects', 'p')
    ->fields('p');

  // Filter out projects based on type.
  if (isset($filters['type'])) {
    $query->condition('p.type', check_plain($filters['type']));
  }

  // Filter out projects based on drupal version number.
  if (isset($filters['version'])) {
    $query->condition('p.api_version', check_plain($filters['version']));
  }

  // Filter out projects based on categories number.
  if (isset($filters['categories']) && is_array($filters['categories']) && !empty($filters['categories'])) {
    // TODO
  }

  // Filter out projects based on the text query.
  if (!empty($filters['text'])) {
    $query->where("MATCH(p.title, p.description) AGAINST (:txtk IN BOOLEAN MODE)", array(':txtk' => $filters['text']));
  }

  // Only send back the requested amount.
  $start = $filters['page'] * $filters['requested'];
  $count_query = $query;
  $count_result = $count_query->execute();
  $query->range($start, $filters['requested']);

  // Add the sorting.
  if (!empty($filters['order_by'])) {
    $sort_direction = (!empty($filters['sort']) && $filters['sort'] == 'asc') ? 'ASC' : 'DESC';
    switch ($filters['order_by']) {
      case 'title':
        $query->orderBy('p.title', $sort_direction);
        break;

      case 'usage':
        $query->orderBy('p.usage_count', $sort_direction);
        break;

      case 'score':
        if (!empty($filters['text'])) {
          $query->addExpression("MATCH(p.title) AGAINST (:txtw)", 'title_rel', array(':txtw' => $filters['text']));
          $query->addExpression("MATCH(p.description) AGAINST (:txtw)", 'desc_rel', array(':txtw' => $filters['text']));
          $query->orderBy('title_rel', $sort_direction);
          $query->orderBy('desc_rel', $sort_direction);
        }
        else {
          // Fallback to just use usage_count.
          $query->orderBy('p.usage_count', $sort_direction);
        }
        break;

      case 'name':
        $query->orderBy('p.author', $sort_direction);
        break;

      case 'latest_release':
        $query->orderBy('p.updated', $sort_direction);
        break;
    }
  }

  $result = $query->execute();

  $projects = array();
  foreach ($result as $row) {
    $projects[$row->short_name] = array(
      'type' => $row->type,
      'title' => $row->title,
      'name' => $row->short_name,
      'drupal version' => $row->api_version,
      'author' => $row->author,
      'description' => $row->description,
      'categories' => MODULE_pbs_categories(),
      'image' => $row->image_url,
      'usage' => $row->usage_count,
      'project url' => $row->project_url,
      'project status url' => $row->status_url,
      'last updated' => $row->updated,
      'maintenance status' => $row->maintenance_status,
      'development status' => $row->development_status,
      'rating' => $row->rating,
      'includes' => array(),
    );
  }

  return array(
    'total' => $count_result->rowCount(),
    'projects' => $projects,
  );
}

Admittedly, I had the projects stored how I wanted them in a table, but the ideas are the same. Seems the core search extender is mostly useful for things like exclusions in the search string, right?

docwilmot commented 9 years ago

Thanks @wildkatana. Was concerned about the ability to cache the results; I assumed search would be more efficient at that than a plain database query. Obviously I know little of search (or of database queries or caching for that matter). But I think I got it working now with a query of the node table. Will confirm later and upload.

@quicksketch that database dump you offered would be appreciated so we can get all the project fields accounted for, and to test of course.

wilderuncat commented 9 years ago

@docwilmot Caching is more efficiently handled with Varnish. The requests are anonymous and use GET parameters, so they should be trivial to cache at the edge layer, which is much more performant than the database layer. I'm not too familiar with the search extender, but perhaps you could only use the search extender if there is actually a query string, and if not just use a similar method to mine to get the results ordered by one of the sorters...

Graham-72 commented 9 years ago

did some work on the server today. got it working, almost

@docwilmot - have you linked project_browser_server to the nodes created by project? I guess you have to create the result for hopscotch.

I have been investigating the way project_browser uses update in order to get information about releases and download them. Now that update is functional it is possible to test this step in the process. My initial try with install (working from the test data) produced the following error reports - something to work from anyway. recent log messages - backdrop starter 2015-05-25 16-21-50

docwilmot commented 9 years ago

@Graham-72 I've got project server returning a json feed of project data in the format we need, yes. But its only serving one project at a time, if you query that project, which doesnt help much. I did a little test of wildkatana's suggestion this am, and I think I will have something positive later today if I get some time.

I dont have access to my local repo now but I think the browser needed a couple little tweaks to get it going, but it should be working too.

docwilmot commented 9 years ago

Working now. To test:

  1. First update project_browser_server and project_browser to the latest code.
  2. Then install backdroporg_pbs module from https://github.com/docwilmot/backdroporg_pbs
  3. Then run this command to change the default server to my test server.

(or uninstall project_browser, update the code and change the code in the install file to this, then re-install):

  $config = config('project_browser.settings');
  $config->set('project_browser_servers', '');
  $config->set('project_browser_default_server', array('http://wilmurt.com/project_browser/server' => array(
      'name' => 'Backdrop',
      'method' => 'json',
    ),
  ));
  $config->save();

The feed from wilmurt.com only has 5 of projects but enough to test. Should be able to view, select and install.

Not done:

Comments welcome

Graham-72 commented 9 years ago

@docwilmot It is great to see such good progress, thanks. I am getting an error report when actually trying to use project_browser to install a module. Have you seen anything similar? details - www oliverweb net 2015-05-26 06-25-38

docwilmot commented 9 years ago

Seems like may be an issue with your PHP settings not supporting .zip extension, according to the Google. See this article. Have you been successful installing modules through the standard update.module interface (admin/modules/install)? Try typing "https://github.com/backdrop-contrib/hopscotch/releases/download/1.x-1.0/hopscotch.zip" in there directly. If its a problem with your local setup ad .zip, you shouldnt be able to install there either.

docwilmot commented 9 years ago

Easier yet, see if zip is in the list of allowed extensions:

capture

docwilmot commented 9 years ago

OK, seems we've proven that this works. I think any further discussion should move to the respective project issue queues?

I've made a change to the https://github.com/docwilmot/backdroporg_pbs module to use entityFieldQuery instead, to make it easier to add filters for project type and version (I added those fields to the Project nodes) so the project_browser theme and module tabs work (backdropcms.org isnt returning release data for any themes, so I added type = theme to hopscotch module to fake it). This is temporary until we can get a dump of BackdropCMS.org's database (waiting on @quicksketch) and/or longer term, when we can get the server on to BackdropCMS.org itself.

So now, we can focus on making project_browser sing and dance. I'm really excited about this, or as @jenlampton would say, I'm superexcited :copyright: about this. Will be so great to see this in core eventually.

quicksketch commented 9 years ago

Awesome @docwilmot! Do you think this would hurt to throw it on BackdropCMS.org right away? Both the PBS and the accompanying module are pretty simple. What do you think?

One minor thing we'll change before putting it up: on BackdropCMS.org, all our custom modules that would normally be "backdropcmsorg" are abbreviated to "borg". :wink:

docwilmot commented 9 years ago

all our custom modules that would normally be "backdropcmsorg" are abbreviated to "borg"

Believe it or not "borg_" is exactly what I prefixed that module, then I changed it, because who on earth would do that? :smile: I'll rename and push.

Do you think this would hurt to throw it on BackdropCMS.org right away?

There are a couple of things we havent quite worked out yet though. As noted in the borg_project_browser_server code, lots of things still arent mapped to project node fields because I dont know the field names. If you can find the time to plug those in, then by all means, having it on B.org would be great. It is quite simple after all.

Should I move borg_project_browser_server to contrib, seeing as it isnt really a module for public consumption?

quicksketch commented 9 years ago

Should I move borg_project_browser_server to contrib, seeing as it isnt really a module for public consumption?

Leave it out for now and we'll eventually merge it into the https://github.com/backdrop-ops/backdropcms.org repository with the other custom modules. When you think it's ready, just file a PR to add it like you would any other repository.

As noted in the borg_project_browser_server code, lots of things still arent mapped to project node fields because I dont know the field names.

For the most part, we de-fieldized a lot of project module so that properties would be consistent. However, I wonder if we're going to have introduced an issue because EFQ can't query other database tables besides fields.

to make it easier to add filters for project type and version (I added those fields to the Project nodes)

To clarify the setup on BackdropCMS.org, each project type is a different node type because we may need different fields on different types of projects (e.g. different taxonomy vocabularies). The "version" string is stored in the project_release_supported_versions table, as keeping track of the most recent recommended version gets a little complicated when dealing with multiple "API versions" (e.g. Backdrop 1.x.x and Backdrop 2.x.x).

docwilmot commented 9 years ago

For each project the server will need to get the following from Project:

project type
backdrop version
author
description
categories
image
usage
maintenance status
development status
rating
latest_release

Its going to be difficult to code/test this without knowing how the database/fields save data. I suspect a database dump may be the best idea if permitted.

quicksketch commented 9 years ago

I suspect a database dump may be the best idea if permitted.

I'll contact you via e-mail and we can get this arranged.

docwilmot commented 8 years ago

During the last Hangout, @quicksketch asked to mention status of PBS and PB. AFAIK, PBS was still serving up faulty paging (see https://github.com/backdrop-ops/backdropcms.org/issues/73); I cant fix it or test it because thats probably an issue with Backdrop.org's implementation of Project module.

There was also a faulty PR which I pushed (sorry again) at https://github.com/backdrop-ops/backdropcms.org/issues/103, which @quicksketch reverted, but I fixed it and pushed again; that needs looking into as well.

I want to start working on PB itself and its inclusion in core, but awaiting a working PBS. Perhaps that's not necessary, but it would feel a lot better to do things in that order, to me.

docwilmot commented 8 years ago

Still not serving correct paging, and I still don't know why :cry:

docwilmot commented 8 years ago

The Project Browser requires jQuery UI MultiSelect Widget. To bring the PB to core, will we need to add this widget as a core library?

quicksketch commented 8 years ago

The Project Browser requires jQuery UI MultiSelect Widget. To bring the PB to core, will we need to add this widget as a core library?

Hm, could we avoid this dependency? Other options could be:

Clearly I need to try PB to see where this UI is being used.

I merged in the fixes for https://github.com/backdrop-ops/backdropcms.org/issues/102 finally, so hopefully that will help paging.