Why Umbraco is not a CMS

by Damiaan Peeters 13. December 2011 15:59

We are working with Umbraco for some time now. The more I use it, the more I like it. 

If you look at Umbraco for the first time, you might be dissappointed.  It has not as much plugin’s as other CMS’s.  (That is until now of course.) In contradiction to what everyone says, my believe is that we cannot call Umbraco a “Web Content Management System”.  Or in short CMS.  I know, they call it a CMS, it looks like a CMS, it smells like a CMS, but it is NOT a CMS. 

Let me look up the definition of a Web Content Management System.

Web content management system is a bundled or stand-alone application used to create, manage, store and deploy content on Web pages. Web content types can include text, graphics and photos, video or audio, and application code that renders other content or interacts with the visitor. WCM may also catalog or index content, select or assemble content at runtime, or deliver content to specific visitors in a personalized way or in different languages. (from wikipedia)

An application you say?

Umbraco is not just an application.  Although, it can be used pretty good as a stand-alone application, it always need some customization.  It contains a very brought base to start from.  That’s why everyone loves it so much.  It can be used as a starting point to build a web application.

Web pages and web content?

Umbraco can be to create, manage, store and deploy a lot more than only web pages.  You can use it as a back-end system for you CRM software.  That has nothing to do anymore with web pages.  If you think about Hive provider in Jupiter (umbraco v5), it’s not too hard to imagine you have a project without a real website but only use the back-end to manage the database.

Index, select and assemble!

That is true.  Umbraco has no difference in this part.  It is a monster in indexing and selecting.  It masters assembling new information very good thanks to Razor, XSLT and Deep .Net integration.  It handles multiple languages.  And you have even packages which help you in personalizing information.  And it goes much further than many other CMS’s with the caching policies, /Base extentions, Events, usercontrols, …)

So what is Umbraco

It has a framework which helps you to DRY (don’t repeat yourself).  It has lots of help what enables to do funky stuff with it. It’s something you use to build web applications on.  I agree, mostly websites.

I call it a Web Platform.

Umbraco deployment issues: ClientDependency error gone with debug=true on IIS7 (SOLVED)

by Damiaan Peeters 10. October 2011 13:39

Problem

