Add an object 'Company' in Moodle - moodle

I have a question, is possible if i want to add a new object called 'Company' to Moodle?
My Moodle is provides for several Companies. Each company have their staffs. Staff permission is the same with normal user. The problem is 'Company'.
How could i define a new object Company to moodle. For example, i go 'my user profile' and see the information about My Company: ABC Company, and the administrator could manage all the Company (add, edit info, delete)
Thanks in advance
Tuan Anh.

If you just want a profile field called 'company', then that can be added as a custom profile field - http://docs.moodle.org/en/User_profile_fields
If you want to manage multiple, separate organisations via a single Moodle install, then you want to look at multi tenancy - there is no complete solution to this, but there are several approaches - http://www.synergy-learning.com/wp-content/uploads/2012/05/Multi-tenancy-in-Moodle.pdf is a good overview.
If you want Moodle + support for company hierarchies (and better reporting, etc), then you should consider Totara as an alternative - http://www.totaralms.com/

Related

Multi-tenant schema with SLINGR

I'm developing an app using the low code platform SLINGR. I need to set permissions by the company an user belongs to.
What would be the best approach to implement this?
Any help would be greatly appreciated.
The best way to achieve this is by using permissions with a filter of type By user field. For example, you can create an entity called people with the following structure:
- user
- company
Then, in Application > Settings in the app builder, you have to configure this entity as the one used for extended fields (https://slingr-stack.github.io/platform/app_development_app_settings.html#user-extended-fields). Once you do that, you will be able to filter by the company of the current user. For example, let's suppose you have an entity called tasks with the following structure:
- number
- title
- company
- description
Then, in the permissions for this entity, you will add a filter by user field where the field tasks.company is equals to people.company. This way, users will only see tasks that belong to the company they also belong to.

Restrict courses from displaying on Moodle conditionally based on user profile field?

I have an installation of Moodle 2.8.3 and I've added a custom user field, "role", to the user profiles. I can hide activities and documents based on that user field, however, if there is an entire course that is only for one role, the other roles see it.
Example:
I'm a client and I'm looking through the course catalog. I see a course "XYZ" and click on it to enroll but the course is totally empty because it's for employees only.
Are there any examples of this being done? I've done some research and found IOMAD but it's a completely custom deployment of Moodle and would need to go through a lengthy approval process and then be reinstalled on dev, imp, and prod.
Totara has audience visibility, so you can restrict courses to members of an audience.
http://help.totaralms.com/Audience_Based_Visibility.htm
Totara is a distribution of Moodle, aimed at enterprises.
http://www.totaralms.com/
I think the audience visibility code would be difficult to port to Moodle though. You can try out the Totara seedlings code from this link. https://github.com/totara/seedlings
Then once installed, switch on audience visibility using the help link above

User sub-sites - CMS Multisite or other solution

I've been thinking about an online idea for about 3-4 years now and can't get it out of my head so I've decided to act upon it and see if I can get it working. Currently working a POC and design layout which I plan to tender for development.
The main part of the portal and most important component involves user sub-sites. I am unsure how to tackle the process for a user to create a sub-site during the registration process and/or what path to take.
Let's say the main site is www.abc.net - the user would then register a sub-site based on the credentials they input. E.g. user1.abc.net, mysite.abc.net or joeblog.abc.net... whatever they want and so forth. No SEO required - The site templates are fairly basic and the sub-sites will be accessible through the main site. So the process to be:
User logs onto main site and registers
During registration, user enters details including sub-site name they want
Select the template they want - basically different colour schemes. Functionality to be the same for all templates
their site is created
when the user is logged on they get directed to their sub-site
Ability to edit their sub-site - add content and add extra pages, change details…. etc
General users (registered or anonymous) would be able to browse and search content to the sub-sites via the main site.
Each sub-site to be independent from each other - no content sharing. Basically they are separate websites hosted as sub-sites but need they need some type of editing available like a CMS. Not sure if a shared CMS is possible but the owner has to be able to modify content to their own sub-site.
So my question are…
Do I try and use a Drupal/Wordpress/Joomla CMS with multisite functionality?
Do I try a solution where I have a collection of simple sites that I use for sub-sites, each to have their own database and some type of CMS or WYSIWYG for editing? Is separate CMS even possible for each Sub-site?
Any input would be greatly appreciated.
As far as I know this would not be possible as the CMS would not have access to your server where the sub-domain is created.
It would be possible to offer something similer using Joomla as it offers the option to apply custom styles (templates) to different pages. You would however have to adopt the following URL convention www.yourdomain.com/userselectedtext.
You can then have a page where users register with your site and the cms creates their page.
User permissions in joomla can be set so only the owner of a particular page can view or edit it.
You can check out this source: http://www.drupalgardens.com/. Google what platform is it based on. Maybe you'll find some information. Read also about this extension: http://www.joomplace.com/administration-extensions/multisitescontrol.html. It's for Joomla sites. I used this component for multisites content management. Maybe it will help you too.

How can we send a follow up email for Wishlist?

How can we send a email to the user reminding them that some products are available in their wishlist?
I have seen this functionality on many sites and I wish someone would have Implemented it by now.
There should be a way to Do this program way.
Also There is no way available in magento to see wishlist report,like which item is most available in wishlist or top 5 wishlist products.Is there a way to Implement Both the things
Thanks in advance
Unfortunately there is no out of the box solution for both of your issues.
There does exist a $14.99 module that will give you more insight on wishlisted items and the relative customers: http://www.magentocommerce.com/magento-connect/admin-global-customer-wishlist-viewer.html
As for sending emails to those customers, this type of functionality exists in Magento Enterprise Edition. You have the ability to automatically send emails to customers with wishlisted items - unless you are willing to shell out $15,000 for the enterprise version, you are a bit out of luck here.
You can either utilize a email blast service like MailChimp which integrates directly into magento to send focused email blasts OR do some custom development work.
You can do this with MageMail. (Full disclosure: I'm the founder of MageMail).
In case you're looking to build this custom, you basically just want to pull in the wishlist_item table and join on the customer table to get the customer associated with the wishlist item.
One gotcha to keep in mind is that all of the wishlist items are included in the same wishlist, regardless of when they were added (they're not like quotes in that regard). So if you're building this custom, you'll want to make sure to build it in such a way that it will follow-up based on the date the wishlist item was added and not the date of the wishlist record itself.
I think that Enterprise has support for multiple wishlists but I haven't seen it in use much in the wild.
I think you can do exactly what you need the following way:
1. Segment your customers according to their wishlist records with Market Segmentation Suite extension. You can put users with particular wishlist item into a group or form a customer group of all users with non-empty wishlists. You can then export those segmented lists for future use.
2. Follow up your customers according to segmented lists you made with emails tailored to specific customer groups with Follow Up Email.
As for wishlist reports you can track which products have been added to customers’ wishlists, when the product has been added, how many days this item is in the wishlist with Advanced reports unit named Users Wishlists by aheadWorks.
So, these are 3 different extensions, but they definitely cope with the task you describe.

Analysis class diagram - associating classes

New user so I can't post images. Image link provided below:
http://i.stack.imgur.com/EXf0G.jpg
This is for a walk-in booking system not an online reservation system.
Normal Booking scenario:
User/Member gives information to receptionist. Users can book up to a month in-advance.
Receptionist searches user/member info. Receptionist must be logged in to search user/member or make a booking.
if details are found the booking continues as normal, if not user details are added to the users file.
Booking time/date/type is then checked for availability. If available then a booking is made.
Extra:
There are two types of staff account 'normal-user' (Receptionist) and 'admin' (Manager).
Manager can reset staff account passwords and create new staff accounts.
Manager can edit session details on the timetable (time, date, type) etc. Do i need a timetable class here??
In order to answer that, we would need a much more developed specification.
I would suggest you develop with what you have, meeting only the minimum requirements for each iteration. Then, if you find your users need a timetable of some sort, then add it at that point.
In general, don't add more complexity than you need until you know you need it. The more moving parts a system has, the harder it is to maintain and use and to put together in the first place. Get the application up and functioning and in the users' hands. Until you get real feedback from them, you are just taking stabs in the dark. Let the users' tell you what they need and want.