diff --git a/CHANGELOG.md b/CHANGELOG.md index 55f76ddf7..98134ca1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog Fab-manager +- Fix a bug: unable to search for projects on OpenLab + ## v4.5.4 2020 July 29 - Display an asterisk on the phone input field, in the admin creation form, if the phone is configured as required diff --git a/README.md b/README.md index 41918d48e..0c478bfb6 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ If you want to try it, you can visit [this Fab-manager](https://fablab.lacasemat To start using this awesome feature, there are a few steps: - send a mail to **contact@fab-manager.com** asking for your Open Projects client's credentials and giving them the name and the URL of your Fab-manager, they will give you an `App ID` and a `secret` - fill in the value of the keys in Admin > Projects > Settings > Projects sharing -- export your projects to open-projects (if you already have projects created on your Fab-manager, unless you can skip that part) executing this command: `bundle exec rake fablab:openlab:bulk_export` +- export your projects to open-projects (if you already have projects created on your Fab-manager, unless you can skip that part) executing this command: `bundle exec rails fablab:openlab:bulk_export` **IMPORTANT: please run your server in production mode.** diff --git a/app/assets/javascripts/controllers/projects.js.erb b/app/assets/javascripts/controllers/projects.js.erb index bd0b2c3ff..3a6946276 100644 --- a/app/assets/javascripts/controllers/projects.js.erb +++ b/app/assets/javascripts/controllers/projects.js.erb @@ -306,13 +306,16 @@ Application.Controllers.controller('ProjectsController', ['$scope', '$state', 'P // list of components / used for filtering $scope.components = componentsPromise; + /** + * Callback triggered when the button "search from the whole network" is toggled + */ $scope.searchOverWholeNetworkChanged = function () { - setTimeout( - function () { $scope.resetFiltersAndTriggerSearch(); }, - 150 - ); + $scope.resetFiltersAndTriggerSearch(); }; + /** + * Callback to load the next projects of the result set, for the current search + */ $scope.loadMore = function () { if ($scope.openlab.searchOverWholeNetwork === true) { return $scope.projectsPagination.loadMore({ q: $scope.search.q }); @@ -321,6 +324,9 @@ Application.Controllers.controller('ProjectsController', ['$scope', '$state', 'P } }; + /** + * Reinitialize the search filters (used by the projects from the instance DB) and trigger a new search query + */ $scope.resetFiltersAndTriggerSearch = function () { $scope.search.q = ''; $scope.search.from = undefined; @@ -331,13 +337,17 @@ Application.Controllers.controller('ProjectsController', ['$scope', '$state', 'P return $scope.triggerSearch(); }; + /** + * Query the list of projects. Depending on $scope.openlab.searchOverWholeNetwork, the resulting list + * will be fetched from OpenLab or from the instance DB + */ $scope.triggerSearch = function () { const currentPage = parseInt($location.$$search.page) || 1; if ($scope.openlab.searchOverWholeNetwork === true) { updateUrlParam('whole_network', 't'); $scope.projectsPagination = new paginationService.Instance(OpenlabProject, currentPage, PROJECTS_PER_PAGE, null, { }, loadMoreOpenlabCallback); return OpenlabProject.query({ q: $scope.search.q, page: currentPage, per_page: PROJECTS_PER_PAGE }, function (projectsPromise) { - if (projectsPromise.errors != null) { + if (projectsPromise.errors) { growl.error(_t('app.public.projects_list.openlab_search_not_available_at_the_moment')); $scope.openlab.searchOverWholeNetwork = false; return $scope.triggerSearch(); @@ -357,7 +367,7 @@ Application.Controllers.controller('ProjectsController', ['$scope', '$state', 'P }; /** - * Callback to switch the user's view to the detailled project page + * Callback to switch the user's view to the detailed project page * @param project {{slug:string}} The project to display */ $scope.showProject = function (project) { @@ -402,17 +412,25 @@ Application.Controllers.controller('ProjectsController', ['$scope', '$state', 'P const updateUrlParam = function (name, value) { $state.current.reloadOnSearch = false; $location.search(name, value); - return $timeout(function () { $state.current.reloadOnSearch = undefined; }); + $timeout(function () { $state.current.reloadOnSearch = undefined; }); }; + /** + * Callback triggered when the next projects were loaded from the result set (from the instance DB) + * @param projectsPromise {{projects: []}} + */ const loadMoreCallback = function (projectsPromise) { $scope.projects = $scope.projects.concat(projectsPromise.projects); - return updateUrlParam('page', $scope.projectsPagination.currentPage); + updateUrlParam('page', $scope.projectsPagination.currentPage); }; + /** + * Callback triggered when the next projects were loaded from the result set (from OpenLab) + * @param projectsPromise {{projects: []}} + */ const loadMoreOpenlabCallback = function (projectsPromise) { $scope.projects = $scope.projects.concat(normalizeProjectsAttrs(projectsPromise.projects)); - return updateUrlParam('page', $scope.projectsPagination.currentPage); + updateUrlParam('page', $scope.projectsPagination.currentPage); }; const normalizeProjectsAttrs = function (projects) { diff --git a/db/seeds.rb b/db/seeds.rb index 6323770f1..99d950073 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -861,6 +861,8 @@ Setting.set('email_from', 'noreply@fab-manager.com') unless Setting.find_by(name Setting.set('online_payment_module', false) unless Setting.find_by(name: 'online_payment_module').try(:value) +Setting.set('openlab_default', true) unless Setting.find_by(name: 'openlab_default').try(:value) + unless Setting.find_by(name: 'allowed_cad_extensions').try(:value) Setting.set( 'allowed_cad_extensions',