Dear Orchard Developer Team

Topics: General
Aug 29, 2014 at 10:40 PM
I've been using Orchard for 2 years, but my patience is starting to run low, very low. Despite the constant progress and all the efforts put into creating new features over the years...

I STILL CAN'T UNINSTALL A MODULE WITH JUST ONE CLICK.

I've been waiting patiently, having faith that it'll eventually come around. But now 2 years later, I've taken a look at the roadmap to 1.9, searched the forums, and googled the future of Orchard 2.0. I see no indication that this is ever going to change.

Guys seriously, do you even care? This is a serious usability issue. Not just for myself, but for the people I make websites for. For all the focus you guys put into making the next ingenious modules, I find it crazy you can't even make the same effort in getting the basics down like uninstalling a module or automatic site upgrades. That in comparison should be a piece of cake for you guys. While you guys are working on all these advanced features, you're ignoring the minimum basics of usability. Even far less advanced cms like WordPress can get that job DONE, why can't Orchard?

I don't even test any modules from the gallery anymore because I know it's going to be a pain in the ass to manually uninstall and undo table records when I'm done. No, I stay far away from the gallery. Not to mention there's no clear distinction to show which modules were from the gallery and which came preinstalled, more reason to stay away from the gallery.

Headaches. I love you guys, but I feel like you're all a bunch of mad scientists working on your next great evil project. Taking a look at the recent Orchard blog posts only seems to confirm this. I don't feel like you guys ultimately care about usability or the end users. Isn't that what a CMS is ultimately suppose to be about? A Content Management System. It should make managing your website painlessly simple. By definition Usability should therefore be a top priority. I don't care about the next great new feature, when I can't even delete a module or upgrade my website without jumping through hoops.

My feeling is that you guys are capable, but simply don't give a damn. I've been watching Orchard and this trend shows little indication of ever changing, in which case I don't know how much longer I can continue to use Orchard. For my own personal website? Yes. Building a site for someone else? Back to WordPress...

DO YOU GUYS CARE?
Developer
Aug 29, 2014 at 11:37 PM
Of course we care. And someone created an issue for it here -> https://orchard.codeplex.com/workitem/17815 , and we triaged it.
As is the case with everything, it's a matter of priorities. And what is a huge priority for one, might not be a big deal for the other.
If you care about this feature and feel that it should be part of the next release, it is up to you to speak up and let us know. At least then we can share thoughts and discuss why we agree or don't agree. Looking at the comments of said issue, I see none from your end, even though you seem to care a lot about this missing feature. This project is an open source effort, and everyone is invited to improve it. This is why we have the discussion board, issue ticketing system and the weekly community meetings, where you are more than welcome to join and share your thoughts on what should be improved and why.
Aug 30, 2014 at 1:43 AM
I definitely care about this feature. It's the most important missing feature to me. And the thing is this isn't even real a feature. It's a primitive functionality that's simply been missing. Anything you install--software, modules, whatever--the expectation is that you can equally uninstall it just as easily. This would be almost just as crazy as not being able to delete pages once created.

That post you linked to and others like it are the reason that I felt the need to finally say something. That post was started in 2011 and it's been a known issue. The awareness is there, but the caring is not. Looking at the new versions, feature roadmap, blog posts, and forums I see no interest in giving this the priority it deserves. It's been an afterthought for 3 years... how many more years will it take? It's always seems like some new brilliant idea takes priority over basic usability concerns.
Developer
Aug 30, 2014 at 2:02 AM
Edited Aug 30, 2014 at 2:06 AM
@Justin, I agree completely with what Sipke said, and he expressed it better than I ever could.

At the same time, I just want to chime in and say I really feel your pain, because I share it. I do agree there is a tendency in the Orchard development team to focus on innovation, rather than completeness and quality. I think in many ways this is an inevitable side effect of being an open source effort that's based almost exclusively on voluntary and unfunded contribution.

Most developers are happy to spend their free time contributing with things they find inspiring and fun. Not so many are willing to spend that same free time on more basic or even "boring" or mundane stuff, such as cleaning up, tying up loose ends, filling in the missing pieces, reaching completeness, and writing documentation. Most of us are like that.

Without some benevolent higher executive power managing the division of labor and "forcing" someone to do the things that noone really feels very inspired to do, there will always be a tendency to neglect them. This is just human nature. That's not to say that we don't care about quality and completeness at all, or that we don't do any work to that effect - only that there is a tendency in the opposite direction.
Developer
Aug 30, 2014 at 2:23 AM
Edited Aug 30, 2014 at 3:06 AM
@Sipke, I would also add, to be fair, that this issue is the no. 3 top voted issue of all. Given that fact, one might argue it's hardly a matter of prioritization and/or voices not having been raised... ;)
Developer
Aug 30, 2014 at 3:20 AM
@Daniel Very well put.
Regarding your argument on voices being raised, I was specifically referring to Justin's voice not being heard in that thread. Claiming that people don't care while not participating yourself for all that time? I mean, c'mon. Try contributing to the discussion first, and then complain that nobody listens.

