I have been struggling for 7 weeks now with Drupal and its application towards several areas of site development. I am frusterated with the level of tutorial, video, document, and even support/forum help. I am trying to determine the following issues and needs relevant to the site I am developing that simply are not being answered by any of the avenues mentioned above:

I am designing and trying to develop a company intranet for an engineering firm to be used for project specific tasks. Maybe the site needs that I am trying to develop in the intranet that I am developing are simply not available, or are too advanced for Drupal's current level of application.

First, I need to create a series of forms that are quite extensive and will be created only once and will be filled out during the life of the project (see http://drupal.org/node/361314). Can CCK and Views do what I need, how, and where do I go to get help (specifically).

Second, the intranet that I am building will have several sections to it with very different content types, taxonomies, etc. (i.e. Company employee area, resource library, project management area, and design standards area). with each area having its own main page and subsequent sections, is this better accomplished setup as multiple sites with a central user/roles administration (if that is even possible).

Third, some sections like project management will receive new content every minute during the day (i.e. memos, telephone records, calendar events added, tasks, and agendas entered or updated, forms filled out). eventually emailing added and PDF records made of ALL content created in the site in real time and stored separately outside the database and even off of the webserver onto a file server for independent access, archiving. Where do I learn to do this again if it is even possible.

Fourth, I would like to be able to create new projects areas/sections of the intranet with all of the standard forms and standard page definitions and queries described above at once (maybe this is real pie in the sky stuff).

I know we are all busy but i really would appreciate some direction on where to go to look for these capabilities. I have gone to all of the videos linked through Drupal and I have googled the same for videos and tutorials. I know how to set up a field with CCK, I know how to set up a form using Webform. In know how to create new vocabularies and terms within them.

Here is what I don't know; can you link/associate several created CCK fields together. Can you create groups within groups, if so how. Can I access the CCK fields created into other queries and present them in a different page of content (query), if so how. If I need to use the webform but still need to use the content later elsewhere in the site how to I access it (individual pieces of the form). In other words is the data between theses various modules being normalized in the/a database for use elsewhere as new fields and tables are created.

There is another tutorial needed how to create a page of tabular data?

I would greatly appreciate it if someone can point me in the direction of some advanced tutorials that really get the heart of the possibilities of these modules and the core elements of the CMS. Of all of the projects out there in my research over the last 4 months I have been most impressed with Drupal over others.

Comments

peterx’s picture

Your form development requirement is unrelated to intranet or extranet. Complex forms exist in Drupal. There are training systems built on Drupal that are effectively multipart forms filled out over several days. Workflow and triggers let you pass forms from person to person at each stage of their processing. None of it is affected by how you connect to your site.

The multiple sections could be accomplished using multisite and shared users, something that is in the documentation for Drupal 6. You could have employee.example.com, resource.example.com, and project.example.com. Each site can have different modules and themes loaded. If you do not need that level of flexibility, there are area related modules to let you split one site into example.com/employee/, example.com/resource, and example.com/project/.

You can store data to another server using file sharing and that is performed by your operating system, not Drupal. Read up on Linux file sharing, Windows file sharing, Beos etc. You could also backup the files using rsync and other options which are related to the operating system. You could create a Drupal module to manage the archiving of the files but you would still need the file system link to the other computer.

If you want instant creation of new areas, use the example.com/project/ approach or the Domain Access add on module to create multiple sites sharing one datebase with all configuration online. You can see Domain Access in action at http://phpaustralia.com/ and at http://02g.info/. Both sites are one Drupal, one database, and site creation is performed by Domain Access, http://drupal.org/project/domain.

petermoulding.com/web_architect

gforce301’s picture

DISCLAIMER: There have been times I have been accused of being scornful, condescending, etc... I am not atempting to be any of these in this post so if I come off that way please accept my apology as I sometimes tend to be a bit blunt.

I guess I will start at the top.

Drupal is quite suitable for an intranet. Nothing you have described is specific to an intranet website. Drupal is very capable of handling thousands of simultanious users and as such if deployed on an intranet I believe that it will perform fine.

I can sympathize with being up against the Drupal learning curve. Most of us have been there at one time or another. I can also understand your frustration, however, "...the level of tutorial, video, document, and even support/forum help" is greater than I think you realize and for the most part those are your only avenues for answers. The other way is the many available books that have been written on Drupal. Understand that in the case of the "support/forum" everyone who posts here is a volunteer. People answer what they can when they have time.

One of the problems I encountered when first learning how to use Drupal was not "I can't find information" but instead "I don't know what question to ask to get the help I need". This can be very frustrating. The reason I mention this is because you are asking some big questions. Many of them do not have simple answers. Some of them have answers that would require you to have more than a casual knowledge of the methods being used to understand the answer being given. More than one of your questions has more than one answer depending on the architecture of the rest of the site.

First, I need to create a series of forms that are quite extensive and will be created only once and will be filled out during the life of the project (see http://drupal.org/node/361314). Can CCK and Views do what I need, how, and where do I go to get help (specifically).

I will post in this thread where you give a better description of what you are trying to do.

Second, the intranet that I am building will have several sections to it with very different content types, taxonomies, etc. (i.e. Company employee area, resource library, project management area, and design standards area). with each area having its own main page and subsequent sections, is this better accomplished setup as multiple sites with a central user/roles administration (if that is even possible).

I do not think you will need to use multiple sites for this. It really depends on how you define a "section". For me a section in a website is just a set of pages that share a common navigation and possibly url structure that are different than another section.

For example: We might have an "Employees" section in a site. The url for that section's "main page" might be example.com/employees. That section might have 3 pages in it: Company Index, HR Contact Form and Organizational Chart. The url's for those would be: example.com/employees/company-index, example.com/employees/hr-contact-form and example.com/employees/organizational-chart respectively. In the left sidebar whenever we are in the "Employees" section we would show a menu with links to the 3 pages in that section. We could define other sections the same way.

Third, some sections like project management will receive new content every minute during the day (i.e. memos, telephone records, calendar events added, tasks, and agendas entered or updated, forms filled out). eventually emailing added and PDF records made of ALL content created in the site in real time and stored separately outside the database and even off of the webserver onto a file server for independent access, archiving. Where do I learn to do this again if it is even possible.

Yes it is possible. However, you mention at least 6 different tasks and then throw in email, PDF creation and real time archiving to a remote machine. No offense, but do you realize the scope of this question? There is no documentation to send you to. Each one of those tasks has several ways to accomplish it and most of the solutions will depend heavily on how you design a "project" for which all of this has to be stored and referenced to that project. The part about "receive new content every minute during the day" is just basically many users entering content right?

Fourth, I would like to be able to create new projects areas/sections of the intranet with all of the standard forms and standard page definitions and queries described above at once (maybe this is real pie in the sky stuff).

Some of this may be "pie in the sky" and some may not. For instance when you speak of queries, I think you will most likely wind up using the views module for things of this nature. If a view is designed right, it will autmatically respond to the creation of new projects and such.

Here is what I don't know; can you link/associate several created CCK fields together. Can you create groups within groups, if so how. Can I access the CCK fields created into other queries and present them in a different page of content (query), if so how. If I need to use the webform but still need to use the content later elsewhere in the site how to I access it (individual pieces of the form). In other words is the data between theses various modules being normalized in the/a database for use elsewhere as new fields and tables are created.

Taken in order:
1) Yes in CCK you can make a field group. This is nothing more than an (x)html fieldset to group the fields together on the node creation form.

2) I do not believe that CCK has the ability to create field groups within field groups.

