[[PageOutline(2-3,Contents)]] = Site maintenance The following is a list of pages that help in maintaining a Trac site. Maintaining a site involves routine cleanup of wiki pages, also known as housekeeping, so that the site's content remains consistent and fresh. The pages that need to be maintained are not marked as 'deprecated' or 'pending-deletion'. The same site maintenance guidelines and links can be added to your Trac installation. This initiative is loosely inspired by [wikipedia:Special:SpecialPages Wikipedia's Special pages]. The SQL code here is specific for [https://www.sqlite.org/index.html SQLite] as the database backend, else it is SQL-pseudocode. Some of the examples use [th:WikiTableMacro] as the database query wrapper. == Old wiki pages Pages which have not been edited in at least 5 years usually require a cleanup or can be marked for deletion. {{{ {{{#!SQLTable SELECT w.name, w.author, w.time FROM wiki AS w WHERE w.version = (SELECT MAX(version) FROM wiki WHERE name = w.name) AND julianday('now') - (((w.time/1000000)/86400.0) + 2440587.5 ) > 365*5 }}} }}} == Old tickets Tickets which have not been edited in at least a year usually require a cleanup or can be marked for deletion. {{{ {{{#!SQLTable SELECT t.id, t.owner, t.changetime FROM ticket AS t WHERE julianday('now') - (((t.changetime/1000000)/86400.0) + 2440587.5 ) > 365 }}} }}} == Obsolete macros There may still be some obsolete macros circulating in the wiki, such as `TagIt[[()]]`, and they need to be removed. Possible solution: {{{#!sql SELECT w.name FROM wiki AS w WHERE w.version = (SELECT MAX(version) FROM wiki WHERE name = w.name) AND w.text LIKE '%TagIt[[%'; }}} == List of all images A list of all images on the Trac installation is useful for the following purposes: - if a list of the wiki pages or ticket pages that they are used in is provided also, then obsolete (ie unused) or duplicate images can be more easily detected. - if thumbnails are automatically generated also, then detection of irrelevant images: someone may have uploaded an image in the past that is irrelevent to the use or development of Trac. - jpgs may have been used, where png or svg is the norm. Possible solution: {{{#!sql SELECT id, filename FROM attachment WHERE RIGHT(filename, 3) IN ('jpg', 'gif', 'svg', 'png', 'bmp'); }}} == Attachments A list of all attachments on the Trac installation is useful for the following purposes: - if a list of the wiki pages or ticket pages that they are used in is provided also, then obsolete (ie unused) or duplicate attachments can be more easily detected. - someone may have uploaded an attachment in the past that is irrelevant to the use or development of Trac. {{{ {{{#!SQLTable SELECT a.filename, a.author, a.time FROM attachment AS a WHERE a.id NOT IN (SELECT name FROM wiki) OR a.id NOT IN (SELECT id FROM ticket) }}} }}} == Acronyms Misused or accidental acronyms where spelling them out would make the text clearer: from `db` to `database`, from `regex` to `regular expression`, from `"` to `"`. Possible solution: {{{#!sql SELECT name FROM wiki WHERE text LIKE '% db%' OR text LIKE '% regex%' OR text LIKE '% "%' -- note that there is no space after each regex, since it may be followed by a dash (-) or comma (,); }}} == Short wiki pages Pages with little text are usually the result of a test or have been abandoned and are therefore candidates for deletion. {{{ {{{#!SQLTable SELECT w.name, w.author, w.time FROM wiki AS w WHERE w.version = (SELECT MAX(version) FROM wiki WHERE name = w.name) AND LENGTH(w.text) < 100 }}} }}} == Dead links Dead links in the wiki show up as grey links if they are internal links and need to be corrected or removed. Dead links to external sites have no special highlighting, but still require correction or removal. In Python it would reuse code as follows: {{{#!python if not validate_page_name(self.name): raise TracError(_("Invalid Wiki page name '%(name)s'", name=self.name))] }}} As a workaround it is also possible to use the [https://validator.w3.org/checklink W3C validator]. == Protected pages Pages that are read-only may need to have their status reviewed. {{{ {{{#!SQLTable SELECT w.name, w.author, w.time FROM wiki AS w WHERE w.version = (SELECT MAX(version) FROM wiki WHERE name = w.name) AND w.readonly = 1 }}} }}} == Pages without table of contents Pages should have either `[[TracGuideToc]]` or `[[PageOutline(2-5,Contents,pullout)]]` in them for navigational purposes. {{{ {{{#!SQLTable SELECT w.name, w.author, w.time FROM wiki AS w WHERE w.version = (SELECT MAX(version) FROM wiki WHERE name = w.name) AND w.text NOT LIKE '%[[PageOutline(%' }}} }}}