WP Document Revisions and user groups with different permissions per group - wordpress

I have a question regarding WP Document Revisions. I have a client with a parent company and 14 sister companies underneath it. What they're looking to do is to have a document repository where all documents get stored, but the trick is that each sister company has their own financials that should stay visible only to top management in that sister company but needs to be visible to all Executives in the parent company.
I've looked into WP Document Revisions and it does pretty much what I want concerning the document part, what I can't figure out though is how to create user groups and setting permissions for those user groups. In other words:
Set up an Executive Team group with permissions to view and edit the documents
Set up an Top Management group per 14 sister companies each with their own permissions
And then when the different users log in they should only see the documents that's set with their individual permissions.
Can anyone please help me with this, I've searched high and low but can't seem to find an answer, even if there's a different plugin that would better enable me to do the above, I'd be grateful for the help.
Regards,
Anina

I am the lead developer of WP Document Revisions. The above should be relatively easy to do as you described. There are two ways to do it:
First, you could set up a WordPress multisite install, and have individual subsites for each subsidiary, with one parent site for the parent corporation. Executives would have a login on all sites, while managers would have a login for their individual subsite, and for the single parent site. The advantage to this approach would be flexibility (if you'd like to use the workspace for other tasks, branding, etc.) but this flexibility would come at the cost of complexity (setting up 14 subsites).
The alternative approach, and perhaps what I would recommend depending on your needs, would be to group documents into a custom taxonomy (perhaps "companies"), and then base capabilities on what company the document is assigned to. This would allow you to have one single site, and could assign capabilities based on the proven and tested WordPress Roles and Capabilities system.
The functionality described in the second option does not yet exist out of the box, but is a relatively minor undertaking and is actually already under development for a potential "Pro" version of the plugin.
I hope the above is helpful. If you would be interested in discussing customizing the plugin to your needs, either as described above, or otherwise, please feel free to contact me directly.
Update: Updated link to contact information as Stack Exchange was blocking e-mail links.

I believe I have a working version of an add-on plugin that should do exactly what you're looking for. The file is here ( https://github.com/benbalter/WP-Document-Revisions-Code-Cookbook/blob/master/taxonomy-permissions.php ) and would be installed like any other plugin.
A bit more information is listed on the last question of the FAQ ( https://github.com/benbalter/WP-Document-Revisions/wiki/Frequently-Asked-Questions ), but in short, out of the box it will make a "departments" taxonomy, and will create capabilities based on any departments added. You would then install and activate Members, if you have not already, and use the interface members provides to add roles and assign capabilities.
You can tell the plugin to create and use any different taxonomy (e.g., "company" instead of "departments"), as described within the file.
It may not be 100% stable as it hasn't been tested in the wild yet, but it should work. Please let me know if it works for you, or if you'd prefer to have me set it up, etc.

Related

Managing Multiple Unrelated Projects with Phabricator

I'm trying to figure out a way to make Phabricator manage several unrelated products. I installed Phabricator, imported a few source repositories and customized the side menu by adding all the default Phabricator applications (just to get an idea of what Phabricator offers "out of the box").
At first, I liked what I saw, but after spending a bit of time exploring, it started to appear Phabractor is just a collection of various SCM tools that are not linked together. I'm really looking for a set of top level "Products" and under each I can create various related Wiki Pages, Tasks/Bugs, [sub]Projects, Uploaded Files, Legalpad entries, etc.
What I am seeing, for example, is a general Wiki Engine (Phriction) that is no way linked to a Project or a top-most Product. Also, I can create a Legalpad document, but again cannot assign it to a project or product. Same with Files I upload. Even my imported source code repositories are just floating out there without any link to a Project or Product.
Am I missing something? Is anyone using a single instance of Phabricator to manage multiple unrelated products with potentially different groups of end users?
One potential work-around is I could setup a custom Dashboard for each of my products and link in the associated projects, tasks and even links to related wiki pages, but seems like a lot of work for each product and it still seems there is no way to categorize Uploaded Files and Leagalpad.
#Flagrama answers is most of the reality. If you want simple hard separation like you could find in other tools like Redmine, Phabricator is not conceived this way.
Now there is something that could make thing a little more natural: Phabricator Spaces.
It allows to split things pretty neatly. You can see the doc here:
https://secure.phabricator.com/book/phabricator/article/spaces/
In Phabricator you can create a Project. You can set it up so that anybody can join it, or so only administrators can add users. You can also make projects only visible/joinable to members of other projects.
"Visible to Members of Project..." is the basis of managing unrelated projects in Phabricator. Every repository you create, page you add to the Wiki, file you upload, or LegalPad document you create can be set to only be visible to members of a certain project.
Unfortunately I'm pretty sure this is the limit of Projects in Phabricator at present so it may still not meet your needs.
Phabricator is very flexible and includes several different ways to organize your work and your workflows.
Spaces
Another answer already suggested that you could try Spaces, which is a sort of global grouping and that can be used to isolate everything within one space and keep it almost entirely separate from everything that's in another space.
Projects
Phabricator also has a concept of "Project Tags" which you can use to organize tasks, repositories, blog posts and various other "Objects" within the various Phabricator applications. Most objects support one or more tags and the tags are defined by Projects which you create. Tags can be used as free-form labels or you can create a hierarchy of projects and sub-projects.
I'll go into a bit more detail about using Phabricator's Projects feature since that is how I've used Phabricator so that is what I'm familiar with.
Organizing your work with with Projects and Tags
Create a top level project for your tool, product, team or whatever makes sense in your situation.
Tag the repositories, wikis pages, blog posts, tasks, etc which belong to the project created in 1. using the project's #hashtag.
Customize the menus on your project to link to related repositories, wikis, documentation, etc. The project menus are quite flexible, as are other "profile" menus such as dashboards and user favorites menus.
Use the project's workboard to manage tasks related to the project.
Create subprojects, milestones, etc as needed.
6, Repeat 1-5 for each project you work on.

How to extend existing pages, such as Customer or Shopping Cart, through plugins?

I've read everywhere that it's better to write new plugin than touch the core code. The problem is that I've not been able to find documentation where it's explain clearly how to modify pages from the plugin.
The way I understood it, to display partial pages from the plugin, one needs to tells where to display them by return using this method:
public IList<string> GetWidgetZones()
But if you return more than one zone, the widget will be displayed in multiple zones. What if I want to display bit of information on different zones?
To start off, I'd like to extend the the Customer page. The menu on that page has 7 items: customer info, addresses, orders, downloadable products, back in stock subscriptions, reward points, and change password.
I'd like to add 2 more items: personal info and connections. When personal info is clicked, the customer will able to add extra info, such as his/her photo. When the connections is clicked, user would be able to see what other have been doing.
Can someone point me to the documentation that explain how one can extend existing pages, such as Customer and Shopping Cart, without touching the core code.
Thanks for helping
I have read people saying do modifications as much as using plugin. But in practical i do find modifying core logic is one good way to find elegant and less complex way of customizing to our need.
Because, plugins only provides up to a certain limit of modification. In your case, widgets can be extended. But i don't think customer detail page can be extended using plugins. based on your requirements, you may need to add additional columns/attributes for customers. Yes, you can add/remove columns while installing/removing plugins. But in practical, any user in admin can uninstall a pluign. Think if this happens in PROD. Also you have not elaborated about connections.
I have done 250+ custom modifications (to suite our need) on core nopcommerce for my organization over the period of 2.5years. I started with nop 2.65 then moved to 2.80 and then moved to 3.20. Its bit complex to upgrade nop commerce versions on top of our custom modifications. But i can be done, if you are organized from day one.
Here are few rules i follow,
Keep a detailed custom modification list in excel.
Always update code in such as way that new feature can be managed from admin. Example: if you add a new menu in the header, just make sure it can be shown/hidden under admin settings. And this helps to contribute back to nop commerce if possible.
Use a good database Diff tool.
Use version control.
So when a new version of nop is released, i quickly compare my excel with release notes. for migration details see here

Drupal and Multi-sites?

I just want some opinions on what's the best way to go about meeting the following requirements.
I have
One main Drupal Installation
It is a typical "listings" site where users can list items
One user can have how many ever "listings" that are linked to his account
I want to be able to create sub-accounts, that use the same base site. However, for each subsite:
Only the users listings must appear on his site
It must have a completely different theme.
It must have its own menu items
The site must run off it's own domain OR subdomain
I need some answers:
Is this possible, or will each user need a completely new Drupal installation and just use a web service or something to get its listings from the main site?
What modules / components will make my life easier?
Any other suggestions to make this as simple as possible?
The problem description is not detailed enough to give a fully sound advice (and - additionally - it looks like you could probably get better advice on a drupal specific forum, as the question seems more related to installation and configuration than to programming), however - from what I understand - it looks to me that your solution could give in either of the two directions:
Tweaking a single installation to appear as different sites
Creating multiple sites that shares the same codebase and part of the data
The tweaking solution has the advantage that you have only one DB to mantain, but there is no actual real separation between the subsites. You could implement this by:
SUBSITES: mapping various subdomains on the same IP
CONTENT: using the native permission system to filter which list items to display (for example: each logged user can display only nodes created by himself, or set to be visible to its role, or having as associated taxonomy term its username...)
THEMES : if subsites will be used only by logged-in users, use the same mechanism that you would use for filtering content [each user can natively pick a different theme if you allow them to], if they must appear with a different look also to anonymous users, then use the URI to pick up the appropriate theme (if visitor X reaches the site via user1.example.com the site will have the blue theme, whilst if the URI is user2.example.com the theme will be pink).
The multiple sites solution has the advantage that you have a real separation between subsites (with even a different DB). But you would then have to either sync or transfer "on the fly" data between the main site and the subsites. If you go for this solution, you should probably take a look at the following links:
the services module, which allows to easy set up webservices
this page explaining how to connect drupal to different databases (surely faster than using webservices... reasonable solution if you for example have sites and subsites running on the same server)
I didn't want to stick this in a small comment but I am in agreement with mac on many of his points (upvote!).
The best way would be to create your subdomains and have them be symbolic links in the site folder to the default / main-domain folder.
Given what you have told us, you are much better off creating a module that creates its own node types (or even just CCK) and use a combination of the permission system (CCK offers this as well through content_permission), Views, etc. No need for separate sites, just need users to look at their own content.
The beauty of this approach is you can use Flag to allow user's to friend each other, use Views to allow them to see friend's lists, etc.
Theme's can be set on the account level, so no issues there.
"Have their own men" - does this mean have their own block on the sidebar or header than has customized links or a completely different menu SYSTEM? Will need clarification before I can answer that.

Should Wordpress be used to create a real estate listing site?

I have a real estate agent client who wants a website to list the properties he's selling. Although there are great 3rd party web apps out there that do this, he adamantly demands that I recreate a simple and custom website for him.
I can do this quickly with a php framework like Code Igniter that comes with MVC, data access objects and data bind controllers. The database would be straightforward:
t_page: generic content pages
t_property: for each property on the market, has fields like address, price, #of bed rooms etc..
However, the client has heard many great things about Wordpress, and strongly advises that I build his real estate site with it. I've only used Wordpress to create blogs and relatively straightforward websites. SO I dont know how effective it is as a real estate property content management system or how effective it is for users to search for real estate properties based on attributes such as "# of bedrooms, square footage, is basement finished etc..."
So my question is, is it a good idea to build a real estate agent website with Wordpress? Or should I try harder to convince him to build it with web framework like Code Igniter?
Rather than argue with your client about the future platform or CMS or listen to people for/opposed to WP out of principle, sit down with your client and map out exactly what he/she wants to do in terms of the site. How do they want to add material or blog posts? How easy should it be? How do they they want users to be able to search: by price range, location, etc? Get them to show you on other sites how they want things to work.
Then look at the capabilities of various CMS's, frameworks and the like. Investigate search and MLS plugins, property XML feeds, maps. Determine what other real estate sites use (esp. his/her competitors).
Then explain your decision with evidence as to what they want to do compared to what's possible with different systems. They may talk themselves in or out of systems without your help.
It's called working with a client so they get what they want in terms of usability and end-user functions, not imposing what you want on their project. Sure, you know what you are talking about in terms of getting things to work, but they don't care; they want it to work in a certain way: their way.
(And see what's already out there in terms of Real Estate WordPress Plugins and WordPress Real Estate Themes).
I've developed several real estate sites using Joomla and openRealty, and I have tried to create a decent real estate site for my wife using Wordpress due to it's ease of use for end-users, but unfortunately programming a real estate site in Wordpress is tricky. It's a blogging engine and not terribly good at "directory" based information. So I find that the ease of use goes out the window as you try to hack together real estate functionality. Then you are asking your end-users to create custom-fields, etc and it becomes a pain and you end spending too much time managing your end-users.
I love WP. But, a directory style site is not it's highest and best use.
If the client is so adamant that you use WP for his site then let him do it. Then wait till he comes crawling back to you when he can't get it to do what he wants and you can build in properly in CI.
You wouldn't tell a plumber to fix your toilet with a socket set...
Check out ExpressionEngine, it's perfect for this as you can create custom fields (# bedrooms, square footage etc.) and retrieve content by any of these custom fields using the {exp:channel:entries} tag.
So basically you'd create a channel for these listings and then use "custom fields" for the data about each of these listings (specified by the needs of your client).
If you need design for this site "City Guide" from WooThemes will be available for EE as of tonight ;-)
And since you mention CodeIgniter - EE 2.0 is built on CI and if you need some custom functionality it's all CI so that should feel like home.
Wordpress custom post types would work well for this sort of site.. A custom page template and modified WP_Query would provide the basis of the site.
As mentioned by everyone else, WP probably isn't the absolute best tool for the job, but it would not be a bad choice. I've done weirder things with it.
Old question but still relevant. My opinion is that WordPress is not a good option for creating real estate listing sites. The main reason is that it is designed primarily as a blogging engine so it requires a lot of work to set up and is susceptible to getting hacked. More detailed explanation here:
https://smallbusinessforum.co/why-an-alternative-to-wordpress-is-needed-for-real-estate-websites-ff82de096d93#.j2cduk4xs
I think that using Wordpress is a plus, not because it is the best program to use, but if you make the site properly, and he wants to add/change something, you (and many other people out there) can mold it to his needs.
There are a lot of plugins you could extract some php code from and make a good listing. You also have the option of using post_types (which are saved as posts), custom fields (which all the fields are saved in one table but indexed), or creating your own tables (adding tables function or using a plugin like PODS).
I think you will save time on coding if you go with Wordpress, and customization is pretty okay (not anywhere near decent, but I am pretty sure this site will be the next craigslist). Wordpress is the 1995 Toyota Tercel of CMSs: it won't be great, but it gets the job done, and almost everyone has worked on it at some point in their live.
If the money is good, then try to wow him with a CI demo. But with WP, could probably accomplish your task in a few hours. There are ways to set up CI around Wordpress, but that is beyond me.

Suggestions for building a clothing exchange site with Joomla/virtuemart

I want to build a website to allow users exchange clothes with each other.The website will be similar to an online auction site and a book exchange. This will be a point-based exchange community. The website allows users to
1) register for a private account
2) list items based on a specific, yet simple form that they can keep track of in their account
3) Rate items that they have received based on three simple criteria
4) Admin can add/delete products and also categorise them
5) Sizes labels etc can be assigned to products
6) Other users can upload their products/categorize them assign
7) users can perform faceted search on the products and filter by size, label etc..
One main point here is that there is no payment involved. I was thinking to use virtuemart over joomla for this kinda website and needed an opinion on how tough would it be customize virtuemart/joomla to meet the requirements.
Can you please suggest some other architecture if you think that the above arechitecture is not feasible to build this sorta website? Magento is not an option.
Thanks.
Surely people need be able to exchange items? From taking a quick look at your specification, I don't think your list covers all of the required functionality.
While cash payment isn't required, it sounds like payment might be involved because your site is a 'point-based exchange community'. I think this might actually make the task of creating your site slightly more complicated because there's less chance of using pre-written modules (most e-commerce CMSs are geared towards cash payments).
I'd suggest you look at an ecommerce system called Ubercart (which is based on Drupal). This can be customised reasonably easily by writing modules which plug-in to the main CMS. There's also a very supportive developer community. To work out the feasibility of using Ubercart, I'd recommend posting your question on the Ubercart forum (www.ubercart.org).

Resources