So you have downloaded the latest Umbraco from (http://umbraco.codeplex.com), created a new database and FTPed it to your webserver.  But the login screen doesn’t look like completely correct.  And if you log in, nothing is working and it doesn’t look right…

If you can identify you problem using the screenshots below, then read on!

image

and after you log in this screen:

image

A “quick and dirty” solution is to open the web.config and set debug=true.  This solves the problem.  To be honest, not even a littlebit – it is a WORKAROUND!  You just turned off a lot of the features that the ClientDependency framework gives you, e.g. SPEED in the back-end.

image

The cause, if you need to believe the forums are the writing permissions. So you probably end up activating the “network service” as app pool owner and giving full control to the application.   But even that didn’t solved the problem.  Otherwise you would not be reading here.

Is you are struggling giving permissions, is advice you to use WebSitePanel, it’s a free .net based control panel.  It creates separate windows users, creates separate IIS Application Pools sets writing permissions for us. 

Cause

It is the ClientDependency handler which is NOT FOUND (404 error).  You can see that if you look into fiddler.  That means that you are missing (combined) JavaScript and CSS files, which are pretty necessary for the Umbraco administration.

image

Solution

Kudos go to a colleague of mine (Raoul of opmaat.be), he has found the solution. 

Probably you are missing a complete section in your web.config file.  For one reason or another this section is missing in the WEBSERVER section.

Locate the System.WebServer section and verify you have a “httpHandlers” section.

image

If you have already added handlers (or installed packages which do so: e.g. imagegen) then copy the handlers section from earlier in your web.config.  Otherwise you find the default webServer.Handlers section below.

<handlers accessPolicy="Read, Write, Script, Execute">
 <remove name="WebServiceHandlerFactory-Integrated" />
 <remove name="ScriptHandlerFactory" />
 <remove name="ScriptHandlerFactoryAppServices" />
 <remove name="ScriptResource" />
 <remove name="Channels" />
 <remove name="Channels_Word" />
 <remove name="ClientDependency" />
 <remove name="SpellChecker" />
 <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add verb="*" name="Channels" preCondition="integratedMode" path="umbraco/channels.aspx" type="umbraco.presentation.channels.api, umbraco" />
 <add verb="*" name="Channels_Word" preCondition="integratedMode" path="umbraco/channels/word.aspx" type="umbraco.presentation.channels.wordApi, umbraco" />
 <add verb="*" name="ClientDependency" preCondition="integratedMode" path="DependencyHandler.axd" type="ClientDependency.Core.CompositeFiles.CompositeDependencyHandler, ClientDependency.Core " />
 <add verb="GET,HEAD,POST" preCondition="integratedMode" name="SpellChecker" path="GoogleSpellChecker.ashx" type="umbraco.presentation.umbraco_client.tinymce3.plugins.spellchecker.GoogleSpellChecker,umbraco" />
</handlers>

Delete duplicate relations in Umbraco using SQL

by Damiaan Peeters 21. September 2011 09:29

Somehow I got duplicate relations in my Umbraco Relations table (about 120 k).  That’s impossible to clean them up manually, so I decided to remove the duplicates using an SQL statement directly on the database.  

Apparently deleting duplicates is not so hard on newer SQL servers when using Common Table Expressions.  CTE’s are a kind of temporary result sets that can be used within a single statement.  The difference with a temporary table is that it is not stored as an object.

WITH Dublicates_CTE(parentId, childId, Id)
AS
(
SELECT parentId, childId , Min(Id) Id
from umbracoRelation
group by  parentId, childId
having COUNT(*) >1
)

DELETE FROM umbracoRelation
WHERE Id IN (
    SELECT umbracoRelation.Id
    FROM umbracoRelation
    INNER JOIN Dublicates_CTE
    ON umbracoRelation.parentId= Dublicates_CTE.parentId
    AND umbracoRelation.childId= Dublicates_CTE.childId
    AND umbracoRelation.id <> Dublicates_CTE.Id
)

I found the idea of removing duplicates on this blogpost.

Delete all items from recycle bin

by Damiaan Peeters 19. September 2011 22:05

Based on http://our.umbraco.org/forum/developers/api-questions/3550-Delete-items-in-Recycle-Bin but also removes the previewXML, ContentVersions and Relations.

-- Uncomment below to verify the number of nodes returned is the
-- same as the number of nodes that is in the Recycle Bin
-- select * from umbracoNode where path like '%-20%' and id!=-20

delete
from cmsPreviewXml
where nodeid in (select id from umbracoNode where path like '%-20%' and id!=-20)

delete
from cmsContentVersion
where contentId in (select id from umbracoNode where path like '%-20%' and id!=-20)

-- Delete all 'related' nodes and table contents...
delete from cmsContent where nodeId in (select id from umbracoNode where path like '%-20%' and id!=-20)

delete from cmsContentXML where nodeId in (select id from umbracoNode where path like '%-20%' and id!=-20)

delete from cmsDocument where nodeId in (select id from umbracoNode where path like '%-20%' and id!=-20)

delete from cmsPropertyData where contentNodeId in (select id from umbracoNode where path like '%-20%' and id!=-20)

delete
from umbracoRelation  where parentId in (select id from umbracoNode where path like '%-20%' and id!=-20) or
childId in (select id from umbracoNode where path like '%-20%' and id!=-20)

-- delete the XML nodes....
delete from umbracoNode where path like '%-20%' and id!=-20

 

EDIT 2014-08-06

in umbraco v6 you need to run this script a few times (because it's out of order) and include this:

    delete umbracodomains
    --select umbracodomains.*
    from umbracoDomains inner join umbracoNode on umbracodomains.domainrootstructureid = umbraconode.id
    where umbraconode.path like '%-20%' and umbraconode.id!=-20

Tags:

Umbraco

Who.I.am

Certified Umbraco Master, Part of Umbraco Certified partner comm-it, .Net and Azure developer, seo lover. Magician in my spare time.

Month List