CHANGELOG: ENCORE V5.002 (current May 2011) |************************| | New Features/Functions | |************************| *Home Sites*--completely new feature that allows total control over location of movable objects: + added new properties on root class: .home_site and .home_site_level + added a new tab on the Object Editor (Movability) with the following functions: * Takeability: Display take-icon to non-owners? Default is "yes", but can be set to "no'; also setting the home site level to 1 will override this so that take-icon will not be displayed at all, even to owners. * Home Site: choose a player, room, or container as the home site of this object * Home Site Level with four levels: 0: no level set. 1: This cannot be moved from its home site (so overrides takeability). 2: People can take it, but the housekeeper moves it home automatically after a while. 3: People can take it, and I will move it back manually. + added a "site" column to the list of owned objects in Inventory Manager, which will be highlighted if object is away from its home site. Clicking on this shows current location of object, and allows one to set or change the home site and home site level. There is also a button to move the object back to its home site, and a "multiple" tab which will show all owned objects that are away from their home sites, with an option to move them all back at once. + added appropriate strings to $lang_utils *Take/Drop*--added new functionality: + created #1.publicly_takeable and set it to 1 + changed :can_handle to react to that + changed :make_contextual_menu to react to home site level + created #5.return_room_after_take and set it to 0, so that object will remain in webframe after being taken, showing both drop icon and move icon, making it much easier to drop object via web + changed the :moveto verb to reflect the new properties + added a check to see whether another player has taken the object in the meantime; if so, player will receive a message noting that the object has already been picked up and indicating its new location + made a function "up". Whenever an object is contained in another (has a valid location), there will be an "up" icon next to the "back" icon that takes you up one notch in the hierarchy of containers, up to the containing room. *Admin module*--major additions to functionality: + Rewrote all verbs to call the language strings. + New Object Editor tab, that will produce a table of all fertile objects listing their current Xpress_edit_options, with a clickable "edit" option that will bring up the Object Editor to change the options for that object, including Basic options (those most-used options that appear first), Advanced options (those that appear when "more options" is clicked), and the Default option (that which appears pre-selected when the Object Editor is Opened); these can also be changed through a clickable link to the Program Editor. + New Quota tab, that allows wizards and teachers to * view a table of all builders and up with sortable columns including class, number of objects, and usage (highlighted in red for those close to their quota limit); from this table players can be viewed, edited, and emailed * recount all quota and globally set quota for each class of players + New Merge Players tab, that shows all possible duplicate players (matched by real name and/or email address); this table shows creation time, last connection, parent and number of objects. * from this table a pre-formatted email can be generated to ask the person whether or not the duplicate characters should be merged * wizards are allowed to merge all players within certain limits (no guests, no merging downwards); teachers may merge only players they have created themselves * in the merge, references to the slave are changed to the master, including ownership, co-ownership, access, trashbin information, forum participation and access (like editibility of older posts) + New Checkpoints tab, that archives all checkpoints; includes a button to delete the checkpoints. Printing to wizards' chat frames is now optional and individual(but off by default). + Create Players tab: * inserted new function that allows teachers or wizards to set the first and second language preferences for the new players as they create them + Players tab, added many functions, especially valuable for teachers: * made the search field focused and selected onload; queries are re-entered in the search box when results page is shown * players' email addresses are now clickable mailto links * wizards now will see a list of object numbers of new players created so that they may easily copy and paste these into the Program Editor for other batching functions. * restrict to "my creations" so that teachers can access a list of all players they have personally created * returns a table of players that includes a sortable column listing the player's parent; from this table one can: 1) email checked players 2) put checked players into a group 3) change the level of checked players (e.g., from mailers to builders) 4) set the home for checked players 5) delete checked players + Tasks tab, major increases in functionality, with new and rewritten tasks for the housekeeper: * Move Players: regularly scheduled task for housekeeper to move disconnected players back to their homes (or Limbo) * Reset Guests: regularly scheduled task for housekeeper to move disconnected guests back to Guest Room and to delete their chat logs and reset all properties. * Move Objects: regularly scheduled task for housekeeper to move objects with home site level 2 back to their home sites (if a connected player is carrying the object the housekeeper will politely wait until that player has disconnected to move the object). When the housekeeper returns an object to its home site a message will be printed out in that room. * Expire Objects: regularly scheduled task for housekeeper to sweep the MOO for expired objects and move them to the Trashbin. * Hush Bots: regularly scheduled task for housekeeper to sweep the MOO for activated bots (even when not in a room) and hush them when nobody is connected and thus nobody can be listening * Check Properties: regularly scheduled task for housekeeper to sweep the MOO for malformed properties in groups, forums, forum categories, and shared objects and remove them. * Room database: task that can be periodically run by a wizard, Housekeeper will clean out and rebuild the room database; check all rooms for proper exit and entrance lists; check all exits for proper sources and destinations; remove all faulty references. * Logs: added logs that record all tasks that are manually killed (with links to Program Editor) or manually run by a wizard or teacher, including the initiator of the action and the time and date; links at the top are a-name targeted, and beneath each task open the log in the Admin window or the Program Editor; log of the room database task show the result of all actions taken; all logs have limits so that oldest portions will be automatically deleted. + Language Strings: implemented language strings in all Admin functions, so that language packages can be used. + Settings/Login: added a box into which wizards may enter the URL of an external page where users can apply for characters; changed $Xpress_Login:login() so that the character application link will point to an external resource if this box has been filled in. *Access*--revamped the whole locking structure: + from #1 to the $encore_web_object, everything is unlocked; all objects from $encore_web_object and down now respond in the same manner: * if there is no key, show the object * if there is a key and it's an object, check if the user is the owner * if not, check if the user is a wizard * if not, check if the user is a co-owner * if not, check if the user is a reader in key.override * if not, (first now) check if the user is the key * if not, check if the user is the bearer of the key * if there is a key and it's a list, run the old $lock_utils for solving the key, but include all of the above. + now all locked objects, including exits and rooms, appear in the web frame with no clickable link and the lock icon (except for allowed readers/writers); if one tries to view the object by typing in the full URL, a page with a "this object is locked" message will be shown. + objects that are locked for a player will not appear in searches conducted by that player *Program Editor*--improved functionality: + rewrote and extended the search help links at the top of the Program Editor, as follows: * Corifications: provides boxes enabling corification of a new object, plus a clickable table of all corified objects with buttons to decorify any of these * Langstrings Testing Device: provides two boxes with drop-down choices (the first all generic objects; the second all language strings). After the user selects a generic and its associated language strings, the device will check all verbs on that object and produce tables with clickable links of 1) all language strings that are called by those verbs and defined in $lang_utils; 2) all associated language strings that are defined in $lang_utils but not called by the verbs; 3) all language strings that are called by the verbs but not defined in $lang_utils; if one chooses only the generic objects and leaves the language strings blank, the Tester will show all calls to each property of $lang_utils. * Builtin Functions: provides a clickable list of all builtin functions; clicking on any of these produces a nicely formatted explanation (from the old in-moo help database) * Prog Help: provides a clickable list of help topics for programmers (e.g., regular_expressions); clicking on any of these produces a nicely formatted explanation (from the old in-moo help database) * Build Help: provides a clickable list of help topics for builders; clicking on any of these produces a nicely formatted explanation (from the old in-moo help database) + added a "view" link in the first column so that one can view the object in the web frame + added an "edit" link in the first column so that one can edit the object via the ExPress Object Editor + added in the first column numbers of children and branches, plus clickable links that will display the first hundred of each. One can then click on the name to edit the object with the Program Editor or click on "view" or "edit" + made the children display limit a property, so wizards can change the number of children displayed + added in the first column a "course of life" section, including the following (all clickable if actions are possible/permitted): * create a child: opens Create in Inventory Manager * corify this: suggests a core name and corifies the object * decorify this: will decorify the object unless there are references to the object that must be removed first (these will appear in a clickable table) * recycle this: opens Recycle in Inventory Manager + added new search tool, the "verbsearch". This is invoked by typing a colon followed by text (e.g. ":moveto"), which will display all occurences of the search string in verb names (perfect, synonym and partial matches), and makes a visual tree of the ancestry path; all verbs are clickable. + added alphabetical links to preceding and following verbs above the verb one is editing in order to simplify finding verbs for a given object + changed reporting on verbs: All verb boxes with valid code display a green border, including after successful compiling. As soon as any text in the verb box has been altered, green border will disappear (replaced by transparent padding) until verb has been successfully compiled. If there are any errors in the attempt to compile the verb, the verb box will display a red border, which will remain until the verb is successfully compiled. + added a "beautify" function to langstrings that will automatically get rid of extraneous characters like tabs and insert 40 spaces before => in order to line up strings in an orderly fashion + changed coding of the three boxes (object, verbs, properties) to behave alike in failed searches (all will now show "Sorry, bad object") + security fix: made it impossible to change properties on any database via the Program Editor *Change Owner*--new feature in Object Editor and Inventory Manager + added new tab to the Object Editor so builders and above can easily change ownership of an object (or object collection like the EduCenter) and/or add one or more co-owners; this function can also be accessed from the Inventory Manager for many objects at once, and from the Directory in Bookmarks/Logs, for one or more rooms at once + when wizards use this function the chown is performed immediately and the wizard may click a link to go to a pre-written mail message to send to the new owner (the message may be changed if desired) + when teachers, programmers, or builders use this function the chown is postponed, awaiting approval by the proposed new owner. A link takes the current owner to a pre-written (but editable) mail message informing the proposed new owner of the gift and explaining how to claim it; the current owner gets a special table at the top of his Inventory listing the proposed gifts. If he changes his mind before the offer has been accepted, he may cancel the offer from this table. + when the proposed new owner goes to his Inventory, he will see a special table at the top listing the objects that have been offered to him. From this table he may accept or decline each of the offers. If he accepts, an automated internal message is immediately sent to the old owner (in the latter's preferred language) informing him of the acceptance, the object is removed from his inventory and placed in the inventory of the new owner. If he declines, an automated internal message is immediately sent to the old owner (in the latter's preferred language) informing him of the rejection, the object remains in the old owner's Inventory and is removed from the special table of objects on offer. *Inventory Manager*--added new functionality: + Create tab: * when any type of object is created, the user will have three submit buttons to perform immediate actions upon it: move, recycle/delete, change ownership * when any type of object is created by a programmer or wizard, a program_edit icon will appear next to the xpress_edit icon to enable immediate editing via the Program Editor * a wizard will also see a "corify" link to the corification function in the Program Editor + Inventory tab: the inventory table for programmers and wizards also has a program_edit icon next to the xpress_edit icon + Import tab: new function added to Inventory Manager, enabling one to import rooms and objects from another MOO + Search tab: when the search results table contains at least one object owned or controlled by the user, three submit buttons will appear to perform immediate actions upon the checked items: move, recycle/delete, change ownership (checkboxes will appear only in front of owned/controlled objects) *Number Format*--completely new feature: + added to $root_class a property .number_format and a :display_number() verb that enables preferences to be set on players and objects to indicate how numbers should be displayed (current choices are Arabic and Roman formats, but this might be expanded to other numeric formats); Arabic format offers a selection of separator characters). + added edit_numberformat() verb to $xpress_object_editor + programmed conversion of Arabic numbers to Roman numerals, including the use of HTML spans to create overscores to display thousands and three-sided boxes to display millions + added a tool tip to HTML Roman numerals that will show the number in Arabic when the cursor hovers over the span; wizards can turn this on or off using $root_class.number_titletag + added a switch_numerals() verb to $encore_web_utils that can be used to place a link in the web frame enabling users to easily change their number format in the web frame when viewing rooms or objects that make significant use of numbers *Room database*--added new functionality: + now updates immediately, so that new rooms created via web are added to database and rooms/exits deleted via web are removed from database. + when the @go command returns an ambiguous match, this now prints out in the chat frame as a clickable table; clicking on the desired room in this table will teleport the player there. *Room*--added property .show_sleepers, which can be set to show sleeping players (disconnected inhabitants of a room) in the room's "contents" or hide them from view. Added a radio button choice in the Object Editor ("edit_order") so owners of a room can easily set this prop. *Message Room*--added new functionality: + added a condition (enabled for wizards, teachers, and programmers) who can add a line of code that limits censoring to players of a particular gender or class or who belong to a particular group. + expanded the censoring to include emoting and stage talk *Quit*--rewrote function to use more standard-compliant code and remove javascript entirely, replaced with a confirmation page that uses language strings that can be written in any language. *Who Browser*--added summon function, enabled for teachers and wizards *Guest Room*--now a real editable room, including description and multimedia content (if desired) *Bots*--added .public_activation property (default 1) so that activate/hush buttons will appear for all players; buttons will not appear if bot is not in a room. Player bots are now bootable in the Who browser. *Gender*--added a property .genders to $Xpress_Object_Editor so wizards can control the number of gender possibilities that are displayed in Preferences *$Root_Class* + added a property .name_[language] and a :get_langpref_name() verb that retrieves an alternate name for the object in another language if there is any. This alternate name can be called in various verbs (e.g., to insert this name in the title of editing windows) + moved property .sort_contents_by_type to #1 in order to parallel it with .reversed_contents_order; changed #1:contents to account for .sort_contents_by_type; added a verb ($list_utils:sort_by_parent) to sort this *HTML Chat Log* + reprogrammed the "email" function so that chat log will be sent as an HTML file attachment, complete with doctype definition, head, body, and CSS links. + added a "save" button that allows users to save log to their computer if they are using Internet Explorer or instructs them to use their browser's Save As function to save the log. *Note* + added auto-markup radio button ("yes"/"no") to Note Text property of $note so that user can insert own html code if desired; default is "yes" + completely reprogrammed the way the email icon works; it now calls the Forum Mailer with all fields predefined but changeable by user before email is sent. Copy is also placed in user's Inbox. + called new verb (:body_for_mail) to compose contents of email so that both Description and Note Text appear in the email; this verb can also be used to compose different email contents for various descendants of $note *Question & Answer Package*--new generic using template for multiple objects, designed for use in games and assignments: + One Question Document is created with a variable number of related Answer Documents that contain 5 separate textboxes labeled with question numbers; the Answer Documents can be given to individuals or groups who will find and write in the answers. + Owner can add questions to Question Document; these questions then appear as labels on the textboxes in the Answer Documents. + Answer documents can be emailed using the email icon; questions and answers are threaded in the contents of the email. *Javascript*--introduced a property .javascript on #1, which, when filled with javascript contents such as functions, will be inherited from a given object and down, automatically inserted on all pages so that code pasting is not necessary. *Traceback*--when a traceback or access denied is encountered, the $httpd:get() now displays a clickable traceback stack to the user (programmer or wizard) for greater ease. *Auto-Disconnect*--players who do not use the Quit button will be automatically disconnected after 2 hours of idleness *Chat Frame* + added two new CSS classes: "parserMessage" (MOO speaks privately to individuals explaining errors or giving hints for correct syntax of typed commands) and "systemMessage" (messages are printed out to players and rooms indicating certain actions have been taken, such as turning recorders on/off, activating bots, etc.) + removed hard-coded strings from some commonly used text commands (@go, @join, @move, @url, /give) and called the language strings, using these two CSS classes + added outgoing moo-sms to the sending player's chat frame and log as a box, analogous to incoming moo-sms *@search*--this text command now produces in the chat frame a clickable table for all matches. *$Xpress_client*--added user.update_player_frame to reset_session options so that if a player has accidentally set update_player_frame to 0 by messing up the "away" and "doing" settings, this can be easily corrected by disconnecting and logging in again. This doesn't affect the "doing" messages. *Breadcrumbs*--added new function: when $encore_web_utils.use_breadcrumbs AND user.use_breadcrumbs are true, ewu:get_title() displays a clickable breadcrumb trail in the web frame under a room's or object's page title and icons (breadcrumbs in the sense of location hierarchy). |***********************| | Adjustments and Fixes | |***********************| *Access*--enabled users to drop locked objects in rooms they do not own (essential for various games) *Admin module* + fixed group and room creation routines in "new player" tab so that ownership is properly transferred to the new players + fixed a bug when only one new guest is created + fixed problem with new players when both creator and createe have a blank email address + *Authentication*--fixed a bug that might allow newly booted users to perform actions; rectified a flaw in authentication from v3.3.4; changed $httpd:authenticate() so users attempting to login as guests will get an appropriate error message (instead of a process abort) when the alias "guest" has been removed from $player_db *Bookmarks*--fixed an undefined javascript function in the Xpress Navigator *Bots*--fixed some code on $player_bot so that it responds to keywords and questions; changed recycle routine to deactivate bots before recycling them; fixed an E_PROPNF in playerbot:html() which prevented correct display of activation buttons; fixed a possible E_INVIND in playerbot:html() which produced an error when a hushed playerbot with location #-1 was hushed again; fixed an E_VERBNF error when a talking bot was not inside a room *CDATA*--inserted CDATA specification for javascript and style elements in $encore_web_utils:script() and $encore_web_utils:insert_css() respectively in order to comply with XHTML processing standards. *Chat frame*--fixed emote so that it displays with proper CSS in chat; fixed bug where single word notifications were being displayed as buddy talk *Command/Typing Frame*--fixed bug where "away" message was overwriting "doing" message; made away_text language sensitive; made format selection text language sensitive; fixed bug where "home" and "look" were not always clickable *Create*--changed the default read flag for all created objects from -r to +r, so programmers can view non-owned objects in the Program Editor; fixed a bug where the creation time for new objects wasn't always set; fixed a bug that allowed rooms to be created without names. *EduCenter*--fixed a quota problem that was stalling creation of te multiple rooms and objects in EduCenter *HTML Slide Projector*--fixed a few bugs so that sound files would play and navigation bar would appear at the top of the web frame when slides are projected. *Inventory Manager*--fixed the search parameters in the Inventory Manager; fixed a bug in Inventory Manager/Recycle that incorrectly confirmed the recycling of non-handable objects *$lang_utils*--string insertion now allows headers *Login Page*--updated the copyright notice and license information *Mailer and Forum Mailer* + added the required Message-Id field to the header for outgoing email; added lang_alt tooltips to "compose" page; dhanged the display of messages in the in- and outbox so line breaks are only inserted when necessary + fixed several "string not found" errors; fixed a "permission denied" error in Mailer; fixed a bug in counting unread messages which appear, e.g., in the welcome box when connecting. *Message Room*--fixed a bug in that was allowing only one censor_trigger to operate *Note*--fixed a bug preventing notes from being emailed; fixed bug that allowed notes in trashbin to be read; fixed malfunction in expiry Date for notes *Notebook*--fixed a bug that prevented this from being emailed *Object Editor* + fixed the checkbox on the edit Access page in the Object Editor for multiple creation + fixed a bug in the edit Order page so that "reversed order" and "keep parents together" will always show + made edit Order strings language sensitive; fixed a bug in change_order that was interfering with setting the property "sort_contents_by_type" (keep parents together) + added new prop to $player (.show_clear_prop_forcing) that determines whether the "set values if clear" checkbox appears in editing windows; default for non-programmer players is false (0) since this is not something they would normally understand or use + changed the more|less feature (switching between short and long explanations in the editing windows) so that it may be used more than once on one page by refining Javascript (DOM) and CSS. *$player_start*--removed duplicate available rooms in select form elements for wizards *Preferences*--fixed possible malfunction in Edit Time Display; fixed setting of Gender in Preferences so that correct pronouns are called; fixed a type mismatch error in the change password verb *Program Editor* + bugfixed setting of read and fertile flags using the Editor. Bugfixed malfunctioning adding of properties when a verb body is shown. + fixed an error that occurred when multiple Program Editor windows were open, a verb had been changed, and one tried to set a property in an old window (the property would not be set and the window would display the verb body instead of the "property set" confirmation message) + fixed a bug which caused the loss of search string information on properties; now the property information is retained in the search box while the property is being worked on + outsourced a few routines in :main_html() to make the code clearer and tidied up the code + wording: changed all occurrences of "leave" to "leaf" + fixed a bug which caused the loss of the leaf information (for displaying the tree in the object box) between pages (e.g., across tracebacks) + made string explosions in :parse_args more robust to prevent malformed searches from breaking the code in :main_html and displaying an error page + make-comment-box now remembers the choice "center" *Pronouns*--fixed $you:say action verb so that it works properly in v5 *Recorder*--fixed a possible security hole for recorder operations; enabled text command "play" to work with new announce verb; hardcoded ctime in recorder log lines; double timestamps in recorder log lines when announce verb is run but empty *Rooms*--fixed a possible malfunction in computing allowable public room connection points; for all calls to :match(), the room itself (thus the name and all its aliases) is considered as possible target *Social Verbs*--debugged, tidied up and rewrote parts of the $soc_verbs to reflect emote style in chat *Statistics*--Contributors updated to reflect all major contributors to the project. *Who browser* + bugfixed code to prevent possible invalid objects or objects without a valid location from throwing errors. Made summon and boot functions more careful + made the X cell in the checkbox column clickable, so players can be batched for booting or summoning; disabled checkbox next to user + removed javascript confirms before booting or summoning; replaced by a (serverside) form reload with a warning and the offer to proceed or cancel *$string_utils*--made changes to :substitute so that non-string values (such as integers) will have their type changed to STR and will be accepted as substitutes for substrings. *$list_utils:map_formdata_all()*--made changes to that this ALWAYS returns a list even if the result is a single element, or no element. *$list_utils:sum_props()*--new utility verb returns the sum of a given property on a list of objects, returning E_INVARG if there is any error in the first list element and ignoring subsequent errors (0 added). *$encore_web_utils* + verb :option() now accepts integers as argument (for the value of an option). This threw a type-error before when the argument had to be string-substituted. + wrote a verb on $encore_web_utils to channel all language-sensitive submit buttons. If the user has a different alternative languages set, a title tag (tool tip) will appear on the button in the alternative language. This is presently called in at least 50 places. + rewrote the argument structure of the verb :th_check() in order to reflect the user's alternative language: on the x, a tooltip is shown telling the user that clicking results in checking/unchecking the all the checkboxes at once + removed redundant check/uncheck javascript from :trashbin() and :search() (now imported as property) and outsourced the javascript calls to :th_check() + wrote ewu:tag_att() to construct attributes in tags as key/value pairs, making sure the values are html-substituted/quote-replaced in order not to break XML parsing. Minimized tag values are automatically expanded. Made form element building verbs in ewu more abstract to use this function (e.g., to insert title tags) and more flexible to reduce argument numbers in calls. + wrote ewu:th_lang() so that table head cells can be "titled", i.e., hovering over them displays the translation/wording in the user's alternative language; this function has been applied in many places. + completely rewrote ewu:th_sort() and its argument structure so that hovering over the table head cell tells explains (in the user's alternative langauge) what clicking on the head cell does (e.g., "click to sort by 'name' in ascending order"). This is now produced in ewu:th_sort(), not in the caller. Cell and text are linked (and titled) so that sorting calls work even without javascript. This has been applied in $Inventory_manager:inventory and :trashbin; $administration_module:players, :stats, and :quota; $Who_browser:main. *lang_alt*--greatly expanded appearances of user's selected alternative language: + verified and changed all tabs in all applications to show tool tips in user's alternative language + Object Editor now shows expandable inline help (explanation of each tab in the Editor) with translated tool tips on all pages + the explanations of generics in the creation table will appear as tooltips in the alternative language of the user when the cursor hovers over them + when an object has been created, the explanation of where it is and what to do with it will appear as a tooltip in the user's alternative language when the cursor hovers over it + added alternative language to many text instances; e.g., Quit function now displays the text (formally a javascript confirm box) on the screen, with the translation as tool tip *checkboxes*--the javascript code to check/uncheck checkboxes in tables didn't work when there was only one checkbox; fixed this to act on both single and multiple checkboxes. *search*--Inventory Manager/search now has now highlighted search words in the name cell (not only in preview cell). The preview cell is less confusing when names (and, by consequence, aliases) are searched. *player names*--changed $player_db:why_bad_name() and $xpress_object_editor:check_playername() to no longer accept player names containing any XML-reserved characters. *VASE*--discontinued VASE and references to VASE projects in $Inventory_Manager:create. (already created VASE objects are not deleted.) Programmers who wish to continue using VASE may contribute by rewriting and updating its code and submitting it to the project.