diff --git a/docs/create.sql b/docs/create.sql index 7576a16f8..a7635766a 100644 --- a/docs/create.sql +++ b/docs/create.sql @@ -18,6 +18,7 @@ CREATE TABLE Article ( linkURL text, attachment varchar(255) default NULL, convertCarriageReturns int(11) NOT NULL default '0', + alignImage varchar(30) NOT NULL default 'left', PRIMARY KEY (widgetId) ) TYPE=MyISAM; @@ -26,12 +27,52 @@ CREATE TABLE Article ( # +# +# Table structure for table 'DownloadManager' +# + +CREATE TABLE DownloadManager ( + widgetId int(11) NOT NULL default '0', + paginateAfter int(11) NOT NULL default '50', + PRIMARY KEY (widgetId) +) TYPE=MyISAM; + +# +# Dumping data for table 'DownloadManager' +# + + +# +# Table structure for table 'DownloadManager_file' +# + +CREATE TABLE DownloadManager_file ( + downloadId int(11) NOT NULL default '0', + widgetId int(11) NOT NULL default '0', + fileTitle varchar(128) NOT NULL default 'untitled', + downloadFile varchar(255) default NULL, + groupToView int(11) NOT NULL default '2', + briefSynopsis varchar(255) default NULL, + dateUploaded int(11) default NULL, + sequenceNumber int(11) NOT NULL default '1', + alternateVersion1 varchar(255) default NULL, + alternateVersion2 varchar(255) default NULL, + PRIMARY KEY (downloadId) +) TYPE=MyISAM; + +# +# Dumping data for table 'DownloadManager_file' +# + + # # Table structure for table 'EventsCalendar' # CREATE TABLE EventsCalendar ( widgetId int(11) NOT NULL default '0', + calendarLayout varchar(30) NOT NULL default 'list', + paginateAfter int(11) NOT NULL default '50', PRIMARY KEY (widgetId) ) TYPE=MyISAM; @@ -246,6 +287,7 @@ CREATE TABLE SQLReport ( username varchar(255) default NULL, identifier varchar(255) default NULL, convertCarriageReturns int(11) NOT NULL default '0', + paginateAfter int(11) NOT NULL default '50', PRIMARY KEY (widgetId) ) TYPE=MyISAM; @@ -440,45 +482,49 @@ CREATE TABLE help ( # Dumping data for table 'help' # -INSERT INTO help VALUES (1,'WebGUI','English','Add/Edit','Page','Think of pages as containers for content. For instance, if you want to write a letter to the editor of your favorite magazine you\'d get out a notepad (or open a word processor) and start filling it with your thoughts. The same is true with WebGUI. Create a page, then add your content to the page.\r\n\r\nTitle\r\nThe title of the page is what your users will use to navigate through the site. Titles should be descriptive, but not very long.\r\n\r\nPage URL\r\nWhen you create a page a url for the page is generated based on the page title. If you are unhappy with the url that was chosen, you can change it here.\r\n\r\nMeta Tags\r\nMeta tags are used by some search engines to associate key words to a particular page. There is a great site called Meta Tag Builder that will help you build meta tags if you\'ve never done it before.\r\n\r\nAdvanced Users: If you have other things (like JavaScript) you usually put in the <head> area of your pages, you may put them here as well.\r\n\r\nUse default meta tags?\r\nIf you don\'t wish to specify meta tags yourself, WebGUI can generate meta tags based on the page title and your company\'s name. Check this box to enable the defaultly generated meta tags.\r\n\r\nStyle\r\nBy default, when you create a page, it inherits a few traits from its parent. One of those traits is style. Choose from the list of styles if you would like to change the appearance of this page. See Add Style for more details.\r\n\r\nIf you check the box below to the style pull-down menu, all of the pages below this page will take on the style you\'ve chosen for this page.\r\n\r\nOwner\r\nThe owner of a page is usually the person who created the page.\r\n\r\nOwner can view?\r\nCan the owner view the page or not?\r\n\r\nOwner can edit?\r\nCan the owner edit the page or not? Be careful, if you decide that the owner cannot edit the page and you do not belong to the page group, then you\'ll lose the ability to edit this page.\r\n\r\nGroup\r\nA group is assigned to every page for additional privilege control. Pick a group from the pull-down menu.\r\n\r\nGroup can view?\r\nCan members of this group view this page?\r\n\r\nGroup can edit?\r\nCan members of this group edit this page?\r\n\r\nAnybody can view?\r\nCan any visitor or member regardless of the group and owner view this page?\r\n\r\nAnybody can edit?\r\nCan any visitor or member regardless of the group and owner edit this page?\r\n\r\nYou can optionally give these privileges to all pages under this page.\r\n','0'); -INSERT INTO help VALUES (3,'WebGUI','English','Delete','Page','Deleting a page can create a big mess if you are uncertain about what you are doing. When you delete a page you are also deleting the content it contains, all sub-pages connected to this page, and all the content they contain. Be certain that you have already moved all the content you wish to keep before you delete a page.\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); -INSERT INTO help VALUES (4,'WebGUI','English','Delete','Style','When you delete a style all pages using that style will be reverted to the fail safe (default) style. To ensure uninterrupted viewing, you should be sure that no pages are using a style before you delete it.\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','4,5'); -INSERT INTO help VALUES (5,'WebGUI','English','Add/Edit','User','See Manage Users for additional details.\r\n\r\nUsername\r\nUsername is a unique identifier for a user. Sometimes called a handle, it is also how the user will be known on the site. (Note: Administrators have unlimited power in the WebGUI system. This also means they are capable of breaking the system. If you rename or create a user, be careful not to use a username already in existance.)\r\n\r\nPassword\r\nA password is used to ensure that the user is who s/he says s/he is.\r\n\r\nAuthentication Method\r\nSee Edit Settings for details.\r\n\r\nLDAP URL\r\nSee Edit Settings for details.\r\n\r\nConnect DN\r\nThe Connect DN is the cn (or common name) of a given user in your LDAP database. It should be specified as cn=John Doe. This is, in effect, the username that will be used to authenticate this user against your LDAP server.\r\n\r\nEmail Address\r\nThe user\'s email address. This must only be specified if the user will partake in functions that require email.\r\n\r\nGroups\r\nGroups displays which groups the user is in. Groups that are highlighted are groups that the user is assigned to. Those that are not highlighted are other groups that can be assigned. Note that you must hold down CTRL to select multiple groups.\r\n\r\nLanguage\r\nWhat language should be used to display system related messages.\r\n\r\nICQ UIN\r\nThe ICQ UIN is the \"User ID Number\" on the ICQ network. ICQ is a very popular instant messaging platform.\r\n\r\n','0'); -INSERT INTO help VALUES (7,'WebGUI','English','Delete','User','There is no need to ever actually delete a user. If you are concerned with locking out a user, then simply change their password. If you truely wish to delete a user, then please keep in mind that there are consequences. If you delete a user any content that they added to the site via widgets (like message boards and user contributions) will remain on the site. However, if another user tries to visit the deleted user\'s profile they will get an error message. Also if the user ever is welcomed back to the site, there is no way to give him/her access to his/her old content items except by re-adding the user to the users table manually.\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); -INSERT INTO help VALUES (8,'WebGUI','English','Manage','User','Users are the accounts in the system that are given rights to do certain things. There are two default users built into the system: Admin and Visitor.\r\n\r\nAdmin\r\nAdmin is exactly what you\'d expect. It is a user with unlimited rights in the WebGUI environment. If it can be done, this user has the rights to do it.\r\n\r\nVisitor\r\nVisitor is exactly the opposite of Admin. Visitor has no rights what-so-ever. By default any user who is not logged in is seen as the user Visitor.\r\n\r\nAdd a new user.\r\nClick on this to go to the add user screen.\r\n\r\nSearch\r\nYou can search users based on username and email address. You can do partial searches too if you like.','0'); -INSERT INTO help VALUES (9,'WebGUI','English','Manage','Style','Styles are used to manage the look and feel of your WebGUI pages. With WebGUI, you can have an unlimited number of styles, so your site can take on as many looks as you like. You could have some pages that look like your company\'s brochure, and some pages that look like Yahoo!®. You could even have some pages that look like pages in a book. Using style management, you have ultimate control over all your designs.\r\n\r\nThere are several styles built into WebGUI. The first of these are used by WebGUI can should not be edited or deleted. The last few are simply example styles and may be edited or deleted as you please.\r\n\r\nFail Safe\r\nWhen you delete a style that is still in use on some pages, the Fail Safe style will be applied to those pages. This style has a white background and simple navigation.\r\n\r\nMake Page Printable\r\nThis style is used if you place an ^r; macro on your pages and the user clicks on it. This style allows you to put a simple logo and copyright message on your printable pages.\r\n\r\nPackages\r\nThis style is used by the package management system.\r\n\r\nTrash / Clipboard\r\nThis style is used by the trash and clipboard system.\r\n\r\n
\r\n\r\nDemo Style\r\nThis is a sample design taken from a templates site (www.freewebtemplates.com).\r\n\r\nPlain Black Software (black) & (white)\r\nThese designs are used on the Plain Black site.\r\n\r\nYahoo!®\r\nThis is the design of the Yahoo!® site. (Used without permission.)\r\n\r\nWebGUI\r\nThis is a simple design featuring WebGUI logos.\r\n\r\n','4,5'); -INSERT INTO help VALUES (10,'WebGUI','English','Manage','Group','Groups are used to subdivide privileges and responsibilities within the WebGUI system. For instance, you may be building a site for a classroom situation. In that case you might set up a different group for each class that you teach. You would then apply those groups to the pages that are designed for each class.\r\n\r\nThere are four groups built into WebGUI. They are Admins, Content Managers, Visitors, and Registered Users.\r\n\r\nAdmins\r\nAdmins are users who have unlimited privileges within WebGUI. A user should only be added to the admin group if they oversee the system. Usually only one to three people will be added to this group.\r\n\r\nContent Managers\r\nContent managers are users who have privileges to add, edit, and delete content from various areas on the site. The content managers group should not be used to control individual content areas within the site, but to determine whether a user can edit content at all. You should set up additional groups to separate content areas on the site.\r\n\r\nRegistered Users\r\nWhen users are added to the system they are put into the registered users group. A user should only be removed from this group if their account is deleted or if you wish to punish a troublemaker.\r\n\r\nVisitors\r\nVisitors are users who are not logged in using an account on the system. Also, if you wish to punish a registered user you could remove him/her from the Registered Users group and insert him/her into the Visitors group.','0'); -INSERT INTO help VALUES (12,'WebGUI','English','Manage','Settings','Settings are items that allow you to adjust WebGUI to your particular needs.\r\n\r\nEdit Authentication Settings\r\nSettings concerning user identification and login, such as LDAP.\r\n\r\nEdit Company Information\r\nInformation specific about the company or individual who controls this installation of WebGUI.\r\n\r\nEdit File Settings\r\nSettings concerning attachments and images.\r\n\r\nEdit Mail Settings\r\nSettings concerning email and related functions.\r\n\r\nEdit Miscellaneous Settings\r\nEverything else.\r\n\r\n','7,8,9.10,11,12'); -INSERT INTO help VALUES (14,'WebGUI','English','Delete','Widget','This function permanently deletes the selected widget from a page. If you are unsure whether you wish to delete this content you may be better served to cut the content to the clipboard until you are certain you wish to delete it.\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); -INSERT INTO help VALUES (15,'WebGUI','English','Delete','Group','As the function suggests you\'ll be deleting a group and removing all users from the group. Be careful not to orphan users from pages they should have access to by deleting a group that is in use.\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); -INSERT INTO help VALUES (16,'WebGUI','English','Add/Edit','Style','Styles are WebGUI macro enabled. See Using Macros for more information.\r\n\r\nStyle Name\r\nA unique name to describe what this style looks like at a glance. The name has no effect on the actual look of the style.\r\n\r\nHeader\r\nThe header is the start of the look of your site. It is helpful to look at your design and cut it into three pieces. The top and left of your design is the header. The center part is the content, and the right and bottom is the footer. Cut the HTML from your header and paste it in the space provided.\r\n\r\nIf you are in need of assistance for creating a look for your site, or if you need help cutting apart your design, Plain Black Software provides support services for a small fee.\r\n\r\nMany people will add WebGUI macros to their header for automated navigation, and other features.\r\n\r\nFooter\r\nThe footer is the end of the look for your site. It is the right and bottom portion of your design. You may also place WebGUI macros in your footer.\r\n\r\nStyle Sheet\r\nPlace your style sheet entries here. Style sheets are used to control colors, sizes, and other properties of the elements on your site. See Using Style Sheets for more information.\r\n\r\nAdvanced Users: for greater performance create your stylesheet on the file system (call it something like webgui.css) and add an entry like this to this area: \r\n<link href=\"/webgui.css\" rel=\"stylesheet\" rev=\"stylesheet\" type=\"text/css\">','4,5'); -INSERT INTO help VALUES (17,'WebGUI','English','Add/Edit','Group','See Manage Group for a description of grouping functions and the default groups.\r\n\r\nGroup Name\r\nA name for the group. It is best if the name is descriptive so you know what it is at a glance.\r\n\r\nDescription\r\nA longer description of the group so that other admins and content managers (or you if you forget) will know what the purpose of this group is.','0'); -INSERT INTO help VALUES (24,'WebGUI','English','Edit','Miscellaneous Settings','Not Found Page\r\nIf a page that a user requests is not found in the system, the user can be redirected to the home page or to an error page where they can attempt to find what they were looking for. You decide which is better for your users.\r\n\r\nSession Timeout\r\nThe time (in seconds) that a user session remains active (before needing to log in again). This timeout is reset each time a visitor hits a page. Therefore if you set the timeout for 8 hours, a user would have to log in again if s/he hadn\'t visited the site for 8 hours.\r\n\r\n1800 = half hour\r\n3600 = 1 hour\r\n28000 = 8 hours\r\n86400 = 1 day\r\n604800 = 1 week\r\n1209600 = 2 weeks\r\n','6'); -INSERT INTO help VALUES (18,'WebGUI','English','Using','Style Sheets','Cascading Style Sheets (CSS) are a great way to manage the look and feel of any web site. They are used extensively in WebGUI.\r\n\r\nIf you are unfamiliar with how to use CSS, Plain Black Software provides training classes on XHTML and CSS. Alternatively, Bradsoft makes an excellent CSS editor called Top Style.\r\n\r\nThe following is a list of classes used to control the look of WebGUI:\r\n\r\nA\r\nThe links throughout the style.\r\n\r\nBODY\r\nThe default setup of all pages within a style.\r\n\r\nH1\r\nThe headers on every page.\r\n\r\n.accountOptions\r\nThe links that appear under the login and account update forms.\r\n\r\n.adminBar \r\nThe bar that appears at the top of the page when you\'re in admin mode.\r\n\r\n.content\r\nThe main content area on all pages of the style.\r\n\r\n.crumbTrail \r\nThe crumb trail (if you\'re using that macro).\r\n\r\n.formDescription \r\nThe tags on all forms next to the form elements. \r\n\r\n.formSubtext \r\nThe tags below some form elements.\r\n\r\n.highlight \r\nDenotes a highlighted item, such as which message you are viewing within a list.\r\n\r\n.homeLink\r\nUsed by the my home (^H;) macro.\r\n\r\n.horizontalMenu \r\nThe horizontal menu (if you use a horizontal menu macro).\r\n\r\n.loginBox\r\nThe login box (^L;) macro.\r\n\r\n.makePrintableLink\r\nUsed by the make printable (^r;) macro.\r\n\r\n.myAccountLink\r\nUsed by the my account (^a;) macro.\r\n\r\n.pagination \r\nThe Previous and Next links on pages with pagination.\r\n\r\n.searchBox\r\nUsed by the search (^?;) macro.\r\n\r\n.selectedMenuItem\r\nUsed by the FlexMenu (^FlexMenu;) macro.\r\n\r\n.tableData \r\nThe data rows on things like message boards and user contributions.\r\n\r\n.tableHeader \r\nThe headings of columns on things like message boards and user contributions.\r\n\r\n.tableMenu \r\nThe menu on things like message boards and user submissions.\r\n\r\n.verticalMenu \r\nThe vertical menu (if you use a verticall menu macro).\r\n\r\nNote: Some widgets have their own unique styles.\r\n\r\n','0'); -INSERT INTO help VALUES (19,'WebGUI','English','Using','Macros','WebGUI macros are used to create dynamic content within otherwise static content. For instance, you may wish to show which user is logged in on every page, or you may wish to have a dynamically built menu or crumb trail. \r\n\r\nMacros always begin with a carat (^) and follow with at least one other character and ended with w semicolon (;). Some macros can be extended/configured by taking the format of ^x(\"config text\");. The following is a description of all the macros in the WebGUI system.\r\n\r\n^a; or ^a(\"new link title\"); - My Account Link\r\nA link to your account information. In addition you can change the link text by creating a macro like this ^a(\"Account Info\");.\r\n\r\n^C; - Crumb Trail\r\nA dynamically generated crumb trail to the current page.\r\n\r\n^c; - Company Name\r\nThe name of your company specified in the settings by your Administrator.\r\n\r\n^D; or ^D(\"%c %D, %y\"); - Date\r\nThe current date and time.\r\n\r\nYou can configure the date by using date formatting symbols. For instance, if you created a macro like this ^D(\"%c %D, %y\"); it would output September 26, 2001. The following are the available date formatting symbols:\r\n\r\n %% = %\r\n %y = 4 digit year\r\n %Y = 2 digit year\r\n %m = 2 digit month\r\n %M = variable digit month\r\n %c = month name\r\n %d = 2 digit day of month\r\n %D = variable digit day of month\r\n %w = day of week name\r\n %h = 2 digit base 12 hour\r\n %H = variable digit base 12 hour\r\n %j = 2 digit base 24 hour\r\n %J = variable digit base 24 hour\r\n %p = lower case am/pm\r\n %P = upper case AM/PM\r\n\r\n^e; - Company Email Address\r\nThe email address for your company specified in the settings by your Administrator.\r\n\r\n^FlexMenu;\r\nThis menu macro creates a top-level menu that expands as the user selects each menu item.\r\n\r\n^H; or ^H(\"Go Home\"); - Home Link\r\nA link to the home page of this site. In addition you can change the link text by creating a macro like this ^H(\"Go Home\");.\r\n\r\n^L; - Login\r\nA small login form.\r\n\r\n^M; or ^M(3); - Current Menu (Vertical)\r\nA vertical menu containing the sub-pages at the current level. In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^M(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n\r\n^m; - Current Menu (Horizontal)\r\nA horizontal menu containing the sub-pages at the current level.\r\n\r\n^P; or ^P(3); - Previous Menu (Vertical)\r\nA vertical menu containing the sub-pages at the previous level. In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^P(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n\r\n^p; - Previous Menu (Horizontal)\r\nA horizontal menu containing the sub-pages at the previous level.\r\n\r\n^r; or ^r(\"Print Me!\"); - Make Page Printable\r\nCreates a link to remove the style from a page to make it printable. In addition, you can change the link text by creating a macro like this ^r(\"Print Me!\");.\r\n\r\n^S(\"home\",0); - Specific SubMenu (Vertical)\r\nThis macro allows you to get the submenu of any page, starting with the page you specified. For instance, you could get the home page submenu by creating a macro that looks like this ^S(\"home\",0);. The first value is the urlized title of the page and the second value is the depth you\'d like the menu to go. By default it will show only the first level. To go three levels deep create a macro like this ^S(\"home\",3);.\r\n\r\n^s(\"home\"); - Specific SubMenu (Horizontal)\r\nThis macro allows you to get the submenu of any page, starting with the page you specified. For instance, you could get the home page submenu by creating a macro that looks like this ^s(\"home\");. The value is the urlized title of the page.\r\n\r\n^T; or ^T(3); - Top Level Menu (Vertical)\r\nA vertical menu containing the main pages of the site (aka the sub-pages from the home page). In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^T(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n\r\n^t; - Top Level Menu (Horizontal)\r\nA vertical menu containing the main pages of the site (aka the sub-pages from the home page).\r\n\r\n^u; - Company URL\r\nThe URL for your company specified in the settings by your Administrator.\r\n\r\n^/; - System URL\r\nThe URL to the gateway script (including the domain for this site). This is often used within pages so that if your development server is on a domain different than your production server that your URLs will still worked when moved.\r\n\r\n^\\; - Page URL\r\nThe URL to the current page (including the domain for this site). This is often used within pages so that if your development server is on a domain different than your production server that your URLs will still worked when moved.\r\n\r\n^@; - Username\r\nThe username of the currently logged in user.\r\n\r\n^?; - Search\r\nAdd a search box.\r\n\r\n^#; - User ID\r\nThe user id of the currently logged in user.\r\n\r\n^*; or ^*(100); - Random Number\r\nA randomly generated number. This is often used on images (such as banner ads) that you want to ensure do not cache. In addition, you may configure this macro like this ^*(100); to create a random number between 0 and 100.\r\n\r\n^0;,^1;,^2;,^3;,^4;,^5;,^6;,^7;,^8;,^9;, ^-;\r\nThese macros are reserved for widget-specific functions as in the SQL Report widget.\r\n','0'); -INSERT INTO help VALUES (1,'SQLReport','English','Add/Edit','SQL Report','SQL Reports are perhaps the most powerful widget in the WebGUI arsenal. They allow a user to query data from any database that they have access to. This is great for getting sales figures from your Accounting database or even summarizing all the message boards on your web site.\r\n\r\nTitle\r\nThe title of this report.\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nDescribe the content of this report so your users will better understand what the report is all about.\r\n\r\nTemplate\r\nLayout a template of how this report should look. Usually you\'ll use HTML tables to generate a report. An example is included below.\r\n\r\nThere are 11 special macro characters used in generating SQL Reports. They are ^-;, ^0;, ^1;, ^2;, ^3;, ^4;, ^5;, ^6;, ^7;, ^8;, and ^9;. These macros will be processed regardless of whether you checked the process macros box above. The ^- macro represents split points in the document where the report will begin and end looping. The numeric macros represent the data fields that will be returned from your query. Note that you may only have 10 fields returned per row in your query.\r\n\r\nSample Template:\r\n<table>\r\n<tr><th>Employee Name</th><th>Employee #</th><th>Vacation Days Remaining</th><th>Monthly Salary</th></tr>\r\n^-;\r\n<tr><td>^0;</td><td>^1;</td><td>^2;</td><td>^3;</td></tr>\r\n^-;\r\n</table>\r\n\r\nQuery\r\nThis is a standard SQL query. If you are unfamiliar with SQL, Plain Black Software provides training courses in SQL and database management.\r\n\r\nDSN\r\nData Source Name is the unique identifier that Perl uses to describe the location of your database. It takes the format of DBI:[driver]:[database name]:[host]. \r\n\r\nExample: DBI:mysql:WebGUI:localhost\r\n\r\nDatabase User\r\nThe username you use to connect to the DSN.\r\n\r\nDatabase Password\r\nThe password you use to connect to the DSN.\r\n\r\nConvert carriage returns?\r\nDo you wish to convert the carriage returns in the resultant data to HTML breaks (<br>).\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (21,'WebGUI','English','Using','Widget','Widgets are the true power of WebGUI. Widgets are tiny pluggable applications built to run under WebGUI. Message boards and polls are examples of widgets.\r\n\r\nTo add a widget to a page, first go to that page, then select Add Content... from the upper left corner of your screen. Each widget has it\'s own help so be sure to read the help if you\'re not sure how to use a widget.\r\n','0'); -INSERT INTO help VALUES (1,'Article','English','Add/Edit','Article','Articles are the Swiss Army knife of WebGUI. Most pieces of static content can be added via the Article widget.\r\n\r\nTitle\r\nWhat\'s the title for this content? Even if you don\'t wish the title to appear, it\'s a good idea to title your content so that if it is ever copied to the clipboard it will have a name.\r\n\r\nDisplay the title?\r\nDo you wish to display the title listed above?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros on this article? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nStart Date\r\nWhat date do you want this article to appear on the site? Dates are in the format of MM/DD/YYYY. You can use the JavaScript wizard to choose your date from a calendar by clicking on the set date button. By default the date is set to 01/01/2000.\r\n\r\nEnd Date\r\nWhat date do you want this article to be removed from the site? By default the date is set to 100 years in the future, 01/01/2100.\r\n\r\nBody\r\nThe body of the article is where all the content goes. You may feel free to add HTML tags as necessary to format your content. Be sure to put a <p> between paragraphs to add white space to your content.\r\n\r\nImage\r\nChoose an image (.jpg, .gif, .png) file from your hard drive. This file will be uploaded to the server and displayed in the upper-right corner of your article.\r\n\r\nLink Title\r\nIf you wish to add a link to your article, enter the title of the link in this field. \r\n\r\nExample: Google\r\n\r\nLink URL\r\nIf you added a link title, now add the URL (uniform resource locator) here. \r\n\r\nExample: http://www.google.com\r\n\r\nAttachment\r\nIf you wish to attach a word processor file, a zip file, or any other file for download by your users, then choose it from your hard drive.\r\n\r\nConvert carriage returns?\r\nIf you\'re publishin HTML there\'s generally no need to check this option, but if you aren\'t using HTML and you want a carriage return every place you hit your \"Enter\" key, then check this option.\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (1,'ExtraColumn','English','Add/Edit','Extra Column','Extra columns allow you to change the layout of your page for one page only. If you wish to have multiple columns on all your pages. Perhaps you should consider altering the style applied to your pages. \r\n\r\nColumns are always added from left to right. Therefore any existing content will be on the left of the new column.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nSpacer\r\nSpacer is the amount of space between your existing content and your new column. It is measured in pixels.\r\n\r\nWidth\r\nWidth is the actual width of the new column to be added. Width is measured in pixels.\r\n\r\nStyleSheet Class\r\nBy default the content style (which is the style the body of your site should be using) that is applied to all columns. However, if you\'ve created a style specifically for columns, then feel free to modify this class.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'WebGUI','English','Add/Edit','Page','Think of pages as containers for content. For instance, if you want to write a letter to the editor of your favorite magazine you\'d get out a notepad (or open a word processor) and start filling it with your thoughts. The same is true with WebGUI. Create a page, then add your content to the page.\r\n

\r\nTitle
\r\nThe title of the page is what your users will use to navigate through the site. Titles should be descriptive, but not very long.\r\n

\r\nPage URL
\r\nWhen you create a page a url for the page is generated based on the page title. If you are unhappy with the url that was chosen, you can change it here.\r\n

\r\nMeta Tags
\r\nMeta tags are used by some search engines to associate key words to a particular page. There is a great site called Meta Tag Builder that will help you build meta tags if you\'ve never done it before.\r\n

\r\nAdvanced Users: If you have other things (like JavaScript) you usually put in the <head> area of your pages, you may put them here as well.\r\n

\r\nUse default meta tags?
\r\nIf you don\'t wish to specify meta tags yourself, WebGUI can generate meta tags based on the page title and your company\'s name. Check this box to enable the defaultly generated meta tags.\r\n

\r\nStyle
\r\nBy default, when you create a page, it inherits a few traits from its parent. One of those traits is style. Choose from the list of styles if you would like to change the appearance of this page. See Add Style for more details.\r\n

\r\nIf you check the box below to the style pull-down menu, all of the pages below this page will take on the style you\'ve chosen for this page.\r\n

\r\nOwner
\r\nThe owner of a page is usually the person who created the page.\r\n

\r\nOwner can view?
\r\nCan the owner view the page or not?\r\n

\r\nOwner can edit?
\r\nCan the owner edit the page or not? Be careful, if you decide that the owner cannot edit the page and you do not belong to the page group, then you\'ll lose the ability to edit this page.\r\n

\r\nGroup
\r\nA group is assigned to every page for additional privilege control. Pick a group from the pull-down menu.\r\n

\r\nGroup can view?
\r\nCan members of this group view this page?\r\n

\r\nGroup can edit?
\r\nCan members of this group edit this page?\r\n

\r\nAnybody can view?
\r\nCan any visitor or member regardless of the group and owner view this page?\r\n

\r\nAnybody can edit?
\r\nCan any visitor or member regardless of the group and owner edit this page?\r\n

\r\nYou can optionally give these privileges to all pages under this page.\r\n','0'); +INSERT INTO help VALUES (3,'WebGUI','English','Delete','Page','Deleting a page can create a big mess if you are uncertain about what you are doing. When you delete a page you are also deleting the content it contains, all sub-pages connected to this page, and all the content they contain. Be certain that you have already moved all the content you wish to keep before you delete a page.\r\n

\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (4,'WebGUI','English','Delete','Style','When you delete a style all pages using that style will be reverted to the fail safe (default) style. To ensure uninterrupted viewing, you should be sure that no pages are using a style before you delete it.\r\n

\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','4,5'); +INSERT INTO help VALUES (5,'WebGUI','English','Add/Edit','User','See Manage Users for additional details.\r\n

\r\n\r\nUsername
\r\nUsername is a unique identifier for a user. Sometimes called a handle, it is also how the user will be known on the site. (Note: Administrators have unlimited power in the WebGUI system. This also means they are capable of breaking the system. If you rename or create a user, be careful not to use a username already in existance.)\r\n

\r\n\r\nPassword
\r\nA password is used to ensure that the user is who s/he says s/he is.\r\n

\r\n\r\nAuthentication Method
\r\nSee Edit Settings for details.\r\n

\r\n\r\nLDAP URL
\r\nSee Edit Settings for details.\r\n

\r\n\r\nConnect DN
\r\nThe Connect DN is the cn (or common name) of a given user in your LDAP database. It should be specified as cn=John Doe. This is, in effect, the username that will be used to authenticate this user against your LDAP server.\r\n

\r\n\r\nEmail Address
\r\nThe user\'s email address. This must only be specified if the user will partake in functions that require email.\r\n

\r\n\r\nGroups
\r\nGroups displays which groups the user is in. Groups that are highlighted are groups that the user is assigned to. Those that are not highlighted are other groups that can be assigned. Note that you must hold down CTRL to select multiple groups.\r\n

\r\n\r\nLanguage
\r\nWhat language should be used to display system related messages.\r\n

\r\n\r\nICQ UIN
\r\nThe ICQ UIN is the \"User ID Number\" on the ICQ network. ICQ is a very popular instant messaging platform.\r\n\r\n','0'); +INSERT INTO help VALUES (7,'WebGUI','English','Delete','User','There is no need to ever actually delete a user. If you are concerned with locking out a user, then simply change their password. If you truely wish to delete a user, then please keep in mind that there are consequences. If you delete a user any content that they added to the site via widgets (like message boards and user contributions) will remain on the site. However, if another user tries to visit the deleted user\'s profile they will get an error message. Also if the user ever is welcomed back to the site, there is no way to give him/her access to his/her old content items except by re-adding the user to the users table manually.\r\n

\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (8,'WebGUI','English','Manage','User','Users are the accounts in the system that are given rights to do certain things. There are two default users built into the system: Admin and Visitor.\r\n

\r\n\r\nAdmin
\r\nAdmin is exactly what you\'d expect. It is a user with unlimited rights in the WebGUI environment. If it can be done, this user has the rights to do it.\r\n

\r\n\r\nVisitor
\r\nVisitor is exactly the opposite of Admin. Visitor has no rights what-so-ever. By default any user who is not logged in is seen as the user Visitor.\r\n

\r\n\r\nAdd a new user.
\r\nClick on this to go to the add user screen.\r\n

\r\n\r\nSearch
\r\nYou can search users based on username and email address. You can do partial searches too if you like.','0'); +INSERT INTO help VALUES (9,'WebGUI','English','Manage','Style','Styles are used to manage the look and feel of your WebGUI pages. With WebGUI, you can have an unlimited number of styles, so your site can take on as many looks as you like. You could have some pages that look like your company\'s brochure, and some pages that look like Yahoo!®. You could even have some pages that look like pages in a book. Using style management, you have ultimate control over all your designs.\r\n

\r\n\r\nThere are several styles built into WebGUI. The first of these are used by WebGUI can should not be edited or deleted. The last few are simply example styles and may be edited or deleted as you please.\r\n

\r\n\r\nFail Safe
\r\nWhen you delete a style that is still in use on some pages, the Fail Safe style will be applied to those pages. This style has a white background and simple navigation.\r\n

\r\n\r\nMake Page Printable
\r\nThis style is used if you place an ^r; macro on your pages and the user clicks on it. This style allows you to put a simple logo and copyright message on your printable pages.\r\n

\r\n\r\nPackages
\r\nThis style is used by the package management system.\r\n

\r\n\r\nTrash / Clipboard
\r\nThis style is used by the trash and clipboard system.\r\n

\r\n\r\n


\r\n

\r\n\r\nDemo Style
\r\nThis is a sample design taken from a templates site (www.freewebtemplates.com).\r\n

\r\n\r\nPlain Black Software (black) & (white)
\r\nThese designs are used on the Plain Black site.\r\n

\r\n\r\nYahoo!®
\r\nThis is the design of the Yahoo!® site. (Used without permission.)\r\n

\r\n\r\nWebGUI
\r\nThis is a simple design featuring WebGUI logos.\r\n\r\n','4,5'); +INSERT INTO help VALUES (10,'WebGUI','English','Manage','Group','Groups are used to subdivide privileges and responsibilities within the WebGUI system. For instance, you may be building a site for a classroom situation. In that case you might set up a different group for each class that you teach. You would then apply those groups to the pages that are designed for each class.\r\n

\r\n\r\nThere are four groups built into WebGUI. They are Admins, Content Managers, Visitors, and Registered Users.\r\n

\r\n\r\nAdmins
\r\nAdmins are users who have unlimited privileges within WebGUI. A user should only be added to the admin group if they oversee the system. Usually only one to three people will be added to this group.\r\n

\r\n\r\nContent Managers
\r\nContent managers are users who have privileges to add, edit, and delete content from various areas on the site. The content managers group should not be used to control individual content areas within the site, but to determine whether a user can edit content at all. You should set up additional groups to separate content areas on the site.\r\n

\r\n\r\nRegistered Users
\r\nWhen users are added to the system they are put into the registered users group. A user should only be removed from this group if their account is deleted or if you wish to punish a troublemaker.\r\n

\r\n\r\nVisitors
\r\nVisitors are users who are not logged in using an account on the system. Also, if you wish to punish a registered user you could remove him/her from the Registered Users group and insert him/her into the Visitors group.','0'); +INSERT INTO help VALUES (12,'WebGUI','English','Manage','Settings','Settings are items that allow you to adjust WebGUI to your particular needs.\r\n

\r\n\r\nEdit Authentication Settings
\r\nSettings concerning user identification and login, such as LDAP.\r\n

\r\n\r\nEdit Company Information
\r\nInformation specific about the company or individual who controls this installation of WebGUI.\r\n

\r\n\r\nEdit File Settings
\r\nSettings concerning attachments and images.\r\n

\r\n\r\nEdit Mail Settings
\r\nSettings concerning email and related functions.\r\n

\r\n\r\nEdit Miscellaneous Settings
\r\nEverything else.\r\n\r\n','7,8,9.10,11,12'); +INSERT INTO help VALUES (14,'WebGUI','English','Delete','Widget','This function permanently deletes the selected widget from a page. If you are unsure whether you wish to delete this content you may be better served to cut the content to the clipboard until you are certain you wish to delete it.\r\n

\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (15,'WebGUI','English','Delete','Group','As the function suggests you\'ll be deleting a group and removing all users from the group. Be careful not to orphan users from pages they should have access to by deleting a group that is in use.\r\n

\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (16,'WebGUI','English','Add/Edit','Style','Styles are WebGUI macro enabled. See Using Macros for more information.\r\n

\r\n\r\nStyle Name
\r\nA unique name to describe what this style looks like at a glance. The name has no effect on the actual look of the style.\r\n

\r\n\r\nHeader
\r\nThe header is the start of the look of your site. It is helpful to look at your design and cut it into three pieces. The top and left of your design is the header. The center part is the content, and the right and bottom is the footer. Cut the HTML from your header and paste it in the space provided.\r\n

\r\n\r\nIf you are in need of assistance for creating a look for your site, or if you need help cutting apart your design, Plain Black Software provides support services for a small fee.\r\n

\r\n\r\nMany people will add WebGUI macros to their header for automated navigation, and other features.\r\n

\r\n\r\nFooter
\r\nThe footer is the end of the look for your site. It is the right and bottom portion of your design. You may also place WebGUI macros in your footer.\r\n

\r\n\r\nStyle Sheet
\r\nPlace your style sheet entries here. Style sheets are used to control colors, sizes, and other properties of the elements on your site. See Using Style Sheets for more information.\r\n

\r\n\r\nAdvanced Users: for greater performance create your stylesheet on the file system (call it something like webgui.css) and add an entry like this to this area: \r\n<link href=\"/webgui.css\" rel=\"stylesheet\" rev=\"stylesheet\" type=\"text/css\">','4,5'); +INSERT INTO help VALUES (17,'WebGUI','English','Add/Edit','Group','See Manage Group for a description of grouping functions and the default groups.\r\n

\r\n\r\nGroup Name
\r\nA name for the group. It is best if the name is descriptive so you know what it is at a glance.\r\n

\r\n\r\nDescription
\r\nA longer description of the group so that other admins and content managers (or you if you forget) will know what the purpose of this group is.','0'); +INSERT INTO help VALUES (24,'WebGUI','English','Edit','Miscellaneous Settings','Not Found Page
\r\nIf a page that a user requests is not found in the system, the user can be redirected to the home page or to an error page where they can attempt to find what they were looking for. You decide which is better for your users.\r\n

\r\n\r\nSession Timeout
\r\nThe time (in seconds) that a user session remains active (before needing to log in again). This timeout is reset each time a visitor hits a page. Therefore if you set the timeout for 8 hours, a user would have to log in again if s/he hadn\'t visited the site for 8 hours.\r\n

\r\n\r\n1800 = half hour
\r\n3600 = 1 hour
\r\n28000 = 8 hours
\r\n86400 = 1 day
\r\n604800 = 1 week
\r\n1209600 = 2 weeks
\r\n','6'); +INSERT INTO help VALUES (18,'WebGUI','English','Using','Style Sheets','Cascading Style Sheets (CSS) are a great way to manage the look and feel of any web site. They are used extensively in WebGUI.\r\n

\r\n\r\nIf you are unfamiliar with how to use CSS, Plain Black Software provides training classes on XHTML and CSS. Alternatively, Bradsoft makes an excellent CSS editor called Top Style.\r\n

\r\n\r\nThe following is a list of classes used to control the look of WebGUI:\r\n

\r\n\r\nA
\r\nThe links throughout the style.\r\n

\r\n\r\nBODY
\r\nThe default setup of all pages within a style.\r\n

\r\n\r\nH1
\r\nThe headers on every page.\r\n

\r\n\r\n.accountOptions
\r\nThe links that appear under the login and account update forms.\r\n

\r\n\r\n.adminBar
\r\nThe bar that appears at the top of the page when you\'re in admin mode.\r\n

\r\n\r\n.content
\r\nThe main content area on all pages of the style.\r\n

\r\n\r\n.crumbTrail
\r\nThe crumb trail (if you\'re using that macro).\r\n

\r\n\r\n.formDescription
\r\nThe tags on all forms next to the form elements. \r\n

\r\n\r\n.formSubtext
\r\nThe tags below some form elements.\r\n

\r\n\r\n.highlight
\r\nDenotes a highlighted item, such as which message you are viewing within a list.\r\n

\r\n\r\n.homeLink
\r\nUsed by the my home (^H;) macro.\r\n

\r\n\r\n.horizontalMenu
\r\nThe horizontal menu (if you use a horizontal menu macro).\r\n

\r\n\r\n.loginBox
\r\nThe login box (^L;) macro.\r\n

\r\n\r\n.makePrintableLink
\r\nUsed by the make printable (^r;) macro.\r\n

\r\n\r\n.myAccountLink
\r\nUsed by the my account (^a;) macro.\r\n

\r\n\r\n.pagination
\r\nThe Previous and Next links on pages with pagination.\r\n

\r\n\r\n.searchBox
\r\nUsed by the search (^?;) macro.\r\n

\r\n\r\n.selectedMenuItem
\r\nUsed by the FlexMenu (^FlexMenu;) macro.\r\n

\r\n\r\n.tableData
\r\nThe data rows on things like message boards and user contributions.\r\n

\r\n\r\n.tableHeader
\r\nThe headings of columns on things like message boards and user contributions.\r\n

\r\n\r\n.tableMenu
\r\nThe menu on things like message boards and user submissions.\r\n

\r\n\r\n.verticalMenu
\r\nThe vertical menu (if you use a verticall menu macro).\r\n

\r\n\r\nNote: Some widgets have their own unique styles.\r\n\r\n','0'); +INSERT INTO help VALUES (19,'WebGUI','English','Using','Macros','WebGUI macros are used to create dynamic content within otherwise static content. For instance, you may wish to show which user is logged in on every page, or you may wish to have a dynamically built menu or crumb trail. \r\n

\r\nMacros always begin with a carat (^) and follow with at least one other character and ended with w semicolon (;). Some macros can be extended/configured by taking the format of ^x(\"config text\");. The following is a description of all the macros in the WebGUI system.\r\n

\r\n^a; or ^a(); - My Account Link
\r\nA link to your account information. In addition you can change the link text by creating a macro like this ^a(\"Account Info\");.\r\n

\r\n^C; - Crumb Trail
\r\nA dynamically generated crumb trail to the current page.\r\n

\r\n^c; - Company Name
\r\nThe name of your company specified in the settings by your Administrator.\r\n

\r\n^D; or ^D(); - Date
\r\nThe current date and time.\r\n

\r\nYou can configure the date by using date formatting symbols. For instance, if you created a macro like this ^D(\"%c %D, %y\"); it would output September 26, 2001. The following are the available date formatting symbols:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
%% = %\r\n
%y4 digit year
%Y2 digit year
%m2 digit month
%Mvariable digit month
%cmonth name
%d2 digit day of month
%Dvariable digit day of month
%wday of week name
%h2 digit base 12 hour
%Hvariable digit base 12 hour
%j2 digit base 24 hour
%Jvariable digit base 24 hour
%plower case am/pm
%Pupper case AM/PM
\r\n

\r\n^e; - Company Email Address
\r\nThe email address for your company specified in the settings by your Administrator.\r\n

\r\n^Execute();
\r\nAllows a content manager or administrator to execute an external program. Takes the format of ^Execute(\"/this/file.sh\");.\r\n

\r\n^FlexMenu;
\r\nThis menu macro creates a top-level menu that expands as the user selects each menu item.\r\n

\r\n^H; or ^H(); - Home Link
\r\nA link to the home page of this site. In addition you can change the link text by creating a macro like this ^H(\"Go Home\");.\r\n

\r\n^I(); - Image Manager Image with Tag
\r\nThis macro returns an image tag with the parameters for an image defined in the image manager. Specify the name of the image using a tag like this ^I(\"imageName\");.\r\n

\r\n^i(); - Image Manager Image Path
\r\nThis macro returns the path of an image uploaded using the Image Manager. Specify the name of the image using a tag like this ^i(\"imageName\");.\r\n

\r\n^Include();
\r\nAllows a content manager or administrator to include a file from the local filesystem. Takes the format of ^Include(\"/this/file.html\");\r\n

\r\n^L; - Login
\r\nA small login form.\r\n

\r\n^M; or ^M(); - Current Menu (Vertical)
\r\nA vertical menu containing the sub-pages at the current level. In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^M(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n

\r\n^m; - Current Menu (Horizontal)
\r\nA horizontal menu containing the sub-pages at the current level.\r\n

\r\n^P; or ^P(); - Previous Menu (Vertical)
\r\nA vertical menu containing the sub-pages at the previous level. In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^P(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n

\r\n^p; - Previous Menu (Horizontal)
\r\nA horizontal menu containing the sub-pages at the previous level.\r\n

\r\n^PageTitle;
\r\nDisplays the title of the current page.\r\n

\r\n^r; or ^r(); - Make Page Printable
\r\nCreates a link to remove the style from a page to make it printable. In addition, you can change the link text by creating a macro like this ^r(\"Print Me!\");.\r\n

\r\n^S(); - Specific SubMenu (Vertical)
\r\nThis macro allows you to get the submenu of any page, starting with the page you specified. For instance, you could get the home page submenu by creating a macro that looks like this ^S(\"home\",0);. The first value is the urlized title of the page and the second value is the depth you\'d like the menu to go. By default it will show only the first level. To go three levels deep create a macro like this ^S(\"home\",3);.\r\n

\r\n^s(); - Specific SubMenu (Horizontal)
\r\nThis macro allows you to get the submenu of any page, starting with the page you specified. For instance, you could get the home page submenu by creating a macro that looks like this ^s(\"home\");. The value is the urlized title of the page.\r\n

\r\n^T; or ^T(); - Top Level Menu (Vertical)
\r\nA vertical menu containing the main pages of the site (aka the sub-pages from the home page). In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^T(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n

\r\n^t; - Top Level Menu (Horizontal)
\r\nA vertical menu containing the main pages of the site (aka the sub-pages from the home page).\r\n

\r\n^u; - Company URL
\r\nThe URL for your company specified in the settings by your Administrator.\r\n

\r\n^/; - System URL
\r\nThe URL to the gateway script (including the domain for this site). This is often used within pages so that if your development server is on a domain different than your production server that your URLs will still worked when moved.\r\n

\r\n^\\; - Page URL
\r\nThe URL to the current page (including the domain for this site). This is often used within pages so that if your development server is on a domain different than your production server that your URLs will still worked when moved.\r\n

\r\n^@; - Username
\r\nThe username of the currently logged in user.\r\n

\r\n^?; - Search
\r\nAdd a search box.\r\n

\r\n^#; - User ID
\r\nThe user id of the currently logged in user.\r\n

\r\n^*; or ^*(); - Random Number
\r\nA randomly generated number. This is often used on images (such as banner ads) that you want to ensure do not cache. In addition, you may configure this macro like this ^*(100); to create a random number between 0 and 100.\r\n

\r\n^-;,^0;,^1;,^2;,^3;, etc.
\r\nThese macros are reserved for widget-specific functions as in the SQL Report widget.\r\n','0'); +INSERT INTO help VALUES (1,'SQLReport','English','Add/Edit','SQL Report','SQL Reports are perhaps the most powerful widget in the WebGUI arsenal. They allow a user to query data from any database that they have access to. This is great for getting sales figures from your Accounting database or even summarizing all the message boards on your web site.\r\n

\r\n\r\nTitle
\r\nThe title of this report.\r\n

\r\n\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\n\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\n\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\n\r\nDescription
\r\nDescribe the content of this report so your users will better understand what the report is all about.\r\n

\r\n\r\nTemplate
\r\nLayout a template of how this report should look. Usually you\'ll use HTML tables to generate a report. An example is included below. If you leave this field blank a template will be generated based on your result set.\r\n

\r\n\r\nThere are special macro characters used in generating SQL Reports. They are ^-;, ^0;, ^1;, ^2;, ^3;, etc. These macros will be processed regardless of whether you checked the process macros box above. The ^- macro represents split points in the document where the report will begin and end looping. The numeric macros represent the data fields that will be returned from your query.\r\n

\r\n

\r\nSample Template:\r\n<table>\r\n<tr><th>Employee Name</th><th>Employee #</th><th>Vacation Days Remaining</th><th>Monthly Salary</th></tr>\r\n^-;\r\n<tr><td>^0;</td><td>^1;</td><td>^2;</td><td>^3;</td></tr>\r\n^-;\r\n</table>\r\n
\r\nQuery
\r\nThis is a standard SQL query. If you are unfamiliar with SQL, Plain Black Software provides training courses in SQL and database management.\r\n

\r\n\r\nDSN
\r\nData Source Name is the unique identifier that Perl uses to describe the location of your database. It takes the format of DBI:[driver]:[database name]:[host]. \r\n

\r\n\r\nExample: DBI:mysql:WebGUI:localhost\r\n

\r\n\r\nDatabase User\r\nThe username you use to connect to the DSN.\r\n

\r\n\r\nDatabase Password\r\nThe password you use to connect to the DSN.\r\n

\r\n\r\nPaginate After\r\nHow many rows should be displayed before splitting the results into separate pages? In other words, how many rows should be displayed per page?\r\n

\r\n\r\nConvert carriage returns?\r\nDo you wish to convert the carriage returns in the resultant data to HTML breaks (<br>).\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (21,'WebGUI','English','Using','Widget','Widgets are the true power of WebGUI. Widgets are tiny pluggable applications built to run under WebGUI. Message boards and polls are examples of widgets.\r\n

\r\nTo add a widget to a page, first go to that page, then select Add Content... from the upper left corner of your screen. Each widget has it\'s own help so be sure to read the help if you\'re not sure how to use a widget.\r\n','0'); +INSERT INTO help VALUES (1,'Article','English','Add/Edit','Article','Articles are the Swiss Army knife of WebGUI. Most pieces of static content can be added via the Article widget.\r\n

\r\nTitle
\r\nWhat\'s the title for this content? Even if you don\'t wish the title to appear, it\'s a good idea to title your content so that if it is ever copied to the clipboard it will have a name.\r\n

\r\nDisplay the title?
\r\nDo you wish to display the title listed above?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros on this article? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nStart Date
\r\nWhat date do you want this article to appear on the site? Dates are in the format of MM/DD/YYYY. You can use the JavaScript wizard to choose your date from a calendar by clicking on the set date button. By default the date is set to 01/01/2000.\r\n

\r\nEnd Date
\r\nWhat date do you want this article to be removed from the site? By default the date is set to 100 years in the future, 01/01/2100.\r\n

\r\nBody
\r\nThe body of the article is where all the content goes. You may feel free to add HTML tags as necessary to format your content. Be sure to put a <p> between paragraphs to add white space to your content.\r\n

\r\nImage
\r\nChoose an image (.jpg, .gif, .png) file from your hard drive. This file will be uploaded to the server and displayed in the upper-right corner of your article.\r\n

\r\nLink Title
\r\nIf you wish to add a link to your article, enter the title of the link in this field. \r\n

\r\nExample: Google\r\n

\r\nLink URL
\r\nIf you added a link title, now add the URL (uniform resource locator) here. \r\n

\r\nExample: http://www.google.com\r\n

\r\nAttachment
\r\nIf you wish to attach a word processor file, a zip file, or any other file for download by your users, then choose it from your hard drive.\r\n

\r\nConvert carriage returns?

\r\nIf you\'re publishin HTML there\'s generally no need to check this option, but if you aren\'t using HTML and you want a carriage return every place you hit your \"Enter\" key, then check this option.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'ExtraColumn','English','Add/Edit','Extra Column','Extra columns allow you to change the layout of your page for one page only. If you wish to have multiple columns on all your pages. Perhaps you should consider altering the style applied to your pages. \r\n

\r\nColumns are always added from left to right. Therefore any existing content will be on the left of the new column.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nSpacer
\r\nSpacer is the amount of space between your existing content and your new column. It is measured in pixels.\r\n

\r\nWidth
\r\nWidth is the actual width of the new column to be added. Width is measured in pixels.\r\n

\r\nStyleSheet Class
\r\nBy default the content style (which is the style the body of your site should be using) that is applied to all columns. However, if you\'ve created a style specifically for columns, then feel free to modify this class.\r\n','1,2,3,4,5'); INSERT INTO help VALUES (27,'WebGUI','English','Add/Edit','Widget','You can add widgets by selecting from the Add Content pulldown menu. You can edit them by clicking on the \"Edit\" button that appears directly above an instance of a particular widget.','0'); -INSERT INTO help VALUES (1,'Poll','English','Add/Edit','Poll','Polls can be used to get the impressions of your users on various topics.\r\n\r\nTitle\r\nThe title of the poll. Even if you don\'t wish to display the title you should fill out this field so this poll will have a name if it is ever placed in the clipboard.\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nYou may provide a description for this poll, or give the user some background information.\r\n\r\nActive\r\nIf this box is checked, then users will be able to vote. Otherwise they\'ll only be able to see the results of the poll.\r\n\r\nWho can vote?\r\nChoose a group that can vote on this poll.\r\n\r\nGraph Width\r\nThe width of the poll results graph. The width is measured in pixels.\r\n\r\nQuestion\r\nWhat is the question you\'d like to ask your users?\r\n\r\nAnswers\r\nEnter the possible answers to your question. Enter only one answer per line. Polls are only capable of 20 possible answers.\r\n\r\nReset votes.\r\nReset the votes on this poll.\r\n\r\n


\r\nNote: The following style sheet entries are custom to the Poll widget:\r\n\r\n.pollAnswer \r\nAn answer on a poll.\r\n\r\n.pollColor \r\nThe color of the percentage bar on a poll.\r\n\r\n.pollQuestion \r\nThe question on a poll.\r\n\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (1,'SiteMap','English','Add/Edit','Site Map','Site maps are used to provide additional navigation in WebGUI. You could set up a traditional site map that would display a hierarchical view of all the pages in the site. On the other hand, you could use site maps to provide extra navigation at certain levels in your site.\r\n\r\nTitle\r\nWhat title would you give to this site map? You should fill this field out even if you don\'t wish it to be displayed.\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nEnter a description as to why this site map is here and what purpose it serves.\r\n\r\nStarting from this level?\r\nIf the site map should display the page tree starting from this level, then check this box. If you wish the site map to start from the home page then uncheck it.\r\n\r\nShow only one level?\r\nShould the site map display only the current level of pages or all pages from this point forward? \r\n','1,2,3,4,5'); -INSERT INTO help VALUES (1,'MessageBoard','English','Add/Edit','Message Board','Message boards, also called Forums and/or Discussions, are a great way to add community to any site or intranets. Many companies use message boards internally to collaborate on projects.\r\n\r\nTitle\r\nThe name of this board.\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nBriefly describe what should be displayed on this message board.\r\n\r\nWho can post?\r\nWhat group can post to this message board?\r\n\r\nMessages Per Page\r\nWhen a visitor first comes to a message board s/he will be presented with a listing of all the topics (aka threads) of the message board. If a board is popular, it will quickly have many topics. The messages per page attribute allows you to specify how many topics should be shown on one page.\r\n\r\nEdit Timeout\r\nHow long after a user has posted to the board will their message be available for them to edit. This timeout is measured in hours.\r\n\r\nNote: Don\'t set this limit too high. One of the great things about message boards is that they are an accurate record of a discussion. If you allow editing for a long time, then a user has a chance to go back and change his/her mind a long time after the original statement was made.\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (1,'LinkList','English','Add/Edit','Link List','Link lists are just what they sound like, a list of links. Many sites have a links section, and this just automates the process.\r\n\r\nTitle\r\nWhat is the title of this link list?\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nDescribe the purpose of the links in this list.\r\n\r\nProceed to add link?\r\nLeave this checked if you want to add links to the link list directly after creating it.\r\n\r\nAdding / Editing Links\r\nYou\'ll notice at the bottom of the Edit screen that there are some options to add, edit, delete and reorder the links in your link lists. This process works exactly as the process for doing the same with widgets and pages. The three properties of links are name, url, and description.\r\n\r\nStyle\r\nAn extra StyleSheet class has been added to this widget: linkTitle. Use this to bold, colorize, or otheriwise manipulate the title of each link.','1,2,3,4,5'); -INSERT INTO help VALUES (13,'WebGUI','English','Edit','Mail Settings','Recover Password Message\r\nThe message that gets sent to a user when they use the \"recover password\" function.\r\n\r\nSMTP Server\r\nThis is the address of your local mail server. It is needed for all features that use the Internet email system (such as password recovery).\r\n\r\n','6'); -INSERT INTO help VALUES (1,'SyndicatedContent','English','Add/Edit','Syndicated Content','Syndicated content is content that is pulled from another site using the RDF/RSS specification. This technology is often used to pull headlines from various news sites like CNN and Slashdot. It can, of course, be used for other things like sports scores, stock market info, etc.\r\n\r\nYou can find a list of syndicated content at http://my.userland.com. You will need to register with an account to browse their listing of content. Also, the list contained there is by no means a complete list of all the syndicated content on the internet.\r\n\r\nTitle\r\nWhat is the title for this content? This is often the title of the site that the content comes from.\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nBriefly describe the content being pulled so that your users will know what they are seeing.\r\n\r\nURL to RSS file\r\nProvide the exact URL (starting with http://) to the syndicated content\'s RDF or RSS file. The syndicated content will be downloaded from this URL hourly.','1,2,3,4,5'); -INSERT INTO help VALUES (1,'EventsCalendar','English','Add/Edit','Events Calendar','Events calendars are used on many intranets to keep track of internal dates that affect a whole organization. Also events calendars on consumer sites are a great way to let your customers know what events you\'ll be attending and what promotions you\'ll be having.\r\n\r\nTitle\r\nWhat is the title of this events calendar?\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nBriefly describe what this events calendar details.\r\n\r\nProceed to add event?\r\nLeave this checked if you want to add events to the events calendar directly after creating it.\r\n\r\nAdd / Edit Events\r\nOn the edit screen you\'ll notice that there are options to add, edit, and delete the events in your events calendar. The properties for events are name, description, start date, and end date.\r\n\r\nNote: Events that have already happened will not be displayed on the events calendar.\r\n\r\n
\r\nNote: The following style is specific to the Events Calendar.\r\n\r\n.eventTitle \r\nThe title of an individual event.\r\n\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (1,'FAQ','English','Add/Edit','F.A.Q.','It seems that almost every web site, intranet, and extranet in the world has a frequently asked questions area. This widget helps you build one too.\r\n\r\nTitle\r\nWhat is the title for this FAQ section?\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nBriefly describe what this FAQ covers.\r\n\r\nProceed to add question?\r\nLeave this checked if you want to add questions to the FAQ directly after creating it.\r\n\r\nAdd / Edit Questions\r\nOn the edit screen you\'ll notice options for adding, editing, deleting, and reordering the questions in your FAQ. The two properties of FAQ questions are question and answer.\r\n\r\n
\r\nNote: The following style is specific to the FAQ widget.\r\n\r\n.faqQuestion\r\nAn F.A.Q. question. To distinguish it from an answer.\r\n\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (11,'WebGUI','English','Edit','File Settings','Path to WebGUI Extras\r\nThe web-path to the directory containing WebGUI images and javascript files.\r\n\r\nMaximum Attachment Size\r\nThe maximum size of files allowed to be uploaded to this site. This applies to all widgets that allow uploaded files and images (like Article and User Contributions). This size is measured in kilobytes.\r\n\r\nWeb Attachment Path\r\nThe web-path of the directory where attachments are to be stored.\r\n\r\nServer Attachment Path\r\nThe local path of the directory where attachments are to be stored. (Perhaps /var/www/public/uploads) Be sure that the web server has the rights to write to that directory.\r\n','6'); -INSERT INTO help VALUES (2,'WebGUI','English','Edit','Authentication Settings','Anonymous Registration\r\nDo you wish visitors to your site to be able to register themselves?\r\n\r\nAuthentication Method (default)\r\nWhat should the default authentication method be for new accounts that are created? The two available options are WebGUI and LDAP. WebGUI authentication means that the users will authenticate against the username and password stored in the WebGUI database. LDAP authentication means that users will authenticate against an external LDAP server.\r\n\r\nNote: Authentication settings can be customized on a per user basis.\r\n\r\nUsername Binding\r\nBind the WebGUI username to the LDAP Identity. This requires the user to have the same username in WebGUI as they specified during the Anonymous Registration process. It also means that they won\'t be able to change their username later. This only in effect if the user is authenticating against LDAP.\r\n\r\nLDAP URL (default)\r\nThe default url to your LDAP server. The LDAP URL takes the form of ldap://[server]:[port]/[base DN]. Example: ldap://ldap.mycompany.com:389/o=MyCompany.\r\n\r\nLDAP Identity\r\nThe LDAP Identity is the unique identifier in the LDAP server that the user will be identified against. Often this field is shortname, which takes the form of first initial + last name. Example: jdoe. Therefore if you specify the LDAP identity to be shortname then Jon Doe would enter jdoe during the registration process.\r\n\r\nLDAP Identity Name\r\nThe label used to describe the LDAP Identity to the user. For instance, some companies use an LDAP server for their proxy server users to authenticate against. In the documentation or training already provided to their users, the LDAP identity is known as their Web Username. So you could enter that label here for consitency.\r\n\r\nLDAP Password Name\r\nJust as the LDAP Identity Name is a label, so is the LDAP Password Name. Use this label as you would LDAP Identity Name.\r\n\r\n','6'); -INSERT INTO help VALUES (1,'UserSubmission','English','Add/Edit','User Submission System','User submission systems are a great way to add a sense of community to any site as well as get free content from your users.\r\n\r\nTitle\r\nWhat is the title for this user submission system?\r\n\r\nDisplay the title?\r\nDo you wish to disply the title?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nBriefly describe why this user submission system is here and what should be submitted to it.\r\n\r\nWho can approve?\r\nWhat group is allowed to approve and deny content?\r\n\r\nWho can contribute?\r\nWhat group is allowed to contribute content?\r\n\r\nSubmissions Per Page\r\nHow many submissions should be listed per page in the submissions index?\r\n\r\nDefault Status\r\nShould submissions be set to approved, pending, or denied by default?\r\n\r\nNote: If you set the default status to pending, then be prepared to monitor the pending queue under the Admin menu.\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (6,'WebGUI','English','Edit','Company Information','Company Name\r\nThe name of your company. It will appear on all emails and anywhere you use the Company Name macro.\r\n\r\nCompany Email Address\r\nA general email address at your company. This is the address that all automated messages will come from. It can also be used via the WebGUI macro system.\r\n\r\nCompany URL\r\nThe primary URL of your company. This will appear on all automated emails sent from the WebGUI system. It is also available via the WebGUI macro system.\r\n','6'); +INSERT INTO help VALUES (1,'Poll','English','Add/Edit','Poll','Polls can be used to get the impressions of your users on various topics.\r\n

\r\nTitle
\r\nThe title of the poll. Even if you don\'t wish to display the title you should fill out this field so this poll will have a name if it is ever placed in the clipboard.\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nYou may provide a description for this poll, or give the user some background information.\r\n

\r\nActive
\r\nIf this box is checked, then users will be able to vote. Otherwise they\'ll only be able to see the results of the poll.\r\n

\r\nWho can vote?
\r\nChoose a group that can vote on this poll.\r\n

\r\nGraph Width
\r\nThe width of the poll results graph. The width is measured in pixels.\r\n

\r\nQuestion
\r\nWhat is the question you\'d like to ask your users?\r\n

\r\nAnswers
\r\nEnter the possible answers to your question. Enter only one answer per line. Polls are only capable of 20 possible answers.\r\n

\r\nReset votes.
\r\nReset the votes on this poll.\r\n

\r\n
\r\nNote: The following style sheet entries are custom to the Poll widget:\r\n

\r\n.pollAnswer
\r\nAn answer on a poll.\r\n

\r\n.pollColor \r\nThe color of the percentage bar on a poll.\r\n

\r\n.pollQuestion \r\nThe question on a poll.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'SiteMap','English','Add/Edit','Site Map','Site maps are used to provide additional navigation in WebGUI. You could set up a traditional site map that would display a hierarchical view of all the pages in the site. On the other hand, you could use site maps to provide extra navigation at certain levels in your site.\r\n

\r\nTitle
\r\nWhat title would you give to this site map? You should fill this field out even if you don\'t wish it to be displayed.\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nEnter a description as to why this site map is here and what purpose it serves.\r\n

\r\nStarting from this level?
\r\nIf the site map should display the page tree starting from this level, then check this box. If you wish the site map to start from the home page then uncheck it.\r\n

\r\nShow only one level?
\r\nShould the site map display only the current level of pages or all pages from this point forward? \r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'MessageBoard','English','Add/Edit','Message Board','Message boards, also called Forums and/or Discussions, are a great way to add community to any site or intranets. Many companies use message boards internally to collaborate on projects.\r\n

\r\nTitle
\r\nThe name of this board.\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nBriefly describe what should be displayed on this message board.\r\n

\r\nWho can post?
\r\nWhat group can post to this message board?\r\n

\r\nMessages Per Page
\r\nWhen a visitor first comes to a message board s/he will be presented with a listing of all the topics (aka threads) of the message board. If a board is popular, it will quickly have many topics. The messages per page attribute allows you to specify how many topics should be shown on one page.\r\n

\r\nEdit Timeout
\r\nHow long after a user has posted to the board will their message be available for them to edit. This timeout is measured in hours.\r\n

\r\nNote: Don\'t set this limit too high. One of the great things about message boards is that they are an accurate record of a discussion. If you allow editing for a long time, then a user has a chance to go back and change his/her mind a long time after the original statement was made.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'LinkList','English','Add/Edit','Link List','Link lists are just what they sound like, a list of links. Many sites have a links section, and this just automates the process.\r\n

\r\nTitle
\r\nWhat is the title of this link list?\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nDescribe the purpose of the links in this list.\r\n

\r\nProceed to add link?
\r\nLeave this checked if you want to add links to the link list directly after creating it.\r\n

\r\nAdding / Editing Links
\r\nYou\'ll notice at the bottom of the Edit screen that there are some options to add, edit, delete and reorder the links in your link lists. This process works exactly as the process for doing the same with widgets and pages. The three properties of links are name, url, and description.\r\n

\r\nStyle
\r\nAn extra StyleSheet class has been added to this widget: linkTitle. Use this to bold, colorize, or otheriwise manipulate the title of each link.','1,2,3,4,5'); +INSERT INTO help VALUES (13,'WebGUI','English','Edit','Mail Settings','Recover Password Message
\r\nThe message that gets sent to a user when they use the \"recover password\" function.\r\n

\r\nSMTP Server
\r\nThis is the address of your local mail server. It is needed for all features that use the Internet email system (such as password recovery).\r\n\r\n','6'); +INSERT INTO help VALUES (1,'SyndicatedContent','English','Add/Edit','Syndicated Content','Syndicated content is content that is pulled from another site using the RDF/RSS specification. This technology is often used to pull headlines from various news sites like CNN and Slashdot. It can, of course, be used for other things like sports scores, stock market info, etc.\r\n

\r\nYou can find a list of syndicated content at http://my.userland.com. You will need to register with an account to browse their listing of content. Also, the list contained there is by no means a complete list of all the syndicated content on the internet.\r\n

\r\nTitle
\r\nWhat is the title for this content? This is often the title of the site that the content comes from.\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nBriefly describe the content being pulled so that your users will know what they are seeing.\r\n

\r\nURL to RSS file
\r\nProvide the exact URL (starting with http://) to the syndicated content\'s RDF or RSS file. The syndicated content will be downloaded from this URL hourly.','1,2,3,4,5'); +INSERT INTO help VALUES (1,'EventsCalendar','English','Add/Edit','Events Calendar','Events calendars are used on many intranets to keep track of internal dates that affect a whole organization. Also events calendars on consumer sites are a great way to let your customers know what events you\'ll be attending and what promotions you\'ll be having.\r\n

\r\nTitle
\r\nWhat is the title of this events calendar?\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nBriefly describe what this events calendar details.\r\n

\r\nProceed to add event?
\r\nLeave this checked if you want to add events to the events calendar directly after creating it.\r\n

\r\nAdd / Edit Events
\r\nOn the edit screen you\'ll notice that there are options to add, edit, and delete the events in your events calendar. The properties for events are name, description, start date, and end date.\r\n

\r\nNote: Events that have already happened will not be displayed on the events calendar.\r\n

\r\n
\r\nNote: The following style is specific to the Events Calendar.\r\n

\r\n.eventTitle
\r\nThe title of an individual event.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'FAQ','English','Add/Edit','F.A.Q.','It seems that almost every web site, intranet, and extranet in the world has a frequently asked questions area. This widget helps you build one too.\r\n

\r\nTitle
\r\nWhat is the title for this FAQ section?\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nBriefly describe what this FAQ covers.\r\n

\r\nProceed to add question?
\r\nLeave this checked if you want to add questions to the FAQ directly after creating it.\r\n

\r\nAdd / Edit Questions
\r\nOn the edit screen you\'ll notice options for adding, editing, deleting, and reordering the questions in your FAQ. The two properties of FAQ questions are question and answer.\r\n

\r\n
\r\nNote: The following style is specific to the FAQ widget.\r\n

\r\n.faqQuestion
\r\nAn F.A.Q. question. To distinguish it from an answer.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (11,'WebGUI','English','Edit','File Settings','Path to WebGUI Extras
\r\nThe web-path to the directory containing WebGUI images and javascript files.\r\n

\r\nMaximum Attachment Size
\r\nThe maximum size of files allowed to be uploaded to this site. This applies to all widgets that allow uploaded files and images (like Article and User Contributions). This size is measured in kilobytes.\r\n

\r\nWeb Attachment Path
\r\nThe web-path of the directory where attachments are to be stored.\r\n

\r\nServer Attachment Path
\r\nThe local path of the directory where attachments are to be stored. (Perhaps /var/www/public/uploads) Be sure that the web server has the rights to write to that directory.\r\n','6'); +INSERT INTO help VALUES (2,'WebGUI','English','Edit','Authentication Settings','Anonymous Registration
\r\nDo you wish visitors to your site to be able to register themselves?\r\n

\r\nAuthentication Method (default)
\r\nWhat should the default authentication method be for new accounts that are created? The two available options are WebGUI and LDAP. WebGUI authentication means that the users will authenticate against the username and password stored in the WebGUI database. LDAP authentication means that users will authenticate against an external LDAP server.\r\n

\r\nNote: Authentication settings can be customized on a per user basis.\r\n

\r\nUsername Binding
\r\nBind the WebGUI username to the LDAP Identity. This requires the user to have the same username in WebGUI as they specified during the Anonymous Registration process. It also means that they won\'t be able to change their username later. This only in effect if the user is authenticating against LDAP.\r\n

\r\nLDAP URL (default)
\r\nThe default url to your LDAP server. The LDAP URL takes the form of ldap://[server]:[port]/[base DN]. Example: ldap://ldap.mycompany.com:389/o=MyCompany.\r\n

\r\nLDAP Identity
\r\nThe LDAP Identity is the unique identifier in the LDAP server that the user will be identified against. Often this field is shortname, which takes the form of first initial + last name. Example: jdoe. Therefore if you specify the LDAP identity to be shortname then Jon Doe would enter jdoe during the registration process.\r\n

\r\nLDAP Identity Name
\r\nThe label used to describe the LDAP Identity to the user. For instance, some companies use an LDAP server for their proxy server users to authenticate against. In the documentation or training already provided to their users, the LDAP identity is known as their Web Username. So you could enter that label here for consitency.\r\n

\r\nLDAP Password Name
\r\nJust as the LDAP Identity Name is a label, so is the LDAP Password Name. Use this label as you would LDAP Identity Name.\r\n\r\n','6'); +INSERT INTO help VALUES (1,'UserSubmission','English','Add/Edit','User Submission System','User submission systems are a great way to add a sense of community to any site as well as get free content from your users.\r\n

\r\nTitle
\r\nWhat is the title for this user submission system?\r\n

\r\nDisplay the title?
\r\nDo you wish to disply the title?\r\n

\r\nProcess macros?
\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

\r\nPosition
\r\nSelect the position in the current page template where this widget should be placed.\r\n

\r\nDescription
\r\nBriefly describe why this user submission system is here and what should be submitted to it.\r\n

\r\nWho can approve?
\r\nWhat group is allowed to approve and deny content?\r\n

\r\nWho can contribute?
\r\nWhat group is allowed to contribute content?\r\n

\r\nSubmissions Per Page
\r\nHow many submissions should be listed per page in the submissions index?\r\n

\r\nDefault Status
\r\nShould submissions be set to approved, pending, or denied by default?\r\n

\r\nNote: If you set the default status to pending, then be prepared to monitor the pending queue under the Admin menu.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (6,'WebGUI','English','Edit','Company Information','Company Name
\r\nThe name of your company. It will appear on all emails and anywhere you use the Company Name macro.\r\n

\r\nCompany Email Address
\r\nA general email address at your company. This is the address that all automated messages will come from. It can also be used via the WebGUI macro system.\r\n

\r\nCompany URL
\r\nThe primary URL of your company. This will appear on all automated emails sent from the WebGUI system. It is also available via the WebGUI macro system.\r\n','6'); INSERT INTO help VALUES (46,'WebGUI','English','Empty','Trash','If you choose to empty your trash, any items contained in it will be lost forever. If you\'re unsure about a few items, it might be best to cut them to your clipboard before you empty the trash.','0'); -INSERT INTO help VALUES (22,'WebGUI','English','Edit','Profile Settings','Profiles are used to extend the information of a particular user. In some cases profiles are important to a site, in others they are not. Use the following switches to turn the various profile sections on and off.\r\n\r\nAllow real name?\r\nDo you want users to enter and display their real names?\r\n\r\nAllow extra contact information?\r\nDo you want users to enter and display their extra contact information such as Instant Messenger IDs, cell phone numbers, and pager numbers?\r\n\r\nAllow home information?\r\nDo you want users to enter and display their home address and phone number?\r\n\r\nAllow business information?\r\nDo you want users to enter and display their work address and phone number?\r\n\r\nAllow miscellaneous information?\r\nDo you want users to enter and display any extra info such as gender, birthdate and home page?','6'); -INSERT INTO help VALUES (25,'WebGUI','English','Using','Search Engine','Due to many requests by our customers, we\'ve built a small, but sturdy search engine into WebGUI. If you wish to use the internal search engine, you can use the ^?; macro or feel free to build your own form to access it.\r\n\r\nWe do not recommend the built-in search engine\'s use on large sites as it can be very slow. There are many great search engines available around the Internet that can be used with WebGUI.\r\n\r\nMnoGo Search - A very powerful and very fast open-source search engine. We maintain an unsupported WebGUI widget on the Plain Black site that will allow you to use MnoGo search directly within WebGUI or you can use the super-powerful external search engine it provides.\r\n\r\nht://Dig - Another great open-source search engine. We\'ve used it in many instances and it always proves to be reliable and fast.','0'); -INSERT INTO help VALUES (1,'Item','English','Add/Edit','Item','Like Articles, Items are the Swiss Army knife of WebGUI. Most pieces of static content can be added via the Item widget, though Items are usually used for smaller content than Articles.\r\n\r\nTitle\r\nWhat\'s the title for this content?\r\n\r\nProcess macros?\r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n\r\nPosition\r\nSelect the position in the current page template where this widget should be placed.\r\n\r\nDescription\r\nThe long description of this Item.\r\n\r\nLink URL\r\nThis URL will be attached to the title of this Item.\r\n\r\nExample: http://www.google.com\r\n\r\nAttachment\r\nIf you wish to attach a word processor file, a zip file, or any other file for download by your users, then choose it from your hard drive.\r\n\r\n','1,2,3,4,5'); -INSERT INTO help VALUES (30,'WebGUI','English','Select','Package','Packages are groups of pages and widgets that are predefined to be deployed together. A package manager may see the need to create a package several pages with a message board, an FAQ, and a Poll because that task is performed quite often. Packages are often defined to lessen the burden of repetitive tasks.\r\n\r\nOne package that many people create is a Page/Article package. It is often the case that you want to add a page with an article on it for content. Instead of going through the steps of creating a page, going to the page, and then adding an article to the page, you may wish to simply create a package to do those steps all at once.','0'); -INSERT INTO help VALUES (31,'WebGUI','English','Add/Edit','Package','To create a package follow these simple steps:\r\n\r\n
  • From the admin menu select \"View Packages.\"\r\n
  • Add a page and give it a name. The name of the page will be the name of the package.\r\n
  • Go to the new page you created and start adding pages and widgets. Any pages or widgets you add will be created each time this package is deployed. \r\n\r\nNotes: \r\nIn order to add, edit, or delete packages you must be in the Package Mangers group or in the Admins group.\r\n\r\nIf you add content to any of the widgets, that content will automatically be copied also when the package is deployed.\r\n\r\nPrivileges and styles assigned to pages in the package will not be copied when the package is deployed. Instead the pages will take the privileges and styles of the area to which they are deployed.','0'); +INSERT INTO help VALUES (22,'WebGUI','English','Edit','Profile Settings','Profiles are used to extend the information of a particular user. In some cases profiles are important to a site, in others they are not. Use the following switches to turn the various profile sections on and off.\r\n

    \r\nAllow real name?
    \r\nDo you want users to enter and display their real names?\r\n

    \r\nAllow extra contact information?
    \r\nDo you want users to enter and display their extra contact information such as Instant Messenger IDs, cell phone numbers, and pager numbers?\r\n

    \r\nAllow home information?
    \r\nDo you want users to enter and display their home address and phone number?\r\n

    \r\nAllow business information?
    \r\nDo you want users to enter and display their work address and phone number?\r\n

    \r\nAllow miscellaneous information?
    \r\nDo you want users to enter and display any extra info such as gender, birthdate and home page?','6'); +INSERT INTO help VALUES (25,'WebGUI','English','Using','Search Engine','Due to many requests by our customers, we\'ve built a small, but sturdy search engine into WebGUI. If you wish to use the internal search engine, you can use the ^?; macro or feel free to build your own form to access it.\r\n

    \r\nWe do not recommend the built-in search engine\'s use on large sites as it can be very slow. There are many great search engines available around the Internet that can be used with WebGUI.\r\n

    \r\nMnoGo Search - A very powerful and very fast open-source search engine. We maintain an unsupported WebGUI widget on the Plain Black site that will allow you to use MnoGo search directly within WebGUI or you can use the super-powerful external search engine it provides.\r\n

    \r\nht://Dig - Another great open-source search engine. We\'ve used it in many instances and it always proves to be reliable and fast.','0'); +INSERT INTO help VALUES (1,'Item','English','Add/Edit','Item','Like Articles, Items are the Swiss Army knife of WebGUI. Most pieces of static content can be added via the Item widget, though Items are usually used for smaller content than Articles.\r\n

    \r\nTitle
    \r\nWhat\'s the title for this content?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nThe long description of this Item.\r\n

    \r\nLink URL
    \r\nThis URL will be attached to the title of this Item.\r\n

    \r\nExample: http://www.google.com\r\n

    \r\nAttachment
    \r\nIf you wish to attach a word processor file, a zip file, or any other file for download by your users, then choose it from your hard drive.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (30,'WebGUI','English','Select','Package','Packages are groups of pages and widgets that are predefined to be deployed together. A package manager may see the need to create a package several pages with a message board, an FAQ, and a Poll because that task is performed quite often. Packages are often defined to lessen the burden of repetitive tasks.\r\n

    \r\nOne package that many people create is a Page/Article package. It is often the case that you want to add a page with an article on it for content. Instead of going through the steps of creating a page, going to the page, and then adding an article to the page, you may wish to simply create a package to do those steps all at once.','0'); +INSERT INTO help VALUES (31,'WebGUI','English','Add/Edit','Package','To create a package follow these simple steps:\r\n
      \r\n
    1. From the admin menu select \"View Packages.\"\r\n
    2. Add a page and give it a name. The name of the page will be the name of the package.\r\n
    3. Go to the new page you created and start adding pages and widgets. Any pages or widgets you add will be created each time this package is deployed. \r\n
    \r\nNotes:
    \r\nIn order to add, edit, or delete packages you must be in the Package Mangers group or in the Admins group.\r\n

    \r\nIf you add content to any of the widgets, that content will automatically be copied also when the package is deployed.\r\n

    \r\nPrivileges and styles assigned to pages in the package will not be copied when the package is deployed. Instead the pages will take the privileges and styles of the area to which they are deployed.','0'); +INSERT INTO help VALUES (20,'WebGUI','English','Add/Edit','Image','Name
    \r\nThe label that this image will be referenced by to include it into pages.\r\n

    \r\n\r\nFile
    \r\nSelect a file from your local drive to upload to the server.\r\n

    \r\n\r\nParameters
    \r\nAdd any HTML <img&rt; parameters that you wish to act as the defaults for this image.\r\n

    \r\nExample:
    \r\nalign=\"right\"\r\nalt=\"This is an image\"','15'); +INSERT INTO help VALUES (1,'DownloadManager','English','Add/Edit','Download Manager','The Download Manager is designed to help you manage file distribution on your site. It allows you to specify who may download files from your site.\r\n

    \r\nTitle
    \r\nWhat is the title of this download manager?\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nDescribe the purpose of this download manager.\r\n

    \r\n\r\nPaginate After
    \r\nHow many files should be displayed before splitting the results into separate pages? In other words, how many files should be displayed per page?\r\n

    \r\n\r\nProceed to add file?
    \r\nIf you wish to start adding files to download right away, leave this checked.\r\n

    \r\n\r\nAdding Files
    \r\nAfter you\'ve created a download manager you can add as many files as you wish to it. The properties for each file are Download File, Alternate Version #1, Alternate Version #2, File Title, Brief Synopsis, and Group to Download. All of these should be self explainatory except for the alternate versions. Alternate versions are used for when you\'re distributing different file formats of the same file, such as a Microsoft Word document and a PDF version. Or a JPEG, GIF, and TIFF.\r\n','0'); +INSERT INTO help VALUES (23,'WebGUI','English','Delete','Image','When you delete an image it will be removed from the server and cannot be recovered. Therefore, be sure that you really wish to delete the image before you confirm the delete.','15'); +INSERT INTO help VALUES (26,'WebGUI','English','Manage','Image','Using the built in image manager in WebGUI you can upload images to one central location for use anywhere else in the site with no need for any special software or knowledge.\r\n

    \r\n To place the images you\'ve uploaded use the ^I(); and ^i(); macros. More information on them can be found in the Using Macros help.','15'); # # Table structure for table 'helpSeeAlso' @@ -508,6 +554,26 @@ INSERT INTO helpSeeAlso VALUES (10,13,'WebGUI'); INSERT INTO helpSeeAlso VALUES (11,24,'WebGUI'); INSERT INTO helpSeeAlso VALUES (12,22,'WebGUI'); +# +# Table structure for table 'images' +# + +CREATE TABLE images ( + imageId int(11) NOT NULL default '0', + name varchar(128) NOT NULL default 'untitled', + filename varchar(255) default NULL, + parameters varchar(255) default NULL, + userId int(11) default NULL, + username varchar(128) default NULL, + dateUploaded int(11) default NULL, + PRIMARY KEY (imageId) +) TYPE=MyISAM; + +# +# Dumping data for table 'images' +# + + # # Table structure for table 'incrementer' # @@ -534,6 +600,8 @@ INSERT INTO incrementer VALUES ('questionId',1); INSERT INTO incrementer VALUES ('submissionId',1); INSERT INTO incrementer VALUES ('recurringEventId',1); INSERT INTO incrementer VALUES ('messageLogId',1); +INSERT INTO incrementer VALUES ('downloadId',1); +INSERT INTO incrementer VALUES ('imageId',1); # # Table structure for table 'international' @@ -1165,7 +1233,7 @@ INSERT INTO international VALUES (13,'WebGUI','Dutch','Laat help index zien.'); INSERT INTO international VALUES (13,'WebGUI','English','View help index.'); INSERT INTO international VALUES (13,'WebGUI','Español','Ver índice de Ayuda'); INSERT INTO international VALUES (13,'WebGUI','Português','Ver o indice da ajuda.'); -INSERT INTO international VALUES (14,'Article','English','Download Attachment'); +INSERT INTO international VALUES (14,'Article','English','Align Image'); INSERT INTO international VALUES (14,'MessageBoard','Deutsch','Nächste Diskussion'); INSERT INTO international VALUES (14,'MessageBoard','Dutch','Volgende thread'); INSERT INTO international VALUES (14,'MessageBoard','English','Next Thread'); @@ -1461,11 +1529,11 @@ INSERT INTO international VALUES (48,'WebGUI','Dutch','Hallo'); INSERT INTO international VALUES (48,'WebGUI','English','Hello'); INSERT INTO international VALUES (48,'WebGUI','Español','Hola'); INSERT INTO international VALUES (48,'WebGUI','Português','Ola'); -INSERT INTO international VALUES (49,'WebGUI','Deutsch','Hier können Sie sich abmelden.'); -INSERT INTO international VALUES (49,'WebGUI','Dutch','Klik hier om uit te loggen.'); -INSERT INTO international VALUES (49,'WebGUI','English','Click here to log out.'); -INSERT INTO international VALUES (49,'WebGUI','Español','\"Click aquí para salir.\"'); -INSERT INTO international VALUES (49,'WebGUI','Português','\"Clique aqui para sair.\"'); +INSERT INTO international VALUES (49,'WebGUI','Deutsch','Hier können Sie sich abmelden.'); +INSERT INTO international VALUES (49,'WebGUI','Dutch','Klik hier om uit te loggen.'); +INSERT INTO international VALUES (49,'WebGUI','English','Click here to log out.'); +INSERT INTO international VALUES (49,'WebGUI','Español','Click aquí para salir.'); +INSERT INTO international VALUES (49,'WebGUI','Português','Clique aqui para sair.'); INSERT INTO international VALUES (50,'WebGUI','Deutsch','Benutzername'); INSERT INTO international VALUES (50,'WebGUI','Dutch','Gebruikersnaam'); INSERT INTO international VALUES (50,'WebGUI','English','Username'); @@ -2379,6 +2447,54 @@ INSERT INTO international VALUES (378,'WebGUI','English','User ID'); INSERT INTO international VALUES (379,'WebGUI','English','Group ID'); INSERT INTO international VALUES (380,'WebGUI','English','Style ID'); INSERT INTO international VALUES (381,'WebGUI','English','WebGUI received a malformed request and was unable to continue. Proprietary characters being passed through a form typically cause this. Please feel free to hit your back button and try again.'); +INSERT INTO international VALUES (1,'DownloadManager','English','Download Manager'); +INSERT INTO international VALUES (2,'DownloadManager','English','Add Download Manager'); +INSERT INTO international VALUES (3,'DownloadManager','English','Proceed to add file?'); +INSERT INTO international VALUES (4,'DownloadManager','English','Add Download'); +INSERT INTO international VALUES (5,'DownloadManager','English','File Title'); +INSERT INTO international VALUES (6,'DownloadManager','English','Download File'); +INSERT INTO international VALUES (7,'DownloadManager','English','Group to Download'); +INSERT INTO international VALUES (8,'DownloadManager','English','Brief Synopsis'); +INSERT INTO international VALUES (9,'DownloadManager','English','Edit Download Manager'); +INSERT INTO international VALUES (10,'DownloadManager','English','Edit Download'); +INSERT INTO international VALUES (11,'DownloadManager','English','Add a new download.'); +INSERT INTO international VALUES (12,'DownloadManager','English','Are you certain that you wish to delete this download?'); +INSERT INTO international VALUES (13,'DownloadManager','English','Delete attached file.'); +INSERT INTO international VALUES (14,'DownloadManager','English','File'); +INSERT INTO international VALUES (15,'DownloadManager','English','Description'); +INSERT INTO international VALUES (16,'DownloadManager','English','Date Uploaded'); +INSERT INTO international VALUES (15,'Article','English','Right'); +INSERT INTO international VALUES (16,'Article','English','Left'); +INSERT INTO international VALUES (17,'Article','English','Center'); +INSERT INTO international VALUES (37,'UserSubmission','English','Delete'); +INSERT INTO international VALUES (13,'SQLReport','English','Convert carriage returns?'); +INSERT INTO international VALUES (17,'DownloadManager','English','Alternate Version #1'); +INSERT INTO international VALUES (18,'DownloadManager','English','Alternate Version #2'); +INSERT INTO international VALUES (19,'DownloadManager','English','You have no files available for download.'); +INSERT INTO international VALUES (14,'EventsCalendar','English','Start Date'); +INSERT INTO international VALUES (15,'EventsCalendar','English','End Date'); +INSERT INTO international VALUES (20,'DownloadManager','English','Paginate After'); +INSERT INTO international VALUES (14,'SQLReport','English','Paginate After'); +INSERT INTO international VALUES (16,'EventsCalendar','English','Calendar Layout'); +INSERT INTO international VALUES (17,'EventsCalendar','English','List'); +INSERT INTO international VALUES (18,'EventsCalendar','English','Calendar'); +INSERT INTO international VALUES (19,'EventsCalendar','English','Paginate After'); +INSERT INTO international VALUES (382,'WebGUI','English','Add Image'); +INSERT INTO international VALUES (383,'WebGUI','English','Name'); +INSERT INTO international VALUES (384,'WebGUI','English','File'); +INSERT INTO international VALUES (385,'WebGUI','English','Parameters'); +INSERT INTO international VALUES (386,'WebGUI','English','Edit Image'); +INSERT INTO international VALUES (387,'WebGUI','English','Uploaded By'); +INSERT INTO international VALUES (388,'WebGUI','English','Upload Date'); +INSERT INTO international VALUES (389,'WebGUI','English','Image Id'); +INSERT INTO international VALUES (390,'WebGUI','English','Displaying Image...'); +INSERT INTO international VALUES (391,'WebGUI','English','Delete attached file.'); +INSERT INTO international VALUES (392,'WebGUI','English','Are you certain that you wish to delete this image?'); +INSERT INTO international VALUES (393,'WebGUI','English','Manage Images'); +INSERT INTO international VALUES (394,'WebGUI','English','Manage images.'); +INSERT INTO international VALUES (395,'WebGUI','English','Add a new image.'); +INSERT INTO international VALUES (396,'WebGUI','English','View Image'); +INSERT INTO international VALUES (397,'WebGUI','English','Back to image list.'); # # Table structure for table 'messageLog' @@ -2553,7 +2669,7 @@ INSERT INTO style VALUES (22,'Reserved','','',NULL); INSERT INTO style VALUES (23,'Reserved','','',NULL); INSERT INTO style VALUES (24,'Reserved','','',NULL); INSERT INTO style VALUES (-1,'Yahoo!','Yahoo!\r\n\r\n

    Yahoo
    \r\nnew! Y! Domains
    reserve .biz & .info domains
    \"\"Yahoo! Mail
    you@yahoo.com
    \r\n advanced search
    \r\n
    \r\n
    \r\n','
    \r\n
    How to Suggest a Site -\r\nCompany Info -\r\nCopyright Policy -\r\nTerms of Service -\r\nContributors -\r\nJobs -\r\nAdvertising

    Copyright © 2001 Yahoo! Inc. All rights reserved.
    Privacy Policy

    \r\n',''); -INSERT INTO style VALUES (-4,'Demo Style','\r\n\r\n\r\n\r\n \r\n \r\n \r\n

    Your Company Name Here

    Address: 1903 Sunrise St. City, State 65977
    \r\nTel: 915.888.8888
    \r\nEmail: service@company.com
    \r\n\r\n \r\n \r\n \r\n \r\n
    ^t;
    \r\n\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n^M;\r\n
    \r\n

    \r\n \r\n \r\n
    \r\n ','
    \r\n
    \r\n\r\n\r\n
    ^H · ^a;
    \r\n\r\n\r\n\r\n',''); +INSERT INTO style VALUES (-4,'Demo Style','\r\n\r\n\r\n\r\n \r\n \r\n \r\n

    Your Company Name Here

    Address: 1903 Sunrise St. City, State 65977
    \r\nTel: 915.888.8888
    \r\nEmail: service@company.com
    \r\n\r\n \r\n \r\n \r\n \r\n
    ^t;
    \r\n\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n^M;\r\n
    \r\n

    \r\n \r\n \r\n
    \r\n ','
    \r\n
    \r\n\r\n\r\n
    ^H; · ^a;
    \r\n\r\n\r\n\r\n',''); INSERT INTO style VALUES (3,'Make Page Printable','\r\n
    ','
    © 2001-2002 Plain Black Software
    \r\n',''); INSERT INTO style VALUES (25,'Reserved',NULL,NULL,NULL); INSERT INTO style VALUES (-5,'Plain Black Software (white)','\r\n\r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n\r\n
    \"Plain\"User:\" ^@;\"My\"|\"\"Download\"\"|\"\"Home\"
    ^C;^D(\"%c %D, %y\");
    \r\n\r\n\r\n \r\n \r\n\r\n\r\n \r\n\r\n
    ^T(2);','

    \"\"

    \r\n\r\n\r\n \r\n \r\n\r\n
    \"Copyright^r(\'\"Make\');
    \r\n\r\n',''); diff --git a/docs/credits.txt b/docs/credits.txt index d3c1240ca..15f660e1a 100644 --- a/docs/credits.txt +++ b/docs/credits.txt @@ -12,5 +12,5 @@ IE Rich Edit.........................Brattli Spanish Translation..................Ricardo Markiewicz Portuguese Translation...............Jose Caneira Dutch Translation....................Joeri de Bruin - +mod_rewrite Support..................Peter Beardsley / Appropriate Solutions, Inc. diff --git a/docs/license.txt b/docs/license.txt index 1e4f837e4..667b6b007 100644 --- a/docs/license.txt +++ b/docs/license.txt @@ -2,93 +2,345 @@ # WebGUI License # #################################################################### -The General Public License (GPL) -Version 2, June 1991 -Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 -Preamble + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. + Preamble -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. -The precise terms and conditions for copying, distribution and modification follow. + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + NO WARRANTY -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. -NO WARRANTY + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. -END OF TERMS AND CONDITIONS + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/docs/upgrades/upgrade_3.0.3-3.1.0.sql b/docs/upgrades/upgrade_3.0.3-3.1.0.sql new file mode 100644 index 000000000..1ef98958d --- /dev/null +++ b/docs/upgrades/upgrade_3.0.3-3.1.0.sql @@ -0,0 +1,126 @@ +INSERT INTO incrementer VALUES ('downloadId',1); +INSERT INTO incrementer VALUES ('imageId',1); +alter table Article add column alignImage varchar(30) not null default 'left'; +create table DownloadManager ( widgetId int not null primary key); +create table DownloadManager_file ( downloadId int not null primary key, widgetId int not null, fileTitle varchar(128) not null default 'untitled', downloadFile varchar(255), groupToView int not null default 2, briefSynopsis varchar(255), dateUploaded int); +alter table DownloadManager_file add column sequenceNumber int not null default 1; +alter table DownloadManager_file add column alternateVersion1 varchar(255); +alter table DownloadManager_file add column alternateVersion2 varchar(255); +alter table DownloadManager add column paginateAfter int not null default 50; +alter table SQLReport add column paginateAfter int not null default 50; +alter table EventsCalendar add column calendarLayout varchar(30) not null default 'list'; +alter table EventsCalendar add column paginateAfter int not null default 50; +CREATE TABLE images ( + imageId int(11) NOT NULL primary key, + name varchar(128) not null default 'untitled', + filename varchar(255), + parameters varchar(255), + userId int, + username varchar(128), + dateUploaded int +); +INSERT INTO international VALUES (1,'DownloadManager','English','Download Manager'); +INSERT INTO international VALUES (2,'DownloadManager','English','Add Download Manager'); +INSERT INTO international VALUES (3,'DownloadManager','English','Proceed to add file?'); +INSERT INTO international VALUES (4,'DownloadManager','English','Add Download'); +INSERT INTO international VALUES (5,'DownloadManager','English','File Title'); +INSERT INTO international VALUES (6,'DownloadManager','English','Download File'); +INSERT INTO international VALUES (7,'DownloadManager','English','Group to Download'); +INSERT INTO international VALUES (8,'DownloadManager','English','Brief Synopsis'); +INSERT INTO international VALUES (9,'DownloadManager','English','Edit Download Manager'); +INSERT INTO international VALUES (10,'DownloadManager','English','Edit Download'); +INSERT INTO international VALUES (11,'DownloadManager','English','Add a new download.'); +INSERT INTO international VALUES (12,'DownloadManager','English','Are you certain that you wish to delete this download?'); +INSERT INTO international VALUES (13,'DownloadManager','English','Delete attached file.'); +INSERT INTO international VALUES (14,'DownloadManager','English','File'); +INSERT INTO international VALUES (15,'DownloadManager','English','Description'); +INSERT INTO international VALUES (16,'DownloadManager','English','Date Uploaded'); +INSERT INTO international VALUES (15,'Article','English','Right'); +INSERT INTO international VALUES (16,'Article','English','Left'); +INSERT INTO international VALUES (17,'Article','English','Center'); +INSERT INTO international VALUES (37,'UserSubmission','English','Delete'); +INSERT INTO international VALUES (13,'SQLReport','English','Convert carriage returns?'); +INSERT INTO international VALUES (17,'DownloadManager','English','Alternate Version #1'); +INSERT INTO international VALUES (18,'DownloadManager','English','Alternate Version #2'); +INSERT INTO international VALUES (19,'DownloadManager','English','You have no files available for download.'); +INSERT INTO international VALUES (14,'EventsCalendar','English','Start Date'); +INSERT INTO international VALUES (15,'EventsCalendar','English','End Date'); +INSERT INTO international VALUES (20,'DownloadManager','English','Paginate After'); +INSERT INTO international VALUES (14,'SQLReport','English','Paginate After'); +INSERT INTO international VALUES (16,'EventsCalendar','English','Calendar Layout'); +INSERT INTO international VALUES (17,'EventsCalendar','English','List'); +INSERT INTO international VALUES (18,'EventsCalendar','English','Calendar'); +INSERT INTO international VALUES (19,'EventsCalendar','English','Paginate After'); +INSERT INTO international VALUES (382,'WebGUI','English','Add Image'); +INSERT INTO international VALUES (383,'WebGUI','English','Name'); +INSERT INTO international VALUES (384,'WebGUI','English','File'); +INSERT INTO international VALUES (385,'WebGUI','English','Parameters'); +INSERT INTO international VALUES (386,'WebGUI','English','Edit Image'); +INSERT INTO international VALUES (387,'WebGUI','English','Uploaded By'); +INSERT INTO international VALUES (388,'WebGUI','English','Upload Date'); +INSERT INTO international VALUES (389,'WebGUI','English','Image Id'); +INSERT INTO international VALUES (390,'WebGUI','English','Displaying Image...'); +INSERT INTO international VALUES (391,'WebGUI','English','Delete attached file.'); +INSERT INTO international VALUES (392,'WebGUI','English','Are you certain that you wish to delete this image?'); +INSERT INTO international VALUES (393,'WebGUI','English','Manage Images'); +INSERT INTO international VALUES (394,'WebGUI','English','Manage images.'); +INSERT INTO international VALUES (395,'WebGUI','English','Add a new image.'); +INSERT INTO international VALUES (396,'WebGUI','English','View Image'); +INSERT INTO international VALUES (397,'WebGUI','English','Back to image list.'); +delete from international where internationalId=49 and namespace='WebGUI'; +INSERT INTO international VALUES (49,'WebGUI','Deutsch','Hier können Sie sich abmelden.'); +INSERT INTO international VALUES (49,'WebGUI','Dutch','Klik hier om uit te loggen.'); +INSERT INTO international VALUES (49,'WebGUI','English','Click here to log out.'); +INSERT INTO international VALUES (49,'WebGUI','Español','Click aquí para salir.'); +INSERT INTO international VALUES (49,'WebGUI','Português','Clique aqui para sair.'); + + + +delete from help; + + + +INSERT INTO help VALUES (1,'WebGUI','English','Add/Edit','Page','Think of pages as containers for content. For instance, if you want to write a letter to the editor of your favorite magazine you\'d get out a notepad (or open a word processor) and start filling it with your thoughts. The same is true with WebGUI. Create a page, then add your content to the page.\r\n

    \r\nTitle
    \r\nThe title of the page is what your users will use to navigate through the site. Titles should be descriptive, but not very long.\r\n

    \r\nPage URL
    \r\nWhen you create a page a url for the page is generated based on the page title. If you are unhappy with the url that was chosen, you can change it here.\r\n

    \r\nMeta Tags
    \r\nMeta tags are used by some search engines to associate key words to a particular page. There is a great site called Meta Tag Builder that will help you build meta tags if you\'ve never done it before.\r\n

    \r\nAdvanced Users: If you have other things (like JavaScript) you usually put in the <head> area of your pages, you may put them here as well.\r\n

    \r\nUse default meta tags?
    \r\nIf you don\'t wish to specify meta tags yourself, WebGUI can generate meta tags based on the page title and your company\'s name. Check this box to enable the defaultly generated meta tags.\r\n

    \r\nStyle
    \r\nBy default, when you create a page, it inherits a few traits from its parent. One of those traits is style. Choose from the list of styles if you would like to change the appearance of this page. See Add Style for more details.\r\n

    \r\nIf you check the box below to the style pull-down menu, all of the pages below this page will take on the style you\'ve chosen for this page.\r\n

    \r\nOwner
    \r\nThe owner of a page is usually the person who created the page.\r\n

    \r\nOwner can view?
    \r\nCan the owner view the page or not?\r\n

    \r\nOwner can edit?
    \r\nCan the owner edit the page or not? Be careful, if you decide that the owner cannot edit the page and you do not belong to the page group, then you\'ll lose the ability to edit this page.\r\n

    \r\nGroup
    \r\nA group is assigned to every page for additional privilege control. Pick a group from the pull-down menu.\r\n

    \r\nGroup can view?
    \r\nCan members of this group view this page?\r\n

    \r\nGroup can edit?
    \r\nCan members of this group edit this page?\r\n

    \r\nAnybody can view?
    \r\nCan any visitor or member regardless of the group and owner view this page?\r\n

    \r\nAnybody can edit?
    \r\nCan any visitor or member regardless of the group and owner edit this page?\r\n

    \r\nYou can optionally give these privileges to all pages under this page.\r\n','0'); +INSERT INTO help VALUES (3,'WebGUI','English','Delete','Page','Deleting a page can create a big mess if you are uncertain about what you are doing. When you delete a page you are also deleting the content it contains, all sub-pages connected to this page, and all the content they contain. Be certain that you have already moved all the content you wish to keep before you delete a page.\r\n

    \r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (4,'WebGUI','English','Delete','Style','When you delete a style all pages using that style will be reverted to the fail safe (default) style. To ensure uninterrupted viewing, you should be sure that no pages are using a style before you delete it.\r\n

    \r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','4,5'); +INSERT INTO help VALUES (5,'WebGUI','English','Add/Edit','User','See Manage Users for additional details.\r\n

    \r\n\r\nUsername
    \r\nUsername is a unique identifier for a user. Sometimes called a handle, it is also how the user will be known on the site. (Note: Administrators have unlimited power in the WebGUI system. This also means they are capable of breaking the system. If you rename or create a user, be careful not to use a username already in existance.)\r\n

    \r\n\r\nPassword
    \r\nA password is used to ensure that the user is who s/he says s/he is.\r\n

    \r\n\r\nAuthentication Method
    \r\nSee Edit Settings for details.\r\n

    \r\n\r\nLDAP URL
    \r\nSee Edit Settings for details.\r\n

    \r\n\r\nConnect DN
    \r\nThe Connect DN is the cn (or common name) of a given user in your LDAP database. It should be specified as cn=John Doe. This is, in effect, the username that will be used to authenticate this user against your LDAP server.\r\n

    \r\n\r\nEmail Address
    \r\nThe user\'s email address. This must only be specified if the user will partake in functions that require email.\r\n

    \r\n\r\nGroups
    \r\nGroups displays which groups the user is in. Groups that are highlighted are groups that the user is assigned to. Those that are not highlighted are other groups that can be assigned. Note that you must hold down CTRL to select multiple groups.\r\n

    \r\n\r\nLanguage
    \r\nWhat language should be used to display system related messages.\r\n

    \r\n\r\nICQ UIN
    \r\nThe ICQ UIN is the \"User ID Number\" on the ICQ network. ICQ is a very popular instant messaging platform.\r\n\r\n','0'); +INSERT INTO help VALUES (7,'WebGUI','English','Delete','User','There is no need to ever actually delete a user. If you are concerned with locking out a user, then simply change their password. If you truely wish to delete a user, then please keep in mind that there are consequences. If you delete a user any content that they added to the site via widgets (like message boards and user contributions) will remain on the site. However, if another user tries to visit the deleted user\'s profile they will get an error message. Also if the user ever is welcomed back to the site, there is no way to give him/her access to his/her old content items except by re-adding the user to the users table manually.\r\n

    \r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (8,'WebGUI','English','Manage','User','Users are the accounts in the system that are given rights to do certain things. There are two default users built into the system: Admin and Visitor.\r\n

    \r\n\r\nAdmin
    \r\nAdmin is exactly what you\'d expect. It is a user with unlimited rights in the WebGUI environment. If it can be done, this user has the rights to do it.\r\n

    \r\n\r\nVisitor
    \r\nVisitor is exactly the opposite of Admin. Visitor has no rights what-so-ever. By default any user who is not logged in is seen as the user Visitor.\r\n

    \r\n\r\nAdd a new user.
    \r\nClick on this to go to the add user screen.\r\n

    \r\n\r\nSearch
    \r\nYou can search users based on username and email address. You can do partial searches too if you like.','0'); +INSERT INTO help VALUES (9,'WebGUI','English','Manage','Style','Styles are used to manage the look and feel of your WebGUI pages. With WebGUI, you can have an unlimited number of styles, so your site can take on as many looks as you like. You could have some pages that look like your company\'s brochure, and some pages that look like Yahoo!®. You could even have some pages that look like pages in a book. Using style management, you have ultimate control over all your designs.\r\n

    \r\n\r\nThere are several styles built into WebGUI. The first of these are used by WebGUI can should not be edited or deleted. The last few are simply example styles and may be edited or deleted as you please.\r\n

    \r\n\r\nFail Safe
    \r\nWhen you delete a style that is still in use on some pages, the Fail Safe style will be applied to those pages. This style has a white background and simple navigation.\r\n

    \r\n\r\nMake Page Printable
    \r\nThis style is used if you place an ^r; macro on your pages and the user clicks on it. This style allows you to put a simple logo and copyright message on your printable pages.\r\n

    \r\n\r\nPackages
    \r\nThis style is used by the package management system.\r\n

    \r\n\r\nTrash / Clipboard
    \r\nThis style is used by the trash and clipboard system.\r\n

    \r\n\r\n


    \r\n

    \r\n\r\nDemo Style
    \r\nThis is a sample design taken from a templates site (www.freewebtemplates.com).\r\n

    \r\n\r\nPlain Black Software (black) & (white)
    \r\nThese designs are used on the Plain Black site.\r\n

    \r\n\r\nYahoo!®
    \r\nThis is the design of the Yahoo!® site. (Used without permission.)\r\n

    \r\n\r\nWebGUI
    \r\nThis is a simple design featuring WebGUI logos.\r\n\r\n','4,5'); +INSERT INTO help VALUES (10,'WebGUI','English','Manage','Group','Groups are used to subdivide privileges and responsibilities within the WebGUI system. For instance, you may be building a site for a classroom situation. In that case you might set up a different group for each class that you teach. You would then apply those groups to the pages that are designed for each class.\r\n

    \r\n\r\nThere are four groups built into WebGUI. They are Admins, Content Managers, Visitors, and Registered Users.\r\n

    \r\n\r\nAdmins
    \r\nAdmins are users who have unlimited privileges within WebGUI. A user should only be added to the admin group if they oversee the system. Usually only one to three people will be added to this group.\r\n

    \r\n\r\nContent Managers
    \r\nContent managers are users who have privileges to add, edit, and delete content from various areas on the site. The content managers group should not be used to control individual content areas within the site, but to determine whether a user can edit content at all. You should set up additional groups to separate content areas on the site.\r\n

    \r\n\r\nRegistered Users
    \r\nWhen users are added to the system they are put into the registered users group. A user should only be removed from this group if their account is deleted or if you wish to punish a troublemaker.\r\n

    \r\n\r\nVisitors
    \r\nVisitors are users who are not logged in using an account on the system. Also, if you wish to punish a registered user you could remove him/her from the Registered Users group and insert him/her into the Visitors group.','0'); +INSERT INTO help VALUES (12,'WebGUI','English','Manage','Settings','Settings are items that allow you to adjust WebGUI to your particular needs.\r\n

    \r\n\r\nEdit Authentication Settings
    \r\nSettings concerning user identification and login, such as LDAP.\r\n

    \r\n\r\nEdit Company Information
    \r\nInformation specific about the company or individual who controls this installation of WebGUI.\r\n

    \r\n\r\nEdit File Settings
    \r\nSettings concerning attachments and images.\r\n

    \r\n\r\nEdit Mail Settings
    \r\nSettings concerning email and related functions.\r\n

    \r\n\r\nEdit Miscellaneous Settings
    \r\nEverything else.\r\n\r\n','7,8,9.10,11,12'); +INSERT INTO help VALUES (14,'WebGUI','English','Delete','Widget','This function permanently deletes the selected widget from a page. If you are unsure whether you wish to delete this content you may be better served to cut the content to the clipboard until you are certain you wish to delete it.\r\n

    \r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (15,'WebGUI','English','Delete','Group','As the function suggests you\'ll be deleting a group and removing all users from the group. Be careful not to orphan users from pages they should have access to by deleting a group that is in use.\r\n

    \r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.','0'); +INSERT INTO help VALUES (16,'WebGUI','English','Add/Edit','Style','Styles are WebGUI macro enabled. See Using Macros for more information.\r\n

    \r\n\r\nStyle Name
    \r\nA unique name to describe what this style looks like at a glance. The name has no effect on the actual look of the style.\r\n

    \r\n\r\nHeader
    \r\nThe header is the start of the look of your site. It is helpful to look at your design and cut it into three pieces. The top and left of your design is the header. The center part is the content, and the right and bottom is the footer. Cut the HTML from your header and paste it in the space provided.\r\n

    \r\n\r\nIf you are in need of assistance for creating a look for your site, or if you need help cutting apart your design, Plain Black Software provides support services for a small fee.\r\n

    \r\n\r\nMany people will add WebGUI macros to their header for automated navigation, and other features.\r\n

    \r\n\r\nFooter
    \r\nThe footer is the end of the look for your site. It is the right and bottom portion of your design. You may also place WebGUI macros in your footer.\r\n

    \r\n\r\nStyle Sheet
    \r\nPlace your style sheet entries here. Style sheets are used to control colors, sizes, and other properties of the elements on your site. See Using Style Sheets for more information.\r\n

    \r\n\r\nAdvanced Users: for greater performance create your stylesheet on the file system (call it something like webgui.css) and add an entry like this to this area: \r\n<link href=\"/webgui.css\" rel=\"stylesheet\" rev=\"stylesheet\" type=\"text/css\">','4,5'); +INSERT INTO help VALUES (17,'WebGUI','English','Add/Edit','Group','See Manage Group for a description of grouping functions and the default groups.\r\n

    \r\n\r\nGroup Name
    \r\nA name for the group. It is best if the name is descriptive so you know what it is at a glance.\r\n

    \r\n\r\nDescription
    \r\nA longer description of the group so that other admins and content managers (or you if you forget) will know what the purpose of this group is.','0'); +INSERT INTO help VALUES (24,'WebGUI','English','Edit','Miscellaneous Settings','Not Found Page
    \r\nIf a page that a user requests is not found in the system, the user can be redirected to the home page or to an error page where they can attempt to find what they were looking for. You decide which is better for your users.\r\n

    \r\n\r\nSession Timeout
    \r\nThe time (in seconds) that a user session remains active (before needing to log in again). This timeout is reset each time a visitor hits a page. Therefore if you set the timeout for 8 hours, a user would have to log in again if s/he hadn\'t visited the site for 8 hours.\r\n

    \r\n\r\n1800 = half hour
    \r\n3600 = 1 hour
    \r\n28000 = 8 hours
    \r\n86400 = 1 day
    \r\n604800 = 1 week
    \r\n1209600 = 2 weeks
    \r\n','6'); +INSERT INTO help VALUES (18,'WebGUI','English','Using','Style Sheets','Cascading Style Sheets (CSS) are a great way to manage the look and feel of any web site. They are used extensively in WebGUI.\r\n

    \r\n\r\nIf you are unfamiliar with how to use CSS, Plain Black Software provides training classes on XHTML and CSS. Alternatively, Bradsoft makes an excellent CSS editor called Top Style.\r\n

    \r\n\r\nThe following is a list of classes used to control the look of WebGUI:\r\n

    \r\n\r\nA
    \r\nThe links throughout the style.\r\n

    \r\n\r\nBODY
    \r\nThe default setup of all pages within a style.\r\n

    \r\n\r\nH1
    \r\nThe headers on every page.\r\n

    \r\n\r\n.accountOptions
    \r\nThe links that appear under the login and account update forms.\r\n

    \r\n\r\n.adminBar
    \r\nThe bar that appears at the top of the page when you\'re in admin mode.\r\n

    \r\n\r\n.content
    \r\nThe main content area on all pages of the style.\r\n

    \r\n\r\n.crumbTrail
    \r\nThe crumb trail (if you\'re using that macro).\r\n

    \r\n\r\n.formDescription
    \r\nThe tags on all forms next to the form elements. \r\n

    \r\n\r\n.formSubtext
    \r\nThe tags below some form elements.\r\n

    \r\n\r\n.highlight
    \r\nDenotes a highlighted item, such as which message you are viewing within a list.\r\n

    \r\n\r\n.homeLink
    \r\nUsed by the my home (^H;) macro.\r\n

    \r\n\r\n.horizontalMenu
    \r\nThe horizontal menu (if you use a horizontal menu macro).\r\n

    \r\n\r\n.loginBox
    \r\nThe login box (^L;) macro.\r\n

    \r\n\r\n.makePrintableLink
    \r\nUsed by the make printable (^r;) macro.\r\n

    \r\n\r\n.myAccountLink
    \r\nUsed by the my account (^a;) macro.\r\n

    \r\n\r\n.pagination
    \r\nThe Previous and Next links on pages with pagination.\r\n

    \r\n\r\n.searchBox
    \r\nUsed by the search (^?;) macro.\r\n

    \r\n\r\n.selectedMenuItem
    \r\nUsed by the FlexMenu (^FlexMenu;) macro.\r\n

    \r\n\r\n.tableData
    \r\nThe data rows on things like message boards and user contributions.\r\n

    \r\n\r\n.tableHeader
    \r\nThe headings of columns on things like message boards and user contributions.\r\n

    \r\n\r\n.tableMenu
    \r\nThe menu on things like message boards and user submissions.\r\n

    \r\n\r\n.verticalMenu
    \r\nThe vertical menu (if you use a verticall menu macro).\r\n

    \r\n\r\nNote: Some widgets have their own unique styles.\r\n\r\n','0'); +INSERT INTO help VALUES (19,'WebGUI','English','Using','Macros','WebGUI macros are used to create dynamic content within otherwise static content. For instance, you may wish to show which user is logged in on every page, or you may wish to have a dynamically built menu or crumb trail. \r\n

    \r\nMacros always begin with a carat (^) and follow with at least one other character and ended with w semicolon (;). Some macros can be extended/configured by taking the format of ^x(\"config text\");. The following is a description of all the macros in the WebGUI system.\r\n

    \r\n^a; or ^a(); - My Account Link
    \r\nA link to your account information. In addition you can change the link text by creating a macro like this ^a(\"Account Info\");.\r\n

    \r\n^C; - Crumb Trail
    \r\nA dynamically generated crumb trail to the current page.\r\n

    \r\n^c; - Company Name
    \r\nThe name of your company specified in the settings by your Administrator.\r\n

    \r\n^D; or ^D(); - Date
    \r\nThe current date and time.\r\n

    \r\nYou can configure the date by using date formatting symbols. For instance, if you created a macro like this ^D(\"%c %D, %y\"); it would output September 26, 2001. The following are the available date formatting symbols:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
    %% = %\r\n
    %y4 digit year
    %Y2 digit year
    %m2 digit month
    %Mvariable digit month
    %cmonth name
    %d2 digit day of month
    %Dvariable digit day of month
    %wday of week name
    %h2 digit base 12 hour
    %Hvariable digit base 12 hour
    %j2 digit base 24 hour
    %Jvariable digit base 24 hour
    %plower case am/pm
    %Pupper case AM/PM
    \r\n

    \r\n^e; - Company Email Address
    \r\nThe email address for your company specified in the settings by your Administrator.\r\n

    \r\n^Execute();
    \r\nAllows a content manager or administrator to execute an external program. Takes the format of ^Execute(\"/this/file.sh\");.\r\n

    \r\n^FlexMenu;
    \r\nThis menu macro creates a top-level menu that expands as the user selects each menu item.\r\n

    \r\n^H; or ^H(); - Home Link
    \r\nA link to the home page of this site. In addition you can change the link text by creating a macro like this ^H(\"Go Home\");.\r\n

    \r\n^I(); - Image Manager Image with Tag
    \r\nThis macro returns an image tag with the parameters for an image defined in the image manager. Specify the name of the image using a tag like this ^I(\"imageName\");.\r\n

    \r\n^i(); - Image Manager Image Path
    \r\nThis macro returns the path of an image uploaded using the Image Manager. Specify the name of the image using a tag like this ^i(\"imageName\");.\r\n

    \r\n^Include();
    \r\nAllows a content manager or administrator to include a file from the local filesystem. Takes the format of ^Include(\"/this/file.html\");\r\n

    \r\n^L; - Login
    \r\nA small login form.\r\n

    \r\n^M; or ^M(); - Current Menu (Vertical)
    \r\nA vertical menu containing the sub-pages at the current level. In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^M(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n

    \r\n^m; - Current Menu (Horizontal)
    \r\nA horizontal menu containing the sub-pages at the current level.\r\n

    \r\n^P; or ^P(); - Previous Menu (Vertical)
    \r\nA vertical menu containing the sub-pages at the previous level. In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^P(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n

    \r\n^p; - Previous Menu (Horizontal)
    \r\nA horizontal menu containing the sub-pages at the previous level.\r\n

    \r\n^PageTitle;
    \r\nDisplays the title of the current page.\r\n

    \r\n^r; or ^r(); - Make Page Printable
    \r\nCreates a link to remove the style from a page to make it printable. In addition, you can change the link text by creating a macro like this ^r(\"Print Me!\");.\r\n

    \r\n^S(); - Specific SubMenu (Vertical)
    \r\nThis macro allows you to get the submenu of any page, starting with the page you specified. For instance, you could get the home page submenu by creating a macro that looks like this ^S(\"home\",0);. The first value is the urlized title of the page and the second value is the depth you\'d like the menu to go. By default it will show only the first level. To go three levels deep create a macro like this ^S(\"home\",3);.\r\n

    \r\n^s(); - Specific SubMenu (Horizontal)
    \r\nThis macro allows you to get the submenu of any page, starting with the page you specified. For instance, you could get the home page submenu by creating a macro that looks like this ^s(\"home\");. The value is the urlized title of the page.\r\n

    \r\n^T; or ^T(); - Top Level Menu (Vertical)
    \r\nA vertical menu containing the main pages of the site (aka the sub-pages from the home page). In addition, you may configure this macro by specifying how many levels deep the menu should go. By default it will show only the first level. To go three levels deep create a macro like this ^T(3);. If you set the macro to \"0\" it will track the entire site tree.\r\n

    \r\n^t; - Top Level Menu (Horizontal)
    \r\nA vertical menu containing the main pages of the site (aka the sub-pages from the home page).\r\n

    \r\n^u; - Company URL
    \r\nThe URL for your company specified in the settings by your Administrator.\r\n

    \r\n^/; - System URL
    \r\nThe URL to the gateway script (including the domain for this site). This is often used within pages so that if your development server is on a domain different than your production server that your URLs will still worked when moved.\r\n

    \r\n^\\; - Page URL
    \r\nThe URL to the current page (including the domain for this site). This is often used within pages so that if your development server is on a domain different than your production server that your URLs will still worked when moved.\r\n

    \r\n^@; - Username
    \r\nThe username of the currently logged in user.\r\n

    \r\n^?; - Search
    \r\nAdd a search box.\r\n

    \r\n^#; - User ID
    \r\nThe user id of the currently logged in user.\r\n

    \r\n^*; or ^*(); - Random Number
    \r\nA randomly generated number. This is often used on images (such as banner ads) that you want to ensure do not cache. In addition, you may configure this macro like this ^*(100); to create a random number between 0 and 100.\r\n

    \r\n^-;,^0;,^1;,^2;,^3;, etc.
    \r\nThese macros are reserved for widget-specific functions as in the SQL Report widget.\r\n','0'); +INSERT INTO help VALUES (1,'SQLReport','English','Add/Edit','SQL Report','SQL Reports are perhaps the most powerful widget in the WebGUI arsenal. They allow a user to query data from any database that they have access to. This is great for getting sales figures from your Accounting database or even summarizing all the message boards on your web site.\r\n

    \r\n\r\nTitle
    \r\nThe title of this report.\r\n

    \r\n\r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\n\r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\n\r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\n\r\nDescription
    \r\nDescribe the content of this report so your users will better understand what the report is all about.\r\n

    \r\n\r\nTemplate
    \r\nLayout a template of how this report should look. Usually you\'ll use HTML tables to generate a report. An example is included below. If you leave this field blank a template will be generated based on your result set.\r\n

    \r\n\r\nThere are special macro characters used in generating SQL Reports. They are ^-;, ^0;, ^1;, ^2;, ^3;, etc. These macros will be processed regardless of whether you checked the process macros box above. The ^- macro represents split points in the document where the report will begin and end looping. The numeric macros represent the data fields that will be returned from your query.\r\n

    \r\n

    \r\nSample Template:\r\n<table>\r\n<tr><th>Employee Name</th><th>Employee #</th><th>Vacation Days Remaining</th><th>Monthly Salary</th></tr>\r\n^-;\r\n<tr><td>^0;</td><td>^1;</td><td>^2;</td><td>^3;</td></tr>\r\n^-;\r\n</table>\r\n
    \r\nQuery
    \r\nThis is a standard SQL query. If you are unfamiliar with SQL, Plain Black Software provides training courses in SQL and database management.\r\n

    \r\n\r\nDSN
    \r\nData Source Name is the unique identifier that Perl uses to describe the location of your database. It takes the format of DBI:[driver]:[database name]:[host]. \r\n

    \r\n\r\nExample: DBI:mysql:WebGUI:localhost\r\n

    \r\n\r\nDatabase User\r\nThe username you use to connect to the DSN.\r\n

    \r\n\r\nDatabase Password\r\nThe password you use to connect to the DSN.\r\n

    \r\n\r\nPaginate After\r\nHow many rows should be displayed before splitting the results into separate pages? In other words, how many rows should be displayed per page?\r\n

    \r\n\r\nConvert carriage returns?\r\nDo you wish to convert the carriage returns in the resultant data to HTML breaks (<br>).\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (21,'WebGUI','English','Using','Widget','Widgets are the true power of WebGUI. Widgets are tiny pluggable applications built to run under WebGUI. Message boards and polls are examples of widgets.\r\n

    \r\nTo add a widget to a page, first go to that page, then select Add Content... from the upper left corner of your screen. Each widget has it\'s own help so be sure to read the help if you\'re not sure how to use a widget.\r\n','0'); +INSERT INTO help VALUES (1,'Article','English','Add/Edit','Article','Articles are the Swiss Army knife of WebGUI. Most pieces of static content can be added via the Article widget.\r\n

    \r\nTitle
    \r\nWhat\'s the title for this content? Even if you don\'t wish the title to appear, it\'s a good idea to title your content so that if it is ever copied to the clipboard it will have a name.\r\n

    \r\nDisplay the title?
    \r\nDo you wish to display the title listed above?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros on this article? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nStart Date
    \r\nWhat date do you want this article to appear on the site? Dates are in the format of MM/DD/YYYY. You can use the JavaScript wizard to choose your date from a calendar by clicking on the set date button. By default the date is set to 01/01/2000.\r\n

    \r\nEnd Date
    \r\nWhat date do you want this article to be removed from the site? By default the date is set to 100 years in the future, 01/01/2100.\r\n

    \r\nBody
    \r\nThe body of the article is where all the content goes. You may feel free to add HTML tags as necessary to format your content. Be sure to put a <p> between paragraphs to add white space to your content.\r\n

    \r\nImage
    \r\nChoose an image (.jpg, .gif, .png) file from your hard drive. This file will be uploaded to the server and displayed in the upper-right corner of your article.\r\n

    \r\nLink Title
    \r\nIf you wish to add a link to your article, enter the title of the link in this field. \r\n

    \r\nExample: Google\r\n

    \r\nLink URL
    \r\nIf you added a link title, now add the URL (uniform resource locator) here. \r\n

    \r\nExample: http://www.google.com\r\n

    \r\nAttachment
    \r\nIf you wish to attach a word processor file, a zip file, or any other file for download by your users, then choose it from your hard drive.\r\n

    \r\nConvert carriage returns?

    \r\nIf you\'re publishin HTML there\'s generally no need to check this option, but if you aren\'t using HTML and you want a carriage return every place you hit your \"Enter\" key, then check this option.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'ExtraColumn','English','Add/Edit','Extra Column','Extra columns allow you to change the layout of your page for one page only. If you wish to have multiple columns on all your pages. Perhaps you should consider altering the style applied to your pages. \r\n

    \r\nColumns are always added from left to right. Therefore any existing content will be on the left of the new column.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nSpacer
    \r\nSpacer is the amount of space between your existing content and your new column. It is measured in pixels.\r\n

    \r\nWidth
    \r\nWidth is the actual width of the new column to be added. Width is measured in pixels.\r\n

    \r\nStyleSheet Class
    \r\nBy default the content style (which is the style the body of your site should be using) that is applied to all columns. However, if you\'ve created a style specifically for columns, then feel free to modify this class.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (27,'WebGUI','English','Add/Edit','Widget','You can add widgets by selecting from the Add Content pulldown menu. You can edit them by clicking on the \"Edit\" button that appears directly above an instance of a particular widget.','0'); +INSERT INTO help VALUES (1,'Poll','English','Add/Edit','Poll','Polls can be used to get the impressions of your users on various topics.\r\n

    \r\nTitle
    \r\nThe title of the poll. Even if you don\'t wish to display the title you should fill out this field so this poll will have a name if it is ever placed in the clipboard.\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nYou may provide a description for this poll, or give the user some background information.\r\n

    \r\nActive
    \r\nIf this box is checked, then users will be able to vote. Otherwise they\'ll only be able to see the results of the poll.\r\n

    \r\nWho can vote?
    \r\nChoose a group that can vote on this poll.\r\n

    \r\nGraph Width
    \r\nThe width of the poll results graph. The width is measured in pixels.\r\n

    \r\nQuestion
    \r\nWhat is the question you\'d like to ask your users?\r\n

    \r\nAnswers
    \r\nEnter the possible answers to your question. Enter only one answer per line. Polls are only capable of 20 possible answers.\r\n

    \r\nReset votes.
    \r\nReset the votes on this poll.\r\n

    \r\n


    \r\nNote: The following style sheet entries are custom to the Poll widget:\r\n

    \r\n.pollAnswer
    \r\nAn answer on a poll.\r\n

    \r\n.pollColor \r\nThe color of the percentage bar on a poll.\r\n

    \r\n.pollQuestion \r\nThe question on a poll.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'SiteMap','English','Add/Edit','Site Map','Site maps are used to provide additional navigation in WebGUI. You could set up a traditional site map that would display a hierarchical view of all the pages in the site. On the other hand, you could use site maps to provide extra navigation at certain levels in your site.\r\n

    \r\nTitle
    \r\nWhat title would you give to this site map? You should fill this field out even if you don\'t wish it to be displayed.\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nEnter a description as to why this site map is here and what purpose it serves.\r\n

    \r\nStarting from this level?
    \r\nIf the site map should display the page tree starting from this level, then check this box. If you wish the site map to start from the home page then uncheck it.\r\n

    \r\nShow only one level?
    \r\nShould the site map display only the current level of pages or all pages from this point forward? \r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'MessageBoard','English','Add/Edit','Message Board','Message boards, also called Forums and/or Discussions, are a great way to add community to any site or intranets. Many companies use message boards internally to collaborate on projects.\r\n

    \r\nTitle
    \r\nThe name of this board.\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nBriefly describe what should be displayed on this message board.\r\n

    \r\nWho can post?
    \r\nWhat group can post to this message board?\r\n

    \r\nMessages Per Page
    \r\nWhen a visitor first comes to a message board s/he will be presented with a listing of all the topics (aka threads) of the message board. If a board is popular, it will quickly have many topics. The messages per page attribute allows you to specify how many topics should be shown on one page.\r\n

    \r\nEdit Timeout
    \r\nHow long after a user has posted to the board will their message be available for them to edit. This timeout is measured in hours.\r\n

    \r\nNote: Don\'t set this limit too high. One of the great things about message boards is that they are an accurate record of a discussion. If you allow editing for a long time, then a user has a chance to go back and change his/her mind a long time after the original statement was made.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'LinkList','English','Add/Edit','Link List','Link lists are just what they sound like, a list of links. Many sites have a links section, and this just automates the process.\r\n

    \r\nTitle
    \r\nWhat is the title of this link list?\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nDescribe the purpose of the links in this list.\r\n

    \r\nProceed to add link?
    \r\nLeave this checked if you want to add links to the link list directly after creating it.\r\n

    \r\nAdding / Editing Links
    \r\nYou\'ll notice at the bottom of the Edit screen that there are some options to add, edit, delete and reorder the links in your link lists. This process works exactly as the process for doing the same with widgets and pages. The three properties of links are name, url, and description.\r\n

    \r\nStyle
    \r\nAn extra StyleSheet class has been added to this widget: linkTitle. Use this to bold, colorize, or otheriwise manipulate the title of each link.','1,2,3,4,5'); +INSERT INTO help VALUES (13,'WebGUI','English','Edit','Mail Settings','Recover Password Message
    \r\nThe message that gets sent to a user when they use the \"recover password\" function.\r\n

    \r\nSMTP Server
    \r\nThis is the address of your local mail server. It is needed for all features that use the Internet email system (such as password recovery).\r\n\r\n','6'); +INSERT INTO help VALUES (1,'SyndicatedContent','English','Add/Edit','Syndicated Content','Syndicated content is content that is pulled from another site using the RDF/RSS specification. This technology is often used to pull headlines from various news sites like CNN and Slashdot. It can, of course, be used for other things like sports scores, stock market info, etc.\r\n

    \r\nYou can find a list of syndicated content at http://my.userland.com. You will need to register with an account to browse their listing of content. Also, the list contained there is by no means a complete list of all the syndicated content on the internet.\r\n

    \r\nTitle
    \r\nWhat is the title for this content? This is often the title of the site that the content comes from.\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nBriefly describe the content being pulled so that your users will know what they are seeing.\r\n

    \r\nURL to RSS file
    \r\nProvide the exact URL (starting with http://) to the syndicated content\'s RDF or RSS file. The syndicated content will be downloaded from this URL hourly.','1,2,3,4,5'); +INSERT INTO help VALUES (1,'EventsCalendar','English','Add/Edit','Events Calendar','Events calendars are used on many intranets to keep track of internal dates that affect a whole organization. Also events calendars on consumer sites are a great way to let your customers know what events you\'ll be attending and what promotions you\'ll be having.\r\n

    \r\nTitle
    \r\nWhat is the title of this events calendar?\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nBriefly describe what this events calendar details.\r\n

    \r\nProceed to add event?
    \r\nLeave this checked if you want to add events to the events calendar directly after creating it.\r\n

    \r\nAdd / Edit Events
    \r\nOn the edit screen you\'ll notice that there are options to add, edit, and delete the events in your events calendar. The properties for events are name, description, start date, and end date.\r\n

    \r\nNote: Events that have already happened will not be displayed on the events calendar.\r\n

    \r\n
    \r\nNote: The following style is specific to the Events Calendar.\r\n

    \r\n.eventTitle
    \r\nThe title of an individual event.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (1,'FAQ','English','Add/Edit','F.A.Q.','It seems that almost every web site, intranet, and extranet in the world has a frequently asked questions area. This widget helps you build one too.\r\n

    \r\nTitle
    \r\nWhat is the title for this FAQ section?\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nBriefly describe what this FAQ covers.\r\n

    \r\nProceed to add question?
    \r\nLeave this checked if you want to add questions to the FAQ directly after creating it.\r\n

    \r\nAdd / Edit Questions
    \r\nOn the edit screen you\'ll notice options for adding, editing, deleting, and reordering the questions in your FAQ. The two properties of FAQ questions are question and answer.\r\n

    \r\n
    \r\nNote: The following style is specific to the FAQ widget.\r\n

    \r\n.faqQuestion
    \r\nAn F.A.Q. question. To distinguish it from an answer.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (11,'WebGUI','English','Edit','File Settings','Path to WebGUI Extras
    \r\nThe web-path to the directory containing WebGUI images and javascript files.\r\n

    \r\nMaximum Attachment Size
    \r\nThe maximum size of files allowed to be uploaded to this site. This applies to all widgets that allow uploaded files and images (like Article and User Contributions). This size is measured in kilobytes.\r\n

    \r\nWeb Attachment Path
    \r\nThe web-path of the directory where attachments are to be stored.\r\n

    \r\nServer Attachment Path
    \r\nThe local path of the directory where attachments are to be stored. (Perhaps /var/www/public/uploads) Be sure that the web server has the rights to write to that directory.\r\n','6'); +INSERT INTO help VALUES (2,'WebGUI','English','Edit','Authentication Settings','Anonymous Registration
    \r\nDo you wish visitors to your site to be able to register themselves?\r\n

    \r\nAuthentication Method (default)
    \r\nWhat should the default authentication method be for new accounts that are created? The two available options are WebGUI and LDAP. WebGUI authentication means that the users will authenticate against the username and password stored in the WebGUI database. LDAP authentication means that users will authenticate against an external LDAP server.\r\n

    \r\nNote: Authentication settings can be customized on a per user basis.\r\n

    \r\nUsername Binding
    \r\nBind the WebGUI username to the LDAP Identity. This requires the user to have the same username in WebGUI as they specified during the Anonymous Registration process. It also means that they won\'t be able to change their username later. This only in effect if the user is authenticating against LDAP.\r\n

    \r\nLDAP URL (default)
    \r\nThe default url to your LDAP server. The LDAP URL takes the form of ldap://[server]:[port]/[base DN]. Example: ldap://ldap.mycompany.com:389/o=MyCompany.\r\n

    \r\nLDAP Identity
    \r\nThe LDAP Identity is the unique identifier in the LDAP server that the user will be identified against. Often this field is shortname, which takes the form of first initial + last name. Example: jdoe. Therefore if you specify the LDAP identity to be shortname then Jon Doe would enter jdoe during the registration process.\r\n

    \r\nLDAP Identity Name
    \r\nThe label used to describe the LDAP Identity to the user. For instance, some companies use an LDAP server for their proxy server users to authenticate against. In the documentation or training already provided to their users, the LDAP identity is known as their Web Username. So you could enter that label here for consitency.\r\n

    \r\nLDAP Password Name
    \r\nJust as the LDAP Identity Name is a label, so is the LDAP Password Name. Use this label as you would LDAP Identity Name.\r\n\r\n','6'); +INSERT INTO help VALUES (1,'UserSubmission','English','Add/Edit','User Submission System','User submission systems are a great way to add a sense of community to any site as well as get free content from your users.\r\n

    \r\nTitle
    \r\nWhat is the title for this user submission system?\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nBriefly describe why this user submission system is here and what should be submitted to it.\r\n

    \r\nWho can approve?
    \r\nWhat group is allowed to approve and deny content?\r\n

    \r\nWho can contribute?
    \r\nWhat group is allowed to contribute content?\r\n

    \r\nSubmissions Per Page
    \r\nHow many submissions should be listed per page in the submissions index?\r\n

    \r\nDefault Status
    \r\nShould submissions be set to approved, pending, or denied by default?\r\n

    \r\nNote: If you set the default status to pending, then be prepared to monitor the pending queue under the Admin menu.\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (6,'WebGUI','English','Edit','Company Information','Company Name
    \r\nThe name of your company. It will appear on all emails and anywhere you use the Company Name macro.\r\n

    \r\nCompany Email Address
    \r\nA general email address at your company. This is the address that all automated messages will come from. It can also be used via the WebGUI macro system.\r\n

    \r\nCompany URL
    \r\nThe primary URL of your company. This will appear on all automated emails sent from the WebGUI system. It is also available via the WebGUI macro system.\r\n','6'); +INSERT INTO help VALUES (46,'WebGUI','English','Empty','Trash','If you choose to empty your trash, any items contained in it will be lost forever. If you\'re unsure about a few items, it might be best to cut them to your clipboard before you empty the trash.','0'); +INSERT INTO help VALUES (22,'WebGUI','English','Edit','Profile Settings','Profiles are used to extend the information of a particular user. In some cases profiles are important to a site, in others they are not. Use the following switches to turn the various profile sections on and off.\r\n

    \r\nAllow real name?
    \r\nDo you want users to enter and display their real names?\r\n

    \r\nAllow extra contact information?
    \r\nDo you want users to enter and display their extra contact information such as Instant Messenger IDs, cell phone numbers, and pager numbers?\r\n

    \r\nAllow home information?
    \r\nDo you want users to enter and display their home address and phone number?\r\n

    \r\nAllow business information?
    \r\nDo you want users to enter and display their work address and phone number?\r\n

    \r\nAllow miscellaneous information?
    \r\nDo you want users to enter and display any extra info such as gender, birthdate and home page?','6'); +INSERT INTO help VALUES (25,'WebGUI','English','Using','Search Engine','Due to many requests by our customers, we\'ve built a small, but sturdy search engine into WebGUI. If you wish to use the internal search engine, you can use the ^?; macro or feel free to build your own form to access it.\r\n

    \r\nWe do not recommend the built-in search engine\'s use on large sites as it can be very slow. There are many great search engines available around the Internet that can be used with WebGUI.\r\n

    \r\nMnoGo Search - A very powerful and very fast open-source search engine. We maintain an unsupported WebGUI widget on the Plain Black site that will allow you to use MnoGo search directly within WebGUI or you can use the super-powerful external search engine it provides.\r\n

    \r\nht://Dig - Another great open-source search engine. We\'ve used it in many instances and it always proves to be reliable and fast.','0'); +INSERT INTO help VALUES (1,'Item','English','Add/Edit','Item','Like Articles, Items are the Swiss Army knife of WebGUI. Most pieces of static content can be added via the Item widget, though Items are usually used for smaller content than Articles.\r\n

    \r\nTitle
    \r\nWhat\'s the title for this content?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nThe long description of this Item.\r\n

    \r\nLink URL
    \r\nThis URL will be attached to the title of this Item.\r\n

    \r\nExample: http://www.google.com\r\n

    \r\nAttachment
    \r\nIf you wish to attach a word processor file, a zip file, or any other file for download by your users, then choose it from your hard drive.\r\n\r\n','1,2,3,4,5'); +INSERT INTO help VALUES (30,'WebGUI','English','Select','Package','Packages are groups of pages and widgets that are predefined to be deployed together. A package manager may see the need to create a package several pages with a message board, an FAQ, and a Poll because that task is performed quite often. Packages are often defined to lessen the burden of repetitive tasks.\r\n

    \r\nOne package that many people create is a Page/Article package. It is often the case that you want to add a page with an article on it for content. Instead of going through the steps of creating a page, going to the page, and then adding an article to the page, you may wish to simply create a package to do those steps all at once.','0'); +INSERT INTO help VALUES (31,'WebGUI','English','Add/Edit','Package','To create a package follow these simple steps:\r\n
      \r\n
    1. From the admin menu select \"View Packages.\"\r\n
    2. Add a page and give it a name. The name of the page will be the name of the package.\r\n
    3. Go to the new page you created and start adding pages and widgets. Any pages or widgets you add will be created each time this package is deployed. \r\n
    \r\nNotes:
    \r\nIn order to add, edit, or delete packages you must be in the Package Mangers group or in the Admins group.\r\n

    \r\nIf you add content to any of the widgets, that content will automatically be copied also when the package is deployed.\r\n

    \r\nPrivileges and styles assigned to pages in the package will not be copied when the package is deployed. Instead the pages will take the privileges and styles of the area to which they are deployed.','0'); +INSERT INTO help VALUES (20,'WebGUI','English','Add/Edit','Image','Name
    \r\nThe label that this image will be referenced by to include it into pages.\r\n

    \r\n\r\nFile
    \r\nSelect a file from your local drive to upload to the server.\r\n

    \r\n\r\nParameters
    \r\nAdd any HTML <img&rt; parameters that you wish to act as the defaults for this image.\r\n

    \r\nExample:
    \r\nalign=\"right\"\r\nalt=\"This is an image\"','15'); +INSERT INTO help VALUES (1,'DownloadManager','English','Add/Edit','Download Manager','The Download Manager is designed to help you manage file distribution on your site. It allows you to specify who may download files from your site.\r\n

    \r\nTitle
    \r\nWhat is the title of this download manager?\r\n

    \r\nDisplay the title?
    \r\nDo you wish to disply the title?\r\n

    \r\nProcess macros?
    \r\nDo you wish to process WebGUI macros? Unchecking this box will not process macros and will speed up page execution.\r\n

    \r\nPosition
    \r\nSelect the position in the current page template where this widget should be placed.\r\n

    \r\nDescription
    \r\nDescribe the purpose of this download manager.\r\n

    \r\n\r\nPaginate After
    \r\nHow many files should be displayed before splitting the results into separate pages? In other words, how many files should be displayed per page?\r\n

    \r\n\r\nProceed to add file?
    \r\nIf you wish to start adding files to download right away, leave this checked.\r\n

    \r\n\r\nAdding Files
    \r\nAfter you\'ve created a download manager you can add as many files as you wish to it. The properties for each file are Download File, Alternate Version #1, Alternate Version #2, File Title, Brief Synopsis, and Group to Download. All of these should be self explainatory except for the alternate versions. Alternate versions are used for when you\'re distributing different file formats of the same file, such as a Microsoft Word document and a PDF version. Or a JPEG, GIF, and TIFF.\r\n','0'); +INSERT INTO help VALUES (23,'WebGUI','English','Delete','Image','When you delete an image it will be removed from the server and cannot be recovered. Therefore, be sure that you really wish to delete the image before you confirm the delete.','15'); +INSERT INTO help VALUES (26,'WebGUI','English','Manage','Image','Using the built in image manager in WebGUI you can upload images to one central location for use anywhere else in the site with no need for any special software or knowledge.\r\n

    \r\n To place the images you\'ve uploaded use the ^I(); and ^i(); macros. More information on them can be found in the Using Macros help.','15'); + diff --git a/etc/WebGUI.conf b/etc/WebGUI.conf index cbe1dd612..6d1c3fc82 100644 --- a/etc/WebGUI.conf +++ b/etc/WebGUI.conf @@ -2,3 +2,4 @@ dsn = DBI:mysql:WebGUI dbuser = webgui dbpass = password logfile = /data/webgui.log +#scripturl = / diff --git a/etc/WebGUI.conf.original b/etc/WebGUI.conf.original index cbe1dd612..6d1c3fc82 100644 --- a/etc/WebGUI.conf.original +++ b/etc/WebGUI.conf.original @@ -2,3 +2,4 @@ dsn = DBI:mysql:WebGUI dbuser = webgui dbpass = password logfile = /data/webgui.log +#scripturl = / diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm index 9e0d0b8cf..421b79b6b 100644 --- a/lib/WebGUI.pm +++ b/lib/WebGUI.pm @@ -1,5 +1,5 @@ package WebGUI; -our $VERSION = "3.0.3"; +our $VERSION = "3.1.0"; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2002 Plain Black Software. @@ -61,15 +61,16 @@ sub _displayAdminBar { $session{page}{url}.'?op=listGroups'=>WebGUI::International::get(5), $session{page}{url}.'?op=manageSettings'=>WebGUI::International::get(4), $session{page}{url}.'?op=listUsers'=>WebGUI::International::get(7), - $session{env}{SCRIPT_NAME}.'/page_not_found'=>WebGUI::International::get(8), - $session{env}{SCRIPT_NAME}.'/trash'=>WebGUI::International::get(10), + $session{config}{scripturl}.'/page_not_found'=>WebGUI::International::get(8), + $session{config}{scripturl}.'/trash'=>WebGUI::International::get(10), $session{page}{url}.'?op=purgeTrash'=>WebGUI::International::get(11), $session{page}{url}.'?op=viewStatistics'=>WebGUI::International::get(144) ); } if (WebGUI::Privilege::isInGroup(4,$session{user}{userId})) { %hash = ( - $session{env}{SCRIPT_NAME}.'/clipboard'=>WebGUI::International::get(9), + $session{page}{url}.'?op=listImages'=>WebGUI::International::get(394), + $session{config}{scripturl}.'/clipboard'=>WebGUI::International::get(9), %hash ); } @@ -81,7 +82,7 @@ sub _displayAdminBar { } if (WebGUI::Privilege::isInGroup(6,$session{user}{userId})) { %hash = ( - $session{env}{SCRIPT_NAME}.'/packages'=>WebGUI::International::get(374), + $session{config}{scripturl}.'/packages'=>WebGUI::International::get(374), %hash ); } @@ -174,7 +175,7 @@ sub page { } else { if (WebGUI::Privilege::canViewPage()) { if ($session{var}{adminOn}) { - $pageEdit = '
    Page Settings:Edit PageCut PageDelete PageMove Page UpMove Page Down'; + $pageEdit = '
    Page Settings:Edit PageCut PageDelete PageMove Page UpMove Page Down'."\n\n"; } $sth = WebGUI::SQL->read("select widgetId, namespace, templatePosition from widget where pageId=".$session{page}{pageId}." order by sequenceNumber, widgetId"); while (@widgetList = $sth->array) { @@ -182,7 +183,7 @@ sub page { $contentHash{$widgetList[2]} .= '


    EditCutCopyDeleteMove UpMove DownMove to TopMove to Bottom
    '; } $cmd = "WebGUI::Widget::".$widgetList[1]."::www_view"; - $contentHash{$widgetList[2]} .= &$cmd($widgetList[0])."

    "; + $contentHash{$widgetList[2]} .= &$cmd($widgetList[0])."

    \n\n"; } $sth->finish; $cmd = "use WebGUI::Template::".$session{page}{template}; @@ -197,10 +198,14 @@ sub page { if ($session{var}{adminOn}) { $adminBar = _displayAdminBar(@availableWidgets); } - $httpHeader = WebGUI::Session::httpHeader(); - ($header, $footer) = WebGUI::Style::getStyle(); - WebGUI::Session::close(); - return $httpHeader.$adminBar.$header.$pageEdit.$content.$footer; + if ($session{header}{redirect} ne "") { + return $session{header}{redirect}; + } else { + $httpHeader = WebGUI::Session::httpHeader(); + ($header, $footer) = WebGUI::Style::getStyle(); + WebGUI::Session::close(); + return $httpHeader.$adminBar.$header.$pageEdit.$content.$footer; + } } diff --git a/lib/WebGUI/Attachment.pm b/lib/WebGUI/Attachment.pm index 6a3a8d7fc..be88e84d4 100644 --- a/lib/WebGUI/Attachment.pm +++ b/lib/WebGUI/Attachment.pm @@ -25,14 +25,15 @@ sub copy { if ($_[0] ne "") { $oldFile = $session{setting}{attachmentDirectoryLocal}.'/'.$_[1]; if ($_[3] ne "") { - $oldFile .= '/'.$_[3] + $oldFile .= '/'.$_[3]; } $oldFile .= '/'.$_[0]; $newFile = $session{setting}{attachmentDirectoryLocal}.'/'.$_[2]; - if ($_[4] ne "") { - $newFile .= '/'.$_[4] - } mkdir ($newFile,0755); + if ($_[4] ne "") { + $newFile .= '/'.$_[4]; + mkdir ($newFile,0755); + } $newFile .= '/'.$_[0]; $a = FileHandle->new($oldFile,"r"); $b = FileHandle->new(">".$newFile); @@ -44,6 +45,54 @@ sub copy { } } +#------------------------------------------------------------------- +sub deleteSubmission { + my ($dir); + $dir = $session{setting}{attachmentDirectoryLocal}.'/'.$_[0].'/'.$_[1]; + rmtree($dir); +} + +#------------------------------------------------------------------- +sub getType { + my ($extension, $icon, %type); + $extension = lc($_[0]); + $extension =~ s/.*?\.(.*?)$/$1/; + if ($extension eq "doc" || $extension eq "dot" || $extension eq "wri") { + $icon = $session{setting}{lib}."/fileIcons/doc.gif"; + } elsif ($extension eq "txt" || $extension eq "log" || $extension eq "config" || $extension eq "conf") { + $icon = $session{setting}{lib}."/fileIcons/txt.gif"; + } elsif ($extension eq "xls" || $extension eq "xlt" || $extension eq "csv") { + $icon = $session{setting}{lib}."/fileIcons/xls.gif"; + } elsif ($extension eq "html" || $extension eq "htm" || $extension eq "xml") { + $icon = $session{setting}{lib}."/fileIcons/html.gif"; + } elsif ($extension eq "ram" || $extension eq "mpeg" || $extension eq "mpg" || + $extension eq "wav" || $extension eq "mp3" || $extension eq "avi") { + $icon = $session{setting}{lib}."/fileIcons/html.gif"; + } elsif ($extension eq "html" || $extension eq "htm" || $extension eq "xml") { + $icon = $session{setting}{lib}."/fileIcons/html.gif"; + } elsif ($extension eq "rar" || $extension eq "tar" || $extension eq "gz" || $extension eq "Z") { + $icon = $session{setting}{lib}."/fileIcons/rar.gif"; + } elsif ($extension eq "mdb") { + $icon = $session{setting}{lib}."/fileIcons/mdb.gif"; + } elsif ($extension eq "ppt") { + $icon = $session{setting}{lib}."/fileIcons/ppt.gif"; + } elsif ($extension eq "tiff" || $extension eq "tif" || $extension eq "bmp" || + $extension eq "psd" ||$extension eq "psp" || $extension eq "gif" || + $extension eq "jpg" || $extension eq "jpeg") { + $icon = $session{setting}{lib}."/fileIcons/psp.gif"; + } elsif ($extension eq "zip") { + $icon = $session{setting}{lib}."/fileIcons/zip.gif"; + } elsif ($extension eq "mov") { + $icon = $session{setting}{lib}."/fileIcons/mov.gif"; + } elsif ($extension eq "pdf") { + $icon = $session{setting}{lib}."/fileIcons/pdf.gif"; + } else { + $icon = $session{setting}{lib}."/fileIcons/unknown.gif"; + } + %type = (extension => $extension, icon => $icon); + return %type; +} + #------------------------------------------------------------------- sub purgeWidget { my ($dir); @@ -54,7 +103,7 @@ sub purgeWidget { #------------------------------------------------------------------- # eg: save(formVarName,widgetId,optionallySubmissionId); sub save { - my ($file, $filename, $bytesread, $buffer, $urlizedFilename, $path); + my (%type, $file, $filename, $bytesread, $buffer, $urlizedFilename, $path); $filename = $session{cgi}->upload($_[0]); if (defined $filename) { if ($filename =~ /([^\/\\]+)$/) { @@ -62,6 +111,12 @@ sub save { } else { $urlizedFilename = $filename; } + %type = getType($urlizedFilename); + if ($type{extension} eq "pl" || $type{extension} eq "perl" || $type{extension} eq "sh" || + $type{extension} eq "cgi" || $type{extension} eq "php" || $type{extension} eq "asp") { + $urlizedFilename =~ s/\./\_/g; + $urlizedFilename .= ".txt"; + } $urlizedFilename = urlize($urlizedFilename); $path = $session{setting}{attachmentDirectoryLocal}."/".$_[1]."/"; mkdir ($path,0755); diff --git a/lib/WebGUI/Form.pm b/lib/WebGUI/Form.pm index 826685c2b..117311009 100644 --- a/lib/WebGUI/Form.pm +++ b/lib/WebGUI/Form.pm @@ -13,6 +13,7 @@ package WebGUI::Form; use strict qw(vars subs); use WebGUI::International; use WebGUI::Session; +use WebGUI::SQL; #------------------------------------------------------------------- sub _fixQuotes { @@ -40,6 +41,16 @@ sub file { return $output; } +#------------------------------------------------------------------- +sub groupList { + my ($output, %hash, @array); + tie %hash, 'Tie::IxHash'; + %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); + $array[0] = $_[1]; + $output = selectList($_[0],\%hash,\@array); + return $output; +} + #------------------------------------------------------------------- sub hidden { my ($output, $name, $value); diff --git a/lib/WebGUI/Macro/C_crumbTrail.pm b/lib/WebGUI/Macro/C_crumbTrail.pm index 4d0ff5ff8..7d3abefcf 100644 --- a/lib/WebGUI/Macro/C_crumbTrail.pm +++ b/lib/WebGUI/Macro/C_crumbTrail.pm @@ -24,7 +24,8 @@ sub _recurseCrumbTrail { $output .= _recurseCrumbTrail($data{parentId}); } if ($data{title} ne "") { - $output .= ''.$data{title}.' > '; + $output .= ''.$data{title}.' > '; } return $output; } diff --git a/lib/WebGUI/Macro/Execute.pm b/lib/WebGUI/Macro/Execute.pm new file mode 100644 index 000000000..ba60a7fc0 --- /dev/null +++ b/lib/WebGUI/Macro/Execute.pm @@ -0,0 +1,38 @@ +package WebGUI::Macro::Execute; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use WebGUI::Macro; + +#------------------------------------------------------------------- +sub _replacement { + my (@param, $temp); + @param = WebGUI::Macro::getParams($_[0]); + if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /WebGUI.conf/) { + $temp = "SECURITY VIOLATION"; + } else { + $temp = "

    ".`$param[0]`."
    "; + } + return $temp; +} + +#------------------------------------------------------------------- +sub process { + my ($output, $temp); + $output = $_[0]; + $output =~ s/\^Execute\((.*?)\)\;/_replacement($1)/ge; + return $output; +} + +1; + + diff --git a/lib/WebGUI/Macro/FlexMenu.pm b/lib/WebGUI/Macro/FlexMenu.pm index b19f80275..162a98f4f 100644 --- a/lib/WebGUI/Macro/FlexMenu.pm +++ b/lib/WebGUI/Macro/FlexMenu.pm @@ -35,7 +35,8 @@ sub _reversePageTree { if ($_[1] == $data[0]) { $output .= ''; } - $output .= ''.$data[2].'
    '; + $output .= ''.$data[2].'
    '; if ($_[1] == $data[0]) { $output .= '
    '; } diff --git a/lib/WebGUI/Macro/H_homeLink.pm b/lib/WebGUI/Macro/H_homeLink.pm index 7fac81689..c5d5e94cf 100644 --- a/lib/WebGUI/Macro/H_homeLink.pm +++ b/lib/WebGUI/Macro/H_homeLink.pm @@ -19,7 +19,7 @@ use WebGUI::Session; sub _replacement { my (@param, $temp); @param = WebGUI::Macro::getParams($1); - $temp = ''; + $temp = ''; if ($param[0] ne "") { $temp .= $param[0]; } else { diff --git a/lib/WebGUI/Macro/I_imageWithTags.pm b/lib/WebGUI/Macro/I_imageWithTags.pm new file mode 100644 index 000000000..9c9d531dd --- /dev/null +++ b/lib/WebGUI/Macro/I_imageWithTags.pm @@ -0,0 +1,40 @@ +package WebGUI::Macro::I_imageWithTags; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use Tie::CPHash; +use WebGUI::Macro; +use WebGUI::Session; +use WebGUI::SQL; + +#------------------------------------------------------------------- +sub _replacement { + my (@param, $temp, %data); + tie %data, 'Tie::CPHash'; + @param = WebGUI::Macro::getParams($_[0]); + %data = WebGUI::SQL->quickHash("select * from images where name='$param[0]'"); + $temp = ''; + return $temp; +} + +#------------------------------------------------------------------- +sub process { + my ($output, $temp); + $output = $_[0]; + $output =~ s/\^I\((.*?)\)\;/_replacement($1)/ge; + return $output; +} + +1; + + diff --git a/lib/WebGUI/Macro/Include.pm b/lib/WebGUI/Macro/Include.pm new file mode 100644 index 000000000..693d2c376 --- /dev/null +++ b/lib/WebGUI/Macro/Include.pm @@ -0,0 +1,43 @@ +package WebGUI::Macro::Include; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use FileHandle; +use WebGUI::Macro; + +#------------------------------------------------------------------- +sub _replacement { + my (@param, $temp, $file); + @param = WebGUI::Macro::getParams($_[0]); + if ($param[0] =~ /passwd/ || $param[0] =~ /shadow/ || $param[0] =~ /WebGUI.conf/) { + $temp = "SECURITY VIOLATION"; + } else { + $file = FileHandle->new($param[0],"r"); + while (<$file>) { + $temp .= $_; + } + $file->close; + } + return $temp; +} + +#------------------------------------------------------------------- +sub process { + my ($output, $temp); + $output = $_[0]; + $output =~ s/\^Include\((.*?)\)\;/_replacement($1)/ge; + return $output; +} + +1; + + diff --git a/lib/WebGUI/Macro/PageTitle.pm b/lib/WebGUI/Macro/PageTitle.pm new file mode 100644 index 000000000..fe4f23e61 --- /dev/null +++ b/lib/WebGUI/Macro/PageTitle.pm @@ -0,0 +1,25 @@ +package WebGUI::Macro::PageTitle; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use WebGUI::Session; + +#------------------------------------------------------------------- +sub process { + my ($output); + $output = $_[0]; + $output =~ s/\^PageTitle\;/$session{page}{title}/g; + return $output; +} + +1; + diff --git a/lib/WebGUI/Macro/Shared.pm b/lib/WebGUI/Macro/Shared.pm index 7ee8928e9..a134f4d86 100644 --- a/lib/WebGUI/Macro/Shared.pm +++ b/lib/WebGUI/Macro/Shared.pm @@ -39,7 +39,8 @@ sub traversePageTree { $sth = WebGUI::SQL->read("select urlizedTitle, title, pageId from page where parentId='$_[0]' order by sequenceNumber"); while (@data = $sth->array) { if (WebGUI::Privilege::canViewPage($data[2])) { - $output .= $depth.''.$data[1].'
    '; + $output .= $depth.''.$data[1].'
    '; $output .= traversePageTree($data[2],$_[1]+1,$toLevel); } } diff --git a/lib/WebGUI/Macro/Slash_gatewayUrl.pm b/lib/WebGUI/Macro/Slash_gatewayUrl.pm index 6e80a616a..d832ebeb3 100644 --- a/lib/WebGUI/Macro/Slash_gatewayUrl.pm +++ b/lib/WebGUI/Macro/Slash_gatewayUrl.pm @@ -17,7 +17,7 @@ use WebGUI::Session; sub process { my ($output); $output = $_[0]; - $output =~ s/\^\/\;/$session{ENV}{SCRIPT_NAME}/g; + $output =~ s/\^\/\;/$session{config}{scripturl}/g; return $output; } diff --git a/lib/WebGUI/Macro/i_imageNoTags.pm b/lib/WebGUI/Macro/i_imageNoTags.pm new file mode 100644 index 000000000..0d8342c6f --- /dev/null +++ b/lib/WebGUI/Macro/i_imageNoTags.pm @@ -0,0 +1,39 @@ +package WebGUI::Macro::i_imageNoTags; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use Tie::CPHash; +use WebGUI::Macro; +use WebGUI::Session; +use WebGUI::SQL; + +#------------------------------------------------------------------- +sub _replacement { + my (@param, $temp, %data); + tie %data, 'Tie::CPHash'; + @param = WebGUI::Macro::getParams($_[0]); + %data = WebGUI::SQL->quickHash("select * from images where name='$param[0]'"); + $temp = $session{setting}{attachmentDirectoryWeb}.'/images/'.$data{imageId}.'/'.$data{filename}; + return $temp; +} + +#------------------------------------------------------------------- +sub process { + my ($output, $temp); + $output = $_[0]; + $output =~ s/\^i\((.*?)\)\;/_replacement($1)/ge; + return $output; +} + +1; + + diff --git a/lib/WebGUI/Macro/m_currentMenuHorizontal.pm b/lib/WebGUI/Macro/m_currentMenuHorizontal.pm index 553f051d0..6670a2366 100644 --- a/lib/WebGUI/Macro/m_currentMenuHorizontal.pm +++ b/lib/WebGUI/Macro/m_currentMenuHorizontal.pm @@ -28,7 +28,8 @@ sub _replacement { } else { $temp .= " · "; } - $temp .= ''.$data[0].''; + $temp .= ''.$data[0].''; } } $sth->finish; diff --git a/lib/WebGUI/Macro/p_previousMenuHorizontal.pm b/lib/WebGUI/Macro/p_previousMenuHorizontal.pm index 25fcd176f..e59ccbe88 100644 --- a/lib/WebGUI/Macro/p_previousMenuHorizontal.pm +++ b/lib/WebGUI/Macro/p_previousMenuHorizontal.pm @@ -29,7 +29,7 @@ sub _replacement { } else { $temp .= " · "; } - $temp .= ''.$data[0].''; + $temp .= ''.$data[0].''; } } $sth->finish; diff --git a/lib/WebGUI/Macro/s_specificMenuHorizontal.pm b/lib/WebGUI/Macro/s_specificMenuHorizontal.pm index 330139f04..7c84fb1eb 100644 --- a/lib/WebGUI/Macro/s_specificMenuHorizontal.pm +++ b/lib/WebGUI/Macro/s_specificMenuHorizontal.pm @@ -18,11 +18,11 @@ use WebGUI::SQL; #------------------------------------------------------------------- sub _replacement { - my ($temp, @data, $pageTitle, $parentId, $sth, $first); - $pageTitle = $1; + my ($temp, @data, $pageTitle, $parentId, $sth, $first, @param); + @param = WebGUI::Macro::getParams($_[0]); $temp = ''; $first = 1; - ($parentId) = WebGUI::SQL->quickArray("select pageId from page where urlizedTitle='$pageTitle'"); + ($parentId) = WebGUI::SQL->quickArray("select pageId from page where urlizedTitle='$param[0]'"); $sth = WebGUI::SQL->read("select title,urlizedTitle,pageId from page where parentId='$parentId' order by sequenceNumber"); while (@data = $sth->array) { if (WebGUI::Privilege::canViewPage($data[2])) { @@ -31,7 +31,8 @@ sub _replacement { } else { $temp .= " · "; } - $temp .= ''.$data[0].''; + $temp .= ''.$data[0].''; } } $sth->finish; @@ -44,7 +45,7 @@ sub process { my ($output,@data, $pageTitle, $parentId, $sth, $first, $temp); $output = $_[0]; $output =~ s/\^s\((.*?)\)\;/_replacement($1)/ge; - $output =~ s/\^s\;/_replacement()/ge; + #$output =~ s/\^s\;/_replacement()/ge; return $output; } diff --git a/lib/WebGUI/Macro/t_topMenuHorizontal.pm b/lib/WebGUI/Macro/t_topMenuHorizontal.pm index 34ea44a78..3d859f520 100644 --- a/lib/WebGUI/Macro/t_topMenuHorizontal.pm +++ b/lib/WebGUI/Macro/t_topMenuHorizontal.pm @@ -28,7 +28,8 @@ sub _replacement { } else { $temp .= " · "; } - $temp .= ''.$data[0].''; + $temp .= ''.$data[0].''; } } $sth->finish; diff --git a/lib/WebGUI/Operation.pm b/lib/WebGUI/Operation.pm index 9d642ea7e..40a55a22d 100644 --- a/lib/WebGUI/Operation.pm +++ b/lib/WebGUI/Operation.pm @@ -15,6 +15,7 @@ use WebGUI::Operation::Account; use WebGUI::Operation::Admin; use WebGUI::Operation::Group; use WebGUI::Operation::Help; +use WebGUI::Operation::Image; use WebGUI::Operation::Package; use WebGUI::Operation::Page; use WebGUI::Operation::Search; diff --git a/lib/WebGUI/Operation/Account.pm b/lib/WebGUI/Operation/Account.pm index fd3220239..7c8835879 100644 --- a/lib/WebGUI/Operation/Account.pm +++ b/lib/WebGUI/Operation/Account.pm @@ -491,7 +491,7 @@ sub www_viewMessageLog { if ($data[2] ne "") { $row[$i] .= ''; } - $row[$i] .= ''.epochToHuman($data[3],"%m/%d/%Y @ %H:%m%p").''; + $row[$i] .= ''.epochToHuman($data[3],"%m/%d/%Y @ %H:%n%p").''; $i++; } $sth->finish; diff --git a/lib/WebGUI/Operation/Help.pm b/lib/WebGUI/Operation/Help.pm index 70101f140..7452fafb0 100644 --- a/lib/WebGUI/Operation/Help.pm +++ b/lib/WebGUI/Operation/Help.pm @@ -27,7 +27,6 @@ sub www_viewHelp { tie %help, 'Tie::CPHash'; %help = WebGUI::SQL->quickHash("select * from help where helpId=$session{form}{hid} and namespace='$namespace' and language='$session{user}{language}'"); $output = '

    '.WebGUI::International::get(93).': '.$help{action}.' '.$help{object}.'

    '; - $help{body} =~ s/\n/\/g; $output .= $help{body}; $output .= '

    '.WebGUI::International::get(94).':'; $sth = WebGUI::SQL->read("select helpId, action, object, namespace from help where object='$help{object}' and action<>'$help{action}' and language='$session{user}{language}' order by action"); diff --git a/lib/WebGUI/Operation/Image.pm b/lib/WebGUI/Operation/Image.pm new file mode 100644 index 000000000..cffa00baa --- /dev/null +++ b/lib/WebGUI/Operation/Image.pm @@ -0,0 +1,240 @@ +package WebGUI::Operation::Image; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use Exporter; +use strict; +use WebGUI::Attachment; +use WebGUI::DateTime; +use WebGUI::Form; +use WebGUI::International; +use WebGUI::Privilege; +use WebGUI::Session; +use WebGUI::Shortcut; +use WebGUI::SQL; +use WebGUI::Template; +use WebGUI::Utility; + +our @ISA = qw(Exporter); +our @EXPORT = qw(&www_addImage &www_addImageSave &www_editImage &www_editImageSave &www_viewImage + &www_deleteImage &www_deleteImageConfirm &www_listImages &www_deleteImageFile); + +#------------------------------------------------------------------- +sub www_addImage { + my ($output); + if (WebGUI::Privilege::isInGroup(4)) { + $output = helpLink(20); + $output .= '

    '.WebGUI::International::get(382).'

    '; + $output .= formHeader(); + $output .= WebGUI::Form::hidden("op","addImageSave"); + $output .= ''; + $output .= tableFormRow(WebGUI::International::get(383), + WebGUI::Form::text("name",20,128,"Name")); + $output .= tableFormRow(WebGUI::International::get(384), + WebGUI::Form::file("filename")); + $output .= tableFormRow(WebGUI::International::get(385), + WebGUI::Form::textArea("parameters",'',50,5)); + $output .= formSave(); + $output .= '
    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_addImageSave { + my ($imageId, $file); + if (WebGUI::Privilege::isInGroup(4)) { + $imageId = getNextId("imageId"); + $file = WebGUI::Attachment::save("filename","images",$imageId); + WebGUI::SQL->write("insert into images values ($imageId, ".quote($session{form}{name}). + ", ".quote($file).", ".quote($session{form}{parameters}).", $session{user}{userId}, ". + quote($session{user}{username}).", ".time().")"); + return www_listImages(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteImage { + my ($output); + if (WebGUI::Privilege::isInGroup(4)) { + $output .= helpLink(23); + $output .= '

    '.WebGUI::International::get(42).'

    '; + $output .= WebGUI::International::get(392).'

    '; + $output .= '

    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteImageConfirm { + if (WebGUI::Privilege::isInGroup(4)) { + WebGUI::Attachment::deleteSubmission("images",$session{form}{iid}); + WebGUI::SQL->write("delete from images where imageId=$session{form}{iid}"); + return www_listImages(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteImageFile { + if (WebGUI::Privilege::isInGroup(4)) { + WebGUI::Attachment::deleteSubmission("images",$session{form}{iid}); + WebGUI::SQL->write("update images set filename='' where imageId=$session{form}{iid}"); + return www_editImage(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editImage { + my ($output, %data); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(4)) { + %data = WebGUI::SQL->quickHash("select * from images where imageId=$session{form}{iid}"); + $output = helpLink(20); + $output .= '

    '.WebGUI::International::get(382).'

    '; + $output .= formHeader(); + $output .= WebGUI::Form::hidden("op","editImageSave"); + $output .= WebGUI::Form::hidden("iid",$session{form}{iid}); + $output .= ''; + $output .= tableFormRow(WebGUI::International::get(389), + $data{imageId}); + $output .= tableFormRow(WebGUI::International::get(383), + WebGUI::Form::text("name",20,128,$data{name})); + if ($data{filename} ne "") { + $output .= tableFormRow(WebGUI::International::get(384), + ''. + WebGUI::International::get(391).''); + } else { + $output .= tableFormRow(WebGUI::International::get(384), + WebGUI::Form::file("filename")); + } + $output .= tableFormRow(WebGUI::International::get(385), + WebGUI::Form::textArea("parameters",$data{parameters},50,5)); + $output .= formSave(); + $output .= '
    '; + if ($data{filename} ne "") { + $output .= '

    '.WebGUI::International::get(390).'

    '; + } + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editImageSave { + my ($file); + if (WebGUI::Privilege::isInGroup(4)) { + $file = WebGUI::Attachment::save("filename","images",$session{form}{iid}); + if ($file ne "") { + $file = ", filename=".quote($file); + } + WebGUI::SQL->write("update images set imageId=$session{form}{iid}, name=".quote($session{form}{name}). + $file.", parameters=".quote($session{form}{parameters}).", userId=$session{user}{userId}, ". + " username=".quote($session{user}{username}).", dateUploaded=".time()); + return www_listImages(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_listImages { + my ($output, $sth, %data, @row, $dataRows, $prevNextBar, $i, $search); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(4)) { + $output = helpLink(26); + $output .= '

    '.WebGUI::International::get(393).'

    '; + $output .= ''.formHeader().'
    '; + $output .= ''.WebGUI::International::get(395).''; + $output .= ''; + $output .= WebGUI::Form::hidden("op","listImages"); + $output .= WebGUI::Form::text("keyword",20,50); + $output .= WebGUI::Form::submit(WebGUI::International::get(170)); + $output .= '

    '; + if ($session{form}{keyword} ne "") { + $search = " where (name like '%".$session{form}{keyword}. + "%' or filename like '%".$session{form}{keyword}."%') "; + } + $sth = WebGUI::SQL->read("select * from images $search order by name"); + while (%data = $sth->hash) { + $row[$i] = ''; + if ($session{user}{userId} == $data{userId}) { + $row[$i] .= ''; + $row[$i] .= ''; + } else { + $row[$i] .= ''; + } + $row[$i] .= ''; + $row[$i] .= ''.$data{name}.''; + $row[$i] .= ''.$data{username}.''; + $row[$i] .= ''.WebGUI::DateTime::epochToHuman($data{dateUploaded},"%M/%D/%y").''; + $row[$i] .= ''; + $i++; + } + $sth->finish; + ($dataRows, $prevNextBar) = paginate(50,$session{page}{url}.'?op=listImages',\@row); + $output .= ''; + $output .= $dataRows; + $output .= '
    '; + $output .= $prevNextBar; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_viewImage { + my ($output, %data); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(4)) { + %data = WebGUI::SQL->quickHash("select * from images where imageId=$session{form}{iid}"); + $output .= '

    '.WebGUI::International::get(396).'

    '; + $output .= ''.WebGUI::International::get(397).''; + $output .= ''; + $output .= tableFormRow(WebGUI::International::get(389),$data{imageId}); + $output .= tableFormRow(WebGUI::International::get(383),$data{name}); + $output .= tableFormRow(WebGUI::International::get(384),$data{filename}); + $output .= tableFormRow(WebGUI::International::get(385),$data{parameters}); + $output .= tableFormRow(WebGUI::International::get(387),$data{username}); + $output .= tableFormRow(WebGUI::International::get(388), + WebGUI::DateTime::epochToHuman($data{dateUploaded},"%M/%D/%y")); + $output .= '
    '; + $output .= '

    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + + +1; + + diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm index f1ce7b44b..3142e60e8 100644 --- a/lib/WebGUI/Operation/User.pm +++ b/lib/WebGUI/Operation/User.pm @@ -29,6 +29,7 @@ our @EXPORT = qw(&www_editUserGroupSave &www_deleteGrouping &www_editGrouping &w #------------------------------------------------------------------- sub www_addUser { my ($output, %hash, @array); + tie %hash, 'Tie::IxHash'; if (WebGUI::Privilege::isInGroup(3)) { $output .= helpLink(5); $output .= '

    '.WebGUI::International::get(163).'

    '; @@ -178,8 +179,10 @@ sub www_editGroupingSave { #------------------------------------------------------------------- sub www_editUser { - my ($output, %user, %hash, @array, %gender, $sth); + my ($output, %user, %hash, @array, %gender, $sth, %data); + tie %user, 'Tie::CPHash'; tie %hash, 'Tie::CPHash'; + tie %data, 'Tie::IxHash'; if (WebGUI::Privilege::isInGroup(3)) { %gender = ('male'=>WebGUI::International::get(339),'female'=>WebGUI::International::get(340)); %user = WebGUI::SQL->quickHash("select * from users where userId=$session{form}{uid}"); @@ -196,16 +199,16 @@ sub www_editUser { $output .= tableFormRow(WebGUI::International::get(378),$session{form}{uid}); $output .= tableFormRow(WebGUI::International::get(50),WebGUI::Form::text("username",20,30,$user{username})); $output .= tableFormRow(WebGUI::International::get(51),WebGUI::Form::password("identifier",20,30,"password")); - %hash = ('WebGUI'=>'WebGUI', 'LDAP'=>'LDAP'); + %data = ('WebGUI'=>'WebGUI', 'LDAP'=>'LDAP'); $array[0] = $user{authMethod}; - $output .= tableFormRow(WebGUI::International::get(164),WebGUI::Form::selectList("authMethod",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(164),WebGUI::Form::selectList("authMethod",\%data,\@array)); $output .= tableFormRow(WebGUI::International::get(165),WebGUI::Form::text("ldapURL",20,2048,$user{ldapURL})); $output .= tableFormRow(WebGUI::International::get(166),WebGUI::Form::text("connectDN",20,255,$user{connectDN})); $output .= tableFormRow(WebGUI::International::get(56),WebGUI::Form::text("email",20,255,$user{email})); - %hash = WebGUI::SQL->buildHash("select distinct(language) from international"); + %data = WebGUI::SQL->buildHash("select distinct(language) from international"); @array = []; $array[0] = $user{language}; - $output .= tableFormRow(WebGUI::International::get(304),WebGUI::Form::selectList("language",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(304),WebGUI::Form::selectList("language",\%data,\@array)); $output .= tableFormRow(WebGUI::International::get(314),WebGUI::Form::text("firstName",20,50,$user{firstName})); $output .= tableFormRow(WebGUI::International::get(315),WebGUI::Form::text("middleName",20,50,$user{middleName})); $output .= tableFormRow(WebGUI::International::get(316),WebGUI::Form::text("lastName",20,50,$user{lastName})); @@ -239,16 +242,20 @@ sub www_editUser { $output .= formHeader(); $output .= WebGUI::Form::hidden("op","editUserGroupSave"); $output .= WebGUI::Form::hidden("uid",$session{form}{uid}); - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); + %data = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); @array = WebGUI::SQL->buildArray("select groupId from groupings where userId=$session{form}{uid}"); - $output .= WebGUI::Form::selectList("groups",\%hash,\@array,5,1); + $output .= WebGUI::Form::selectList("groups",\%data,\@array,5,1); $output .= '
    '.WebGUI::Form::submit(WebGUI::International::get(62)); $output .= '

    '.WebGUI::International::get(373).'

    '; $output .= ''; $sth = WebGUI::SQL->read("select groups.groupId,groups.groupName,groupings.expireDate from groupings,groups where groupings.groupId=groups.groupId and groupings.userId=$session{form}{uid} order by groups.groupName"); while (%hash = $sth->hash) { - $output .= ''; + $output .= ''; $output .= ''; $output .= ''; } diff --git a/lib/WebGUI/SQL.pm b/lib/WebGUI/SQL.pm index 6df0607d5..669d13804 100644 --- a/lib/WebGUI/SQL.pm +++ b/lib/WebGUI/SQL.pm @@ -60,6 +60,11 @@ sub finish { return $_[0]->{_sth}->finish; } +#------------------------------------------------------------------- +sub getColumnNames { + return @{$_[0]->{_sth}->{NAME}}; +} + #------------------------------------------------------------------- sub getNextId { my ($id); diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm index 15d844e45..70e4cd8db 100644 --- a/lib/WebGUI/Session.pm +++ b/lib/WebGUI/Session.pm @@ -41,7 +41,7 @@ sub _getPageInfo { } } %page = WebGUI::SQL->quickHash("select * from page where pageId='".$pageId."'",$_[1]); - $page{url} = $ENV{SCRIPT_NAME}."/".$page{urlizedTitle}; + $page{url} = $_[3]."/".$page{urlizedTitle}; return %page; } @@ -107,6 +107,13 @@ sub open { foreach ($config->param) { $CONFIG{$_} = $config->param($_); } + if( defined( $CONFIG{scripturl} ) ) { + # get rid of leading "/" if present. + $CONFIG{scripturl} =~ s/^\///; + } else { + # default to the "real" path to script. + $CONFIG{scripturl} = $ENV{SCRIPT_NAME}; + } $dbh = DBI->connect($CONFIG{dsn}, $CONFIG{dbuser}, $CONFIG{dbpass}, { RaiseError => 0, AutoCommit => 1 }); $query = CGI->new(); foreach ($query->param) { @@ -119,7 +126,7 @@ sub open { %VARS = _getSessionVars($COOKIES{wgSession},$dbh,$SETTINGS{sessionTimeout}); %USER = _getUserInfo($VARS{sessionId},$dbh); $CGI::POST_MAX=1024 * $SETTINGS{maxAttachmentSize}; - %PAGE = _getPageInfo("",$dbh,$SETTINGS{notFoundPage}); + %PAGE = _getPageInfo("",$dbh,$SETTINGS{notFoundPage},$CONFIG{scripturl}); %session = ( env => \%ENV, # environment variables from the web server config=> \%CONFIG, # variables loaded from the config file diff --git a/lib/WebGUI/Shortcut.pm b/lib/WebGUI/Shortcut.pm index 6dc6d6a03..aff2311aa 100644 --- a/lib/WebGUI/Shortcut.pm +++ b/lib/WebGUI/Shortcut.pm @@ -12,11 +12,12 @@ package WebGUI::Shortcut; use Exporter; use strict; +use WebGUI::Attachment; use WebGUI::International; use WebGUI::Session; our @ISA = qw(Exporter); -our @EXPORT = qw(&formHeader &formSave &tableFormRow &helpLink); +our @EXPORT = qw(&attachmentBox &formHeader &formSave &tableFormRow &helpLink); # The subroutines found herein do nothing other than creating a # short way of doing much longer repetitive tasks. They simply @@ -24,6 +25,22 @@ our @EXPORT = qw(&formHeader &formSave &tableFormRow &helpLink); # less cluttered code. +#------------------------------------------------------------------- +sub attachmentBox { + my ($output, %fileType, $fileUrl); + $fileUrl = $session{setting}{attachmentDirectoryWeb}.'/'.$_[1].'/'; + if ($_[2] ne "") { + $fileUrl .= $_[2].'/'; + } + $fileUrl .= $_[0]; + %fileType = WebGUI::Attachment::getType($_[0]); + $output = '

    '.WebGUI::International::get(89).''.WebGUI::International::get(84).''.WebGUI::International::get(369).'
    '.$hash{groupName}.''.epochToHuman($hash{expireDate},"%M/%D/%y").'
    '. + ''.
+		$_[0].''.$_[0].''.$_[0].'
    '; + return $output; +} + #------------------------------------------------------------------- sub formHeader { my ($output); @@ -42,7 +59,8 @@ sub formSave { sub helpLink { my ($output, $namespace); $namespace = $_[1] || "WebGUI"; - $output = ''; + $output = ''; return $output; } diff --git a/lib/WebGUI/Style.pm b/lib/WebGUI/Style.pm index 7ce795719..40502f29c 100644 --- a/lib/WebGUI/Style.pm +++ b/lib/WebGUI/Style.pm @@ -31,7 +31,13 @@ sub getStyle { $header = ' - '.$session{page}{title}.'' + '; + if ($session{page}{pageId} == 1) { + $header .= $session{setting}{companyName}.' - '.$session{page}{title}; + } else { + $header .= $session{page}{title}; + } + $header .= '' .$style{styleSheet} .$session{page}{metaTags}; if ($session{page}{defaultMetaTags}) { diff --git a/lib/WebGUI/Widget/Article.pm b/lib/WebGUI/Widget/Article.pm index f5f046fa7..5668ccb34 100644 --- a/lib/WebGUI/Widget/Article.pm +++ b/lib/WebGUI/Widget/Article.pm @@ -33,7 +33,7 @@ sub duplicate { $newWidgetId = create($pageId,$namespace,$data{title},$data{displayTitle},$data{description},$data{processMacros},$data{templatePosition}); WebGUI::Attachment::copy($data{image},$_[0],$newWidgetId); WebGUI::Attachment::copy($data{attachment},$_[0],$newWidgetId); - WebGUI::SQL->write("insert into Article values ($newWidgetId, $data{startDate}, $data{endDate}, ".quote($data{body}).", ".quote($data{image}).", ".quote($data{linkTitle}).", ".quote($data{linkURL}).", ".quote($data{attachment}).", '$data{convertCarriageReturns}')"); + WebGUI::SQL->write("insert into Article values ($newWidgetId, $data{startDate}, $data{endDate}, ".quote($data{body}).", ".quote($data{image}).", ".quote($data{linkTitle}).", ".quote($data{linkURL}).", ".quote($data{attachment}).", '$data{convertCarriageReturns}', ".quote($data{alignImage}).")"); } #------------------------------------------------------------------- @@ -48,7 +48,7 @@ sub widgetName { #------------------------------------------------------------------- sub www_add { - my ($output, %hash); + my ($output, %hash, @array); tie %hash, "Tie::IxHash"; if (WebGUI::Privilege::canEditPage()) { $output = helpLink(1,$namespace); @@ -66,6 +66,14 @@ sub www_add { $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::text("endDate",20,30,'01/01/2037',1)); $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::textArea("body",'',50,10,1)); $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::file("image")); + %hash = ( + right => WebGUI::International::get(15,$namespace), + left => WebGUI::International::get(16,$namespace), + center => WebGUI::International::get(17,$namespace) + ); + $array[0] = "right"; + $output .= tableFormRow(WebGUI::International::get(14,$namespace), + WebGUI::Form::selectList("alignImage",\%hash,\@array)); $output .= tableFormRow(WebGUI::International::get(7,$namespace),WebGUI::Form::text("linkTitle",20,128)); $output .= tableFormRow(WebGUI::International::get(8,$namespace),WebGUI::Form::text("linkURL",20,2048)); $output .= tableFormRow(WebGUI::International::get(9,$namespace),WebGUI::Form::file("attachment")); @@ -86,7 +94,7 @@ sub www_addSave { $widgetId = create($session{page}{pageId},$session{form}{widget},$session{form}{title},$session{form}{displayTitle},$session{form}{description},$session{form}{processMacros},$session{form}{templatePosition}); $image = WebGUI::Attachment::save("image",$widgetId); $attachment = WebGUI::Attachment::save("attachment",$widgetId); - WebGUI::SQL->write("insert into Article values ($widgetId, '".setToEpoch($session{form}{startDate})."', '".setToEpoch($session{form}{endDate})."', ".quote($session{form}{body}).", ".quote($image).", ".quote($session{form}{linkTitle}).", ".quote($session{form}{linkURL}).", ".quote($attachment).", '$session{form}{convertCarriageReturns}')"); + WebGUI::SQL->write("insert into Article values ($widgetId, '".setToEpoch($session{form}{startDate})."', '".setToEpoch($session{form}{endDate})."', ".quote($session{form}{body}).", ".quote($image).", ".quote($session{form}{linkTitle}).", ".quote($session{form}{linkURL}).", ".quote($attachment).", '$session{form}{convertCarriageReturns}', ".quote($session{form}{alignImage}).")"); return ""; } else { return WebGUI::Privilege::insufficient(); @@ -150,6 +158,14 @@ sub www_edit { } else { $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::file("image")); } + %hash = ( + right => WebGUI::International::get(15,$namespace), + left => WebGUI::International::get(16,$namespace), + center => WebGUI::International::get(17,$namespace) + ); + $array[0] = $data{alignImage}; + $output .= tableFormRow(WebGUI::International::get(14,$namespace), + WebGUI::Form::selectList("alignImage",\%hash,\@array)); $output .= tableFormRow(WebGUI::International::get(7,$namespace),WebGUI::Form::text("linkTitle",20,128,$data{linkTitle})); $output .= tableFormRow(WebGUI::International::get(8,$namespace),WebGUI::Form::text("linkURL",20,2048,$data{linkURL})); if ($data{attachment} ne "") { @@ -179,7 +195,7 @@ sub www_editSave { if ($attachment ne "") { $attachment = ', attachment='.quote($attachment); } - WebGUI::SQL->write("update Article set startDate='".setToEpoch($session{form}{startDate})."', endDate='".setToEpoch($session{form}{endDate})."', convertCarriageReturns='$session{form}{convertCarriageReturns}', body=".quote($session{form}{body}).", linkTitle=".quote($session{form}{linkTitle}).", linkURL=".quote($session{form}{linkURL}).$attachment.$image." where widgetId=$session{form}{wid}"); + WebGUI::SQL->write("update Article set alignImage=".quote($session{form}{alignImage}).", startDate='".setToEpoch($session{form}{startDate})."', endDate='".setToEpoch($session{form}{endDate})."', convertCarriageReturns='$session{form}{convertCarriageReturns}', body=".quote($session{form}{body}).", linkTitle=".quote($session{form}{linkTitle}).", linkURL=".quote($session{form}{linkURL}).$attachment.$image." where widgetId=$session{form}{wid}"); return ""; } else { return WebGUI::Privilege::insufficient(); @@ -188,7 +204,7 @@ sub www_editSave { #------------------------------------------------------------------- sub www_view { - my (%data, @test, $output); + my (%data, @test, $output, $image); tie %data, 'Tie::CPHash'; %data = getProperties($namespace,$_[0]); if ($data{startDate}time()) { @@ -196,7 +212,16 @@ sub www_view { $output = "

    ".$data{title}."

    "; } if ($data{image} ne "") { - $output .= ''; + $image = ''; + } else { + $output .= $image; + } } if ($data{convertCarriageReturns}) { $data{body} =~ s/\n/\/g; @@ -206,7 +231,7 @@ sub www_view { $output .= '

    '.$data{linkTitle}.''; } if ($data{attachment} ne "") { - $output .= '

    '.WebGUI::International::get(14,$namespace).''; + $output .= attachmentBox($data{attachment},$_[0]); } } if ($data{processMacros} == 1) { diff --git a/lib/WebGUI/Widget/DownloadManager.pm b/lib/WebGUI/Widget/DownloadManager.pm new file mode 100644 index 000000000..25eff9b5a --- /dev/null +++ b/lib/WebGUI/Widget/DownloadManager.pm @@ -0,0 +1,581 @@ +package WebGUI::Widget::DownloadManager; + +our $namespace = "DownloadManager"; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use Tie::CPHash; +use WebGUI::DateTime; +use WebGUI::Form; +use WebGUI::International; +use WebGUI::Macro; +use WebGUI::Privilege; +use WebGUI::Session; +use WebGUI::Shortcut; +use WebGUI::SQL; +use WebGUI::Utility; +use WebGUI::Widget; + +#------------------------------------------------------------------- +sub _reorderDownloads { + my ($sth, $i, $did); + $sth = WebGUI::SQL->read("select downloadId from DownloadManager_file where widgetId=$_[0] order by sequenceNumber"); + while (($did) = $sth->array) { + WebGUI::SQL->write("update DownloadManager_file set sequenceNumber='$i' where downloadId=$did"); + $i++; + } + $sth->finish; +} + +#------------------------------------------------------------------- +sub duplicate { + my (%data, $newWidgetId, $pageId, %row, $sth, $newDownloadId); + tie %data, 'Tie::CPHash'; + %data = getProperties($namespace,$_[0]); + $pageId = $_[1] || $data{pageId}; + $newWidgetId = create( + $pageId, + $namespace, + $data{title}, + $data{displayTitle}, + $data{description}, + $data{processMacros}, + $data{templatePosition} + ); + WebGUI::SQL->write("insert into DownloadManager values ($newWidgetId, $data{paginateAfter})"); + $sth = WebGUI::SQL->read("select * from DownloadManager_file where widgetId=$_[0]"); + while (%row = $sth->hash) { + $newDownloadId = getNextId("downloadId"); + WebGUI::Attachment::copy($row{downloadFile},$_[0],$newWidgetId,$row{downloadId},$newDownloadId); + WebGUI::Attachment::copy($row{alternateVersion1},$_[0],$newWidgetId,$row{downloadId},$newDownloadId); + WebGUI::Attachment::copy($row{alternateVersion2},$_[0],$newWidgetId,$row{downloadId},$newDownloadId); + WebGUI::SQL->write("insert into DownloadManager_file values ($newDownloadId, $newWidgetId, ". + quote($row{fileTitle}).", ".quote($row{downloadFile}).", $row{groupToView}, ". + quote($row{briefSynopsis}).", $row{dateUploaded}, $row{sequenceNumber}, ". + quote($row{alternateVersion1}).", ".quote($row{alternateVersion2}).")"); + } + $sth->finish; +} + +#------------------------------------------------------------------- +sub purge { + purgeWidget($_[0],$_[1],$namespace); + WebGUI::SQL->write("delete from DownloadManager_file where widgetId=$_[0]"); +} + +#------------------------------------------------------------------- +sub widgetName { + return WebGUI::International::get(1,$namespace); +} + +#------------------------------------------------------------------- +sub www_add { + my ($output, %hash); + tie %hash,'Tie::IxHash'; + if (WebGUI::Privilege::canEditPage()) { + $output = helpLink(1,$namespace); + $output .= '

    '.WebGUI::International::get(2,$namespace).'

    '; + $output .= formHeader(); + $output .= WebGUI::Form::hidden("widget",$namespace); + $output .= WebGUI::Form::hidden("func","addSave"); + $output .= ''; + $output .= tableFormRow( + WebGUI::International::get(99), + WebGUI::Form::text("title",20,30,widgetName()) + ); + $output .= tableFormRow( + WebGUI::International::get(174), + WebGUI::Form::checkbox("displayTitle",1,1) + ); + $output .= tableFormRow( + WebGUI::International::get(175), + WebGUI::Form::checkbox("processMacros",1,1) + ); + %hash = WebGUI::Widget::getPositions(); + $output .= tableFormRow( + WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash) + ); + $output .= tableFormRow( + WebGUI::International::get(85), + WebGUI::Form::textArea("description",'',50,5,1) + ); + $output .= tableFormRow( + WebGUI::International::get(20,$namespace), + WebGUI::Form::text("paginateAfter",20,30,50) + ); + $output .= tableFormRow( + WebGUI::International::get(3,$namespace), + WebGUI::Form::checkbox("proceed",1,1) + ); + $output .= formSave(); + $output .= '
    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } + return $output; +} + +#------------------------------------------------------------------- +sub www_addSave { + my ($widgetId); + if (WebGUI::Privilege::canEditPage()) { + $widgetId = create( + $session{page}{pageId}, + $session{form}{widget}, + $session{form}{title}, + $session{form}{displayTitle}, + $session{form}{description}, + $session{form}{processMacros}, + $session{form}{templatePosition} + ); + WebGUI::SQL->write("insert into DownloadManager values ($widgetId, '$session{form}{paginateAfter}')"); + if ($session{form}{proceed} == 1) { + $session{form}{wid} = $widgetId; + return www_addDownload(); + } else { + return ""; + } + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_addDownload { + my ($output); + if (WebGUI::Privilege::canEditPage()) { + $output .= '

    '.WebGUI::International::get(4,$namespace).'

    '; + $output .= formHeader(); + $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); + $output .= WebGUI::Form::hidden("func","addDownloadSave"); + $output .= ''; + $output .= tableFormRow( + WebGUI::International::get(6,$namespace), + WebGUI::Form::file("downloadFile") + ); + $output .= tableFormRow( + WebGUI::International::get(17,$namespace), + WebGUI::Form::file("alternateVersion1") + ); + $output .= tableFormRow( + WebGUI::International::get(18,$namespace), + WebGUI::Form::file("alternateVersion2") + ); + $output .= tableFormRow( + WebGUI::International::get(5,$namespace), + WebGUI::Form::text("fileTitle",20,128,WebGUI::International::get(5,$namespace)) + ); + $output .= tableFormRow( + WebGUI::International::get(8,$namespace), + WebGUI::Form::text("briefSynopsis",50,256) + ); + $output .= tableFormRow( + WebGUI::International::get(7,$namespace), + WebGUI::Form::groupList("groupToView",2) + ); + $output .= formSave(); + $output .= '
    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_addDownloadSave { + my ($downloadId,$file,$alt1,$alt2,$sequenceNumber); + if (WebGUI::Privilege::canEditPage()) { + $downloadId = getNextId("downloadId"); + $file = WebGUI::Attachment::save("downloadFile",$session{form}{wid},$downloadId); + $alt1 = WebGUI::Attachment::save("alternateVersion1",$session{form}{wid},$downloadId); + $alt2 = WebGUI::Attachment::save("alternateVersion2",$session{form}{wid},$downloadId); + ($sequenceNumber) = WebGUI::SQL->quickArray("select count(*)+1 from DownloadManager_file where widgetId=$session{form}{wid}"); + WebGUI::SQL->write("insert into DownloadManager_file values (". + $downloadId. + ", ".$session{form}{wid}. + ", ".quote($session{form}{fileTitle}). + ", ".quote($file). + ", '$session{form}{groupToView}'". + ", ".quote($session{form}{briefSynopsis}). + ", ".time(). + ", ".$sequenceNumber. + ", ".quote($alt1). + ", ".quote($alt2). + ")"); + return www_edit(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_copy { + if (WebGUI::Privilege::canEditPage()) { + duplicate($session{form}{wid}); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteFile { + my ($delete); + if (WebGUI::Privilege::canEditPage()) { + if ($session{form}{alt} == 1) { + $delete = "alternateVersion1"; + } elsif ($session{form}{alt} == 2) { + $delete = "alternateVersion2"; + } else { + $delete = "downloadFile"; + } + WebGUI::SQL->write("update DownloadManager_file set $delete='' where downloadId=$session{form}{did}"); + return www_editDownload(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteDownload { + my ($output); + if (WebGUI::Privilege::canEditPage()) { + $output = '

    '.WebGUI::International::get(42).'

    '; + $output .= WebGUI::International::get(12,$namespace).'

    '; + $output .= '

    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteDownloadConfirm { + my ($output); + if (WebGUI::Privilege::canEditPage()) { + WebGUI::SQL->write("delete from DownloadManager_file where downloadId=$session{form}{did}"); + _reorderDownloads($session{form}{wid}); + return www_edit(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_download { + my (%download); + tie %download,'Tie::CPHash'; + %download = WebGUI::SQL->quickHash("select * from DownloadManager_file where downloadId=$session{form}{did}"); + if (WebGUI::Privilege::isInGroup($download{groupToView})) { + $session{header}{redirect} = WebGUI::Session::httpRedirect( + $session{setting}{attachmentDirectoryWeb}."/". + $session{form}{wid}."/".$session{form}{did}."/".$download{downloadFile} + ); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_edit { + my ($output, %data, %hash, @array, $sth, @download); + tie %data, 'Tie::CPHash'; + tie %hash, 'Tie::IxHash'; + if (WebGUI::Privilege::canEditPage()) { + %data = getProperties($namespace,$session{form}{wid}); + $output .= helpLink(1,$namespace); + $output .= '

    '.WebGUI::International::get(9,$namespace).'

    '; + $output .= formHeader(); + $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); + $output .= WebGUI::Form::hidden("func","editSave"); + $output .= ''; + $output .= tableFormRow( + WebGUI::International::get(99), + WebGUI::Form::text("title",20,30,$data{title}) + ); + $output .= tableFormRow( + WebGUI::International::get(174), + WebGUI::Form::checkbox("displayTitle","1",$data{displayTitle}) + ); + $output .= tableFormRow( + WebGUI::International::get(175), + WebGUI::Form::checkbox("processMacros","1", + $data{processMacros}) + ); + %hash = WebGUI::Widget::getPositions(); + $array[0] = $data{templatePosition}; + $output .= tableFormRow( + WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash,\@array) + ); + $output .= tableFormRow( + WebGUI::International::get(85), + WebGUI::Form::textArea("description",$data{description},50,5,1) + ); + $output .= tableFormRow( + WebGUI::International::get(20,$namespace), + WebGUI::Form::text("paginateAfter",20,30,$data{paginateAfter}) + ); + $output .= formSave(); + $output .= '
    '; + $output .= '

    '.WebGUI::International::get(11,$namespace).'

    '; + $output .= ''; + $sth = WebGUI::SQL->read("select downloadId,fileTitle from DownloadManager_file where widgetId='$session{form}{wid}' order by sequenceNumber"); + while (@download = $sth->array) { + $output .= ''; + } + $sth->finish; + $output .= '
    '.$download[1].'
    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editSave { + if (WebGUI::Privilege::canEditPage()) { + update(); + WebGUI::SQL->write("update DownloadManager set paginateAfter='$session{form}{paginateAfter}' where widgetId=$session{form}{wid}"); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editDownload { + my ($output, %download); + tie %download,'Tie::CPHash'; + if (WebGUI::Privilege::canEditPage()) { + %download = WebGUI::SQL->quickHash("select * from DownloadManager_file where downloadId='$session{form}{did}'"); + $output .= '

    '.WebGUI::International::get(10,$namespace).'

    '; + $output .= formHeader(); + $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); + $output .= WebGUI::Form::hidden("did",$session{form}{did}); + $output .= WebGUI::Form::hidden("func","editDownloadSave"); + $output .= ''; + if ($download{downloadFile} ne "") { + $output .= tableFormRow( + WebGUI::International::get(6,$namespace), + ''. + WebGUI::International::get(13,$namespace).' + '); + } else { + $output .= tableFormRow( + WebGUI::International::get(6,$namespace), + WebGUI::Form::file("downloadFile") + ); + } + if ($download{alternateVersion1} ne "") { + $output .= tableFormRow( + WebGUI::International::get(17,$namespace), + ''. + WebGUI::International::get(13,$namespace).' + '); + } else { + $output .= tableFormRow( + WebGUI::International::get(17,$namespace), + WebGUI::Form::file("alternateVersion1") + ); + } + if ($download{alternateVersion2} ne "") { + $output .= tableFormRow( + WebGUI::International::get(18,$namespace), + ''. + WebGUI::International::get(13,$namespace).' + '); + } else { + $output .= tableFormRow( + WebGUI::International::get(18,$namespace), + WebGUI::Form::file("alternateVersion2") + ); + } + $output .= tableFormRow( + WebGUI::International::get(5,$namespace), + WebGUI::Form::text("fileTitle",20,128,$download{fileTitle}) + ); + $output .= tableFormRow( + WebGUI::International::get(8,$namespace), + WebGUI::Form::text("briefSynopsis",50,256,$download{briefSynopsis}) + ); + $output .= tableFormRow( + WebGUI::International::get(7,$namespace), + WebGUI::Form::groupList("groupToView",$download{groupToView}) + ); + $output .= formSave(); + $output .= '
    '; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editDownloadSave { + my ($file, $alt1, $alt2); + if (WebGUI::Privilege::canEditPage()) { + $file = WebGUI::Attachment::save("downloadFile",$session{form}{wid},$session{form}{did}); + if ($file ne "") { + $file = ', downloadFile='.quote($file); + } + $alt1 = WebGUI::Attachment::save("alternateVersion1",$session{form}{wid},$session{form}{did}); + if ($alt1 ne "") { + $alt1 = ', alternateVersion1='.quote($alt1); + } + $alt2 = WebGUI::Attachment::save("alternateVersion2",$session{form}{wid},$session{form}{did}); + if ($alt2 ne "") { + $alt2 = ', alternateVersion2='.quote($alt2); + } + WebGUI::SQL->write("update DownloadManager_file set ". + " downloadId=".$session{form}{did}. + ", widgetId=".$session{form}{wid}. + ", fileTitle=".quote($session{form}{fileTitle}). + $file.$alt1.$alt2. + ", groupToView='$session{form}{groupToView}'". + ", briefSynopsis=".quote($session{form}{briefSynopsis}). + ", dateUploaded=".time(). + " where downloadId=".$session{form}{did} + ); + return www_edit(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_moveDownloadDown { + my (@data, $thisSeq); + if (WebGUI::Privilege::canEditPage()) { + ($thisSeq) = WebGUI::SQL->quickArray("select sequenceNumber from DownloadManager_file where downloadId=$session{form}{did}"); + @data = WebGUI::SQL->quickArray("select downloadId from DownloadManager_file where widgetId=$session{form}{wid} and sequenceNumber=$thisSeq+1 group by widgetId"); + if ($data[0] ne "") { + WebGUI::SQL->write("update DownloadManager_file set sequenceNumber=sequenceNumber+1 where downloadId=$session{form}{did}"); + WebGUI::SQL->write("update DownloadManager_file set sequenceNumber=sequenceNumber-1 where downloadId=$data[0]"); + } + return www_edit(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_moveDownloadUp { + my (@data, $thisSeq); + if (WebGUI::Privilege::canEditPage()) { + ($thisSeq) = WebGUI::SQL->quickArray("select sequenceNumber from DownloadManager_file where downloadId=$session{form}{did}"); + @data = WebGUI::SQL->quickArray("select downloadId from DownloadManager_file where widgetId=$session{form}{wid} and sequenceNumber=$thisSeq-1 group by widgetId"); + if ($data[0] ne "") { + WebGUI::SQL->write("update DownloadManager_file set sequenceNumber=sequenceNumber-1 where downloadId=$session{form}{did}"); + WebGUI::SQL->write("update DownloadManager_file set sequenceNumber=sequenceNumber+1 where downloadId=$data[0]"); + } + return www_edit(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_view { + my (@row, $i, $dataRows, $prevNextBar, %data, @test, %fileType, $output, $sth, %download, $flag); + tie %download, 'Tie::CPHash'; + tie %data, 'Tie::CPHash'; + %data = getProperties($namespace,$_[0]); + if (defined %data) { + if ($data{displayTitle} == 1) { + $output .= '

    '.$data{title}.'

    '; + } + if ($data{description} ne "") { + $output .= $data{description}.'

    '; + } + $output .= ''; + $output .= ''; + $sth = WebGUI::SQL->read("select * from DownloadManager_file where widgetId=$_[0] order by sequenceNumber"); + while (%download = $sth->hash) { + if (WebGUI::Privilege::isInGroup($download{groupToView})) { + %fileType = WebGUI::Attachment::getType($download{downloadFile}); + $row[$i] = ''. + ''. + ''; + $flag = 1; + $i++; + } + } + $sth->finish; + unless ($flag) { + $output .= ''; + } + ($dataRows, $prevNextBar) = paginate($data{paginateAfter},$session{page}{url},\@row); + $output .= $dataRows; + $output .= '
    '.WebGUI::International::get(14,$namespace). + ''.WebGUI::International::get(15,$namespace). + ''.WebGUI::International::get(16,$namespace).'
    '; + $row[$i] .= ''. + $download{fileTitle}.' ('.$fileType{extension}.')'; + if ($download{alternateVersion1}) { + %fileType = WebGUI::Attachment::getType($download{alternateVersion1}); + $row[$i] .= ' · ('. + $fileType{extension}.')'; + } + if ($download{alternateVersion2}) { + %fileType = WebGUI::Attachment::getType($download{alternateVersion2}); + $row[$i] .= ' · ('. + $fileType{extension}.')'; + } + $row[$i] .= ''.$download{briefSynopsis}.''. + epochToHuman($download{dateUploaded},"%M/%D/%y").'
    '. + WebGUI::International::get(19,$namespace).'
    '; + $output .= $prevNextBar; + if ($data{processMacros} == 1) { + $output = WebGUI::Macro::process($output); + } + } + return $output; +} + + +1; + + diff --git a/lib/WebGUI/Widget/EventsCalendar.pm b/lib/WebGUI/Widget/EventsCalendar.pm index 117bc6b65..0a58f7406 100644 --- a/lib/WebGUI/Widget/EventsCalendar.pm +++ b/lib/WebGUI/Widget/EventsCalendar.pm @@ -29,8 +29,9 @@ sub duplicate { tie %data, 'Tie::CPHash'; %data = getProperties($namespace,$_[0]); $pageId = $_[1] || $data{pageId}; - $newWidgetId = create($pageId,$namespace,$data{title},$data{displayTitle},$data{description},$data{processMacros},$data{templatePosition}); - WebGUI::SQL->write("insert into EventsCalendar values ($newWidgetId)"); + $newWidgetId = create($pageId,$namespace,$data{title}, + $data{displayTitle},$data{description},$data{processMacros},$data{templatePosition}); + WebGUI::SQL->write("insert into EventsCalendar values ($newWidgetId, '$data{calendarLayout}', '$data{paginateAfter}')"); $sth = WebGUI::SQL->read("select * from EventsCalendar_event where widgetId=$_[0] order by recurringEventId"); while (@row = $sth->array) { $newEventId = getNextId("eventId"); @@ -38,7 +39,9 @@ sub duplicate { $row[6] = getNextId("recurringEventId"); $previousRecurringEventId = $row[6]; } - WebGUI::SQL->write("insert into EventsCalendar_event values ($newEventId, $newWidgetId, ".quote($row[2]).", ".quote($row[3]).", '".$row[4]."', '".$row[5]."', $row[6])"); + WebGUI::SQL->write("insert into EventsCalendar_event values ($newEventId, $newWidgetId, ". + quote($row[2]).", ".quote($row[3]).", '".$row[4]. + "', '".$row[5]."', $row[6])"); } $sth->finish; } @@ -65,12 +68,20 @@ sub www_add { $output .= WebGUI::Form::hidden("widget",$namespace); $output .= WebGUI::Form::hidden("func","addSave"); $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,'Events Calendar')); + $output .= tableFormRow(WebGUI::International::get(99), + WebGUI::Form::text("title",20,128,'Events Calendar')); $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,1)); $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1)); %hash = WebGUI::Widget::getPositions(); - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash)); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash)); $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,5,1)); + %hash = (list => WebGUI::International::get(17,$namespace), + calendar => WebGUI::International::get(18,$namespace)); + $output .= tableFormRow(WebGUI::International::get(16,$namespace), + WebGUI::Form::selectList("calendarLayout",\%hash)); + $output .= tableFormRow(WebGUI::International::get(19,$namespace), + WebGUI::Form::text("paginateAfter",20,30,50)); $output .= tableFormRow(WebGUI::International::get(1,$namespace),WebGUI::Form::checkbox("proceed",1,1)); $output .= formSave(); $output .= '
    '; @@ -85,8 +96,10 @@ sub www_add { sub www_addSave { my ($widgetId); if (WebGUI::Privilege::canEditPage()) { - $widgetId = create($session{page}{pageId},$session{form}{widget},$session{form}{title},$session{form}{displayTitle},$session{form}{description},$session{form}{processMacros},$session{form}{templatePosition}); - WebGUI::SQL->write("insert into EventsCalendar values ($widgetId)"); + $widgetId = create($session{page}{pageId},$session{form}{widget}, + $session{form}{title},$session{form}{displayTitle},$session{form}{description}, + $session{form}{processMacros},$session{form}{templatePosition}); + WebGUI::SQL->write("insert into EventsCalendar values ($widgetId, '$session{form}{calendarLayout}', '$session{form}{paginateAfter}')"); if ($session{form}{proceed} == 1) { $session{form}{wid} = $widgetId; return www_addEvent(); @@ -114,9 +127,12 @@ sub www_addEvent { $output .= WebGUI::Form::hidden("func","addEventSave"); $output .= ''; $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("name",20,128)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,10,1)); - $output .= tableFormRow(WebGUI::International::get(176),WebGUI::Form::text("startDate",20,30,$today,1,'onBlur="this.form.endDate.value=this.form.startDate.value;this.form.until.value=this.form.startDate.value;"')); - $output .= tableFormRow(WebGUI::International::get(177),WebGUI::Form::text("endDate",20,30,$today,1)); + $output .= tableFormRow(WebGUI::International::get(85), + WebGUI::Form::textArea("description",'',50,10,1)); + $output .= tableFormRow(WebGUI::International::get(14,$namespace), + WebGUI::Form::text("startDate",20,30,$today,1,'onBlur="this.form.endDate.value=this.form.startDate.value;this.form.until.value=this.form.startDate.value;"')); + $output .= tableFormRow(WebGUI::International::get(15,$namespace), + WebGUI::Form::text("endDate",20,30,$today,1)); $output .= tableFormRow(WebGUI::International::get(8,$namespace),WebGUI::Form::selectList("recursEvery",\%recursEvery).' '.WebGUI::International::get(9,$namespace).' '.WebGUI::Form::text("until",20,30,$today,1)); $output .= formSave(); $output .= '
    '; @@ -220,12 +236,23 @@ sub www_edit { $output .= WebGUI::Form::hidden("func","editSave"); $output .= ''; $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,$data{title})); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,$data{displayTitle})); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1,$data{processMacros})); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$data{description},50,5,1)); + $output .= tableFormRow(WebGUI::International::get(174), + WebGUI::Form::checkbox("displayTitle",1,$data{displayTitle})); + $output .= tableFormRow(WebGUI::International::get(175), + WebGUI::Form::checkbox("processMacros",1,$data{processMacros})); + $output .= tableFormRow(WebGUI::International::get(85), + WebGUI::Form::textArea("description",$data{description},50,5,1)); %hash = WebGUI::Widget::getPositions(); $array[0] = $data{templatePosition}; - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash,\@array)); + %hash = (list => WebGUI::International::get(17,$namespace), + calendar => WebGUI::International::get(18,$namespace)); + $array[0] = $data{calendarLayout}; + $output .= tableFormRow(WebGUI::International::get(16,$namespace), + WebGUI::Form::selectList("calendarLayout",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(19,$namespace), + WebGUI::Form::text("paginateAfter",20,30,$data{paginateAfter})); $output .= formSave(); $output .= '
    '; $output .= '

    Add New Event

    '; @@ -246,6 +273,7 @@ sub www_edit { sub www_editSave { if (WebGUI::Privilege::canEditPage()) { update(); + WebGUI::SQL->write("update EventsCalendar set calendarLayout='$session{form}{calendarLayout}', paginateAfter='$session{form}{paginateAfter}' where widgetId=$session{form}{wid}"); return ""; } else { return WebGUI::Privilege::insufficient(); @@ -264,10 +292,14 @@ sub www_editEvent { $output .= WebGUI::Form::hidden("eid",$session{form}{eid}); $output .= WebGUI::Form::hidden("func","editEventSave"); $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("name",20,128,$event{name})); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$event{description},50,10,1)); - $output .= tableFormRow(WebGUI::International::get(176),WebGUI::Form::text("startDate",20,30,epochToSet($event{startDate}),1)); - $output .= tableFormRow(WebGUI::International::get(177),WebGUI::Form::text("endDate",20,30,epochToSet($event{endDate}),1)); + $output .= tableFormRow(WebGUI::International::get(99), + WebGUI::Form::text("name",20,128,$event{name})); + $output .= tableFormRow(WebGUI::International::get(85), + WebGUI::Form::textArea("description",$event{description},50,10,1)); + $output .= tableFormRow(WebGUI::International::get(14,$namespace), + WebGUI::Form::text("startDate",20,30,epochToSet($event{startDate}),1)); + $output .= tableFormRow(WebGUI::International::get(15,$namespace), + WebGUI::Form::text("endDate",20,30,epochToSet($event{endDate}),1)); $output .= formSave(); $output .= '
    '; return $output; diff --git a/lib/WebGUI/Widget/Item.pm b/lib/WebGUI/Widget/Item.pm index be0fe61be..0f839bb9a 100644 --- a/lib/WebGUI/Widget/Item.pm +++ b/lib/WebGUI/Widget/Item.pm @@ -155,7 +155,7 @@ sub www_editSave { #------------------------------------------------------------------- sub www_view { - my (%data, @test, $output); + my (%data, @test, $output, %fileType); tie %data, 'Tie::CPHash'; %data = getProperties($namespace,$_[0]); if (defined %data) { @@ -165,12 +165,18 @@ sub www_view { $output .= ''.$data{title}.''; } if ($data{attachment} ne "") { - $output .= ' - '.WebGUI::International::get(5,$namespace).''; + %fileType = WebGUI::Attachment::getType($data{attachment}); + $output .= ' - '.
+				$data{attachment}.''; } if ($data{description} ne "") { $output .= ' - '.$data{description}; } } + if ($data{processMacros} == 1) { + $output = WebGUI::Macro::process($output); + } return $output; } diff --git a/lib/WebGUI/Widget/MessageBoard.pm b/lib/WebGUI/Widget/MessageBoard.pm index 3a13c86c2..c959814cc 100644 --- a/lib/WebGUI/Widget/MessageBoard.pm +++ b/lib/WebGUI/Widget/MessageBoard.pm @@ -58,17 +58,20 @@ sub www_add { $output .= WebGUI::Form::hidden("widget",$namespace); $output .= WebGUI::Form::hidden("func","addSave"); $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,'Message Board')); + $output .= tableFormRow(WebGUI::International::get(99), + WebGUI::Form::text("title",20,128,'Message Board')); $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,1)); $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1)); %hash = WebGUI::Widget::getPositions(); - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash)); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash)); $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,5,1)); - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); - $array[0] = 2; - $output .= tableFormRow(WebGUI::International::get(3,$namespace),WebGUI::Form::selectList("groupToPost",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::text("messagesPerPage",20,2,30)); - $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::text("editTimeout",20,3,1)); + $output .= tableFormRow(WebGUI::International::get(3,$namespace), + WebGUI::Form::groupList("groupToPost",2)); + $output .= tableFormRow(WebGUI::International::get(4,$namespace), + WebGUI::Form::text("messagesPerPage",20,2,30)); + $output .= tableFormRow(WebGUI::International::get(5,$namespace), + WebGUI::Form::text("editTimeout",20,3,1)); $output .= formSave(); $output .= '
    '; return $output; @@ -120,9 +123,8 @@ sub www_edit { $array[0] = $board{templatePosition}; $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash,\@array)); $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$board{description},50,5,1)); - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); - $array[0] = $board{groupToPost}; - $output .= tableFormRow(WebGUI::International::get(3,$namespace),WebGUI::Form::selectList("groupToPost",\%hash,\@array,1)); + $output .= tableFormRow(WebGUI::International::get(3,$namespace), + WebGUI::Form::selectList("groupToPost",$board{groupToPost})); $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::text("messagesPerPage",20,2,$board{messagesPerPage})); $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::text("editTimeout",20,2,$board{editTimeout})); $output .= formSave(); diff --git a/lib/WebGUI/Widget/Poll.pm b/lib/WebGUI/Widget/Poll.pm index b8915b8a3..73a45460a 100644 --- a/lib/WebGUI/Widget/Poll.pm +++ b/lib/WebGUI/Widget/Poll.pm @@ -94,8 +94,8 @@ sub widgetName { #------------------------------------------------------------------- sub www_add { - my ($output, %hash, @array); - tie %hash, "Tie::IxHash"; + my ($output, %hash); + tie %hash, 'Tie::IxHash'; if (WebGUI::Privilege::canEditPage()) { $output = helpLink(1,$namespace); $output .= '

    '.WebGUI::International::get(2,$namespace).'

    '; @@ -107,15 +107,17 @@ sub www_add { $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1)); $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1)); %hash = WebGUI::Widget::getPositions(); - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash)); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash)); $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,5,1)); $output .= tableFormRow(WebGUI::International::get(3,$namespace),WebGUI::Form::checkbox("active",1,1)); - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); - $array[0] = 1; - $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::selectList("voteGroup",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::text("graphWidth",20,3,150)); + $output .= tableFormRow(WebGUI::International::get(4,$namespace), + WebGUI::Form::groupList("voteGroup",1)); + $output .= tableFormRow(WebGUI::International::get(5,$namespace), + WebGUI::Form::text("graphWidth",20,3,150)); $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("question",50,255)); - $output .= tableFormRow(WebGUI::International::get(7,$namespace).'
    '.WebGUI::International::get(8,$namespace).'
    ',WebGUI::Form::textArea("answers",'',50,8,0,'on')); + $output .= tableFormRow(WebGUI::International::get(7,$namespace).'
    '.WebGUI::International::get(8,$namespace).'
    ', + WebGUI::Form::textArea("answers",'',50,8,0,'on')); $output .= formSave(); $output .= ''; return $output; @@ -162,19 +164,26 @@ sub www_edit { $output .= WebGUI::Form::hidden("func","editSave"); $output .= ''; $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,$data{title})); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,$data{displayTitle})); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1,$data{processMacros})); + $output .= tableFormRow(WebGUI::International::get(174), + WebGUI::Form::checkbox("displayTitle",1,$data{displayTitle})); + $output .= tableFormRow(WebGUI::International::get(175), + WebGUI::Form::checkbox("processMacros",1,$data{processMacros})); %hash = WebGUI::Widget::getPositions(); $array[0] = $data{templatePosition}; - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$data{description},50,5,1)); - $output .= tableFormRow(WebGUI::International::get(3,$namespace),WebGUI::Form::checkbox("active",1,$data{active})); - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); - $array[0] = $data{voteGroup}; - $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::selectList("voteGroup",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::text("graphWidth",20,3,$data{graphWidth})); - $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("question",50,255,$data{question})); - $output .= tableFormRow(WebGUI::International::get(7,$namespace).'
    '.WebGUI::International::get(8,$namespace).'
    ',WebGUI::Form::textArea("answers",$data{a1}."\n".$data{a2}."\n".$data{a3}."\n".$data{a4}."\n".$data{a5}."\n".$data{a6}."\n".$data{a7}."\n".$data{a8}."\n".$data{a9}."\n".$data{a10}."\n".$data{a11}."\n".$data{a12}."\n".$data{a13}."\n".$data{a14}."\n".$data{a15}."\n".$data{a16}."\n".$data{a17}."\n".$data{a18}."\n".$data{a19}."\n".$data{a20}."\n",50,8,0,'on')); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(85), + WebGUI::Form::textArea("description",$data{description},50,5,1)); + $output .= tableFormRow(WebGUI::International::get(3,$namespace), + WebGUI::Form::checkbox("active",1,$data{active})); + $output .= tableFormRow(WebGUI::International::get(4,$namespace), + WebGUI::Form::groupList("voteGroup",$data{voteGroup})); + $output .= tableFormRow(WebGUI::International::get(5,$namespace), + WebGUI::Form::text("graphWidth",20,3,$data{graphWidth})); + $output .= tableFormRow(WebGUI::International::get(6,$namespace), + WebGUI::Form::text("question",50,255,$data{question})); + $output .= tableFormRow(WebGUI::International::get(7,$namespace).'
    '.WebGUI::International::get(8,$namespace).'
    ', + WebGUI::Form::textArea("answers",$data{a1}."\n".$data{a2}."\n".$data{a3}."\n".$data{a4}."\n".$data{a5}."\n".$data{a6}."\n".$data{a7}."\n".$data{a8}."\n".$data{a9}."\n".$data{a10}."\n".$data{a11}."\n".$data{a12}."\n".$data{a13}."\n".$data{a14}."\n".$data{a15}."\n".$data{a16}."\n".$data{a17}."\n".$data{a18}."\n".$data{a19}."\n".$data{a20}."\n",50,8,0,'on')); $output .= formSave(); $output .= tableFormRow("",''.WebGUI::International::get(10,$namespace).''); $output .= '
    '; diff --git a/lib/WebGUI/Widget/SQLReport.pm b/lib/WebGUI/Widget/SQLReport.pm index dabd39d14..5004684cd 100644 --- a/lib/WebGUI/Widget/SQLReport.pm +++ b/lib/WebGUI/Widget/SQLReport.pm @@ -29,8 +29,11 @@ sub duplicate { tie %data, 'Tie::CPHash'; %data = getProperties($namespace,$_[0]); $pageId = $_[1] || $data{pageId}; - $newWidgetId = create($pageId,$namespace,$data{title},$data{displayTitle},$data{description},$data{processMacros},$data{templatePosition}); - WebGUI::SQL->write("insert into SQLReport values($newWidgetId, ".quote($data{template}).", ".quote($data{dbQuery}).", ".quote($data{DSN}).", ".quote($data{username}).", ".quote($data{identifier}).", '$data{convertCarriageReturns}')"); + $newWidgetId = create($pageId,$namespace,$data{title},$data{displayTitle}, + $data{description},$data{processMacros},$data{templatePosition}); + WebGUI::SQL->write("insert into SQLReport values($newWidgetId, ".quote($data{template}).", ". + quote($data{dbQuery}).", ".quote($data{DSN}).", ".quote($data{username}).", ". + quote($data{identifier}).", '$data{convertCarriageReturns}', '$data{paginateAfter}')"); } #------------------------------------------------------------------- @@ -54,18 +57,31 @@ sub www_add { $output .= WebGUI::Form::hidden("widget",$namespace); $output .= WebGUI::Form::hidden("func","addSave"); $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,'SQL Report')); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,1)); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1,1)); + $output .= tableFormRow(WebGUI::International::get(99), + WebGUI::Form::text("title",20,128,widgetName())); + $output .= tableFormRow(WebGUI::International::get(174), + WebGUI::Form::checkbox("displayTitle",1,1)); + $output .= tableFormRow(WebGUI::International::get(175), + WebGUI::Form::checkbox("processMacros",1,1)); %hash = WebGUI::Widget::getPositions(); - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'','','',1)); - $output .= tableFormRow(WebGUI::International::get(3,$namespace),WebGUI::Form::textArea("template",'','','',1)); - $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::textArea("dbQuery",'')); - $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::text("DSN",20,255,$session{config}{dsn})); - $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("username",20,255,$session{config}{dbuser})); - $output .= tableFormRow(WebGUI::International::get(7,$namespace),WebGUI::Form::password("identifier",20,255)); - $output .= tableFormRow(WebGUI::International::get(183),WebGUI::Form::checkbox("convertCarriageReturns",1)); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash)); + $output .= tableFormRow(WebGUI::International::get(85), + WebGUI::Form::textArea("description",'','','',1)); + $output .= tableFormRow(WebGUI::International::get(3,$namespace), + WebGUI::Form::textArea("template",'','','',1)); + $output .= tableFormRow(WebGUI::International::get(4,$namespace), + WebGUI::Form::textArea("dbQuery",'')); + $output .= tableFormRow(WebGUI::International::get(5,$namespace), + WebGUI::Form::text("DSN",20,255,$session{config}{dsn})); + $output .= tableFormRow(WebGUI::International::get(6,$namespace), + WebGUI::Form::text("username",20,255,$session{config}{dbuser})); + $output .= tableFormRow(WebGUI::International::get(7,$namespace), + WebGUI::Form::password("identifier",20,255)); + $output .= tableFormRow(WebGUI::International::get(14,$namespace), + WebGUI::Form::text("paginateAfter",20,30,50)); + $output .= tableFormRow(WebGUI::International::get(13,$namespace), + WebGUI::Form::checkbox("convertCarriageReturns",1)); $output .= formSave(); $output .= '
    '; return $output; @@ -79,8 +95,15 @@ sub www_add { sub www_addSave { my ($widgetId); if (WebGUI::Privilege::canEditPage()) { - $widgetId = create($session{page}{pageId},$session{form}{widget},$session{form}{title},$session{form}{displayTitle},$session{form}{description},$session{form}{processMacros},$session{form}{templatePosition}); - WebGUI::SQL->write("insert into SQLReport values($widgetId, ".quote($session{form}{template}).", ".quote($session{form}{dbQuery}).", ".quote($session{form}{DSN}).", ".quote($session{form}{username}).", ".quote($session{form}{identifier}).", '$session{form}{convertCarriageReturns}')"); + $widgetId = create($session{page}{pageId},$session{form}{widget}, + $session{form}{title},$session{form}{displayTitle}, + $session{form}{description},$session{form}{processMacros}, + $session{form}{templatePosition}); + WebGUI::SQL->write("insert into SQLReport values($widgetId, ". + quote($session{form}{template}).", ".quote($session{form}{dbQuery}).", ". + quote($session{form}{DSN}).", ".quote($session{form}{username}).", ". + quote($session{form}{identifier}). + ", '$session{form}{convertCarriageReturns}', '$session{form}{paginateAfter}')"); return ""; } else { return WebGUI::Privilege::insufficient(); @@ -110,19 +133,32 @@ sub www_edit { $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); $output .= WebGUI::Form::hidden("func","editSave"); $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,$data{title})); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle","1",$data{displayTitle})); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros","1",$data{processMacros})); + $output .= tableFormRow(WebGUI::International::get(99), + WebGUI::Form::text("title",20,128,$data{title})); + $output .= tableFormRow(WebGUI::International::get(174), + WebGUI::Form::checkbox("displayTitle","1",$data{displayTitle})); + $output .= tableFormRow(WebGUI::International::get(175), + WebGUI::Form::checkbox("processMacros","1",$data{processMacros})); %hash = WebGUI::Widget::getPositions(); $array[0] = $data{templatePosition}; - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$data{description},50,10,1)); - $output .= tableFormRow(WebGUI::International::get(3,$namespace),WebGUI::Form::textArea("template",$data{template},50,10,1)); - $output .= tableFormRow(WebGUI::International::get(4,$namespace),WebGUI::Form::textArea("dbQuery",$data{dbQuery},50,10,1)); - $output .= tableFormRow(WebGUI::International::get(5,$namespace),WebGUI::Form::text("DSN",20,255,$data{DSN})); - $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("username",20,255,$data{username})); - $output .= tableFormRow(WebGUI::International::get(7,$namespace),WebGUI::Form::password("identifier",20,255,$data{identifier})); - $output .= tableFormRow(WebGUI::International::get(183),WebGUI::Form::checkbox("convertCarriageReturns",1,$data{convertCarriageReturns})); + $output .= tableFormRow(WebGUI::International::get(363), + WebGUI::Form::selectList("templatePosition",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(85), + WebGUI::Form::textArea("description",$data{description},50,10,1)); + $output .= tableFormRow(WebGUI::International::get(3,$namespace), + WebGUI::Form::textArea("template",$data{template},50,10,1)); + $output .= tableFormRow(WebGUI::International::get(4,$namespace), + WebGUI::Form::textArea("dbQuery",$data{dbQuery},50,10)); + $output .= tableFormRow(WebGUI::International::get(5,$namespace), + WebGUI::Form::text("DSN",20,255,$data{DSN})); + $output .= tableFormRow(WebGUI::International::get(6,$namespace), + WebGUI::Form::text("username",20,255,$data{username})); + $output .= tableFormRow(WebGUI::International::get(7,$namespace), + WebGUI::Form::password("identifier",20,255,$data{identifier})); + $output .= tableFormRow(WebGUI::International::get(14,$namespace), + WebGUI::Form::text("paginateAfter",20,30,$data{paginateAfter})); + $output .= tableFormRow(WebGUI::International::get(13,$namespace), + WebGUI::Form::checkbox("convertCarriageReturns",1,$data{convertCarriageReturns})); $output .= formSave(); $output .= '
    '; return $output; @@ -136,7 +172,12 @@ sub www_editSave { my ($widgetId, $displayTitle, $image, $attachment); if (WebGUI::Privilege::canEditPage()) { update(); - WebGUI::SQL->write("update SQLReport set template=".quote($session{form}{template}).", dbQuery=".quote($session{form}{dbQuery}).", convertCarriageReturns='$session{form}{convertCarriageReturns}', DSN=".quote($session{form}{DSN}).", username=".quote($session{form}{username}).", identifier=".quote($session{form}{identifier})." where widgetId=$session{form}{wid}"); + WebGUI::SQL->write("update SQLReport set template=".quote($session{form}{template}). + ", dbQuery=".quote($session{form}{dbQuery}). + ", convertCarriageReturns='$session{form}{convertCarriageReturns}', DSN=". + quote($session{form}{DSN}).", username=".quote($session{form}{username}). + ", identifier=".quote($session{form}{identifier}). + ", paginateAfter='$session{form}{paginateAfter}' where widgetId=$session{form}{wid}"); return ""; } else { return WebGUI::Privilege::insufficient(); @@ -145,7 +186,8 @@ sub www_editSave { #------------------------------------------------------------------- sub www_view { - my ($ouch, %data, $output, $sth, $dbh, @result, @template, $temp); + my (@row, $i, $dataRows, $prevNextBar, $ouch, %data, $output, $sth, $dbh, @result, + @template, $temp, $col); tie %data, 'Tie::CPHash'; %data = getProperties($namespace,$_[0]); if (defined %data) { @@ -155,8 +197,6 @@ sub www_view { if ($data{description} ne "") { $output .= $data{description}.'

    '; } - @template = split(/\^\-\;/,$data{template}); - $output .= $template[0]; if ($data{DSN} =~ /\DBI\:\w+\:\w+/) { $dbh = DBI->connect($data{DSN},$data{username},$data{identifier}); } else { @@ -171,15 +211,39 @@ sub www_view { WebGUI::ErrorHandler::warn("SQLReport [$_[0]] The SQL query is improperly formatted."); } if ($sth->rows > 0) { + if ($data{template} ne "") { + @template = split(/\^\-\;/,$data{template}); + } else { + $i = 0; + $template[0] = ''; + $template[1] = ''; + foreach $col ($sth->getColumnNames) { + $template[0] .= ''; + $template[1] .= ''; + $i++; + } + $template[0] .= ''; + $template[1] .= ''; + $template[2] = '
    '.$col.'^'.$i.';
    '; + $i = 0; + } + $output .= $template[0]; while (@result = $sth->array) { $temp = $template[1]; - $temp =~ s/\^(\d)\;/$result[$1]/g; + $temp =~ s/\^(\d*)\;/$result[$1]/g; if ($data{convertCarriageReturns}) { $temp =~ s/\n/\/g; } - $output .= $temp; + $row[$i] = $temp; + $i++; } $sth->finish; + ($dataRows, $prevNextBar) = paginate($data{paginateAfter},$session{page}{url},\@row); + $output .= $dataRows; + $output .= $template[2]; + if ($#row > $data{paginateAfter}) { + $output .= $prevNextBar; + } } else { $output .= WebGUI::International::get(11,$namespace).'

    '; WebGUI::ErrorHandler::warn("SQLReport [$_[0]] There was a problem with the query."); @@ -189,7 +253,6 @@ sub www_view { $output .= WebGUI::International::get(12,$namespace).'

    '; WebGUI::ErrorHandler::warn("SQLReport [$_[0]] Could not connect to remote database."); } - $output .= $template[2]; } if ($data{processMacros} == 1) { $output = WebGUI::Macro::process($output); diff --git a/lib/WebGUI/Widget/SiteMap.pm b/lib/WebGUI/Widget/SiteMap.pm index 6239eeb79..912f90517 100644 --- a/lib/WebGUI/Widget/SiteMap.pm +++ b/lib/WebGUI/Widget/SiteMap.pm @@ -40,7 +40,8 @@ sub _traversePageTree { $sth = WebGUI::SQL->read("select urlizedTitle, title, pageId from page where parentId='$_[0]' order by sequenceNumber"); while (@data = $sth->array) { if (WebGUI::Privilege::canViewPage($data[2])) { - $output .= $depth.$_[4].' '.$data[1].''; + $output .= $depth.$_[4].' '.$data[1].''; $output .= $lineSpacing; $output .= _traversePageTree($data[2],$_[1]+1,$_[2],$_[3],$_[4],$_[5]); } diff --git a/lib/WebGUI/Widget/UserSubmission.pm b/lib/WebGUI/Widget/UserSubmission.pm index 5a7f4d169..002ac7749 100644 --- a/lib/WebGUI/Widget/UserSubmission.pm +++ b/lib/WebGUI/Widget/UserSubmission.pm @@ -38,6 +38,7 @@ sub duplicate { $sth = WebGUI::SQL->read("select * from UserSubmission_submission where widgetId=$_[0]"); while (@row = $sth->array) { $newSubmissionId = getNextId("submissionId"); + WebGUI::Attachment::copy($row[8],$_[0],$newWidgetId,$row[1],$newSubmissionId); WebGUI::SQL->write("insert into UserSubmission_submission values ($newWidgetId, $newSubmissionId, ".quote($row[2]).", $row[3], ".quote($row[4]).", '$row[5]', ".quote($row[6]).", ".quote($row[7]).", ".quote($row[8]).", '$row[9]', '$row[10]')"); } $sth->finish; @@ -71,11 +72,10 @@ sub www_add { %hash = WebGUI::Widget::getPositions(); $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash)); $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,5,1)); - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); - $array[0] = 4; - $output .= tableFormRow(WebGUI::International::get(1,$namespace),WebGUI::Form::selectList("groupToApprove",\%hash,\@array)); - $array[0] = 2; - $output .= tableFormRow(WebGUI::International::get(2,$namespace),WebGUI::Form::selectList("groupToContribute",\%hash,\@array)); + $output .= tableFormRow(WebGUI::International::get(1,$namespace), + WebGUI::Form::groupList("groupToApprove",4)); + $output .= tableFormRow(WebGUI::International::get(2,$namespace), + WebGUI::Form::groupList("groupToContribute",2)); $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("submissionsPerPage",20,2,50)); %hash = ("Approved"=>WebGUI::International::get(7,$namespace),"Denied"=>WebGUI::International::get(8,$namespace),"Pending"=>WebGUI::International::get(9,$namespace)); $output .= tableFormRow(WebGUI::International::get(10,$namespace),WebGUI::Form::selectList("defaultStatus",\%hash,'',1)); @@ -265,11 +265,10 @@ sub www_edit { $array[0] = $data{templatePosition}; $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash,\@array)); $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$data{description})); - $array[0] = $data{groupToApprove}; - %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName"); - $output .= tableFormRow(WebGUI::International::get(1,$namespace),WebGUI::Form::selectList("groupToApprove",\%hash,\@array,1)); - $array[0] = $data{groupToContribute}; - $output .= tableFormRow(WebGUI::International::get(2,$namespace),WebGUI::Form::selectList("groupToContribute",\%hash,\@array,1)); + $output .= tableFormRow(WebGUI::International::get(1,$namespace), + WebGUI::Form::groupList("groupToApprove",$data{groupToApprove})); + $output .= tableFormRow(WebGUI::International::get(2,$namespace), + WebGUI::Form::groupList("groupToContribute",$data{groupToContribute})); $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("submissionsPerPage",20,2,$data{submissionsPerPage})); %hash = ("Approved"=>WebGUI::International::get(7,$namespace),"Denied"=>WebGUI::International::get(8,$namespace),"Pending"=>WebGUI::International::get(9,$namespace)); $array[0] = $data{defaultStatus}; @@ -404,7 +403,7 @@ sub www_viewSubmission { #---menu $output .= ''.WebGUI::International::get(28,$namespace).'
    '; if ($submission{userId} == $session{user}{userId}) { - $output .= ''.WebGUI::International::get(186).'
    '; + $output .= ''.WebGUI::International::get(37,$namespace).'
    '; $output .= ''.WebGUI::International::get(27,$namespace).'
    '; } if ($submission{status} eq "Pending" && (WebGUI::Privilege::isInGroup(3,$session{user}{userId}) || WebGUI::Privilege::isInGroup(4,$session{user}{userId}))) { @@ -422,7 +421,7 @@ sub www_viewSubmission { } $output .= $submission{content}.'

    '; if ($submission{attachment} ne "") { - $output .= '

    Download Attachment

    '; + $output .= attachmentBox($submission{attachment},$session{form}{wid},$session{form}{sid}); } $output .= ''; return $output; diff --git a/preload.perl b/preload.perl new file mode 100644 index 000000000..b38a9ee91 --- /dev/null +++ b/preload.perl @@ -0,0 +1,28 @@ +#! /usr/bin/perl +use strict; + +use lib "/data/WebGUI/lib"; + +$ENV{GATEWAY_INTERFACE} =~ /^CGI-Perl/ or die "GATEWAY_INTERFACE not Perl!"; + +use Apache::Registry (); +use Apache::DBI (); +use CGI (); CGI->compile(':all'); +use CGI::Carp (); +use DBI (); +use DBD::mysql (); +use Data::Config (); +use Tie::CPHash (); +use Tie::IxHash (); +use Net::LDAP (); +use Net::SMTP (); +use File::Copy (); +use File::Path (); +use FileHandle (); +use POSIX (); +use WebGUI (); + + +1; + + diff --git a/www/extras/fileIcons/doc.gif b/www/extras/fileIcons/doc.gif new file mode 100644 index 000000000..9e3ed9557 Binary files /dev/null and b/www/extras/fileIcons/doc.gif differ diff --git a/www/extras/fileIcons/html.gif b/www/extras/fileIcons/html.gif new file mode 100644 index 000000000..7b5442000 Binary files /dev/null and b/www/extras/fileIcons/html.gif differ diff --git a/www/extras/fileIcons/mdb.gif b/www/extras/fileIcons/mdb.gif new file mode 100644 index 000000000..d961db88d Binary files /dev/null and b/www/extras/fileIcons/mdb.gif differ diff --git a/www/extras/fileIcons/mov.gif b/www/extras/fileIcons/mov.gif new file mode 100644 index 000000000..575bbaf16 Binary files /dev/null and b/www/extras/fileIcons/mov.gif differ diff --git a/www/extras/fileIcons/pdf.gif b/www/extras/fileIcons/pdf.gif new file mode 100644 index 000000000..ba160fa8e Binary files /dev/null and b/www/extras/fileIcons/pdf.gif differ diff --git a/www/extras/fileIcons/ppt.gif b/www/extras/fileIcons/ppt.gif new file mode 100644 index 000000000..ac0d4af8a Binary files /dev/null and b/www/extras/fileIcons/ppt.gif differ diff --git a/www/extras/fileIcons/psp.gif b/www/extras/fileIcons/psp.gif new file mode 100644 index 000000000..f8584ff3f Binary files /dev/null and b/www/extras/fileIcons/psp.gif differ diff --git a/www/extras/fileIcons/rar.gif b/www/extras/fileIcons/rar.gif new file mode 100644 index 000000000..0367d4df9 Binary files /dev/null and b/www/extras/fileIcons/rar.gif differ diff --git a/www/extras/fileIcons/txt.gif b/www/extras/fileIcons/txt.gif new file mode 100644 index 000000000..82441a057 Binary files /dev/null and b/www/extras/fileIcons/txt.gif differ diff --git a/www/extras/fileIcons/unknown.gif b/www/extras/fileIcons/unknown.gif new file mode 100644 index 000000000..37f490155 Binary files /dev/null and b/www/extras/fileIcons/unknown.gif differ diff --git a/www/extras/fileIcons/wav.gif b/www/extras/fileIcons/wav.gif new file mode 100644 index 000000000..2c201a00b Binary files /dev/null and b/www/extras/fileIcons/wav.gif differ diff --git a/www/extras/fileIcons/xls.gif b/www/extras/fileIcons/xls.gif new file mode 100644 index 000000000..0ae297aad Binary files /dev/null and b/www/extras/fileIcons/xls.gif differ diff --git a/www/extras/fileIcons/zip.gif b/www/extras/fileIcons/zip.gif new file mode 100644 index 000000000..9ca5309c9 Binary files /dev/null and b/www/extras/fileIcons/zip.gif differ diff --git a/www/extras/view.gif b/www/extras/view.gif new file mode 100644 index 000000000..b0cffa2f3 Binary files /dev/null and b/www/extras/view.gif differ