3) Yes you can access the CCK fields of the nodes created and use them to present that data on another page. You can do this by hand in code using the node_load api function or you can use the views module to query for nodes based on criteria that you set (yes this can be data in a CCK field) and then diplay the results in a meaningful way that you can control (theme).

4) I think you are confusing what CCK and webform do.

The webform module is primarily used to create a form that a visitor can fill out, the results of which are stored for future reference. Optionally the form does have the ability to email the results of every submission to an address. A webform is a node. There is one webform node in the system for each webform that you create. The webform module stores it's results in it's own set of tables and provides it's own ways to display them. A single submission of a webform does not create a node, it only creates an entry in webform's tables. Think of it as a really nice way to make a custom contact form and if you ever loose the original email that it sent you, you can log in and see the result of the form subimission on your site.

CCK on the other hand is used to define a type of node. The form that is generated as a result of the definition stores it's results as a node in the system, every time it is submitted. As nodes are our basic content structure in Drupal, CCK gives us control over these structures. It lets us define different content objects and what content they will store. With theming we can control how these objects are displayed. With modules (and other ways), it is even possible to limit (or change) what data is displayed to a given user based on access level (which in Drupal is called a user's roll) or even create displays for a specific user. If nodes are the basic content object in Drupal you can think of CCK as the most common tool used to define those objects (nodes).