To your point, the priority of being able to uninstall a module is just lower to me than the features I think are more important, since there is a known "work around" for uninstalling modules you no longer need, which is called "Delete through Windows Explorer or using an FTP client".

That being said, I absolutely agree that Orchard should be feature complete, be user friendly and have its bases covered. Like you and my good friend Justin here I really feel there's a lot to be gained there. You explained very well why this isn't currently the case so I won't repeat what you've said.

Anyway, it's a good thing that we have this conversation going on.
@Justin Thank you for voicing your concerns - I know it is shared with many, and we will get there eventually. Sooner if someone steps up and gets started.
Developer
Aug 30, 2014 at 3:36 AM
Edited Aug 30, 2014 at 3:39 AM
sfmskywalker wrote:
Regarding your argument on voices being raised, I was specifically referring to Justin's voice not being heard in that thread. Claiming that people don't care while not participating yourself for all that time? I mean, c'mon. Try contributing to the discussion first, and then complain that nobody listens.
Sure, I get where you're coming from. The complaint was unnecessarily arrogant for a first attempt. I'm just saying, maybe @Justin was one of those 36 votes, and what he meant was that we don't seem to be listening to the crowd?
To your point, the priority of being able to uninstall a module is just lower to me than the features I think are more important, since there is a known "work around" for uninstalling modules you no longer need, which is called "Delete through Windows Explorer or using an FTP client".
Lower to you, yes. Perhaps also to me. But as Orchard developers, since we encourage feedback and discussion from the community to drive our priorities (as you explicitly did above, for example) we should give some consideration to the votes of issues. They clearly reflect what the community feels are the most important issues. If we completely ignore those in favor of our own personal assessments based on our skill sets and circumstances, what are they even good for?

Also, the workaround is not complete. It does not delete database tables, undo content definition changes, etc.
Developer
Aug 30, 2014 at 4:00 AM
Edited Aug 30, 2014 at 4:00 AM
Decorum wrote:
Lower to you, yes. Perhaps also to me. But as Orchard developers, since we encourage feedback and discussion from the community to drive our priorities (as you explicitly did above, for example) we should give some consideration to the votes of issues. They clearly reflect what the community feels are the most important issues. If we completely ignore those in favor of our own personal assessments based on our skill sets and circumstances, what are they even good for?
Completely agree. Maybe we could organize a hackathon where we dedicate to work on the top most requested issues (provided that he committee approved to take those features in, as is the case with the uninstall feature). Could be fun!
Also, the workaround is not complete. It does not delete database tables, undo content definition changes, etc.
Yes, but - check out the thread on this issue: https://orchard.codeplex.com/workitem/19995.
Aug 30, 2014 at 6:02 PM
Edited Aug 30, 2014 at 7:19 PM
That's an accurate explanation. If nobody is getting paid then I can imagine that most developers who invest their time are doing so because they want a platform to express their own creative ideas and to have their work noticed and appreciated. Nobody volunteers to do the janitor's work (which often goes uncredited or underappreciated) unless he's the owner of the building, which in this case of open-source there's no apparent "owner". Obviously everyone wants the system to be cleaned up and it would only benefit everyone, but nobody is excited to waste their time cleaning up someone else's mess, so to speak.

You guys therefore make a good point, unless I'm the one willing to clean it up (which I'm not :p) then it's unfounded of me to come barging in complaining without any previous contribution. I'll keep that in mind.
Developer
Aug 30, 2014 at 8:32 PM
There are two things to note:
  • Un-installing modules, if we speak about a complete clean-up, is far from trivial to implement and I'd say basically impossible to do in a one-size-fits-all, fully automated manner.
  • The feature is already there :-).
Let me explain the second point:

A module removal would ideally consist of the combination of the below steps, certain ones being optional (i.e. up to the user to choose) and/or configurable:
  • Making the features vanish from under Modules (and similarly for themes). This is doable by simply deleting the extension's folder. But it's also possible otherwise too, see below.
  • Clean-up any DB schema changes (drop indices, tables, constraints, anything).
  • Clean-up any file system changes, let them be in Media or App_Data (or anything else).
  • Remove associated content items.
As mentioned, IMO neither of those apart from the first one (what you actually don't want to do on a production site, without a new deployment, since this is changing the application itself) can be done in an automated manner if we want to make it right. Can we say that if a module creates a table then it should be dropped when it is uninstalled? No. The same for files, and so on...

What we can do, however is provide an extensibility point for extensions where they can run arbitrary clean-up logic when they're being uninstalled. And guess what (careful now, here comes the part where I explain that we already have an uninstall feature but we we just didn't yet worked on surfacing it very well): you can write such code, in the Uninstall() method of Migrations classes. Actually the whole infrastructure for this is there. With Orchard.Packaging commands you can even run uninstalls today. Heck, the CustomForms module even has some uninstall code.
Developer
Aug 31, 2014 at 2:14 PM
@Piedone, Absolutely. In my mind any uninstall functionality needs to be cooperative. Orchard could never "guess" how to revert module changes, no more than it could guess how to make install them in the first place.

