FOSSASIA Summit 2023 in Singapore and Online

We are happy to announce that the FOSSASIA Summit will return as an in-person event to Singapore from April 13 to 15, 2023. For online participants we also offer a remote participation option. To reserve your slot, please click here for an early bird ticket. Interested in becoming a speaker? Please propose a talk, panel or workshop before February 8. Want to share about your Open Source project or showcase your company as a sponsor or exhibitor? Please fill out the form here. The FOSSASIA Summit is an annual event for professionals, developers, companies, researchers and tech communities from around the world. During the three day event participants get together in Singapore to share projects and ideas, learn from each other, and network. The event is one of the longest running IT conferences in Asia. At the 2023 summit we focus on sustainable technologies, resilience and solutions for a rapidly changing world. Public health, renewable energy, food production and climate change will remain major challenges in the coming decades. Solutions require new approaches and technologies. How can FOSS/Open Source software and Open Hardware approaches help? What solutions exist, what are engineers working on? What are emerging technologies? And, what standards do we need to ensure interoperability, security and the economical use of our resources and energy? The topics of the tracks at the event range from artificial intelligence, to robotics, cloud & DevOps, databases, hardware and firmware, blockchain, to Open Source standards as well as web and mobile technologies. So, let’s meet up at the FOSSASIA Summit and shape the unknown!

Continue ReadingFOSSASIA Summit 2023 in Singapore and Online

Adding an option to hide map in browse events.

Open Event provides filtering while browsing events. These filters are present in a sidebar which also consists of a map. In this blog, I will describe how I implemented the feature to toggle the visibility of the map present in sidebar for mobile devices. About the issue This issue was part of improvements decided for the browse events section. Earlier the map in sidebar was shown irrespective of the user’s device. It is essentially not required to always show the map in mobile device and is a better choice to provide user with an option to view or hide the map. Sidebar as viewed from an android device before the fix was merged. The Solution A button is introduced in the mobile view which controls if the map should be visible or hidden. In the sidebar component (app/components/explore/side-bar.js), a variable “isMapVisible” which decides if the map should be visible (if it is true) or not (if it is false) at a particular instant. A new action “toggleMap” is written which changes the value of “isMapVisible” whenever the button is clicked. isMapVisible = true;@action  toggleMap() {    this.toggleProperty('isMapVisible');  } In the handlebar file (app/templates/components/explore/side-bar.hbs), the map and associated text is changed as per the truthy or falsy value of the “isMapVisible” in the component. <div class="map item {{if (not isMapVisible) 'mobile hidden'}}">{{#if device.isMobile}}  <div class="ui bottom attached button" role="button" {{action 'toggleMap'}}> {{if (not isMapVisible) 'Show' 'Hide'}} Map </div>{{/if}} After making the changes, the sidebar looks as follows on the mobile devices The above images are from an Android device. Resources: Issue: https://github.com/fossasia/open-event-frontend/issues/3122Pull Request: https://github.com/fossasia/open-event-frontend/pull/3444 Ember Docs:https://guides.emberjs.com/v2.14.0/tutorial/simple-component/Toggle Component Tutorial: https://www.learnhowtoprogram.com/ember-js/ember-js/components-hide-show-image

Continue ReadingAdding an option to hide map in browse events.

How User Event Roles relationship is handled in Open Event Server

Users and Events are the most important part of FOSSASIA's Open Event Server. Through the advent and upgradation of the project, the way of implementing user event roles has gone through a lot many changes. When the open event organizer server was first decoupled to serve as an API server, the user event roles like all other models was decided to be served as a separate API to provide a data layer above the database for making changes in the entries. Whenever a new role invite was accepted, a POST request was made to the User Events Roles table to insert the new entry. Whenever there was a change in the role of an user for a particular event, a PATCH request was made. Permissions were made such that a user could insert only his/her user id and not someone else’s entry. def before_create_object(self, data, view_kwargs): """ method to create object before post :param data: :param view_kwargs: :return: """ if view_kwargs.get('event_id'): event = safe_query(self, Event, 'id', view_kwargs['event_id'], 'event_id') data['event_id'] = event.id elif view_kwargs.get('event_identifier'): event = safe_query(self, Event, 'identifier', view_kwargs['event_identifier'], 'event_identifier') data['event_id'] = event.id email = safe_query(self, User, 'id', data['user'], 'user_id').email invite = self.session.query(RoleInvite).filter_by(email=email).filter_by(role_id=data['role'])\ .filter_by(event_id=data['event_id']).one_or_none() if not invite: raise ObjectNotFound({'parameter': 'invite'}, "Object: not found") def after_create_object(self, obj, data, view_kwargs): """ method to create object after post :param data: :param view_kwargs: :return: """ email = safe_query(self, User, 'id', data['user'], 'user_id').email invite = self.session.query(RoleInvite).filter_by(email=email).filter_by(role_id=data['role'])\ .filter_by(event_id=data['event_id']).one_or_none() if invite: invite.status = "accepted" save_to_db(invite) else: raise ObjectNotFound({'parameter': 'invite'}, "Object: not found") Initially what we did was when a POST request was sent to the User Event Roles API endpoint, we would first check whether a role invite from the organizer exists for that particular combination of user, event and role. If it existed, only then we would make an entry to the database. Else we would raise an “Object: not found” error. After the entry was made in the database, we would update the role_invites table to change the status for the role_invite. Later it was decided that we need not make a separate API endpoint. Since API endpoints are all user accessible and may cause some problem with permissions, it was decided that the user event roles would be handled entirely through the model instead of a separate API. Also, the workflow wasn’t very clear for an user. So we decided on a workflow where the role_invites table is first updated with the particular status and after the update has been made, we make an entry to the user_event_roles table with the data that we get from the role_invites table. When a role invite is accepted, sqlalchemy add() and commit() is used to insert a new entry into the table. When a role is changed for a particular user, we make a query, update the values and save it back into the table. So the entire process is handled in the data layer level rather than the API level. The code implementation is as follows: def before_update_object(self, role_invite, data, view_kwargs): """ Method to edit object…

Continue ReadingHow User Event Roles relationship is handled in Open Event Server