5)To the question of normalization the answer is yes and no. There are modules that work with other modules and all modules communicate with core via the api. Some modules, such as views, have their own api and hooks that allow other modules to "expose" the data that they store to views in a meaningful way that views understands. Conversely, the last time I dug deep into how the webform module stored it's results, webform dealt with it's own data and other than the fact that I could write code to query the tables webform used, the module did not provide a mechanism to costomize the display of those results. At that time views was not able to "query" webform tables either. Things may have changed though.

There is another tutorial needed how to create a page of tabular data?

The answer to this really depends on where the data is coming from. What type of data? Where is it stored? If the data is stored in nodes then the answer is to use the views module.

I wish there was a tutorial I could point you to that would answer all your questions. I don't know of one. The site you are describing is a fairly large design. I personally would spend a week (or more) just defining the bulk of it. It can be done with Drupal. Drupal is infinitely extensible. Which way you choose to do some things is going to dictate what options you have to do others.

jdugger’s picture

Thank you for your response you have helped clear up a few things.

Webform will not work for my needs.

CCK and Views may work if I can build the form as a collection of nodes that have been extended using taxonomy and new CCK fields. Again maybe I am not seeing it, but I need to create a single form that will have over 100 fields. These fields will need to be divided or associated in groups. But the users will need to refer to and be presented with this information in a single form. Also The form will already exist. Users will just "edit" it (in others words they won't go to create content menu and pick it out of a list of content types). There will be no need to create more than one of these forms per project.

The drawback is that I don't know of a way to not have to create hundreds of content types all for the purpose of filling out one form. Now compound that by 4 different forms of equal complexity for different purposes and hopefully you can see my problem. Do I still have it wrong?

I agree the that I don't even know the right question to ask in many cases because I don't understand completely how Drupal's structure works or it's jargon yet. I have worked with databases for 20 years in various application settings other than the internet. I am new to scripting languages. I know XHTML and CSS so I am relying heavily on Drupal to work within a php framework and to provide some standardization to the CMS.

Thanks again for your

netwidget

justageek’s picture

Why specifically will Webforms not work?

it sounds like you need one single content type with 100+ cck fields. How they are grouped and displayed will most likely end up being a theme issue, where someone will have to customize your cck field structure, or possibly just css, to make the layout look as necessary. Now, the groups within groups will indeed not be possible through cck interface, as far as I can tell.

I don't know what your budget is, from what I can tell, having this huge content type with 100 fields isn't going to buy you anything, and I'd hire a module developer to write me a module that saves the entire form serialized in the database. If you don't need to search based on certain fields in the form, if it is more like an electronic version of a large paper form, then having a database field for each form field isn't helping you, unless you can build it all through cck, then the help comes from being able to build it all in the browser.

I've used about 10 different open source cms tools, I don't know any that would do what you are asking for concerning these large forms "out of the box".

jdugger’s picture

This is exactly my point. If there is no "out of the box" solution than I need to take a different approach. For most of the other uses of the intranet that I am building, Drupal "out-of-the-box" will work, until I get to these complex forms.

I absolutely agree that if you are just creating an electronic version of a paper form it is a huge outlay of time with little to no benefit. One of the premises of this intranet is to build the content database structure for the CMS to maximize the dynamic capability and relational interactivity of the content. What does this mean for my project relative to these complex forms? The following:

The project management portion of the intranet will be categorized By content types (i.e. telephone records, meeting minutes, memorandums, calendared events, and forms). It will be further sub-categorized by project topics (this is an engineering company so i.e. grading, drainage, utilities, coordination, permits, etc...). Project content will be entered into the CMS through the use of these content types. Query pages will then be created to enable viewing of project content by any of the categories listed. Therefore individual elements of the complex forms must be able to be queried and viewed along side the other content of the same category (i.e. all telephone records discussing grading, or all project content cataloged by drainage including items in forms of that category).

This is absolutely a big task and if there is no feasible way for Drupal core or any of its modules to build this content structure without delving into the php code, then I am prepared to build the database myself independent of Drupal. Ironically if I would have started 7 weeks ago when I seriously started with Drupal, I would have had the entire relational database structure normalized and built by now.

Thank you for clearing up the limits of the "out of the box" capabilities of Drupal and the perspective of other "out of the box" CMS open source projects. I will continue in my efforts to "get" the jargon and understand the structure.

peterx’s picture

Now I can see where you are headed, I know some stuff that will help you. I built something similar pre Drupal 6, in fact pre Drupal 4, and today would jump at Drupal to halve the work.

The first step is to understand how modules work so that you understand how they interact and what they can do. I suggest you allocate half a day to work through the module introductory tutorial at http://drupal.org/node/206753

For an example of a module developed along the lines of what you need, look at Storm: http://drupal.org/project/storm

Storm has interrelated content types. Each has forms for the content and some use lookups of other content types. There is jquery based dynamic lookups for auto completion. I think you will see a way where you can develop what you want using Drupal to simplify some of the work. If I was working on that old project again, I would use Drupal to remove 50 percent of the work.

There is a print to PDF module that might also help you. I had to handle both documents and PDFs created by hand offline. Trying to keep them in sync would be a pain. Today I would use Drupal and plug in the print to PDF module to eliminate the manual conversion.

Another big requirement that was never implemented in that old project was version control. Drupal already has versions for nodes. If every document type is a node type, you can version them then retrieve the document versions to satisfy point-in-time requirements.

petermoulding.com/web_architect

jdugger’s picture

Thanks for the additional information.

I will look into the Storm module, printing to PDF. I am looking at the help pages for module development and new forms using FAPI.

netwidget

justageek’s picture

I get a better feel for your needs, and I would still say that Drupal is a good choice, but that your idea to "build the database myself" is partially correct. Build your custom pieces as Drupal modules. If you are going to have to write code, then make use of the built in cck functionality where it works, the built in permissions model where is works, and use Drupal as your framework. You are still make a great choice beginning with Drupal.

As an example of successful "Drupal as a framework" projects, look at the civicrm.org folks, or this cool web app that recently launched, built in Drupal : strutta.com

If for some reason you decide to build completely from scratch and you still will use PHP, investigate frameworks like cakePHP or Yii which will give you a huge headstart.

jdugger’s picture

I really appreciate the direction. I will go to the the links you have recommended. I spent a good portion of the evening yesterday looking at the module development tutorial, and following the code examples. I was impressed with the systematic approach to the examples. It has helped tremendously with my understanding of PHP (it beats a dry book stuck back at the "Hello World" stage of the learning curve).

My direction at this point is to use the Drupal php framework and examples found in the forms api reference page at api.drupal.org to see if I can create a forms module that can add content in the CMS for the intranet. The key will be to set it up to use as many hooks as possible from key modules like CCK, permissions, etc. What I am vague on is what do I connect to in the database for the site. I know that Drupal saves most of the content as nodes. Most likely I assume that I will be either adding data tables to the database to provide a place to store the extended data, and then relate/link the new table(s) somehow to a new node to be created by the new form module and stored in the site's main node data table?

If I am going in the wrong direction, or there is additional tutorials or instructions for coding the connections, and extensions to the main database let me know.

Thanks again for the added direction.

justageek’s picture

Drupal will always connect to the database for you, and its database abstraction functions are always available for you to do inserts, update, selects, deletes, etc. So, you can easily write your own sql, get and save data. If you can work within the node concept life will be much easier.

If you don't mind pouring through code, I really love the ubercart system, which is a set of modules implementing a great ecommerce system in drupal. Ubercart has its own custom tables for much of its data, and it serves as a great example of how to "hook into" the node-base system and work with your own custom data. So, for example, a Product is a Drupal content type, and it stores basic info in a typical node fashion, but then there is a uc_products table that stores to core product data, and it contains a foreign key nid fields with the node id. So, having it as a node lets you do all the "node stuff" Drupal offers, it can be integrated with views, themed, related to other nodes, works with hundreds of other modules if necessary, etc. The uc_products module implements the hook_insert() callback, which takes the new node object as a parameter and then saves all the custom, related data into uc_products table.

I am not sure about the best way to implement a single large form that creates multiple different types of nodes, that will be interesting, but I know it can be done.

You might also download civicrm from civicrm.org, a similar product that is unique in that it is 1) standalone, 2) a drupal module system or 3) a Joomla module system. I'm not sure how the accomplished all of that, but I'm intrigued. The demo looks awesome is all I can say.

hope this helps, I enjoy talking about this and solving problems with Drupal. Plus, I was an electrical engineer and built plants and automation systems in a former life, so I understand engineering projects and processes.

jdugger’s picture

I've been out of commission for a few days but finally had some time to respond. I took a quick look at the civicrm earlier and I will take a look at the code.

Thanks again for the help and direction.

shyamala’s picture

If you do not need all the node related functionality like commenting, mail a friend etc and the information gathered needs to be used only for reporting, I suggest you build a custom module with a form and store the values in the database. You can also create you own reports in this module. To build the form you could continue to use Drupal's frame work - the FORM API.

francewhoa’s picture

One easy solution is to use the already made intranet called 'Open Atrium' read more at http://drupal.org/node/512524#comment-1850092

Loving back your Drupal community result in multiple benefits for you