Since we can't change all modules out there at once, this is going to have to be a gradual thing across the ecosystem. But what we can do is start the ball rolling. My suggestion on how to do this:
  1. Extend the module manifest format to allow modules to specify that they support uninstallation. Something like "Uninstall: enabled" would allow a module to opt into module uninstallation.
  2. In the modules/features admin UI, surface an "Uninstall" action on those modules which support it.
  3. Make sure we add information about this in the documentation for module creation.
This way, at least there will be one-click uninstall for modules that support it. At least we will have done our part on the Orchard side to make this happen. This would hopefully shift the pressure away from Orchard core and onto module developers to support this.
Developer
Aug 31, 2014 at 7:20 PM
I don't think number 1 is needed. If we define uninstall as running PackageManager.Uninstall() then this doesn't need any special support: the extension will be automatically removed (I mean its folder) and its Uninstall() migration methods run, if any. We don't require any manifest entry for extensions having migrations to Create() either.

Nr. 2 can be simply an unsafe link to run PackageManager.Uninstall(), added by Orchard.Packaging first. Then we can make it complicated to allow configurable uninstalls (e.g. "Do you want to remove the tables? The content types?") somehow.

Totally agree with nr. 3.
Developer
Aug 31, 2014 at 11:00 PM
We don't require any manifest entry for extensions having migrations to Create() either.
The difference being that we know implicitly that all modules make use of the Create() method. I don't think we should surface one-click uninstallation of modules who don't clean up after themselves. The expectation from users would be that uninstall is a complete reversal of install, including content definition changes, database migrations, etc. Simply deleting the folder is not enough IMHO.
Coordinator
Sep 1, 2014 at 5:44 PM
FYI, there's an Uninstall() hook in migrations.
Developer
Sep 1, 2014 at 6:44 PM
Thanks, Sherlock. ;) That's what we are talking about.
Developer
Sep 1, 2014 at 7:51 PM

Where is the 'Like' button on this!?

Developer
Oct 3, 2014 at 3:36 AM
We really do need a like button.
Developer
Jan 17, 2015 at 11:48 PM
Keep an eye on https://orchard.codeplex.com/workitem/17815 as I started to work on this.
Jan 18, 2015 at 7:36 AM
Edited Jan 18, 2015 at 7:37 AM
Great @Piedone

Related with the "remove topic" issue is the issue asking a button for delete a tenant.
https://orchard.codeplex.com/workitem/16464

Currently you need to remove the Site folder but tables in db remain. In fact, in the past when I have deleted those tables from db the site fails because somewhere it should there are references to the removed tenant tables.
Jan 18, 2015 at 1:21 PM
Removing a tenant with a single click fills me with fear :)

Our process for killing a tenant is (using MS SQL Server / SQL Azure):
  1. Export all the tenant tables (e.g. dacpac)
  2. Backup and remove the tenant folder under Sites
  3. Drop all the tenant tables
This way we never risk losing the tenant data and we can restore the tenant at the drop of a hat. For step 3, we use this to generate the drop script (where prefixname is the table prefix for the tenant):
SELECT 'DROP TABLE "' + TABLE_NAME + '"' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'prefixname%'
@jersiovic I have never seen a site fail after the above process. Do you have a log that shows the Default site failing?
@PiedOne, just out of interest, how do you foresee the data being cleaned from the infosets? (I have only just started migrating)

This discussion reminded me of a point I made a year or so ago regarding forced implementation of certain interfaces for modules, such as import/export but also uninstall. A bit of quality assurance so to speak? Although not sure how we could prevent blank implementations.
Jan 18, 2015 at 3:08 PM
Edited Jan 18, 2015 at 3:10 PM
It was time ago I should give it a try another time.

However, if the only reason to don't implement the remove tenant thing is you want to have a backup to avoid mistakes then I don't see why you don't prefer that the remove tenant option is available but it does a backup of the tenant folder in sites and exports its data to a backup before removing the tenant.

As a user when you see you cannot remove a tenant or a module you feel the product is incomplete.
A CMS should make things easy to the user and help him to avoid mistakes, but both things at the same time not only one, don't you think?
Jan 18, 2015 at 5:48 PM
@jersiovic I was not disputing the usefulness of the feature.

I see two separate issues here:
  1. the ability to trigger a backup
  2. the ability to delete a tenant.
To add to the overall discussion of uninstalling modules and tenants, would it be desirable to create a backup programmatically before dropping tables, or is this an operational concern? And, if so, how to create a db-platform independent (or some level of indirection) backup mechanism (assuming that the Export feature is not implemented in all modules)?

I feel an IDataBackupProvider in the making... but, then again... maybe just a dialog "About to drop/delete/uninstall <feature/tenant>. This cannot be undone. Did you take a backup?" will do just fine :)
Developer
Jan 18, 2015 at 5:52 PM
Let's keep to module/theme uninstall now :-).
Jan 18, 2015 at 6:55 PM
@Anoordende ah ok I misunderstood, I agree those are two concerns that need to be addressed ;)

@Piedone ook